BLE switch interface using micro:bit with 3 tact switches or 3 Makey Makey sensors
microbit_switch_if_3sw.h@1:9d0e2e5b5d25, 2019-06-06 (annotated)
- Committer:
- masakjm
- Date:
- Thu Jun 06 19:06:06 2019 +0000
- Revision:
- 1:9d0e2e5b5d25
- Child:
- 2:8e2e6c6658be
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
masakjm | 1:9d0e2e5b5d25 | 1 | //================================= |
masakjm | 1:9d0e2e5b5d25 | 2 | // microbit_switch_if_3sw |
masakjm | 1:9d0e2e5b5d25 | 3 | //================================= |
masakjm | 1:9d0e2e5b5d25 | 4 | // BLE switch interface with 3 tact switches for micro:bit |
masakjm | 1:9d0e2e5b5d25 | 5 | // The MIT License (MIT) Copyright (c) 2019 Masatomo Kojima |
masakjm | 1:9d0e2e5b5d25 | 6 | |
masakjm | 1:9d0e2e5b5d25 | 7 | #include "mbed.h" |
masakjm | 1:9d0e2e5b5d25 | 8 | #include "MicroBit.h" |
masakjm | 1:9d0e2e5b5d25 | 9 | #include "ble/services/BatteryService.h" |
masakjm | 1:9d0e2e5b5d25 | 10 | #include "KeyboardService.h" |
masakjm | 1:9d0e2e5b5d25 | 11 | #include "Keyboard_types.h" |
masakjm | 1:9d0e2e5b5d25 | 12 | #include "HIDServiceBase.h" |
masakjm | 1:9d0e2e5b5d25 | 13 | #include "HIDDeviceInformationService.h" |
masakjm | 1:9d0e2e5b5d25 | 14 | |
masakjm | 1:9d0e2e5b5d25 | 15 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 16 | // Keybord |
masakjm | 1:9d0e2e5b5d25 | 17 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 18 | #define MODIFY_CTRL 0x100 |
masakjm | 1:9d0e2e5b5d25 | 19 | #define MODIFY_SHIFT 0x200 |
masakjm | 1:9d0e2e5b5d25 | 20 | #define MODIFY_OPTION 0x400 /* option or alt */ |
masakjm | 1:9d0e2e5b5d25 | 21 | #define MODIFY_COMMAND 0x800 /* command or Windows */ |
masakjm | 1:9d0e2e5b5d25 | 22 | |
masakjm | 1:9d0e2e5b5d25 | 23 | const int KEY_BS = 8; /* Keyboard Backspace */ |
masakjm | 1:9d0e2e5b5d25 | 24 | const int KEY_TAB = 9; /* Keyboard Tab */ |
masakjm | 1:9d0e2e5b5d25 | 25 | const int KEY_ENTER = 10; /* Keyboard Return (Enter) */ |
masakjm | 1:9d0e2e5b5d25 | 26 | //const int KEY_ESC = 27; /* Keyboard Escape */ |
masakjm | 1:9d0e2e5b5d25 | 27 | const int KEY_SPACE = 32; /* Keyboard Space */ |
masakjm | 1:9d0e2e5b5d25 | 28 | |
masakjm | 1:9d0e2e5b5d25 | 29 | const int KEY_EQUAL = 0x2b; /* = */ |
masakjm | 1:9d0e2e5b5d25 | 30 | const int KEY_COMMA = 0x2c; /* , */ |
masakjm | 1:9d0e2e5b5d25 | 31 | const int KEY_MINUS = 0x2d; /* - */ |
masakjm | 1:9d0e2e5b5d25 | 32 | const int KEY_PIRIOD = 0x2e; /* . */ |
masakjm | 1:9d0e2e5b5d25 | 33 | const int KEY_SLASH = 0x2f; /* / */ |
masakjm | 1:9d0e2e5b5d25 | 34 | const int KEY_QUOT = 0x40; /* ' */ |
masakjm | 1:9d0e2e5b5d25 | 35 | |
masakjm | 1:9d0e2e5b5d25 | 36 | const int KEY_PLUS = MODIFY_SHIFT +0x2b; /* + */ |
masakjm | 1:9d0e2e5b5d25 | 37 | const int KEY_LT = MODIFY_SHIFT +0x2c; /* < */ |
masakjm | 1:9d0e2e5b5d25 | 38 | const int KEY_UNDER = MODIFY_SHIFT +0x2d; /* _ */ |
masakjm | 1:9d0e2e5b5d25 | 39 | const int KEY_GT = MODIFY_SHIFT +0x2e; /* > */ |
masakjm | 1:9d0e2e5b5d25 | 40 | const int KEY_QUESTION = MODIFY_SHIFT +0x2f; /* ? */ |
masakjm | 1:9d0e2e5b5d25 | 41 | const int KEY_RBRACKET = MODIFY_SHIFT +0x30; /* ) shif+0 */ |
masakjm | 1:9d0e2e5b5d25 | 42 | const int KEY_EXCLA = MODIFY_SHIFT +0x31; /* ! shif+1 */ |
masakjm | 1:9d0e2e5b5d25 | 43 | const int KEY_AT = MODIFY_SHIFT +0x32; /* @ shif+2 */ |
masakjm | 1:9d0e2e5b5d25 | 44 | const int KEY_NUMBER = MODIFY_SHIFT +0x33; /* # shif+3 */ |
masakjm | 1:9d0e2e5b5d25 | 45 | const int KEY_DOLL = MODIFY_SHIFT +0x34; /* $ shif+4 */ |
masakjm | 1:9d0e2e5b5d25 | 46 | const int KEY_PERCENT = MODIFY_SHIFT +0x35; /* % shif+5 */ |
masakjm | 1:9d0e2e5b5d25 | 47 | const int KEY_CARET = MODIFY_SHIFT +0x36; /* ^ shif+6 */ |
masakjm | 1:9d0e2e5b5d25 | 48 | const int KEY_AMP = MODIFY_SHIFT +0x37; /* & shif+7 */ |
masakjm | 1:9d0e2e5b5d25 | 49 | const int KEY_ASTERISK = MODIFY_SHIFT +0x38; /* * shif+8 */ |
masakjm | 1:9d0e2e5b5d25 | 50 | const int KEY_LBRACKET = MODIFY_SHIFT +0x39; /* ( shif+9 */ |
masakjm | 1:9d0e2e5b5d25 | 51 | const int KEY_DBLQUOT = MODIFY_SHIFT +0x40; /* " */ |
masakjm | 1:9d0e2e5b5d25 | 52 | |
masakjm | 1:9d0e2e5b5d25 | 53 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 54 | // Setting |
masakjm | 1:9d0e2e5b5d25 | 55 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 56 | #define NUM_GROUP1 7 |
masakjm | 1:9d0e2e5b5d25 | 57 | #define NUM_G1MEMBER 3 |
masakjm | 1:9d0e2e5b5d25 | 58 | |
masakjm | 1:9d0e2e5b5d25 | 59 | #define NUM_GROUP_3SW 7 |
masakjm | 1:9d0e2e5b5d25 | 60 | #define NUM_3SW_MEMBER 3 |
masakjm | 1:9d0e2e5b5d25 | 61 | #define NUM_GROUP_JOY 5 |
masakjm | 1:9d0e2e5b5d25 | 62 | #define NUM_JOY_MEMBER 5 |
masakjm | 1:9d0e2e5b5d25 | 63 | #define NUM_DEVICE 3 |
masakjm | 1:9d0e2e5b5d25 | 64 | |
masakjm | 1:9d0e2e5b5d25 | 65 | const int keyCodeGroup_AB[3] = { // Button A, Button B, Button A&B |
masakjm | 1:9d0e2e5b5d25 | 66 | 'a', |
masakjm | 1:9d0e2e5b5d25 | 67 | 'b', |
masakjm | 1:9d0e2e5b5d25 | 68 | MODIFY_COMMAND + 'h' // アプリ終了 |
masakjm | 1:9d0e2e5b5d25 | 69 | }; |
masakjm | 1:9d0e2e5b5d25 | 70 | const int keyCodeGroup_3SW[NUM_GROUP_3SW][NUM_3SW_MEMBER] = { // P0 P1 P2 |
masakjm | 1:9d0e2e5b5d25 | 71 | {KEY_TAB, KEY_SPACE, KEY_ENTER}, |
masakjm | 1:9d0e2e5b5d25 | 72 | {KEY_F6, RIGHT_ARROW, LEFT_ARROW}, |
masakjm | 1:9d0e2e5b5d25 | 73 | {KEY_F1, KEY_F2, KEY_F3}, |
masakjm | 1:9d0e2e5b5d25 | 74 | {MODIFY_COMMAND + 'r', MODIFY_OPTION + DOWN_ARROW, MODIFY_OPTION + UP_ARROW}, |
masakjm | 1:9d0e2e5b5d25 | 75 | {KEY_F7, '1', '3'}, |
masakjm | 1:9d0e2e5b5d25 | 76 | {KEY_F8, 'h', 'j'}, |
masakjm | 1:9d0e2e5b5d25 | 77 | {'0', DOWN_ARROW, UP_ARROW} |
masakjm | 1:9d0e2e5b5d25 | 78 | }; |
masakjm | 1:9d0e2e5b5d25 | 79 | |
masakjm | 1:9d0e2e5b5d25 | 80 | const int keyCodeGroup_JOY[NUM_GROUP_JOY][NUM_JOY_MEMBER] = { // 中央 左 右 上 下 |
masakjm | 1:9d0e2e5b5d25 | 81 | {0, KEY_TAB, KEY_SPACE, 0, KEY_ENTER }, |
masakjm | 1:9d0e2e5b5d25 | 82 | {KEY_HOME, RIGHT_ARROW, LEFT_ARROW, DOWN_ARROW, UP_ARROW }, |
masakjm | 1:9d0e2e5b5d25 | 83 | {KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5}, |
masakjm | 1:9d0e2e5b5d25 | 84 | {MODIFY_COMMAND+'r', 0, 0, MODIFY_OPTION+DOWN_ARROW, MODIFY_OPTION+UP_ARROW}, |
masakjm | 1:9d0e2e5b5d25 | 85 | {KEY_ENTER, KEY_TAB, KEY_SPACE, 0, 0 }, |
masakjm | 1:9d0e2e5b5d25 | 86 | }; |
masakjm | 1:9d0e2e5b5d25 | 87 | |
masakjm | 1:9d0e2e5b5d25 | 88 | //in "BLE_HID\Keyboad_types.h" |
masakjm | 1:9d0e2e5b5d25 | 89 | //enum FUNCTION_KEY { |
masakjm | 1:9d0e2e5b5d25 | 90 | // KEY_F1 = 128, /* F1 key */ |
masakjm | 1:9d0e2e5b5d25 | 91 | // KEY_F2, /* F2 key */ |
masakjm | 1:9d0e2e5b5d25 | 92 | // KEY_F3, /* F3 key */ |
masakjm | 1:9d0e2e5b5d25 | 93 | // KEY_F4, /* F4 key */ |
masakjm | 1:9d0e2e5b5d25 | 94 | // KEY_F5, /* F5 key */ |
masakjm | 1:9d0e2e5b5d25 | 95 | // KEY_F6, /* F6 key */ |
masakjm | 1:9d0e2e5b5d25 | 96 | // KEY_F7, /* F7 key */ |
masakjm | 1:9d0e2e5b5d25 | 97 | // KEY_F8, /* F8 key */ |
masakjm | 1:9d0e2e5b5d25 | 98 | // KEY_F9, /* F9 key */ |
masakjm | 1:9d0e2e5b5d25 | 99 | // KEY_F10, /* F10 key */ |
masakjm | 1:9d0e2e5b5d25 | 100 | // KEY_F11, /* F11 key */ |
masakjm | 1:9d0e2e5b5d25 | 101 | // KEY_F12, /* F12 key */ |
masakjm | 1:9d0e2e5b5d25 | 102 | // |
masakjm | 1:9d0e2e5b5d25 | 103 | // KEY_PRINT_SCREEN, /* Print Screen key */ |
masakjm | 1:9d0e2e5b5d25 | 104 | // KEY_SCROLL_LOCK, /* Scroll lock */ |
masakjm | 1:9d0e2e5b5d25 | 105 | // KEY_CAPS_LOCK, /* caps lock */ |
masakjm | 1:9d0e2e5b5d25 | 106 | // KEY_NUM_LOCK, /* num lock */ |
masakjm | 1:9d0e2e5b5d25 | 107 | // KEY_INSERT, /* Insert key */ |
masakjm | 1:9d0e2e5b5d25 | 108 | // KEY_HOME, /* Home key */ |
masakjm | 1:9d0e2e5b5d25 | 109 | // KEY_PAGE_UP, /* Page Up key */ |
masakjm | 1:9d0e2e5b5d25 | 110 | // KEY_PAGE_DOWN, /* Page Down key */ |
masakjm | 1:9d0e2e5b5d25 | 111 | // |
masakjm | 1:9d0e2e5b5d25 | 112 | // RIGHT_ARROW, /* Right arrow */ |
masakjm | 1:9d0e2e5b5d25 | 113 | // LEFT_ARROW, /* Left arrow */ |
masakjm | 1:9d0e2e5b5d25 | 114 | // DOWN_ARROW, /* Down arrow */ |
masakjm | 1:9d0e2e5b5d25 | 115 | // UP_ARROW, /* Up arrow */ |
masakjm | 1:9d0e2e5b5d25 | 116 | //}; |
masakjm | 1:9d0e2e5b5d25 | 117 | |
masakjm | 1:9d0e2e5b5d25 | 118 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 119 | // Display |
masakjm | 1:9d0e2e5b5d25 | 120 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 121 | #define TIME_TURN_OFF 7.0 // 非表示モードに入るまでの時間 (s) |
masakjm | 1:9d0e2e5b5d25 | 122 | #define SETTING_DISPLAY_WAIT 1.0 // 設定モード表示時間 (s) |
masakjm | 1:9d0e2e5b5d25 | 123 | |
masakjm | 1:9d0e2e5b5d25 | 124 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 125 | // State |
masakjm | 1:9d0e2e5b5d25 | 126 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 127 | enum STATE { |
masakjm | 1:9d0e2e5b5d25 | 128 | STATE_DESABLE_INPUT, // 入力無効時 |
masakjm | 1:9d0e2e5b5d25 | 129 | STATE_SETTING_FREQ, // よく変更する設定 |
masakjm | 1:9d0e2e5b5d25 | 130 | STATE_SETTING_DEVICE, // デバイス設定時 |
masakjm | 1:9d0e2e5b5d25 | 131 | STATE_OPERATING, // 操作時 |
masakjm | 1:9d0e2e5b5d25 | 132 | }; |
masakjm | 1:9d0e2e5b5d25 | 133 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 134 | // Disable debug messages by setting NO_DEBUG |
masakjm | 1:9d0e2e5b5d25 | 135 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 136 | #ifndef NO_DEBUG |
masakjm | 1:9d0e2e5b5d25 | 137 | #define DEBUG(...) printf(__VA_ARGS__) |
masakjm | 1:9d0e2e5b5d25 | 138 | #else |
masakjm | 1:9d0e2e5b5d25 | 139 | #define DEBUG(...) |
masakjm | 1:9d0e2e5b5d25 | 140 | #endif |
masakjm | 1:9d0e2e5b5d25 | 141 | |
masakjm | 1:9d0e2e5b5d25 | 142 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 143 | // BLE & HID |
masakjm | 1:9d0e2e5b5d25 | 144 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 145 | /** |
masakjm | 1:9d0e2e5b5d25 | 146 | * IO capabilities of the device. During development, you most likely want "JustWorks", which means |
masakjm | 1:9d0e2e5b5d25 | 147 | * no IO capabilities. |
masakjm | 1:9d0e2e5b5d25 | 148 | * It is also possible to use IO_CAPS_DISPLAY_ONLY to generate and show a pincode on the serial |
masakjm | 1:9d0e2e5b5d25 | 149 | * output. |
masakjm | 1:9d0e2e5b5d25 | 150 | */ |
masakjm | 1:9d0e2e5b5d25 | 151 | #ifndef HID_SECURITY_IOCAPS |
masakjm | 1:9d0e2e5b5d25 | 152 | #define HID_SECURITY_IOCAPS (SecurityManager::IO_CAPS_NONE) |
masakjm | 1:9d0e2e5b5d25 | 153 | #endif |
masakjm | 1:9d0e2e5b5d25 | 154 | |
masakjm | 1:9d0e2e5b5d25 | 155 | /** |
masakjm | 1:9d0e2e5b5d25 | 156 | * Security level. MITM disabled forces "Just Works". If you require MITM, HID_SECURITY_IOCAPS must |
masakjm | 1:9d0e2e5b5d25 | 157 | * be at least IO_CAPS_DISPLAY_ONLY. |
masakjm | 1:9d0e2e5b5d25 | 158 | */ |
masakjm | 1:9d0e2e5b5d25 | 159 | #ifndef HID_SECURITY_REQUIRE_MITM |
masakjm | 1:9d0e2e5b5d25 | 160 | #define HID_SECURITY_REQUIRE_MITM false |
masakjm | 1:9d0e2e5b5d25 | 161 | #endif |
masakjm | 1:9d0e2e5b5d25 | 162 | |
masakjm | 1:9d0e2e5b5d25 | 163 | /** |
masakjm | 1:9d0e2e5b5d25 | 164 | * Initialize security manager: set callback functions and required security level |
masakjm | 1:9d0e2e5b5d25 | 165 | */ |
masakjm | 1:9d0e2e5b5d25 | 166 | void initializeSecurity(BLE &_ble); |
masakjm | 1:9d0e2e5b5d25 | 167 | |
masakjm | 1:9d0e2e5b5d25 | 168 | /** |
masakjm | 1:9d0e2e5b5d25 | 169 | * - Initialize auxiliary services required by the HID-over-GATT Profile. |
masakjm | 1:9d0e2e5b5d25 | 170 | * - Initialize common Gap advertisement. |
masakjm | 1:9d0e2e5b5d25 | 171 | * |
masakjm | 1:9d0e2e5b5d25 | 172 | * Demos only have to set a custom device name and appearance, and their HID |
masakjm | 1:9d0e2e5b5d25 | 173 | * service. |
masakjm | 1:9d0e2e5b5d25 | 174 | */ |
masakjm | 1:9d0e2e5b5d25 | 175 | void initializeHOGP(BLE &_ble); |
masakjm | 1:9d0e2e5b5d25 | 176 | |
masakjm | 1:9d0e2e5b5d25 | 177 | enum BLE_MESSAGE { |
masakjm | 1:9d0e2e5b5d25 | 178 | BLE_NO_MESSAGE, // メッセージ無し |
masakjm | 1:9d0e2e5b5d25 | 179 | BLE_CONNECTED, // BLE接続完了 |
masakjm | 1:9d0e2e5b5d25 | 180 | BLE_PAIRING_SUCCESS, // ペアリング成功 |
masakjm | 1:9d0e2e5b5d25 | 181 | BLE_PAIRING_FAILED, // ペアリング失敗 |
masakjm | 1:9d0e2e5b5d25 | 182 | }; |
masakjm | 1:9d0e2e5b5d25 | 183 | |
masakjm | 1:9d0e2e5b5d25 | 184 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 185 | // Display Message |
masakjm | 1:9d0e2e5b5d25 | 186 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 187 | #define DISP_NO_MESSAGE 0 // メッセージ無し |
masakjm | 1:9d0e2e5b5d25 | 188 | #define DISP_PRESS_BUTTON_A 'A' // ボタンA |
masakjm | 1:9d0e2e5b5d25 | 189 | #define DISP_PRESS_BUTTON_B 'B' // ボタンB |
masakjm | 1:9d0e2e5b5d25 | 190 | #define DISP_HOLD_BUTTON_AB 'H' // ボタンABの長押し |
masakjm | 1:9d0e2e5b5d25 | 191 | #define DISP_ACTIVE_IO_P0 '0' // 端子P0 |
masakjm | 1:9d0e2e5b5d25 | 192 | #define DISP_ACTIVE_IO_P1 '1' // 端子P1 |
masakjm | 1:9d0e2e5b5d25 | 193 | #define DISP_ACTIVE_IO_P2 '2' // 端子P2 |
masakjm | 1:9d0e2e5b5d25 | 194 | #define DISP_BLE_WAIT 'W' // BLE接続待ち |
masakjm | 1:9d0e2e5b5d25 | 195 | #define DISP_BLE_CONNECTED 'C' // BLE接続完了 |
masakjm | 1:9d0e2e5b5d25 | 196 | #define DISP_BLE_PAIRING_SUCCESS 'P' // ペアリング成功 |
masakjm | 1:9d0e2e5b5d25 | 197 | #define DISP_BLE_PAIRING_FAILED 'F' // ペアリング失敗 |
masakjm | 1:9d0e2e5b5d25 | 198 | #define DISP_BLE_ERROR_SENDDATA 'E' // データ送出時エラー |
masakjm | 1:9d0e2e5b5d25 | 199 | #define DISP_BLE_ERROR_WRITEDDATA 'e' // データ書込時エラー |
masakjm | 1:9d0e2e5b5d25 | 200 | #define DISP_ERROR_INCORRECT_CODE 'I' // コーディングエラー |
masakjm | 1:9d0e2e5b5d25 | 201 | #define DISP_ERROR_DEVICE_CONNECT 'V' // デバイス接続エラー |
masakjm | 1:9d0e2e5b5d25 | 202 | |
masakjm | 1:9d0e2e5b5d25 | 203 | #define DISP_SETTING_FREQ 'S' // よく変更する設定 |
masakjm | 1:9d0e2e5b5d25 | 204 | #define DISP_SETTING_DEVICE 'D' // デバイス設定 |
masakjm | 1:9d0e2e5b5d25 | 205 | #define DISP_SETTING_SPEC_1 'X' // 個別設定1 |
masakjm | 1:9d0e2e5b5d25 | 206 | #define DISP_SETTING_SPEC_2 'Y' // 個別設定2 |
masakjm | 1:9d0e2e5b5d25 | 207 | #define DISP_SETTING_SPEC_3 'Z' // 個別設定3 |
masakjm | 1:9d0e2e5b5d25 | 208 | |
masakjm | 1:9d0e2e5b5d25 | 209 | const char bleDispChar[]={ |
masakjm | 1:9d0e2e5b5d25 | 210 | DISP_NO_MESSAGE, |
masakjm | 1:9d0e2e5b5d25 | 211 | DISP_BLE_CONNECTED, |
masakjm | 1:9d0e2e5b5d25 | 212 | DISP_BLE_PAIRING_SUCCESS, |
masakjm | 1:9d0e2e5b5d25 | 213 | DISP_BLE_PAIRING_FAILED}; |
masakjm | 1:9d0e2e5b5d25 | 214 | |
masakjm | 1:9d0e2e5b5d25 | 215 | |
masakjm | 1:9d0e2e5b5d25 | 216 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 217 | // Input Buffer |
masakjm | 1:9d0e2e5b5d25 | 218 | //---------------------- |
masakjm | 1:9d0e2e5b5d25 | 219 | #define BUTTON_STATUS_DOWN 0x100 // 押された |
masakjm | 1:9d0e2e5b5d25 | 220 | #define BUTTON_STATUS_UP 0x200 // 離された |
masakjm | 1:9d0e2e5b5d25 | 221 | #define BUTTON_STATUS_HOLD 0x300 // 保持された |
masakjm | 1:9d0e2e5b5d25 | 222 | |
masakjm | 1:9d0e2e5b5d25 | 223 | #define BUTTON_NAME_A 1 // A |
masakjm | 1:9d0e2e5b5d25 | 224 | #define BUTTON_NAME_B 2 // B |
masakjm | 1:9d0e2e5b5d25 | 225 | #define BUTTON_NAME_P0 3 // P0 |
masakjm | 1:9d0e2e5b5d25 | 226 | #define BUTTON_NAME_P1 4 // P1 |
masakjm | 1:9d0e2e5b5d25 | 227 | #define BUTTON_NAME_P2 5 // P2 |
masakjm | 1:9d0e2e5b5d25 | 228 | |
masakjm | 1:9d0e2e5b5d25 | 229 | |
masakjm | 1:9d0e2e5b5d25 | 230 | |
masakjm | 1:9d0e2e5b5d25 | 231 | |
masakjm | 1:9d0e2e5b5d25 | 232 | |
masakjm | 1:9d0e2e5b5d25 | 233 |