turn ftdi driver into echo server
[goodfet] / client / USBDevice.py
index 49ba0a4..5c28fbb 100644 (file)
@@ -105,12 +105,12 @@ class USBDevice:
             self.device_subclass,
             self.protocol_rel_num,
             self.max_packet_size_ep0,
-            (self.vendor_id >> 8) & 0xff,
             self.vendor_id & 0xff,
-            (self.product_id >> 8) & 0xff,
+            (self.vendor_id >> 8) & 0xff,
             self.product_id & 0xff,
-            (self.device_rev >> 8) & 0xff,
+            (self.product_id >> 8) & 0xff,
             self.device_rev & 0xff,
+            (self.device_rev >> 8) & 0xff,
             self.manufacturer_string_id,
             self.product_string_id,
             self.serial_number_string_id,
@@ -151,7 +151,7 @@ class USBDevice:
         elif req_type == USB.request_type_class:
             handler_entity = recipient.device_class
         elif req_type == USB.request_type_vendor:
-            handler_entity = recipient.get_device_vendor()
+            handler_entity = recipient.device_vendor
 
         if not handler_entity:
             print(self.name, "invalid handler entity, stalling")
@@ -223,8 +223,7 @@ class USBDevice:
                     + "language 0x%04x, length %d") \
                     % (dtype, dindex, lang, n))
 
-        # TODO: handle KeyError
-        response = self.descriptors[dtype]
+        response = self.descriptors.get(dtype, None)
         if callable(response):
             response = response(dindex)
 
@@ -236,6 +235,8 @@ class USBDevice:
 
             if self.verbose > 5:
                 print(self.name, "sent", n, "bytes in response")
+        else:
+            self.maxusb_app.stall_ep0()
 
     def handle_get_configuration_descriptor_request(self, num):
         return self.configurations[num].get_descriptor()