3 # Contains class definition for USBEndpoint.
9 transfer_type_control = 0x00
10 transfer_type_isochronous = 0x01
11 transfer_type_bulk = 0x02
12 transfer_type_interrupt = 0x03
15 sync_type_async = 0x01
16 sync_type_adaptive = 0x02
17 sync_type_synchronous = 0x03
19 usage_type_data = 0x00
20 usage_type_feedback = 0x01
21 usage_type_implicit_feedback = 0x02
23 def __init__(self, number, direction, transfer_type, sync_type,
24 usage_type, max_packet_size, interval, handler):
27 self.direction = direction
28 self.transfer_type = transfer_type
29 self.sync_type = sync_type
30 self.usage_type = usage_type
31 self.max_packet_size = max_packet_size
32 self.interval = interval
33 self.handler = handler
37 self.request_handlers = {
38 1 : self.handle_clear_feature_request
41 def handle_clear_feature_request(self, req):
42 print("received CLEAR_FEATURE request for endpoint", self.number,
43 "with value", req.value)
44 self.interface.configuration.device.maxusb_app.send_on_endpoint(0, b'')
46 def set_interface(self, interface):
47 self.interface = interface
49 # see Table 9-13 of USB 2.0 spec (pdf page 297)
50 def get_descriptor(self):
51 address = (self.number & 0x0f) | (self.direction << 7)
52 attributes = (self.transfer_type & 0x03) \
53 | ((self.sync_type & 0x03) << 2) \
54 | ((self.usage_type & 0x03) << 4)
57 7, # length of descriptor in bytes
58 5, # descriptor type 5 == endpoint
61 (self.max_packet_size >> 8) & 0xff,
62 self.max_packet_size & 0xff,