summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/usbstack/usb_class_driver.h2
-rw-r--r--firmware/usbstack/usb_core.c10
-rw-r--r--firmware/usbstack/usb_serial.c4
-rw-r--r--firmware/usbstack/usb_serial.h2
-rw-r--r--firmware/usbstack/usb_storage.c4
-rw-r--r--firmware/usbstack/usb_storage.h2
6 files changed, 14 insertions, 10 deletions
diff --git a/firmware/usbstack/usb_class_driver.h b/firmware/usbstack/usb_class_driver.h
index b51eb3e93f..36f2ea9e3d 100644
--- a/firmware/usbstack/usb_class_driver.h
+++ b/firmware/usbstack/usb_class_driver.h
@@ -75,7 +75,7 @@ struct usb_class_driver {
able to handle it, it should ack the request, and return true. Otherwise
it should return false.
Optional function */
- bool (*control_request)(struct usb_ctrlrequest* req);
+ bool (*control_request)(struct usb_ctrlrequest* req, unsigned char *dest);
#ifdef HAVE_HOTSWAP
/* Tells the driver that a hotswappable disk/card was inserted or
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index 737ac1ac0c..3f67407c72 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -168,7 +168,7 @@ static enum { DEFAULT, ADDRESS, CONFIGURED } usb_state;
static int usb_core_num_interfaces;
typedef void (*completion_handler_t)(int ep,int dir, int status, int length);
-typedef bool (*control_handler_t)(struct usb_ctrlrequest* req);
+typedef bool (*control_handler_t)(struct usb_ctrlrequest* req, unsigned char *dest);
static struct
{
@@ -695,7 +695,7 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req)
drivers[i].first_interface <= (req->wIndex) &&
drivers[i].last_interface > (req->wIndex))
{
- handled = drivers[i].control_request(req);
+ handled = drivers[i].control_request(req, response_data);
}
}
if(!handled) {
@@ -735,8 +735,10 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req)
break;
default: {
bool handled=false;
- if(ep_data[req->wIndex & 0xf].control_handler[0] != NULL)
- handled = ep_data[req->wIndex & 0xf].control_handler[0](req);
+ if(ep_data[req->wIndex & 0xf].control_handler[0] != NULL) {
+ handled = ep_data[req->wIndex & 0xf].control_handler[0](req,
+ response_data);
+ }
if(!handled) {
/* nope. flag error */
logf("usb bad req %d", req->bRequest);
diff --git a/firmware/usbstack/usb_serial.c b/firmware/usbstack/usb_serial.c
index 514df0dc2b..520a4b3370 100644
--- a/firmware/usbstack/usb_serial.c
+++ b/firmware/usbstack/usb_serial.c
@@ -117,9 +117,11 @@ int usb_serial_get_config_descriptor(unsigned char *dest,int max_packet_size)
}
/* called by usb_core_control_request() */
-bool usb_serial_control_request(struct usb_ctrlrequest* req)
+bool usb_serial_control_request(struct usb_ctrlrequest* req, unsigned char* dest)
{
bool handled = false;
+
+ (void)dest;
switch (req->bRequest) {
default:
logf("serial: unhandeld req %d", req->bRequest);
diff --git a/firmware/usbstack/usb_serial.h b/firmware/usbstack/usb_serial.h
index 94decdc42b..2701a96cd3 100644
--- a/firmware/usbstack/usb_serial.h
+++ b/firmware/usbstack/usb_serial.h
@@ -30,7 +30,7 @@ void usb_serial_init_connection(void);
void usb_serial_init(void);
void usb_serial_disconnect(void);
void usb_serial_transfer_complete(int ep,int dir, int status, int length);
-bool usb_serial_control_request(struct usb_ctrlrequest* req);
+bool usb_serial_control_request(struct usb_ctrlrequest* req, unsigned char *dest);
void usb_serial_send(unsigned char *data,int length);
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index 2a3808dd92..be785da321 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -593,11 +593,11 @@ void usb_storage_transfer_complete(int ep,int dir,int status,int length)
}
/* called by usb_core_control_request() */
-bool usb_storage_control_request(struct usb_ctrlrequest* req)
+bool usb_storage_control_request(struct usb_ctrlrequest* req, unsigned char* dest)
{
bool handled = false;
-
+ (void)dest;
switch (req->bRequest) {
case USB_BULK_GET_MAX_LUN: {
#ifdef ONLY_EXPOSE_CARD_SLOT
diff --git a/firmware/usbstack/usb_storage.h b/firmware/usbstack/usb_storage.h
index c76cb898bb..3591d285d8 100644
--- a/firmware/usbstack/usb_storage.h
+++ b/firmware/usbstack/usb_storage.h
@@ -30,7 +30,7 @@ void usb_storage_init_connection(void);
void usb_storage_disconnect(void);
void usb_storage_init(void);
void usb_storage_transfer_complete(int ep,int dir,int state,int length);
-bool usb_storage_control_request(struct usb_ctrlrequest* req);
+bool usb_storage_control_request(struct usb_ctrlrequest* req, unsigned char* dest);
#ifdef HAVE_HOTSWAP
void usb_storage_notify_hotswap(int volume,bool inserted);
#endif