diff --git a/examples/device/nrf52840/src/main.c b/examples/device/nrf52840/src/main.c index 0008bb69c..9a80accc9 100644 --- a/examples/device/nrf52840/src/main.c +++ b/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 diff --git a/examples/device/nrf52840/src/msc_device_app.c b/examples/device/nrf52840/src/msc_device_app.c index 916e4331c..9f5015042 100644 --- a/examples/device/nrf52840/src/msc_device_app.c +++ b/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) { diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c index e52952e08..4df370cfe 100644 --- a/src/class/hid/hid_device.c +++ b/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 ); diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h index 43181b1a9..6edd9f934 100644 --- a/src/class/hid/hid_device.h +++ b/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.