summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-04-18 20:04:52 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-04-18 20:04:52 +0000
commitab09322b7acfa1667f3124612735ea83ce5342d5 (patch)
treec3b35f6bc62e95dfc7b1ac6840564f24e4bca557
parent8b6b46f3c47aa3772598b359b43e3efe1138e9e6 (diff)
downloadrockbox-ab09322b7acfa1667f3124612735ea83ce5342d5.tar.gz
rockbox-ab09322b7acfa1667f3124612735ea83ce5342d5.zip
Add a PACK_DESCRIPTOR macro to make the class drivers a bit more readable (FS#10145 by Tomer Shalev)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20733 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/usbstack/usb_charging_only.c5
-rw-r--r--firmware/usbstack/usb_class_driver.h6
-rw-r--r--firmware/usbstack/usb_serial.c15
-rw-r--r--firmware/usbstack/usb_storage.c21
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
372int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size) 373int 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
394void usb_storage_init_connection(void) 391void usb_storage_init_connection(void)