diff options
| author | hathach <[email protected]> | 2013-09-21 13:17:43 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2013-09-21 13:17:43 +0700 |
| commit | d15ba08fdc5c75aa061dc7dde10eff54f6dc607f (patch) | |
| tree | 037d09bc2fd3d65c311cb8938d8fedb795debd0c /tinyusb/class | |
| parent | 2db5fcdf0a34142a3712174baba1ba7bf63af3f4 (diff) | |
house keeping
Diffstat (limited to 'tinyusb/class')
| -rw-r--r-- | tinyusb/class/cdc_rndis_host.c | 2 | ||||
| -rw-r--r-- | tinyusb/class/hid_host.c | 40 | ||||
| -rw-r--r-- | tinyusb/class/msc.h | 30 | ||||
| -rw-r--r-- | tinyusb/class/msc_host.c | 20 |
4 files changed, 60 insertions, 32 deletions
diff --git a/tinyusb/class/cdc_rndis_host.c b/tinyusb/class/cdc_rndis_host.c index af0fe9a05..35fb346a1 100644 --- a/tinyusb/class/cdc_rndis_host.c +++ b/tinyusb/class/cdc_rndis_host.c @@ -57,7 +57,7 @@ static uint8_t msg_notification[TUSB_CFG_HOST_DEVICE_MAX][8] TUSB_CFG_ATTR_USBRAM; ATTR_ALIGNED(4) static uint8_t msg_payload[RNDIS_MSG_PAYLOAD_MAX] TUSB_CFG_ATTR_USBRAM; -STATIC_ rndish_data_t rndish_data[TUSB_CFG_HOST_DEVICE_MAX]; +STATIC_VAR rndish_data_t rndish_data[TUSB_CFG_HOST_DEVICE_MAX]; // TODO Microsoft requires message length for any get command must be at least 4096 bytes diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index f3dff2eed..de44bb416 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -119,22 +119,22 @@ uint8_t const hid_keycode_to_ascii_tbl[2][128] = HID_KEYCODE_TABLE(EXPAND_KEYCODE_TO_ASCII) }; -STATIC_ hidh_interface_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 +STATIC_VAR hidh_interface_info_t keyboardh_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 //------------- KEYBOARD PUBLIC API (parameter validation required) -------------// bool tusbh_hid_keyboard_is_mounted(uint8_t dev_addr) { - return tusbh_device_is_configured(dev_addr) && pipehandle_is_valid(keyboard_data[dev_addr-1].pipe_hdl); + return tusbh_device_is_configured(dev_addr) && pipehandle_is_valid(keyboardh_data[dev_addr-1].pipe_hdl); } tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, void* report) { - return hidh_interface_get_report(dev_addr, report, &keyboard_data[dev_addr-1]); + return hidh_interface_get_report(dev_addr, report, &keyboardh_data[dev_addr-1]); } tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr) { - return hidh_interface_status(dev_addr, &keyboard_data[dev_addr-1]); + return hidh_interface_status(dev_addr, &keyboardh_data[dev_addr-1]); } #endif @@ -144,22 +144,22 @@ tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr) //--------------------------------------------------------------------+ #if TUSB_CFG_HOST_HID_MOUSE -STATIC_ hidh_interface_info_t mouse_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 +STATIC_VAR hidh_interface_info_t mouseh_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 //------------- Public API -------------// bool tusbh_hid_mouse_is_mounted(uint8_t dev_addr) { - return tusbh_device_is_configured(dev_addr) && pipehandle_is_valid(mouse_data[dev_addr-1].pipe_hdl); + return tusbh_device_is_configured(dev_addr) && pipehandle_is_valid(mouseh_data[dev_addr-1].pipe_hdl); } tusb_error_t tusbh_hid_mouse_get_report(uint8_t dev_addr, void * report) { - return hidh_interface_get_report(dev_addr, report, &mouse_data[dev_addr-1]); + return hidh_interface_get_report(dev_addr, report, &mouseh_data[dev_addr-1]); } tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr) { - return hidh_interface_status(dev_addr, &mouse_data[dev_addr-1]); + return hidh_interface_status(dev_addr, &mouseh_data[dev_addr-1]); } #endif @@ -181,11 +181,11 @@ tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr) void hidh_init(void) { #if TUSB_CFG_HOST_HID_KEYBOARD - memclr_(&keyboard_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); + memclr_(&keyboardh_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); #endif #if TUSB_CFG_HOST_HID_MOUSE - memclr_(&mouse_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); + memclr_(&mouseh_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); #endif #if TUSB_CFG_HOST_HID_GENERIC @@ -243,7 +243,7 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con #if TUSB_CFG_HOST_HID_KEYBOARD if ( HID_PROTOCOL_KEYBOARD == p_interface_desc->bInterfaceProtocol) { - SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &keyboard_data[dev_addr-1]) ); + SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &keyboardh_data[dev_addr-1]) ); if ( tusbh_hid_keyboard_mounted_cb ) { tusbh_hid_keyboard_mounted_cb(dev_addr); @@ -254,7 +254,7 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con #if TUSB_CFG_HOST_HID_MOUSE if ( HID_PROTOCOL_MOUSE == p_interface_desc->bInterfaceProtocol) { - SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &mouse_data[dev_addr-1]) ); + SUBTASK_ASSERT_STATUS ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &mouseh_data[dev_addr-1]) ); if (tusbh_hid_mouse_mounted_cb) { tusbh_hid_mouse_mounted_cb(dev_addr); @@ -278,9 +278,9 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con 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) ) + if ( pipehandle_is_equal(pipe_hdl, keyboardh_data[pipe_hdl.dev_addr-1].pipe_hdl) ) { - keyboard_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; + keyboardh_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; if (tusbh_hid_keyboard_isr) { tusbh_hid_keyboard_isr(pipe_hdl.dev_addr, event); @@ -290,9 +290,9 @@ void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes #endif #if TUSB_CFG_HOST_HID_MOUSE - if ( pipehandle_is_equal(pipe_hdl, mouse_data[pipe_hdl.dev_addr-1].pipe_hdl) ) + if ( pipehandle_is_equal(pipe_hdl, mouseh_data[pipe_hdl.dev_addr-1].pipe_hdl) ) { - mouse_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; + mouseh_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; if (tusbh_hid_mouse_isr) { tusbh_hid_mouse_isr(pipe_hdl.dev_addr, event); @@ -310,17 +310,17 @@ void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes void hidh_close(uint8_t dev_addr) { #if TUSB_CFG_HOST_HID_KEYBOARD - if ( pipehandle_is_valid( keyboard_data[dev_addr-1].pipe_hdl ) ) + if ( pipehandle_is_valid( keyboardh_data[dev_addr-1].pipe_hdl ) ) { - hidh_interface_close(dev_addr, &keyboard_data[dev_addr-1]); + hidh_interface_close(dev_addr, &keyboardh_data[dev_addr-1]); tusbh_hid_keyboard_unmounted_isr(dev_addr); } #endif #if TUSB_CFG_HOST_HID_MOUSE - if( pipehandle_is_valid( mouse_data[dev_addr-1].pipe_hdl ) ) + if( pipehandle_is_valid( mouseh_data[dev_addr-1].pipe_hdl ) ) { - hidh_interface_close(dev_addr, &mouse_data[dev_addr-1]); + hidh_interface_close(dev_addr, &mouseh_data[dev_addr-1]); tusbh_hid_mouse_unmounted_isr( dev_addr ); } #endif diff --git a/tinyusb/class/msc.h b/tinyusb/class/msc.h index efa137a2b..c8662089e 100644 --- a/tinyusb/class/msc.h +++ b/tinyusb/class/msc.h @@ -76,6 +76,26 @@ enum { MSC_REQUEST_RESET = 255 }; +typedef ATTR_PACKED_STRUCT(struct) { + uint32_t signature; // const 0x43425355 + uint32_t tag; + uint32_t xfer_bytes; + uint8_t flags; // bit7 : direction + uint8_t lun; + uint8_t cmd_len; + uint8_t command[16]; +}msc_cmd_block_wrapper_t; + +STATIC_ASSERT(sizeof(msc_cmd_block_wrapper_t) == 31, "size is not correct"); + +typedef ATTR_PACKED_STRUCT(struct) { + uint32_t signature; // const 0x53425355 + uint32_t tag; + uint32_t data_residue; + uint8_t status; +}msc_cmd_status_wrapper_t; + +STATIC_ASSERT(sizeof(msc_cmd_status_wrapper_t) == 13, "size is not correct"); //--------------------------------------------------------------------+ // SCSI Primary Command (SPC-4) @@ -95,7 +115,7 @@ typedef ATTR_PACKED_STRUCT(struct) uint8_t normal_aca : 1; uint8_t : 2; - uint8_t additional_length; + uint8_t additional_length; uint8_t protect : 1; uint8_t : 2; @@ -118,11 +138,13 @@ typedef ATTR_PACKED_STRUCT(struct) uint8_t wbus16 : 1; uint8_t : 2; - uint8_t vendor_id[8]; - uint8_t product_id[16]; - uint8_t product_revision[4]; + uint8_t vendor_id[8]; + uint8_t product_id[16]; + uint8_t product_revision[4]; } msc_scsi_inquiry_t; +STATIC_ASSERT(sizeof(msc_scsi_inquiry_t) == 36, "size is not correct"); + //--------------------------------------------------------------------+ // SCSI Block Command (SBC-3) //--------------------------------------------------------------------+ diff --git a/tinyusb/class/msc_host.c b/tinyusb/class/msc_host.c index 760bc34f5..6dc2d0a65 100644 --- a/tinyusb/class/msc_host.c +++ b/tinyusb/class/msc_host.c @@ -55,12 +55,15 @@ typedef struct { pipe_handle_t bulk_in, bulk_out; uint8_t interface_number; uint8_t max_lun; + + msc_cmd_block_wrapper_t cbw; + msc_cmd_status_wrapper_t csw; }msch_interface_t; -/*STATIC_*/ msch_interface_t msch_data[TUSB_CFG_HOST_DEVICE_MAX]; // TODO to be static +STATIC_VAR msch_interface_t msch_data[TUSB_CFG_HOST_DEVICE_MAX] TUSB_CFG_ATTR_USBRAM; // TODO to be static // TODO rename this -STATIC_ uint8_t msch_buffer[10] TUSB_CFG_ATTR_USBRAM; +STATIC_VAR uint8_t msch_buffer[10] TUSB_CFG_ATTR_USBRAM; //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION @@ -108,6 +111,7 @@ tusb_error_t msch_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con msch_data[dev_addr-1].interface_number = p_interface_desc->bInterfaceNumber; (*p_length) += sizeof(tusb_descriptor_interface_t) + 2*sizeof(tusb_descriptor_endpoint_t); + //------------- Get Max Lun -------------// OSAL_SUBTASK_INVOKED_AND_WAIT( usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_DEV_TO_HOST, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_INTERFACE), MSC_REQUEST_GET_MAX_LUN, 0, msch_data[dev_addr-1].interface_number, @@ -115,12 +119,14 @@ tusb_error_t msch_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con error ); - if(TUSB_ERROR_NONE == error /* TODO STALL means zero */) - { - msch_data[dev_addr-1].max_lun = msch_buffer[0]; + SUBTASK_ASSERT( TUSB_ERROR_NONE != error /* && TODO STALL means zero */); - tusbh_msc_mounted_cb(dev_addr); - } + msch_data[dev_addr-1].max_lun = msch_buffer[0]; + + //------------- SCSI Inquiry -------------// + + + tusbh_msc_mounted_cb(dev_addr); OSAL_SUBTASK_END |
