summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-04-07 15:48:01 +0700
committerhathach <[email protected]>2013-04-07 15:48:01 +0700
commit10c08ab40453b60077c6880b50ace59f6f548ace (patch)
treec1e8210c3bf41cf73ae164bb45606cec10646ecc
parent3d8a4ef8c8b8d6778e2bea47e709822bb6a358b5 (diff)
add test for mouse_open
add hid descriptor for mouse & mouse interface to descriptor_test refractor extract function hidh_interface_status fix error with MACRO HID_REPORT_ITEM with zero data size --> redundant semicolon
-rw-r--r--tests/test/host/hid/test_hidh_mouse.c25
-rw-r--r--tests/test/support/descriptor_test.c82
-rw-r--r--tests/test/support/descriptor_test.h14
-rw-r--r--tinyusb/class/hid.h8
-rw-r--r--tinyusb/class/hid_host.c25
5 files changed, 127 insertions, 27 deletions
diff --git a/tests/test/host/hid/test_hidh_mouse.c b/tests/test/host/hid/test_hidh_mouse.c
index b2086b9ad..ab7d7fc9e 100644
--- a/tests/test/host/hid/test_hidh_mouse.c
+++ b/tests/test/host/hid/test_hidh_mouse.c
@@ -47,6 +47,10 @@
extern hidh_interface_info_t mouse_data[TUSB_CFG_HOST_DEVICE_MAX];
hidh_interface_info_t *p_hidh_mouse;
+
+tusb_descriptor_interface_t const *p_mouse_interface_desc = &desc_configuration.mouse_interface;
+tusb_descriptor_endpoint_t const *p_mouse_endpoint_desc = &desc_configuration.mouse_endpoint;
+
uint8_t dev_addr;
void setUp(void)
@@ -77,6 +81,7 @@ void test_mouse_init(void)
TEST_ASSERT_MEM_ZERO(mouse_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX);
}
+//------------- is supported -------------//
void test_mouse_is_supported_fail_unplug(void)
{
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG);
@@ -96,8 +101,28 @@ void test_mouse_is_supported_ok(void)
TEST_ASSERT_TRUE( tusbh_hid_mouse_is_supported(dev_addr) );
}
+void test_mouse_open_ok(void)
+{
+ uint16_t length=0;
+ pipe_handle_t pipe_hdl = {.dev_addr = dev_addr, .xfer_type = TUSB_XFER_INTERRUPT, .index = 2};
+
+ hidh_init();
+
+ hcd_pipe_open_ExpectAndReturn(dev_addr, p_mouse_endpoint_desc, TUSB_CLASS_HID, pipe_hdl);
+
+ //------------- Code Under TEST -------------//
+ TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_open_subtask(dev_addr, p_mouse_interface_desc, &length));
+ TEST_ASSERT_PIPE_HANDLE(pipe_hdl, p_hidh_mouse->pipe_hdl);
+ TEST_ASSERT_EQUAL(8, p_hidh_mouse->report_size);
+ TEST_ASSERT_EQUAL(sizeof(tusb_descriptor_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_descriptor_endpoint_t),
+ length);
+ tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
+ TEST_ASSERT_TRUE( tusbh_hid_keyboard_is_supported(dev_addr) );
+ TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, p_hidh_mouse->status);
+
+}
diff --git a/tests/test/support/descriptor_test.c b/tests/test/support/descriptor_test.c
index 3f288fba7..4e4c7cf1c 100644
--- a/tests/test/support/descriptor_test.c
+++ b/tests/test/support/descriptor_test.c
@@ -92,10 +92,10 @@ const uint8_t keyboard_report_descriptor[] = {
HID_OUTPUT ( HID_CONSTANT ),
HID_USAGE_PAGE (HID_USAGE_PAGE_KEYBOARD),
- HID_USAGE_MIN ( 0 ),
- HID_USAGE_MAX ( 101 ),
- HID_LOGICAL_MIN ( 0 ),
- HID_LOGICAL_MAX ( 101 ),
+ HID_USAGE_MIN ( 0 ),
+ HID_USAGE_MAX ( 101 ),
+ HID_LOGICAL_MIN ( 0 ),
+ HID_LOGICAL_MAX ( 101 ),
HID_REPORT_COUNT ( 6 ),
HID_REPORT_SIZE ( 8 ),
@@ -104,6 +104,42 @@ const uint8_t keyboard_report_descriptor[] = {
};
TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4)
+const uint8_t mouse_report_descriptor[] = {
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ),
+ HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ),
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ),
+ HID_USAGE (HID_USAGE_DESKTOP_POINTER),
+
+ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ),
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ),
+ HID_USAGE_MIN ( 1 ),
+ HID_USAGE_MAX ( 3 ),
+ HID_LOGICAL_MIN ( 0 ),
+ HID_LOGICAL_MAX ( 1 ),
+
+ HID_REPORT_COUNT ( 3 ), /* Left, Right and Middle mouse*/
+ HID_REPORT_SIZE ( 1 ),
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),
+
+ HID_REPORT_COUNT ( 1 ),
+ HID_REPORT_SIZE ( 5 ),
+ HID_INPUT ( HID_CONSTANT ), /* reserved */
+
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ),
+ HID_USAGE ( HID_USAGE_DESKTOP_X ),
+ HID_USAGE ( HID_USAGE_DESKTOP_Y ),
+ HID_LOGICAL_MIN ( 0x81 ), /* -127 */
+ HID_LOGICAL_MAX ( 0x7f ), /* 127 */
+
+ HID_REPORT_COUNT ( 2 ), /* X, Y position */
+ HID_REPORT_SIZE ( 8 ),
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */
+ HID_COLLECTION_END,
+
+ HID_COLLECTION_END
+};
+
+TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4)
const app_configuration_desc_t desc_configuration =
{
.configuration =
@@ -120,7 +156,7 @@ const app_configuration_desc_t desc_configuration =
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100)
},
- ///// USB HID Keyboard interface
+ //------------- HID Keyboard -------------//
.keyboard_interface =
{
.bLength = sizeof(tusb_descriptor_interface_t),
@@ -155,5 +191,41 @@ const app_configuration_desc_t desc_configuration =
.bInterval = 0x0A
},
+ //------------- HID Mouse -------------//
+ .mouse_interface =
+ {
+ .bLength = sizeof(tusb_descriptor_interface_t),
+ .bDescriptorType = TUSB_DESC_INTERFACE,
+ .bInterfaceNumber = 2,
+ .bAlternateSetting = 0x00,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = TUSB_CLASS_HID,
+ .bInterfaceSubClass = HID_SUBCLASS_BOOT,
+ .bInterfaceProtocol = HID_PROTOCOL_MOUSE,
+ .iInterface = 0x00
+ },
+
+ .mouse_hid =
+ {
+ .bLength = sizeof(tusb_hid_descriptor_hid_t),
+ .bDescriptorType = HID_DESC_HID,
+ .bcdHID = 0x0111,
+ .bCountryCode = HID_Local_NotSupported,
+ .bNumDescriptors = 1,
+ .bReportType = HID_DESC_REPORT,
+ .wReportLength = sizeof(mouse_report_descriptor)
+ },
+
+ .mouse_endpoint =
+ {
+ .bLength = sizeof(tusb_descriptor_endpoint_t),
+ .bDescriptorType = TUSB_DESC_ENDPOINT,
+ .bEndpointAddress = 0x82,
+ .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT },
+ .wMaxPacketSize = 0x08,
+ .bInterval = 0x0A
+ },
+
+
.ConfigDescTermination = 0,
};
diff --git a/tests/test/support/descriptor_test.h b/tests/test/support/descriptor_test.h
index a87dd30bf..423c406dc 100644
--- a/tests/test/support/descriptor_test.h
+++ b/tests/test/support/descriptor_test.h
@@ -81,19 +81,15 @@ typedef struct
tusb_descriptor_endpoint_t CDC_DataInEndpoint;
#endif
-#if 1 // || TUSB_CFG_DEVICE_HID_KEYBOARD
- //Keyboard HID Interface
+ //------------- HID Keyboard -------------//
tusb_descriptor_interface_t keyboard_interface;
tusb_hid_descriptor_hid_t keyboard_hid;
tusb_descriptor_endpoint_t keyboard_endpoint;
-#endif
-#if 0 // && TUSB_CFG_DEVICE_HID_MOUSE
- //Mouse HID Interface
- tusb_descriptor_interface_t HID_MouseInterface;
- HID_DESCRIPTOR HID_MouseHID;
- tusb_descriptor_endpoint_t HID_MouseEndpoint;
-#endif
+ //------------- HID Mouse -------------//
+ tusb_descriptor_interface_t mouse_interface;
+ tusb_hid_descriptor_hid_t mouse_hid;
+ tusb_descriptor_endpoint_t mouse_endpoint;
unsigned char ConfigDescTermination;
} app_configuration_desc_t;
diff --git a/tinyusb/class/hid.h b/tinyusb/class/hid.h
index cfc203034..1d423a53e 100644
--- a/tinyusb/class/hid.h
+++ b/tinyusb/class/hid.h
@@ -192,12 +192,12 @@ enum USB_HID_LOCAL_CODE
//--------------------------------------------------------------------+
//------------- ITEM & TAG -------------//
#define HID_REPORT_DATA_0(data)
-#define HID_REPORT_DATA_1(data) data
-#define HID_REPORT_DATA_2(data) U16_TO_U8S_LE(data)
-#define HID_REPORT_DATA_3(data) U32_TO_U8S_LE(data)
+#define HID_REPORT_DATA_1(data) , data
+#define HID_REPORT_DATA_2(data) , U16_TO_U8S_LE(data)
+#define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data)
#define HID_REPORT_ITEM(data, tag, type, size) \
- ( (tag << 4) | (type << 2) | size), HID_REPORT_DATA_##size(data)
+ ((tag << 4) | (type << 2) | size) HID_REPORT_DATA_##size(data)
#define RI_TYPE_MAIN 0
#define RI_TYPE_GLOBAL 1
diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c
index e9e12c71b..c0e507215 100644
--- a/tinyusb/class/hid_host.c
+++ b/tinyusb/class/hid_host.c
@@ -53,6 +53,19 @@
//--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+
+tusb_interface_status_t hidh_interface_status(uint8_t dev_addr, hidh_interface_info_t *p_hid) ATTR_PURE ATTR_ALWAYS_INLINE;
+tusb_interface_status_t hidh_interface_status(uint8_t dev_addr, hidh_interface_info_t *p_hid)
+{
+ switch( tusbh_device_get_state(dev_addr) )
+ {
+ case TUSB_DEVICE_STATE_UNPLUG:
+ case TUSB_DEVICE_STATE_INVALID_PARAMETER:
+ return TUSB_INTERFACE_STATUS_INVALID_PARA;
+
+ default:
+ return p_hid->status;
+ }
+}
//--------------------------------------------------------------------+
// KEYBOARD
@@ -94,15 +107,7 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, uint8_t instance_nu
tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num)
{
- switch( tusbh_device_get_state(dev_addr) )
- {
- case TUSB_DEVICE_STATE_UNPLUG:
- case TUSB_DEVICE_STATE_INVALID_PARAMETER:
- return TUSB_INTERFACE_STATUS_INVALID_PARA;
-
- default:
- return keyboard_data[dev_addr-1].status;
- }
+ return hidh_interface_status(dev_addr, &keyboard_data[dev_addr-1]);
}
//------------- Internal API -------------//
static inline tusb_error_t hidh_keyboard_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) ATTR_ALWAYS_INLINE;
@@ -160,6 +165,8 @@ tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr, uint8_t instanc
default:
return mouse_data[dev_addr-1].status;
}*/
+
+ return TUSB_INTERFACE_STATUS_INVALID_PARA;
}
//------------- Internal API -------------//