Browse Source

tud_hid_generic_get_report_cb and tud_hid_generic_set_report_cb are mandantory

hathach 7 năm trước cách đây
mục cha
commit
191b73b58c

+ 9 - 0
examples/device/nrf52840/src/main.c

@@ -143,7 +143,16 @@ void usb_hid_task(void)
   }
 }
 
+uint16_t tud_hid_generic_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen)
+{
+  // TODO not Implemented
+  return 0;
+}
 
+void tud_hid_generic_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize)
+{
+  // TODO not Implemented
+}
 
 //--------------------------------------------------------------------+
 // tinyusb callbacks

+ 10 - 4
examples/device/nrf52840/src/msc_device_app.c

@@ -90,17 +90,23 @@ int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer,
         start_stop->start;
         start_stop->load_eject;
        */
-      resplen = 0;
+       resplen = 0;
     break;
 
-    // negative means error -> tusb could stall and/or response with failed status
-    default: return -1;
+
+    default:
+      // Set Sense = Invalid Command Operation
+      tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00);
+
+      // negative means error -> tinyusb could stall and/or response with failed status
+      resplen = -1;
+    break;
   }
 
   // return resplen must not larger than bufsize
   if ( resplen > bufsize ) resplen = bufsize;
 
-  if ( response && resplen )
+  if ( response && (resplen > 0) )
   {
     if(in_xfer)
     {

+ 1 - 1
src/class/hid/hid_device.c

@@ -449,8 +449,8 @@ tusb_error_t hidd_control_request_st(uint8_t rhport, tusb_control_request_t cons
         xferlen = p_hid->get_report_cb(report_id, (hid_report_type_t) report_type, p_hid->report_buf, p_request->wLength);
       }else
       {
+        // For boot Interface only: re-use report_buf -> report has no change
         xferlen = p_request->wLength;
-        // re-use report_buf -> report has no change
       }
 
       STASK_ASSERT( xferlen > 0 );

+ 5 - 5
src/class/hid/hid_device.h

@@ -73,9 +73,9 @@
 bool tud_hid_generic_ready(void);
 bool tud_hid_generic_report(uint8_t report_id, void const* report, uint8_t len);
 
-/*------------- Callbacks -------------*/
-ATTR_WEAK uint16_t tud_hid_generic_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen);
-ATTR_WEAK void     tud_hid_generic_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize);
+/*------------- Callbacks (Weak is optional) -------------*/
+uint16_t tud_hid_generic_get_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen);
+void     tud_hid_generic_set_report_cb(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize);
 
 //--------------------------------------------------------------------+
 // KEYBOARD API
@@ -110,7 +110,7 @@ extern const hid_ascii_to_keycode_entry_t HID_ASCII_TO_KEYCODE[128];
 
 #endif
 
-/*------------- Callbacks -------------*/
+/*------------- Callbacks (Weak is optional) -------------*/
 
 /** Callback invoked when USB host request \ref HID_REQ_CONTROL_GET_REPORT.
  * \param[in]   report_type specify which report (INPUT, OUTPUT, FEATURE) that host requests
@@ -172,7 +172,7 @@ static inline bool tud_hid_mouse_button_release(void)
   return tud_hid_mouse_data(0, 0, 0, 0, 0);
 }
 
-/*------------- Callbacks -------------*/
+/*------------- Callbacks (Weak is optional) -------------*/
 
 /**
  * Callback function that is invoked when USB host request \ref HID_REQ_CONTROL_GET_REPORT.