Browse Source

able to build host hid

hathach 7 years ago
parent
commit
366ab79776

+ 2 - 2
docs/configuration.txt

@@ -41,8 +41,8 @@
  * \brief For each Class Driver a value of 1 means enable, value of 0 mean disable
  * @{ */
 #define CFG_TUH_HUB           ///< Enable Hub Class
-#define CFG_TUSB_HOST_HID_KEYBOARD  ///< Enable HID Class for Keyboard
-#define CFG_TUSB_HOST_HID_MOUSE     ///< Enable HID Class for Mouse
+#define CFG_TUH_HID_KEYBOARD  ///< Enable HID Class for Keyboard
+#define CFG_TUH_HID_MOUSE     ///< Enable HID Class for Mouse
 #define CFG_TUSB_HOST_HID_GENERIC   ///< Enable HID Class for Generic (not supported yet)
 #define CFG_TUH_MSC           ///< Enable Mass Storage Class (SCSI subclass only)
 #define CFG_TUH_CDC           ///< Enable Virtual Serial (Communication Device Class)

+ 2 - 1
examples/host/cdc_msc_hid/ses/lpc43xx/lpc43xx.emProject

@@ -18,11 +18,12 @@
       arm_target_debug_interface_type="ADIv5"
       arm_target_device_name="LPC4357_M4"
       arm_target_interface_type="SWD"
-      build_treat_warnings_as_errors="Yes"
+      build_treat_warnings_as_errors="No"
       c_preprocessor_definitions="CORE_M4;__LPC4300_FAMILY;__LPC435x_SUBFAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_EA4357;CFG_TUSB_MCU=OPT_MCU_LPC43XX;CFG_TUSB_MEM_SECTION= __attribute__((section(&quot;.bss2&quot;)))"
       c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)//inc;$(lpcDir)//inc/config_43xx"
       debug_register_definition_file="LPC43xx_Registers.xml"
       debug_target_connection="J-Link"
+      gcc_enable_all_warnings="Yes"
       gcc_entry_point="Reset_Handler"
       link_use_linker_script_file="No"
       linker_memory_map_file="LPC4357 Cortex-M4_MemoryMap.xml"

+ 38 - 1
examples/host/cdc_msc_hid/src/main.c

@@ -111,12 +111,49 @@ void virtual_com_task(void)
 //--------------------------------------------------------------------+
 // USB HID
 //--------------------------------------------------------------------+
-#if CFG_TUD_HID
+#if CFG_TUH_HID_KEYBOARD
 void usb_hid_task(void)
 {
 
 }
 
+void tuh_hid_keyboard_mounted_cb(uint8_t dev_addr)
+{
+  // application set-up
+  printf("\na Keyboard device (address %d) is mounted\n", dev_addr);
+}
+
+void tuh_hid_keyboard_unmounted_cb(uint8_t dev_addr)
+{
+  // application tear-down
+  printf("\na Keyboard device (address %d) is unmounted\n", dev_addr);
+}
+
+// invoked ISR context
+void tuh_hid_keyboard_isr(uint8_t dev_addr, xfer_result_t event)
+{
+
+}
+
+#endif
+
+#if CFG_TUH_HID_MOUSE
+void tuh_hid_mouse_mounted_cb(uint8_t dev_addr)
+{
+  // application set-up
+  printf("\na Mouse device (address %d) is mounted\n", dev_addr);
+}
+
+void tuh_hid_mouse_unmounted_cb(uint8_t dev_addr)
+{
+  // application tear-down
+  printf("\na Mouse device (address %d) is unmounted\n", dev_addr);
+}
+
+// invoked ISR context
+void tuh_hid_mouse_isr(uint8_t dev_addr, xfer_result_t event)
+{
+}
 #endif
 
 //--------------------------------------------------------------------+

+ 2 - 5
examples/host/cdc_msc_hid/src/tusb_config.h

@@ -39,9 +39,6 @@
 #ifndef _TUSB_CONFIG_H_
 #define _TUSB_CONFIG_H_
 
-#include "tusb_option.h"
-#include "bsp/board.h"
-
 #ifdef __cplusplus
  extern "C" {
 #endif
@@ -85,8 +82,8 @@
 
 #define CFG_TUH_HUB               1 // not tested
 #define CFG_TUH_CDC               1
-#define CFG_TUSB_HOST_HID_KEYBOARD      0
-#define CFG_TUSB_HOST_HID_MOUSE         0
+#define CFG_TUH_HID_KEYBOARD      1
+#define CFG_TUH_HID_MOUSE         1
 #define CFG_TUSB_HOST_HID_GENERIC       0 // (not yet supported)
 #define CFG_TUH_MSC               1
 

+ 1 - 1
examples/obsolete/host/src/keyboard_host_app.c

@@ -42,7 +42,7 @@
 #include "keyboard_host_app.h"
 #include "app_os_prio.h"
 
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
 
 //--------------------------------------------------------------------+
 // MACRO CONSTANT TYPEDEF

+ 1 - 1
examples/obsolete/host/src/keyboard_host_app.h

@@ -59,7 +59,7 @@
  extern "C" {
 #endif
 
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
 
 void keyboard_host_app_init(void);
 void keyboard_host_app_task(void* param);

+ 2 - 2
examples/obsolete/host/src/main.c

@@ -136,8 +136,8 @@ void print_greeting(void)
   puts("This HOST demo is configured to support:");
   printf("  - RTOS = %s\n", rtos_name[CFG_TUSB_OS]);
   if (CFG_TUH_HUB          ) puts("  - Hub (1 level only)");
-  if (CFG_TUSB_HOST_HID_MOUSE    ) puts("  - HID Mouse");
-  if (CFG_TUSB_HOST_HID_KEYBOARD ) puts("  - HID Keyboard");
+  if (CFG_TUH_HID_MOUSE    ) puts("  - HID Mouse");
+  if (CFG_TUH_HID_KEYBOARD ) puts("  - HID Keyboard");
   if (CFG_TUH_MSC          ) puts("  - Mass Storage");
   if (CFG_TUH_CDC          ) puts("  - Communication Device Class");
 }

+ 1 - 1
examples/obsolete/host/src/mouse_host_app.c

@@ -42,7 +42,7 @@
 #include "mouse_host_app.h"
 #include "app_os_prio.h"
 
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
 
 //--------------------------------------------------------------------+
 // MACRO CONSTANT TYPEDEF

+ 1 - 1
examples/obsolete/host/src/mouse_host_app.h

@@ -62,7 +62,7 @@
  extern "C" {
 #endif
 
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
 
 void mouse_host_app_init(void);
 void mouse_host_app_task(void* param);

+ 2 - 2
examples/obsolete/host/src/tusb_config.h

@@ -55,8 +55,8 @@
 
 //------------- CLASS -------------//
 #define CFG_TUH_HUB               1
-#define CFG_TUSB_HOST_HID_KEYBOARD      1
-#define CFG_TUSB_HOST_HID_MOUSE         1
+#define CFG_TUH_HID_KEYBOARD      1
+#define CFG_TUH_HID_MOUSE         1
 #define CFG_TUSB_HOST_HID_GENERIC       0 // (not yet supported)
 #define CFG_TUH_MSC               1
 #define CFG_TUH_CDC               1

+ 33 - 31
src/class/hid/hid_host.c

@@ -54,15 +54,15 @@
 //--------------------------------------------------------------------+
 // HID Interface common functions
 //--------------------------------------------------------------------+
-static inline tusb_error_t hidh_interface_open(uint8_t dev_addr, uint8_t interface_number, tusb_desc_endpoint_t const *p_endpoint_desc, hidh_interface_info_t *p_hid)
+static inline bool hidh_interface_open(uint8_t dev_addr, uint8_t interface_number, tusb_desc_endpoint_t const *p_endpoint_desc, hidh_interface_info_t *p_hid)
 {
   p_hid->pipe_hdl         = hcd_pipe_open(dev_addr, p_endpoint_desc, TUSB_CLASS_HID);
   p_hid->report_size      = p_endpoint_desc->wMaxPacketSize.size; // TODO get size from report descriptor
   p_hid->interface_number = interface_number;
 
-  TU_ASSERT (pipehandle_is_valid(p_hid->pipe_hdl), TUSB_ERROR_HCD_FAILED);
+  TU_ASSERT (pipehandle_is_valid(p_hid->pipe_hdl));
 
-  return TUSB_ERROR_NONE;
+  return true;
 }
 
 static inline void hidh_interface_close(hidh_interface_info_t *p_hid)
@@ -78,7 +78,7 @@ tusb_error_t hidh_interface_get_report(uint8_t dev_addr, void * report, hidh_int
   // TODO change to use is configured function
   TU_ASSERT (TUSB_DEVICE_STATE_CONFIGURED == tuh_device_get_state(dev_addr), TUSB_ERROR_DEVICE_NOT_READY);
   TU_VERIFY (report, TUSB_ERROR_INVALID_PARA);
-  TU_ASSSERT (!hcd_pipe_is_busy(p_hid->pipe_hdl), TUSB_ERROR_INTERFACE_IS_BUSY);
+  TU_ASSERT (!hcd_pipe_is_busy(p_hid->pipe_hdl), TUSB_ERROR_INTERFACE_IS_BUSY);
 
   TU_ASSERT_ERR( hcd_pipe_xfer(p_hid->pipe_hdl, report, p_hid->report_size, true) ) ;
 
@@ -88,8 +88,9 @@ tusb_error_t hidh_interface_get_report(uint8_t dev_addr, void * report, hidh_int
 //--------------------------------------------------------------------+
 // KEYBOARD
 //--------------------------------------------------------------------+
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
 
+#if 0
 #define EXPAND_KEYCODE_TO_ASCII(keycode, ascii, shift_modified)  \
   [0][keycode] = ascii,\
   [1][keycode] = shift_modified,\
@@ -99,8 +100,9 @@ uint8_t const hid_keycode_to_ascii_tbl[2][128] =
 {
     HID_KEYCODE_TABLE(EXPAND_KEYCODE_TO_ASCII)
 };
+#endif
 
-STATIC_VAR hidh_interface_info_t keyboardh_data[CFG_TUSB_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1
+static hidh_interface_info_t keyboardh_data[CFG_TUSB_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1
 
 //------------- KEYBOARD PUBLIC API (parameter validation required) -------------//
 bool  tuh_hid_keyboard_is_mounted(uint8_t dev_addr)
@@ -124,7 +126,7 @@ bool tuh_hid_keyboard_is_busy(uint8_t dev_addr)
 //--------------------------------------------------------------------+
 // MOUSE
 //--------------------------------------------------------------------+
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
 
 STATIC_VAR hidh_interface_info_t mouseh_data[CFG_TUSB_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1
 
@@ -163,11 +165,11 @@ tusb_error_t tuh_hid_mouse_get_report(uint8_t dev_addr, void * report)
 //--------------------------------------------------------------------+
 void hidh_init(void)
 {
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
   tu_memclr(&keyboardh_data, sizeof(hidh_interface_info_t)*CFG_TUSB_HOST_DEVICE_MAX);
 #endif
 
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
   tu_memclr(&mouseh_data, sizeof(hidh_interface_info_t)*CFG_TUSB_HOST_DEVICE_MAX);
 #endif
 
@@ -180,9 +182,8 @@ void hidh_init(void)
 CFG_TUSB_MEM_SECTION uint8_t report_descriptor[256];
 #endif
 
-tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length)
+bool hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length)
 {
-  tusb_error_t error;
   uint8_t const *p_desc = (uint8_t const *) p_interface_desc;
 
   //------------- HID descriptor -------------//
@@ -195,16 +196,15 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_
   tusb_desc_endpoint_t const * p_endpoint_desc = (tusb_desc_endpoint_t const *) p_desc;
   TU_ASSERT(TUSB_DESC_ENDPOINT == p_endpoint_desc->bDescriptorType, TUSB_ERROR_INVALID_PARA);
 
-  OSAL_SUBTASK_BEGIN
-
   //------------- SET IDLE (0) request -------------//
-  STASK_INVOKE(
-    usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_OUT, TUSB_REQ_TYPE_CLASS, TUSB_REQ_RCPT_INTERFACE),
-                               HID_REQ_CONTROL_SET_IDLE, 0, p_interface_desc->bInterfaceNumber,
-                               0, NULL ),
-    error
-  );
-	(void) error; // skip if set idle is failed
+  tusb_control_request_t request = {
+        .bmRequestType_bit = { .recipient = TUSB_REQ_RCPT_INTERFACE, .type = TUSB_REQ_TYPE_CLASS, .direction = TUSB_DIR_OUT },
+        .bRequest = HID_REQ_CONTROL_SET_IDLE,
+        .wValue = 0, // idle_rate = 0
+        .wIndex = p_interface_desc->bInterfaceNumber,
+        .wLength = 0
+  };
+  TU_ASSERT( usbh_control_xfer( dev_addr, &request, NULL ) );
 
 #if 0
   //------------- Get Report Descriptor TODO HID parser -------------//
@@ -222,40 +222,42 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_
 
   if ( HID_SUBCLASS_BOOT == p_interface_desc->bInterfaceSubClass )
   {
-    #if CFG_TUSB_HOST_HID_KEYBOARD
+    #if CFG_TUH_HID_KEYBOARD
     if ( HID_PROTOCOL_KEYBOARD == p_interface_desc->bInterfaceProtocol)
     {
-      STASK_ASSERT_ERR ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &keyboardh_data[dev_addr-1]) );
+      TU_ASSERT( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &keyboardh_data[dev_addr-1]) );
       tuh_hid_keyboard_mounted_cb(dev_addr);
     } else
     #endif
 
-    #if CFG_TUSB_HOST_HID_MOUSE
+    #if CFG_TUH_HID_MOUSE
     if ( HID_PROTOCOL_MOUSE == p_interface_desc->bInterfaceProtocol)
     {
-      STASK_ASSERT_ERR ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &mouseh_data[dev_addr-1]) );
+      TU_ASSERT ( hidh_interface_open(dev_addr, p_interface_desc->bInterfaceNumber, p_endpoint_desc, &mouseh_data[dev_addr-1]) );
       tuh_hid_mouse_mounted_cb(dev_addr);
     } else
     #endif
 
     {
-      STASK_RETURN(TUSB_ERROR_HIDH_NOT_SUPPORTED_PROTOCOL); // exit & restart task
+      // TUSB_ERROR_HIDH_NOT_SUPPORTED_PROTOCOL
+      return false;
     }
   }else
   {
-    STASK_RETURN(TUSB_ERROR_HIDH_NOT_SUPPORTED_SUBCLASS); // exit & restart task
+    // TUSB_ERROR_HIDH_NOT_SUPPORTED_SUBCLASS
+    return false;
   }
 
   *p_length = sizeof(tusb_desc_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_desc_endpoint_t);
 
-  OSAL_SUBTASK_END
+  return true;
 }
 
 void hidh_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes)
 {
   (void) xferred_bytes; // TODO may need to use this para later
 
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
   if ( pipehandle_is_equal(pipe_hdl, keyboardh_data[pipe_hdl.dev_addr-1].pipe_hdl) )
   {
     tuh_hid_keyboard_isr(pipe_hdl.dev_addr, event);
@@ -263,7 +265,7 @@ void hidh_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_byte
   }
 #endif
 
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
   if ( pipehandle_is_equal(pipe_hdl, mouseh_data[pipe_hdl.dev_addr-1].pipe_hdl) )
   {
     tuh_hid_mouse_isr(pipe_hdl.dev_addr, event);
@@ -278,7 +280,7 @@ void hidh_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_byte
 
 void hidh_close(uint8_t dev_addr)
 {
-#if CFG_TUSB_HOST_HID_KEYBOARD
+#if CFG_TUH_HID_KEYBOARD
   if ( pipehandle_is_valid( keyboardh_data[dev_addr-1].pipe_hdl ) )
   {
     hidh_interface_close(&keyboardh_data[dev_addr-1]);
@@ -286,7 +288,7 @@ void hidh_close(uint8_t dev_addr)
   }
 #endif
 
-#if CFG_TUSB_HOST_HID_MOUSE
+#if CFG_TUH_HID_MOUSE
   if( pipehandle_is_valid( mouseh_data[dev_addr-1].pipe_hdl ) )
   {
     hidh_interface_close(&mouseh_data[dev_addr-1]);

+ 4 - 4
src/class/hid/hid_host.h

@@ -215,10 +215,10 @@ typedef struct {
   uint8_t interface_number;
 }hidh_interface_info_t;
 
-void         hidh_init(void);
-tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT;
-void         hidh_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes);
-void         hidh_close(uint8_t dev_addr);
+void hidh_init(void);
+bool hidh_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT;
+void hidh_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes);
+void hidh_close(uint8_t dev_addr);
 
 #endif
 

+ 2 - 2
src/class/msc/msc_host.c

@@ -295,8 +295,6 @@ void msch_init(void)
 
 bool msch_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interface_desc, uint16_t *p_length)
 {
-  tusb_error_t error;
-
   if (! ( MSC_SUBCLASS_SCSI == p_interface_desc->bInterfaceSubClass &&
           MSC_PROTOCOL_BOT  == p_interface_desc->bInterfaceProtocol ) )
   {
@@ -393,6 +391,8 @@ bool msch_open_subtask(uint8_t dev_addr, tusb_desc_interface_t const *p_interfac
 
   msch_data[dev_addr-1].is_initialized = true;
   tuh_msc_mounted_cb(dev_addr);
+
+  return true;
 }
 
 void msch_isr(pipe_handle_t pipe_hdl, xfer_result_t event, uint32_t xferred_bytes)

+ 3 - 0
src/host/ehci/ehci.c

@@ -48,6 +48,9 @@
 #include "../usbh_hcd.h"
 #include "ehci.h"
 
+// TODO remove
+#include "chip.h"
+
 //--------------------------------------------------------------------+
 // MACRO CONSTANT TYPEDEF
 //--------------------------------------------------------------------+

+ 1 - 1
src/host/hcd.h

@@ -82,7 +82,7 @@ typedef struct
 #if MODE_HOST_SUPPORTED
 // Max number of endpoints per device
 enum {
-  HCD_MAX_ENDPOINT = CFG_TUH_HUB + CFG_TUSB_HOST_HID_KEYBOARD + CFG_TUSB_HOST_HID_MOUSE + CFG_TUSB_HOST_HID_GENERIC +
+  HCD_MAX_ENDPOINT = CFG_TUH_HUB + CFG_TUH_HID_KEYBOARD + CFG_TUH_HID_MOUSE + CFG_TUSB_HOST_HID_GENERIC +
                      CFG_TUH_MSC*2 + CFG_TUH_CDC*3,
 
   HCD_MAX_XFER     = HCD_MAX_ENDPOINT*2,

+ 0 - 1
src/host/hub.c

@@ -105,7 +105,6 @@ bool hub_port_clear_feature_subtask(uint8_t hub_addr, uint8_t hub_port, uint8_t
 bool hub_port_reset_subtask(uint8_t hub_addr, uint8_t hub_port)
 {
   enum { RESET_DELAY = 200 }; // USB specs say only 50ms but many devices require much longer
-  tusb_error_t error;
 
   //------------- Set Port Reset -------------//
   tusb_control_request_t request = {

+ 1 - 1
src/tusb_option.h

@@ -218,7 +218,7 @@
   #endif
 
   //------------- HID CLASS -------------//
-  #define HOST_CLASS_HID   ( CFG_TUSB_HOST_HID_KEYBOARD + CFG_TUSB_HOST_HID_MOUSE + CFG_TUSB_HOST_HID_GENERIC )
+  #define HOST_CLASS_HID   ( CFG_TUH_HID_KEYBOARD + CFG_TUH_HID_MOUSE + CFG_TUSB_HOST_HID_GENERIC )
 //  #if HOST_CLASS_HID
 //    #define HOST_HCD_XFER_INTERRUPT
 //  #endif

+ 2 - 2
tests/support/tusb_config.h

@@ -56,8 +56,8 @@
 
 //------------- CLASS -------------//
 #define CFG_TUH_HUB                 0
-#define CFG_TUSB_HOST_HID_KEYBOARD        1
-#define CFG_TUSB_HOST_HID_MOUSE           1
+#define CFG_TUH_HID_KEYBOARD        1
+#define CFG_TUH_HID_MOUSE           1
 #define CFG_TUH_MSC                 1
 #define CFG_TUSB_HOST_HID_GENERIC         0
 #define CFG_TUH_CDC                 1