diff options
-rw-r--r-- | firmware/usbstack/usb_charging_only.c | 5 | ||||
-rw-r--r-- | firmware/usbstack/usb_class_driver.h | 6 | ||||
-rw-r--r-- | firmware/usbstack/usb_serial.c | 15 | ||||
-rw-r--r-- | firmware/usbstack/usb_storage.c | 21 |
4 files changed, 23 insertions, 24 deletions
diff --git a/firmware/usbstack/usb_charging_only.c b/firmware/usbstack/usb_charging_only.c index e20d1885a0..145d0f684c 100644 --- a/firmware/usbstack/usb_charging_only.c +++ b/firmware/usbstack/usb_charging_only.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include "usb_drv.h" | 24 | #include "usb_drv.h" |
25 | #include "kernel.h" | 25 | #include "kernel.h" |
26 | #include "usb_charging_only.h" | 26 | #include "usb_charging_only.h" |
27 | #include "usb_class_driver.h" | ||
27 | 28 | ||
28 | //#define LOGF_ENABLE | 29 | //#define LOGF_ENABLE |
29 | #include "logf.h" | 30 | #include "logf.h" |
@@ -66,9 +67,7 @@ int usb_charging_only_get_config_descriptor(unsigned char *dest,int max_packet_s | |||
66 | unsigned char *orig_dest = dest; | 67 | unsigned char *orig_dest = dest; |
67 | 68 | ||
68 | interface_descriptor.bInterfaceNumber=usb_interface; | 69 | interface_descriptor.bInterfaceNumber=usb_interface; |
69 | memcpy(dest,&interface_descriptor,sizeof(struct usb_interface_descriptor)); | 70 | PACK_DESCRIPTOR(dest, interface_descriptor); |
70 | |||
71 | dest+=sizeof(struct usb_interface_descriptor); | ||
72 | 71 | ||
73 | return (dest-orig_dest); | 72 | return (dest-orig_dest); |
74 | } | 73 | } |
diff --git a/firmware/usbstack/usb_class_driver.h b/firmware/usbstack/usb_class_driver.h index 22b1c6888c..b51eb3e93f 100644 --- a/firmware/usbstack/usb_class_driver.h +++ b/firmware/usbstack/usb_class_driver.h | |||
@@ -85,4 +85,10 @@ struct usb_class_driver { | |||
85 | #endif | 85 | #endif |
86 | }; | 86 | }; |
87 | 87 | ||
88 | #define PACK_DESCRIPTOR(dest, descriptor) \ | ||
89 | do { \ | ||
90 | memcpy(dest, &(descriptor), sizeof(descriptor)); \ | ||
91 | dest += sizeof(descriptor); \ | ||
92 | } while (0) | ||
93 | |||
88 | #endif | 94 | #endif |
diff --git a/firmware/usbstack/usb_serial.c b/firmware/usbstack/usb_serial.c index b7d5062237..514df0dc2b 100644 --- a/firmware/usbstack/usb_serial.c +++ b/firmware/usbstack/usb_serial.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include "usb_drv.h" | 24 | #include "usb_drv.h" |
25 | #include "kernel.h" | 25 | #include "kernel.h" |
26 | #include "usb_serial.h" | 26 | #include "usb_serial.h" |
27 | 27 | #include "usb_class_driver.h" | |
28 | //#define LOGF_ENABLE | 28 | //#define LOGF_ENABLE |
29 | #include "logf.h" | 29 | #include "logf.h" |
30 | 30 | ||
@@ -102,19 +102,16 @@ int usb_serial_get_config_descriptor(unsigned char *dest,int max_packet_size) | |||
102 | { | 102 | { |
103 | unsigned char *orig_dest = dest; | 103 | unsigned char *orig_dest = dest; |
104 | 104 | ||
105 | endpoint_descriptor.wMaxPacketSize=max_packet_size; | 105 | interface_descriptor.bInterfaceNumber = usb_interface; |
106 | interface_descriptor.bInterfaceNumber=usb_interface; | 106 | PACK_DESCRIPTOR(dest, interface_descriptor); |
107 | 107 | ||
108 | memcpy(dest,&interface_descriptor,sizeof(struct usb_interface_descriptor)); | 108 | endpoint_descriptor.wMaxPacketSize = max_packet_size; |
109 | dest+=sizeof(struct usb_interface_descriptor); | ||
110 | 109 | ||
111 | endpoint_descriptor.bEndpointAddress = ep_in; | 110 | endpoint_descriptor.bEndpointAddress = ep_in; |
112 | memcpy(dest,&endpoint_descriptor,sizeof(struct usb_endpoint_descriptor)); | 111 | PACK_DESCRIPTOR(dest, endpoint_descriptor); |
113 | dest+=sizeof(struct usb_endpoint_descriptor); | ||
114 | 112 | ||
115 | endpoint_descriptor.bEndpointAddress = ep_out; | 113 | endpoint_descriptor.bEndpointAddress = ep_out; |
116 | memcpy(dest,&endpoint_descriptor,sizeof(struct usb_endpoint_descriptor)); | 114 | PACK_DESCRIPTOR(dest, endpoint_descriptor); |
117 | dest+=sizeof(struct usb_endpoint_descriptor); | ||
118 | 115 | ||
119 | return (dest - orig_dest); | 116 | return (dest - orig_dest); |
120 | } | 117 | } |
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index eb1db5d884..2a3808dd92 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "system.h" | 22 | #include "system.h" |
23 | #include "usb_core.h" | 23 | #include "usb_core.h" |
24 | #include "usb_drv.h" | 24 | #include "usb_drv.h" |
25 | #include "usb_class_driver.h" | ||
25 | //#define LOGF_ENABLE | 26 | //#define LOGF_ENABLE |
26 | #include "logf.h" | 27 | #include "logf.h" |
27 | #include "storage.h" | 28 | #include "storage.h" |
@@ -371,24 +372,20 @@ int usb_storage_set_first_interface(int interface) | |||
371 | 372 | ||
372 | int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size) | 373 | int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size) |
373 | { | 374 | { |
374 | endpoint_descriptor.wMaxPacketSize=max_packet_size; | 375 | unsigned char *orig_dest = dest; |
375 | interface_descriptor.bInterfaceNumber=usb_interface; | ||
376 | 376 | ||
377 | memcpy(dest,&interface_descriptor, | 377 | interface_descriptor.bInterfaceNumber = usb_interface; |
378 | sizeof(struct usb_interface_descriptor)); | 378 | PACK_DESCRIPTOR(dest, interface_descriptor); |
379 | dest+=sizeof(struct usb_interface_descriptor); | 379 | |
380 | endpoint_descriptor.wMaxPacketSize = max_packet_size; | ||
380 | 381 | ||
381 | endpoint_descriptor.bEndpointAddress = ep_in; | 382 | endpoint_descriptor.bEndpointAddress = ep_in; |
382 | memcpy(dest,&endpoint_descriptor, | 383 | PACK_DESCRIPTOR(dest, endpoint_descriptor); |
383 | sizeof(struct usb_endpoint_descriptor)); | ||
384 | dest+=sizeof(struct usb_endpoint_descriptor); | ||
385 | 384 | ||
386 | endpoint_descriptor.bEndpointAddress = ep_out; | 385 | endpoint_descriptor.bEndpointAddress = ep_out; |
387 | memcpy(dest,&endpoint_descriptor, | 386 | PACK_DESCRIPTOR(dest, endpoint_descriptor); |
388 | sizeof(struct usb_endpoint_descriptor)); | ||
389 | 387 | ||
390 | return sizeof(struct usb_interface_descriptor) + | 388 | return (dest - orig_dest); |
391 | 2*sizeof(struct usb_endpoint_descriptor); | ||
392 | } | 389 | } |
393 | 390 | ||
394 | void usb_storage_init_connection(void) | 391 | void usb_storage_init_connection(void) |