キーボードの長押しに対応。
Fork of USBDevice by
Diff: USBHID/USBKeyboard.cpp
- Revision:
- 72:8c3160323201
- Parent:
- 1:80ab0d068708
- Child:
- 73:803bc631881e
--- a/USBHID/USBKeyboard.cpp Fri Mar 01 13:10:29 2013 +0000 +++ b/USBHID/USBKeyboard.cpp Sat Aug 18 06:37:49 2018 +0000 @@ -23,14 +23,14 @@ #define REPORT_ID_KEYBOARD 1 #define REPORT_ID_VOLUME 3 - +/// キーマップ構造体 /// typedef struct { unsigned char usage; unsigned char modifier; } KEYMAP; #ifdef US_KEYBOARD -/* US keyboard (as HID standard) */ +/* US キーボード (as HID 標準) */ #define KEYMAP_SIZE (152) const KEYMAP keymap[KEYMAP_SIZE] = { {0, 0}, /* NUL */ @@ -191,7 +191,7 @@ }; #else -/* UK keyboard */ +/* UK キーボード */ #define KEYMAP_SIZE (152) const KEYMAP keymap[KEYMAP_SIZE] = { {0, 0}, /* NUL */ @@ -352,24 +352,27 @@ }; #endif +/// +/// reportDesc +/// uint8_t * USBKeyboard::reportDesc() { static uint8_t reportDescriptor[] = { - USAGE_PAGE(1), 0x01, // Generic Desktop - USAGE(1), 0x06, // Keyboard - COLLECTION(1), 0x01, // Application + USAGE_PAGE(1), 0x01, // 標準デスクトップ + USAGE(1), 0x06, // キーボード + COLLECTION(1), 0x01, // アプリケーション REPORT_ID(1), REPORT_ID_KEYBOARD, - USAGE_PAGE(1), 0x07, // Key Codes + USAGE_PAGE(1), 0x07, // キーコード USAGE_MINIMUM(1), 0xE0, USAGE_MAXIMUM(1), 0xE7, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0x01, REPORT_SIZE(1), 0x01, REPORT_COUNT(1), 0x08, - INPUT(1), 0x02, // Data, Variable, Absolute + INPUT(1), 0x02, // データ, 変数, 絶対値 REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x08, - INPUT(1), 0x01, // Constant + INPUT(1), 0x01, // 定数 REPORT_COUNT(1), 0x05, @@ -377,20 +380,20 @@ USAGE_PAGE(1), 0x08, // LEDs USAGE_MINIMUM(1), 0x01, USAGE_MAXIMUM(1), 0x05, - OUTPUT(1), 0x02, // Data, Variable, Absolute + OUTPUT(1), 0x02, // データ, 変数, 絶対値 REPORT_COUNT(1), 0x01, REPORT_SIZE(1), 0x03, - OUTPUT(1), 0x01, // Constant + OUTPUT(1), 0x01, // 定数 REPORT_COUNT(1), 0x06, REPORT_SIZE(1), 0x08, LOGICAL_MINIMUM(1), 0x00, LOGICAL_MAXIMUM(1), 0x65, - USAGE_PAGE(1), 0x07, // Key Codes + USAGE_PAGE(1), 0x07, // キーコード USAGE_MINIMUM(1), 0x00, USAGE_MAXIMUM(1), 0x65, - INPUT(1), 0x00, // Data, Array + INPUT(1), 0x00, // データ, 配列 END_COLLECTION(0), // Media Control @@ -403,14 +406,14 @@ LOGICAL_MAXIMUM(1), 0x01, REPORT_SIZE(1), 0x01, REPORT_COUNT(1), 0x07, - USAGE(1), 0xB5, // Next Track - USAGE(1), 0xB6, // Previous Track - USAGE(1), 0xB7, // Stop - USAGE(1), 0xCD, // Play / Pause - USAGE(1), 0xE2, // Mute - USAGE(1), 0xE9, // Volume Up - USAGE(1), 0xEA, // Volume Down - INPUT(1), 0x02, // Input (Data, Variable, Absolute) + USAGE(1), 0xB5, // 次のトラック + USAGE(1), 0xB6, // 前のトラック + USAGE(1), 0xB7, // ストップ + USAGE(1), 0xCD, // プレイ / ポーズ + USAGE(1), 0xE2, // ミュート + USAGE(1), 0xE9, // ボリュームアップ + USAGE(1), 0xEA, // ボリュームダウン + INPUT(1), 0x02, // 入力 (データ, 変数, 絶対値) REPORT_COUNT(1), 0x01, INPUT(1), 0x01, END_COLLECTION(0), @@ -419,31 +422,42 @@ return reportDescriptor; } - +/// +/// EP1_OUT_callback +/// bool USBKeyboard::EP1_OUT_callback() { uint32_t bytesRead = 0; uint8_t led[65]; USBDevice::readEP(EPINT_OUT, led, &bytesRead, MAX_HID_REPORT_SIZE); - // we take led[1] because led[0] is the report ID + // led[0]はレポートIDなので、我々はled[1]を取ります。 lock_status = led[1] & 0x07; - // We activate the endpoint to be able to recceive data + // データを受信できるようにエンドポイントをアクティブ化します。 if (!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE)) return false; return true; } +/// +/// ロックステータスを返す +/// uint8_t USBKeyboard::lockStatus() { return lock_status; } +/// +/// 文字を送信する +/// int USBKeyboard::_putc(int c) { return keyCode(c, keymap[c].modifier); } +/// +/// キーコード +/// bool USBKeyboard::keyCode(uint8_t key, uint8_t modifier) { - // Send a simulated keyboard keypress. Returns true if successful. + // シミューレートされたキーボードキーを送信します。成功した場合はtrueを返します。 HID_REPORT report; report.data[0] = REPORT_ID_KEYBOARD; @@ -473,7 +487,9 @@ } - +/// +/// メディアコントロール +/// bool USBKeyboard::mediaControl(MEDIA_KEY key) { HID_REPORT report; @@ -501,6 +517,9 @@ + (1 * HID_DESCRIPTOR_LENGTH) \ + (2 * ENDPOINT_DESCRIPTOR_LENGTH)) +/// +/// Descの設定 +/// uint8_t * USBKeyboard::configurationDesc() { static uint8_t configurationDescriptor[] = { CONFIGURATION_DESCRIPTOR_LENGTH,// bLength