Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
microbit_switch_if.h@2:7e88b89dcca0, 2018-09-17 (annotated)
- Committer:
- masakjm
- Date:
- Mon Sep 17 06:57:10 2018 +0000
- Revision:
- 2:7e88b89dcca0
- Parent:
- 1:3b9ae1dbcdcf
- Child:
- 3:b6e9850d3e76
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| masakjm | 0:28fb3e9ef81a | 1 | //================================= |
| masakjm | 0:28fb3e9ef81a | 2 | // microbit_switch_if_3sw |
| masakjm | 0:28fb3e9ef81a | 3 | //================================= |
| masakjm | 0:28fb3e9ef81a | 4 | // BLE switch interface with 3 tact switches for micro:bit |
| masakjm | 0:28fb3e9ef81a | 5 | // The MIT License (MIT) Copyright (c) 2018 Masatomo Kojima |
| masakjm | 0:28fb3e9ef81a | 6 | |
| masakjm | 0:28fb3e9ef81a | 7 | #include "mbed.h" |
| masakjm | 0:28fb3e9ef81a | 8 | #include "MicroBit.h" |
| masakjm | 0:28fb3e9ef81a | 9 | #include "ble/services/BatteryService.h" |
| masakjm | 0:28fb3e9ef81a | 10 | #include "KeyboardService.h" |
| masakjm | 0:28fb3e9ef81a | 11 | #include "Keyboard_types.h" |
| masakjm | 0:28fb3e9ef81a | 12 | #include "HIDServiceBase.h" |
| masakjm | 0:28fb3e9ef81a | 13 | #include "HIDDeviceInformationService.h" |
| masakjm | 0:28fb3e9ef81a | 14 | |
| masakjm | 0:28fb3e9ef81a | 15 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 16 | // Keybord |
| masakjm | 0:28fb3e9ef81a | 17 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 18 | const char KEY_BS = 8; /* Keyboard Backspace */ |
| masakjm | 0:28fb3e9ef81a | 19 | const char KEY_TAB = 9; /* Keyboard Tab */ |
| masakjm | 0:28fb3e9ef81a | 20 | const char KEY_ENTER = 10; /* Keyboard Return (Enter) */ |
| masakjm | 0:28fb3e9ef81a | 21 | //const char KEY_ESC = 27; /* Keyboard Escape */ |
| masakjm | 0:28fb3e9ef81a | 22 | const char KEY_SPACE = 32; /* Keyboard Space */ |
| masakjm | 0:28fb3e9ef81a | 23 | |
| masakjm | 0:28fb3e9ef81a | 24 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 25 | // Setting |
| masakjm | 0:28fb3e9ef81a | 26 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 27 | #define NUM_GROUP1 6 |
| masakjm | 0:28fb3e9ef81a | 28 | #define NUM_GROUP2 5 |
| masakjm | 0:28fb3e9ef81a | 29 | |
| masakjm | 0:28fb3e9ef81a | 30 | #define MODIF_CTRL 0x100 |
| masakjm | 0:28fb3e9ef81a | 31 | #define MODIF_SHIFT 0x200 |
| masakjm | 2:7e88b89dcca0 | 32 | #define MODIF_OPTION 0x400 /* alt or option */ |
| masakjm | 0:28fb3e9ef81a | 33 | #define MODIF_COMMAND 0x800 /* command or Windows */ |
| masakjm | 0:28fb3e9ef81a | 34 | |
| masakjm | 1:3b9ae1dbcdcf | 35 | const int keyCodeGroup0[3] = { // Button A, Button B, Button A&B |
| masakjm | 1:3b9ae1dbcdcf | 36 | 'A', |
| masakjm | 1:3b9ae1dbcdcf | 37 | 'B', |
| masakjm | 1:3b9ae1dbcdcf | 38 | MODIF_COMMAND + 'h' // アプリ終了 |
| masakjm | 0:28fb3e9ef81a | 39 | }; |
| masakjm | 0:28fb3e9ef81a | 40 | const int keyCodeGroup1[NUM_GROUP1][2] = { // Switch 1 2 |
| masakjm | 0:28fb3e9ef81a | 41 | {KEY_SPACE, KEY_ENTER}, |
| masakjm | 0:28fb3e9ef81a | 42 | {RIGHT_ARROW, LEFT_ARROW}, |
| masakjm | 0:28fb3e9ef81a | 43 | {DOWN_ARROW, UP_ARROW}, |
| masakjm | 2:7e88b89dcca0 | 44 | {MODIF_OPTION + DOWN_ARROW, MODIF_OPTION + UP_ARROW}, |
| masakjm | 0:28fb3e9ef81a | 45 | {'1', '3'}, |
| masakjm | 0:28fb3e9ef81a | 46 | {'h', 'j'} |
| masakjm | 0:28fb3e9ef81a | 47 | }; |
| masakjm | 1:3b9ae1dbcdcf | 48 | const int keyCodeGroup2[NUM_GROUP2]= { // Switch 3 |
| masakjm | 0:28fb3e9ef81a | 49 | KEY_TAB, |
| masakjm | 0:28fb3e9ef81a | 50 | RIGHT_ARROW, |
| masakjm | 0:28fb3e9ef81a | 51 | LEFT_ARROW, |
| masakjm | 1:3b9ae1dbcdcf | 52 | MODIF_COMMAND + 'r', // 再読み込み |
| masakjm | 2:7e88b89dcca0 | 53 | MODIF_OPTION + DOWN_ARROW |
| masakjm | 0:28fb3e9ef81a | 54 | }; |
| masakjm | 0:28fb3e9ef81a | 55 | |
| masakjm | 0:28fb3e9ef81a | 56 | //in "BLE_API\Keyboad_types.h" |
| masakjm | 0:28fb3e9ef81a | 57 | //enum FUNCTION_KEY { |
| masakjm | 0:28fb3e9ef81a | 58 | // KEY_F1 = 128, /* F1 key */ |
| masakjm | 0:28fb3e9ef81a | 59 | // KEY_F2, /* F2 key */ |
| masakjm | 0:28fb3e9ef81a | 60 | // KEY_F3, /* F3 key */ |
| masakjm | 0:28fb3e9ef81a | 61 | // KEY_F4, /* F4 key */ |
| masakjm | 0:28fb3e9ef81a | 62 | // KEY_F5, /* F5 key */ |
| masakjm | 0:28fb3e9ef81a | 63 | // KEY_F6, /* F6 key */ |
| masakjm | 0:28fb3e9ef81a | 64 | // KEY_F7, /* F7 key */ |
| masakjm | 0:28fb3e9ef81a | 65 | // KEY_F8, /* F8 key */ |
| masakjm | 0:28fb3e9ef81a | 66 | // KEY_F9, /* F9 key */ |
| masakjm | 0:28fb3e9ef81a | 67 | // KEY_F10, /* F10 key */ |
| masakjm | 0:28fb3e9ef81a | 68 | // KEY_F11, /* F11 key */ |
| masakjm | 0:28fb3e9ef81a | 69 | // KEY_F12, /* F12 key */ |
| masakjm | 0:28fb3e9ef81a | 70 | // |
| masakjm | 0:28fb3e9ef81a | 71 | // KEY_PRINT_SCREEN, /* Print Screen key */ |
| masakjm | 0:28fb3e9ef81a | 72 | // KEY_SCROLL_LOCK, /* Scroll lock */ |
| masakjm | 0:28fb3e9ef81a | 73 | // KEY_CAPS_LOCK, /* caps lock */ |
| masakjm | 0:28fb3e9ef81a | 74 | // KEY_NUM_LOCK, /* num lock */ |
| masakjm | 0:28fb3e9ef81a | 75 | // KEY_INSERT, /* Insert key */ |
| masakjm | 0:28fb3e9ef81a | 76 | // KEY_HOME, /* Home key */ |
| masakjm | 0:28fb3e9ef81a | 77 | // KEY_PAGE_UP, /* Page Up key */ |
| masakjm | 0:28fb3e9ef81a | 78 | // KEY_PAGE_DOWN, /* Page Down key */ |
| masakjm | 0:28fb3e9ef81a | 79 | // |
| masakjm | 0:28fb3e9ef81a | 80 | // RIGHT_ARROW, /* Right arrow */ |
| masakjm | 0:28fb3e9ef81a | 81 | // LEFT_ARROW, /* Left arrow */ |
| masakjm | 0:28fb3e9ef81a | 82 | // DOWN_ARROW, /* Down arrow */ |
| masakjm | 0:28fb3e9ef81a | 83 | // UP_ARROW, /* Up arrow */ |
| masakjm | 0:28fb3e9ef81a | 84 | //}; |
| masakjm | 0:28fb3e9ef81a | 85 | |
| masakjm | 0:28fb3e9ef81a | 86 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 87 | // Display |
| masakjm | 0:28fb3e9ef81a | 88 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 89 | #define TIME_TURN_OFF 7.0 // 非表示モードに入るまでの時間 (s) |
| masakjm | 0:28fb3e9ef81a | 90 | #define SETTING_DISPLAY_WAIT 1.0 // 設定モード表示時間 (s) |
| masakjm | 0:28fb3e9ef81a | 91 | |
| masakjm | 0:28fb3e9ef81a | 92 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 93 | // State |
| masakjm | 0:28fb3e9ef81a | 94 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 95 | #define STATE_NORMAL 0 // 通常起動時 |
| masakjm | 0:28fb3e9ef81a | 96 | #define STATE_SETTING 1 // パラメータ設定時 |
| masakjm | 0:28fb3e9ef81a | 97 | #define STATE_OPERATING 2 // 操作時 |
| masakjm | 0:28fb3e9ef81a | 98 | |
| masakjm | 0:28fb3e9ef81a | 99 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 100 | // Disable debug messages by setting NO_DEBUG |
| masakjm | 0:28fb3e9ef81a | 101 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 102 | #ifndef NO_DEBUG |
| masakjm | 0:28fb3e9ef81a | 103 | #define DEBUG(...) printf(__VA_ARGS__) |
| masakjm | 0:28fb3e9ef81a | 104 | #else |
| masakjm | 0:28fb3e9ef81a | 105 | #define DEBUG(...) |
| masakjm | 0:28fb3e9ef81a | 106 | #endif |
| masakjm | 0:28fb3e9ef81a | 107 | |
| masakjm | 0:28fb3e9ef81a | 108 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 109 | // BLE & HID |
| masakjm | 0:28fb3e9ef81a | 110 | //---------------------- |
| masakjm | 0:28fb3e9ef81a | 111 | /** |
| masakjm | 0:28fb3e9ef81a | 112 | * IO capabilities of the device. During development, you most likely want "JustWorks", which means |
| masakjm | 0:28fb3e9ef81a | 113 | * no IO capabilities. |
| masakjm | 0:28fb3e9ef81a | 114 | * It is also possible to use IO_CAPS_DISPLAY_ONLY to generate and show a pincode on the serial |
| masakjm | 0:28fb3e9ef81a | 115 | * output. |
| masakjm | 0:28fb3e9ef81a | 116 | */ |
| masakjm | 0:28fb3e9ef81a | 117 | #ifndef HID_SECURITY_IOCAPS |
| masakjm | 0:28fb3e9ef81a | 118 | #define HID_SECURITY_IOCAPS (SecurityManager::IO_CAPS_NONE) |
| masakjm | 0:28fb3e9ef81a | 119 | #endif |
| masakjm | 0:28fb3e9ef81a | 120 | |
| masakjm | 0:28fb3e9ef81a | 121 | /** |
| masakjm | 0:28fb3e9ef81a | 122 | * Security level. MITM disabled forces "Just Works". If you require MITM, HID_SECURITY_IOCAPS must |
| masakjm | 0:28fb3e9ef81a | 123 | * be at least IO_CAPS_DISPLAY_ONLY. |
| masakjm | 0:28fb3e9ef81a | 124 | */ |
| masakjm | 0:28fb3e9ef81a | 125 | #ifndef HID_SECURITY_REQUIRE_MITM |
| masakjm | 0:28fb3e9ef81a | 126 | #define HID_SECURITY_REQUIRE_MITM false |
| masakjm | 0:28fb3e9ef81a | 127 | #endif |
| masakjm | 0:28fb3e9ef81a | 128 | |
| masakjm | 0:28fb3e9ef81a | 129 | /** |
| masakjm | 0:28fb3e9ef81a | 130 | * Initialize security manager: set callback functions and required security level |
| masakjm | 0:28fb3e9ef81a | 131 | */ |
| masakjm | 0:28fb3e9ef81a | 132 | void initializeSecurity(BLE &ble); |
| masakjm | 0:28fb3e9ef81a | 133 | |
| masakjm | 0:28fb3e9ef81a | 134 | /** |
| masakjm | 0:28fb3e9ef81a | 135 | * - Initialize auxiliary services required by the HID-over-GATT Profile. |
| masakjm | 0:28fb3e9ef81a | 136 | * - Initialize common Gap advertisement. |
| masakjm | 0:28fb3e9ef81a | 137 | * |
| masakjm | 0:28fb3e9ef81a | 138 | * Demos only have to set a custom device name and appearance, and their HID |
| masakjm | 0:28fb3e9ef81a | 139 | * service. |
| masakjm | 0:28fb3e9ef81a | 140 | */ |
| masakjm | 0:28fb3e9ef81a | 141 | void initializeHOGP(BLE &ble); |
| masakjm | 0:28fb3e9ef81a | 142 |