1- from typing import Optional
21import usb .core
32import usb .util
43import libusb_package
4+ from typing import Optional
55
66from shared .comm import Comm
77from usb_adapter .helper import get_device_endpoints
8+ from usb_adapter .usb_read import USBRead
9+ from usb_adapter .usb_write import USBWrite
810
911import logging
1012logger = logging .getLogger (__name__ )
@@ -24,27 +26,24 @@ def __init__(self, device_id_vender: int, device_id_product: int) -> None:
2426 # meta data
2527 # self.device_manufacturer: str = None
2628 # self.device_product: str = None
29+ # Endpoints.
30+ self .read_endpoint : Optional [USBRead ] = None
31+ self .write_endpoint : Optional [USBWrite ] = None
2732
2833 def __str__ (self ) -> str :
2934 return f"USB(id: vender_id: { self .device_id_vender } product_id: { self .device_id_product } )"
3035
3136 def read (self ) -> bytes :
3237 # Return no bytes if device is not ready
33- if self .device is None :
34- return bytes (0 )
35- try :
36- if self .device_endpoint_in is not None :
37- return bytes (self .device_endpoint_in .read (64 , 100 ))
38- else :
39- return bytes (0 )
40- except Exception :
38+ if self .device is None or self .read_endpoint is None :
4139 return bytes (0 )
40+ return self .read_endpoint .read ()
4241
4342 def write (self , buffer : bytes ) -> None :
4443 if len (buffer ) > 0 and self .device is None :
4544 return # Not connected to device
46- if self .device_endpoint_out is not None :
47- self .device_endpoint_out .write (bytes ( buffer ), 100 )
45+ if self .write_endpoint :
46+ self .write_endpoint .write (buffer )
4847
4948 def connect (self ) -> bool :
5049 self .device : Optional [usb .core .Device ] = libusb_package .find (idVendor = self .device_id_vender , idProduct = self .device_id_product ) # type: ignore
@@ -53,6 +52,10 @@ def connect(self) -> bool:
5352 self .device_endpoint_in , self .device_endpoint_out = get_device_endpoints (self .device )
5453 if self .device_endpoint_in is None or self .device_endpoint_out is None :
5554 return False
55+ self .read_endpoint = USBRead (self .device_endpoint_in , 1 )
56+ self .write_endpoint = USBWrite (self .device_endpoint_out , 1 )
57+ self .read_endpoint .start ()
58+ self .write_endpoint .start ()
5659 logger .debug (f"Connected { self .__str__ ()} " )
5760 return True
5861
@@ -62,6 +65,12 @@ def close(self) -> None:
6265 # self.device.reset()
6366 usb .util .dispose_resources (self .device )
6467 self .device = None
68+ if self .read_endpoint :
69+ self .read_endpoint .stop ()
70+ if self .write_endpoint :
71+ self .write_endpoint .stop ()
72+ self .read_endpoint = None
73+ self .write_endpoint = None
6574 self .device_endpoint_in = None
6675 self .device_endpoint_out = None
6776 logger .debug (f"Closed { self .__str__ ()} " )
0 commit comments