masatomo kojima / microbit_switch_if_joy

Dependencies:   microbit

Committer:
masakjm
Date:
Sat Sep 22 00:31:39 2018 +0000
Revision:
3:b6e9850d3e76
Parent:
2:7e88b89dcca0
Minor fixes and annotations added

Who changed what in which revision?

UserRevisionLine numberNew 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 3:b6e9850d3e76 18 const int KEY_BS = 8; /* Keyboard Backspace */
masakjm 3:b6e9850d3e76 19 const int KEY_TAB = 9; /* Keyboard Tab */
masakjm 3:b6e9850d3e76 20 const int KEY_ENTER = 10; /* Keyboard Return (Enter) */
masakjm 3:b6e9850d3e76 21 //const int KEY_ESC = 27; /* Keyboard Escape */
masakjm 3:b6e9850d3e76 22 const int 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 3:b6e9850d3e76 30 #define MODIFY_CTRL 0x100
masakjm 3:b6e9850d3e76 31 #define MODIFY_SHIFT 0x200
masakjm 3:b6e9850d3e76 32 #define MODIFY_OPTION 0x400 /* option or alt */
masakjm 3:b6e9850d3e76 33 #define MODIFY_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 3:b6e9850d3e76 38 MODIFY_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 3:b6e9850d3e76 44 {MODIFY_OPTION + DOWN_ARROW, MODIFY_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 3:b6e9850d3e76 52 MODIFY_COMMAND + 'r', // 再読み込み
masakjm 3:b6e9850d3e76 53 MODIFY_OPTION + DOWN_ARROW
masakjm 0:28fb3e9ef81a 54 };
masakjm 0:28fb3e9ef81a 55
masakjm 3:b6e9850d3e76 56 //in "BLE_HID\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 3:b6e9850d3e76 95 enum STATE {
masakjm 3:b6e9850d3e76 96 STATE_DESABLE_INPUT, // 入力無効時
masakjm 3:b6e9850d3e76 97 STATE_SETTING, // パラメータ設定時
masakjm 3:b6e9850d3e76 98 STATE_OPERATING, // 操作時
masakjm 3:b6e9850d3e76 99 };
masakjm 0:28fb3e9ef81a 100 //----------------------
masakjm 0:28fb3e9ef81a 101 // Disable debug messages by setting NO_DEBUG
masakjm 0:28fb3e9ef81a 102 //----------------------
masakjm 0:28fb3e9ef81a 103 #ifndef NO_DEBUG
masakjm 0:28fb3e9ef81a 104 #define DEBUG(...) printf(__VA_ARGS__)
masakjm 0:28fb3e9ef81a 105 #else
masakjm 0:28fb3e9ef81a 106 #define DEBUG(...)
masakjm 0:28fb3e9ef81a 107 #endif
masakjm 0:28fb3e9ef81a 108
masakjm 0:28fb3e9ef81a 109 //----------------------
masakjm 0:28fb3e9ef81a 110 // BLE & HID
masakjm 0:28fb3e9ef81a 111 //----------------------
masakjm 0:28fb3e9ef81a 112 /**
masakjm 0:28fb3e9ef81a 113 * IO capabilities of the device. During development, you most likely want "JustWorks", which means
masakjm 0:28fb3e9ef81a 114 * no IO capabilities.
masakjm 0:28fb3e9ef81a 115 * It is also possible to use IO_CAPS_DISPLAY_ONLY to generate and show a pincode on the serial
masakjm 0:28fb3e9ef81a 116 * output.
masakjm 0:28fb3e9ef81a 117 */
masakjm 0:28fb3e9ef81a 118 #ifndef HID_SECURITY_IOCAPS
masakjm 0:28fb3e9ef81a 119 #define HID_SECURITY_IOCAPS (SecurityManager::IO_CAPS_NONE)
masakjm 0:28fb3e9ef81a 120 #endif
masakjm 0:28fb3e9ef81a 121
masakjm 0:28fb3e9ef81a 122 /**
masakjm 0:28fb3e9ef81a 123 * Security level. MITM disabled forces "Just Works". If you require MITM, HID_SECURITY_IOCAPS must
masakjm 0:28fb3e9ef81a 124 * be at least IO_CAPS_DISPLAY_ONLY.
masakjm 0:28fb3e9ef81a 125 */
masakjm 0:28fb3e9ef81a 126 #ifndef HID_SECURITY_REQUIRE_MITM
masakjm 0:28fb3e9ef81a 127 #define HID_SECURITY_REQUIRE_MITM false
masakjm 0:28fb3e9ef81a 128 #endif
masakjm 0:28fb3e9ef81a 129
masakjm 0:28fb3e9ef81a 130 /**
masakjm 0:28fb3e9ef81a 131 * Initialize security manager: set callback functions and required security level
masakjm 0:28fb3e9ef81a 132 */
masakjm 3:b6e9850d3e76 133 void initializeSecurity(BLE &_ble);
masakjm 0:28fb3e9ef81a 134
masakjm 0:28fb3e9ef81a 135 /**
masakjm 0:28fb3e9ef81a 136 * - Initialize auxiliary services required by the HID-over-GATT Profile.
masakjm 0:28fb3e9ef81a 137 * - Initialize common Gap advertisement.
masakjm 0:28fb3e9ef81a 138 *
masakjm 0:28fb3e9ef81a 139 * Demos only have to set a custom device name and appearance, and their HID
masakjm 0:28fb3e9ef81a 140 * service.
masakjm 0:28fb3e9ef81a 141 */
masakjm 3:b6e9850d3e76 142 void initializeHOGP(BLE &_ble);
masakjm 3:b6e9850d3e76 143
masakjm 3:b6e9850d3e76 144 enum BLE_MESSAGE {
masakjm 3:b6e9850d3e76 145 BLE_NO_MESSAGE, // メッセージ無し
masakjm 3:b6e9850d3e76 146 BLE_CONNECTED, // BLE接続完了
masakjm 3:b6e9850d3e76 147 BLE_PAIRING_SUCCESS, // ペアリング成功
masakjm 3:b6e9850d3e76 148 BLE_PAIRING_FAILED, // ペアリング失敗
masakjm 3:b6e9850d3e76 149 };
masakjm 3:b6e9850d3e76 150
masakjm 3:b6e9850d3e76 151 const char bleDispChar[]={0, 'C', 'P', 'F'};
masakjm 0:28fb3e9ef81a 152