summaryrefslogtreecommitdiff
path: root/tinyusb
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-07-03 11:36:08 +0700
committerhathach <[email protected]>2013-07-03 11:36:08 +0700
commit1667ef5041ad80d0f7b9dc76c286b8c59cedf180 (patch)
tree5199d458d727f607302cc9d895d3386862efbe17 /tinyusb
parentb3f98bc15a47bea88806cbfdc899d46efe40d921 (diff)
replace tusbh_cdc_isr by tusbh_cdc_xfer_isr with extra parameter as
- pipe id - xferred_bytes host_class_driver_t add xferred_bytes parameter void (* const isr) (pipe_handle_t, tusb_event_t); --> void (* const isr) (pipe_handle_t, tusb_event_t, uint32_t); update hid_host & its tests
Diffstat (limited to 'tinyusb')
-rw-r--r--tinyusb/class/cdc_host.c16
-rw-r--r--tinyusb/class/cdc_host.h4
-rw-r--r--tinyusb/class/hid_host.c2
-rw-r--r--tinyusb/class/hid_host.h2
-rw-r--r--tinyusb/host/usbh.c2
-rw-r--r--tinyusb/host/usbh.h2
6 files changed, 19 insertions, 9 deletions
diff --git a/tinyusb/class/cdc_host.c b/tinyusb/class/cdc_host.c
index d2830e41e..023c69a19 100644
--- a/tinyusb/class/cdc_host.c
+++ b/tinyusb/class/cdc_host.c
@@ -63,6 +63,16 @@ STATIC_ INLINE_ bool tusbh_cdc_is_mounted(uint8_t dev_addr)
return (tusbh_device_get_mounted_class_flag(dev_addr) & BIT_(TUSB_CLASS_CDC)) != 0;
}
+static inline cdc_pipeid_t get_app_pipeid(pipe_handle_t pipe_hdl) ATTR_PURE ATTR_ALWAYS_INLINE;
+static inline cdc_pipeid_t get_app_pipeid(pipe_handle_t pipe_hdl)
+{
+ cdch_data_t const * p_cdc = cdch_data + (pipe_hdl.dev_addr-1);
+
+ return pipehandle_is_equal( pipe_hdl, p_cdc->pipe_notification ) ? CDC_PIPE_NOTIFICATION :
+ pipehandle_is_equal( pipe_hdl, p_cdc->pipe_in ) ? CDC_PIPE_DATA_IN :
+ pipehandle_is_equal( pipe_hdl, p_cdc->pipe_out ) ? CDC_PIPE_DATA_OUT : 0;
+}
+
//--------------------------------------------------------------------+
// APPLICATION API (parameter validation needed)
//--------------------------------------------------------------------+
@@ -186,11 +196,11 @@ tusb_error_t cdch_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con
return TUSB_ERROR_NONE;
}
-void cdch_isr(pipe_handle_t pipe_hdl, tusb_event_t event)
+void cdch_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes)
{
- if (tusbh_cdc_isr)
+ if (tusbh_cdc_xfer_isr)
{
- tusbh_cdc_isr(pipe_hdl.dev_addr, event);
+ tusbh_cdc_xfer_isr( pipe_hdl.dev_addr, event, get_app_pipeid(pipe_hdl), xferred_bytes );
}
}
diff --git a/tinyusb/class/cdc_host.h b/tinyusb/class/cdc_host.h
index 100042b50..fc21fcc25 100644
--- a/tinyusb/class/cdc_host.h
+++ b/tinyusb/class/cdc_host.h
@@ -72,7 +72,7 @@ tusb_error_t tusbh_cdc_receive(uint8_t dev_addr, void * p_buffer, uint32_t lengt
void tusbh_cdc_mounted_isr(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_unmounted_isr(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK;
-void tusbh_cdc_xfer_isr(uint8_t dev_addr, tusb_event_t event) ATTR_WEAK;
+void tusbh_cdc_xfer_isr(uint8_t dev_addr, tusb_event_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes) ATTR_WEAK;
//--------------------------------------------------------------------+
// USBH-CLASS API
//--------------------------------------------------------------------+
@@ -91,7 +91,7 @@ extern cdch_data_t cdch_data[TUSB_CFG_HOST_DEVICE_MAX]; // TODO consider to move
void cdch_init(void);
tusb_error_t cdch_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t const *p_interface_desc, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT;
-void cdch_isr(pipe_handle_t pipe_hdl, tusb_event_t event);
+void cdch_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes);
void cdch_close(uint8_t dev_addr);
#endif
diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c
index 9328ba782..13949c0d4 100644
--- a/tinyusb/class/hid_host.c
+++ b/tinyusb/class/hid_host.c
@@ -288,7 +288,7 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con
OSAL_SUBTASK_END
}
-void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event)
+void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes)
{
#if TUSB_CFG_HOST_HID_KEYBOARD
if ( pipehandle_is_equal(pipe_hdl, keyboard_data[pipe_hdl.dev_addr-1].pipe_hdl) )
diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h
index e9337b5c1..510cbc950 100644
--- a/tinyusb/class/hid_host.h
+++ b/tinyusb/class/hid_host.h
@@ -99,7 +99,7 @@ typedef struct {
void hidh_init(void);
tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t const *p_interface_desc, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT;
-void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event);
+void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes);
void hidh_close(uint8_t dev_addr);
#endif
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index 794fd3be7..11c8ec302 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -245,7 +245,7 @@ void usbh_xfer_isr(pipe_handle_t pipe_hdl, uint8_t class_code, tusb_event_t even
osal_semaphore_post( usbh_devices[ pipe_hdl.dev_addr ].control.sem_hdl );
}else if (usbh_class_drivers[class_index].isr)
{
- usbh_class_drivers[class_index].isr(pipe_hdl, event);
+ usbh_class_drivers[class_index].isr(pipe_hdl, event, xferred_bytes);
}else
{
ASSERT(false, (void) 0); // something wrong, no one claims the isr's source
diff --git a/tinyusb/host/usbh.h b/tinyusb/host/usbh.h
index 97eb4542b..31efcd536 100644
--- a/tinyusb/host/usbh.h
+++ b/tinyusb/host/usbh.h
@@ -76,7 +76,7 @@ typedef enum tusb_interface_status_{
typedef struct {
void (* const init) (void);
tusb_error_t (* const open_subtask)(uint8_t, tusb_descriptor_interface_t const *, uint16_t*);
- void (* const isr) (pipe_handle_t, tusb_event_t);
+ void (* const isr) (pipe_handle_t, tusb_event_t, uint32_t);
void (* const close) (uint8_t);
} host_class_driver_t;
//--------------------------------------------------------------------+