summaryrefslogtreecommitdiff
path: root/tinyusb/class
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-09-21 13:17:43 +0700
committerhathach <[email protected]>2013-09-21 13:17:43 +0700
commitd15ba08fdc5c75aa061dc7dde10eff54f6dc607f (patch)
tree037d09bc2fd3d65c311cb8938d8fedb795debd0c /tinyusb/class
parent2db5fcdf0a34142a3712174baba1ba7bf63af3f4 (diff)
house keeping
Diffstat (limited to 'tinyusb/class')
-rw-r--r--tinyusb/class/cdc_rndis_host.c2
-rw-r--r--tinyusb/class/hid_host.c40
-rw-r--r--tinyusb/class/msc.h30
-rw-r--r--tinyusb/class/msc_host.c20
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