nrf52840 boot mouse does not work, need more work

This commit is contained in:
hathach 2018-07-24 00:45:07 +07:00
parent 546f2a1165
commit 3400dfdf4e
5 changed files with 64 additions and 41 deletions

View File

@ -98,29 +98,25 @@ void virtual_com_task(void)
} }
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// USB CDC // USB HID
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
void usb_hid_task(void) void usb_hid_task(void)
{ {
if ( tud_mounted() ) if ( tud_mounted() )
{ {
/*------------- Keyboard -------------*/
/*
if ( !tud_hid_keyboard_busy() ) if ( !tud_hid_keyboard_busy() )
{ {
// Poll every 10ms if ( btn )
static tu_timeout_t tm = { .start = 0, .interval = 10 };
if ( !tu_timeout_expired(&tm) ) return; // not enough time
tu_timeout_reset(&tm);
uint32_t bt = board_buttons();
if ( bt )
{ {
uint8_t keycode[6] = { 0 }; uint8_t keycode[6] = { 0 };
for(uint8_t i=0; i < 6; i++) for(uint8_t i=0; i < 6; i++)
{ {
if ( bt & (1 << i) ) keycode[i] = HID_KEY_A + i; if ( btn & (1 << i) ) keycode[i] = HID_KEY_A + i;
} }
tud_hid_keyboard_send_keycode(0, keycode); tud_hid_keyboard_send_keycode(0, keycode);
@ -130,10 +126,24 @@ void usb_hid_task(void)
tud_hid_keyboard_send_report(NULL); tud_hid_keyboard_send_report(NULL);
} }
} }
*/
/*------------- Mouse -------------*/
if ( !tud_hid_mouse_busy() ) if ( !tud_hid_mouse_busy() )
{ {
// Poll every 10ms
static tu_timeout_t tm = { .start = 0, .interval = 10 };
if ( !tu_timeout_expired(&tm) ) return; // not enough time
tu_timeout_reset(&tm);
uint32_t const btn = board_buttons();
if ( btn )
{
hid_mouse_report_t report = { .buttons = 0, .x = 10, .y = 0, .wheel = 0 };
tud_hid_mouse_send_report(&report);
}
} }
} }

View File

@ -167,14 +167,17 @@ typedef struct ATTR_PACKED
int8_t x; /**< Current delta x movement of the mouse. */ int8_t x; /**< Current delta x movement of the mouse. */
int8_t y; /**< Current delta y movement on the mouse. */ int8_t y; /**< Current delta y movement on the mouse. */
int8_t wheel; /**< Current delta wheel movement on the mouse. */ int8_t wheel; /**< Current delta wheel movement on the mouse. */
// int8_t pan;
} hid_mouse_report_t; } hid_mouse_report_t;
/// Standard Mouse Buttons Bitmap /// Standard Mouse Buttons Bitmap
typedef enum typedef enum
{ {
MOUSE_BUTTON_LEFT = BIT_(0), ///< Left button MOUSE_BUTTON_LEFT = BIT_(0), ///< Left button
MOUSE_BUTTON_RIGHT = BIT_(1), ///< Right button MOUSE_BUTTON_RIGHT = BIT_(1), ///< Right button
MOUSE_BUTTON_MIDDLE = BIT_(2) ///< Middle button MOUSE_BUTTON_MIDDLE = BIT_(2), ///< Middle button
MOUSE_BUTTON_BACKWARD = BIT_(3), ///< Backward button,
MOUSE_BUTTON_FORWARD = BIT_(4), ///< Forward button,
}hid_mouse_button_bm_t; }hid_mouse_button_bm_t;
/// @} /// @}

View File

@ -167,7 +167,7 @@ bool tud_hid_mouse_busy(void)
return dcd_edpt_busy(TUD_OPT_RHPORT, _mse_itf.ep_in); return dcd_edpt_busy(TUD_OPT_RHPORT, _mse_itf.ep_in);
} }
bool tud_hid_mouse_send(hid_mouse_report_t const *p_report) bool tud_hid_mouse_send_report(hid_mouse_report_t const *p_report)
{ {
VERIFY( tud_mounted() && !tud_hid_mouse_busy() ); VERIFY( tud_mounted() && !tud_hid_mouse_busy() );

View File

@ -65,7 +65,7 @@ bool tud_hid_keyboard_busy(void);
/** \brief Send a keyboard report /** \brief Send a keyboard report
* \param[in,out] p_report Report data, if NULL, an empty report (all zeroes) is used * \param[in,out] p_report Report data, if NULL, an empty report (all zeroes) is used
* \returns true on success, false otherwise (not mounted or busy) * \returns true on success, false otherwise (not mounted or busy)
*/ */
bool tud_hid_keyboard_send_report(hid_keyboard_report_t const *p_report); bool tud_hid_keyboard_send_report(hid_keyboard_report_t const *p_report);
@ -127,10 +127,10 @@ ATTR_WEAK void tud_hid_keyboard_set_report_cb(hid_report_type_t report_type, uin
bool tud_hid_mouse_busy(void); bool tud_hid_mouse_busy(void);
/** \brief Perform transfer queuing /** \brief Perform transfer queuing
* \param[in,out] p_report address that is used to store data from device. Must be accessible by usb controller (see \ref CFG_TUSB_ATTR_USBRAM) * \param[in,out] p_report Report data, if NULL, an empty report (all zeroes) is used
* \returns true on success, false otherwise (not mounted or busy) * \returns true on success, false otherwise (not mounted or busy)
*/ */
bool tud_hid_mouse_send(hid_mouse_report_t const *p_report); bool tud_hid_mouse_send_report(hid_mouse_report_t const *p_report);
/*------------- Callbacks -------------*/ /*------------- Callbacks -------------*/

View File

@ -123,39 +123,45 @@ uint8_t const _desc_auto_hid_kbd_report[] = {
HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ), HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ),
HID_COLLECTION ( HID_COLLECTION_APPLICATION ), HID_COLLECTION ( HID_COLLECTION_APPLICATION ),
HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ), HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ),
// 8 bits Modifier Keys (Shfit, Control, Alt)
HID_USAGE_MIN ( 224 ), HID_USAGE_MIN ( 224 ),
HID_USAGE_MAX ( 231 ), HID_USAGE_MAX ( 231 ),
HID_LOGICAL_MIN ( 0 ), HID_LOGICAL_MIN ( 0 ),
HID_LOGICAL_MAX ( 1 ), HID_LOGICAL_MAX ( 1 ),
HID_REPORT_COUNT ( 8 ),
HID_REPORT_SIZE ( 1 ), HID_REPORT_SIZE ( 1 ),
HID_REPORT_COUNT ( 8 ), /* 8 bits */ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* maskable modifier key */
HID_REPORT_SIZE ( 8 ), // 8 bit reserved
HID_REPORT_COUNT ( 1 ), HID_REPORT_COUNT ( 1 ),
HID_INPUT ( HID_CONSTANT ), /* reserved */ HID_REPORT_SIZE ( 8 ),
HID_INPUT ( HID_CONSTANT ),
// 6-byte Keycodes
HID_USAGE_PAGE (HID_USAGE_PAGE_KEYBOARD),
HID_USAGE_MIN ( 0 ),
HID_USAGE_MAX ( 255 ),
HID_LOGICAL_MIN ( 0 ),
HID_LOGICAL_MAX ( 255 ),
HID_REPORT_COUNT ( 6 ),
HID_REPORT_SIZE ( 8 ),
HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ),
// LED Indicator Kana | Compose | Scroll Lock | CapsLock | NumLock
HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ), HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ),
/* 5-bit Led report */
HID_USAGE_MIN ( 1 ), HID_USAGE_MIN ( 1 ),
HID_USAGE_MAX ( 5 ), HID_USAGE_MAX ( 5 ),
HID_REPORT_COUNT ( 5 ), HID_REPORT_COUNT ( 5 ),
HID_REPORT_SIZE ( 1 ), HID_REPORT_SIZE ( 1 ),
HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* 5-bit Led report */ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),
HID_REPORT_SIZE ( 3 ), /* led padding */ /* led padding */
HID_REPORT_COUNT ( 1 ), HID_REPORT_COUNT ( 1 ),
HID_REPORT_SIZE ( 3 ),
HID_OUTPUT ( HID_CONSTANT ), 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_REPORT_SIZE ( 8 ),
HID_REPORT_COUNT ( 6 ),
HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ), /* keycodes array 6 items */
HID_COLLECTION_END HID_COLLECTION_END
}; };
#endif #endif
@ -173,29 +179,33 @@ uint8_t const _desc_auto_hid_mse_report[] = {
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ), HID_COLLECTION ( HID_COLLECTION_PHYSICAL ),
HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ), HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ),
HID_USAGE_MIN ( 1 ), HID_USAGE_MIN ( 1 ),
HID_USAGE_MAX ( 3 ), HID_USAGE_MAX ( 5 ),
HID_LOGICAL_MIN ( 0 ), HID_LOGICAL_MIN ( 0 ),
HID_LOGICAL_MAX ( 1 ), HID_LOGICAL_MAX ( 1 ),
// Left, Right, Middle, Backward, Forward mouse buttons
HID_REPORT_COUNT ( 5 ),
HID_REPORT_SIZE ( 1 ), HID_REPORT_SIZE ( 1 ),
HID_REPORT_COUNT ( 3 ), /* Left, Right and Middle mouse*/
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ),
HID_REPORT_SIZE ( 5 ), // 3 bit padding
HID_REPORT_SIZE ( 3 ),
HID_REPORT_COUNT ( 1 ), HID_REPORT_COUNT ( 1 ),
HID_INPUT ( HID_CONSTANT ), /* 5 bit padding followed 3 bit buttons */ HID_INPUT ( HID_CONSTANT ),
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ),
/* X, Y position */
HID_USAGE ( HID_USAGE_DESKTOP_X ), HID_USAGE ( HID_USAGE_DESKTOP_X ),
HID_USAGE ( HID_USAGE_DESKTOP_Y ), HID_USAGE ( HID_USAGE_DESKTOP_Y ),
HID_LOGICAL_MIN ( 0x81 ), /* -127 */ HID_LOGICAL_MIN ( 0x81 ), /* -127 */
HID_LOGICAL_MAX ( 0x7f ), /* 127 */ HID_LOGICAL_MAX ( 0x7f ), /* 127 */
HID_REPORT_COUNT ( 2 ),
HID_REPORT_SIZE ( 8 ), HID_REPORT_SIZE ( 8 ),
HID_REPORT_COUNT ( 2 ), /* X, Y position */
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */
HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ), /* mouse scroll */ /* mouse scroll */
HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ),
HID_LOGICAL_MIN ( 0x81 ), /* -127 */ HID_LOGICAL_MIN ( 0x81 ), /* -127 */
HID_LOGICAL_MAX ( 0x7f ), /* 127 */ HID_LOGICAL_MAX ( 0x7f ), /* 127 */
HID_REPORT_COUNT( 1 ), HID_REPORT_COUNT( 1 ),