masatomo kojima / microbit_switch_if_joy

Dependencies:   microbit

Committer:
masakjm
Date:
Fri Feb 15 02:54:37 2019 +0000
Revision:
9:4a977a37097a
Parent:
6:bd39b12d4ac8

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masakjm 4:4fe5674bf409 1 //=================================
masakjm 4:4fe5674bf409 2 // microbit_switch_if_3sw
masakjm 4:4fe5674bf409 3 //=================================
masakjm 6:bd39b12d4ac8 4 // BLE switch interface with 3 tact switches for micro:bit
masakjm 4:4fe5674bf409 5 // The MIT License (MIT) Copyright (c) 2018 Masatomo Kojima
masakjm 4:4fe5674bf409 6
masakjm 4:4fe5674bf409 7 #include "mbed.h"
masakjm 4:4fe5674bf409 8 #include "MicroBit.h"
masakjm 4:4fe5674bf409 9 #include "ble/services/BatteryService.h"
masakjm 4:4fe5674bf409 10 #include "KeyboardService.h"
masakjm 4:4fe5674bf409 11 #include "Keyboard_types.h"
masakjm 4:4fe5674bf409 12 #include "HIDServiceBase.h"
masakjm 4:4fe5674bf409 13 #include "HIDDeviceInformationService.h"
masakjm 4:4fe5674bf409 14
masakjm 4:4fe5674bf409 15 //----------------------
masakjm 4:4fe5674bf409 16 // Keybord
masakjm 4:4fe5674bf409 17 //----------------------
masakjm 4:4fe5674bf409 18 const int KEY_BS = 8; /* Keyboard Backspace */
masakjm 4:4fe5674bf409 19 const int KEY_TAB = 9; /* Keyboard Tab */
masakjm 4:4fe5674bf409 20 const int KEY_ENTER = 10; /* Keyboard Return (Enter) */
masakjm 4:4fe5674bf409 21 //const int KEY_ESC = 27; /* Keyboard Escape */
masakjm 4:4fe5674bf409 22 const int KEY_SPACE = 32; /* Keyboard Space */
masakjm 4:4fe5674bf409 23
masakjm 4:4fe5674bf409 24 //----------------------
masakjm 4:4fe5674bf409 25 // Setting
masakjm 4:4fe5674bf409 26 //----------------------
masakjm 4:4fe5674bf409 27 #define NUM_GROUP1 6
masakjm 4:4fe5674bf409 28 #define NUM_GROUP2 6
masakjm 4:4fe5674bf409 29
masakjm 4:4fe5674bf409 30 #define MODIFY_CTRL 0x100
masakjm 4:4fe5674bf409 31 #define MODIFY_SHIFT 0x200
masakjm 4:4fe5674bf409 32 #define MODIFY_OPTION 0x400 /* option or alt */
masakjm 4:4fe5674bf409 33 #define MODIFY_COMMAND 0x800 /* command or Windows */
masakjm 4:4fe5674bf409 34
masakjm 4:4fe5674bf409 35 const int keyCodeGroup0[3] = { // Button A, Button B, Button A&B
masakjm 9:4a977a37097a 36 'A',
masakjm 9:4a977a37097a 37 'B',
masakjm 4:4fe5674bf409 38 MODIFY_COMMAND + 'h' // アプリ終了
masakjm 4:4fe5674bf409 39 };
masakjm 4:4fe5674bf409 40 const int keyCodeGroup1[NUM_GROUP1][2] = { // Switch 1 2
masakjm 4:4fe5674bf409 41 {KEY_SPACE, KEY_ENTER},
masakjm 4:4fe5674bf409 42 {RIGHT_ARROW, LEFT_ARROW},
masakjm 4:4fe5674bf409 43 {DOWN_ARROW, UP_ARROW},
masakjm 4:4fe5674bf409 44 {MODIFY_OPTION + DOWN_ARROW, MODIFY_OPTION + UP_ARROW},
masakjm 4:4fe5674bf409 45 {'1', '3'},
masakjm 4:4fe5674bf409 46 {'h', 'j'}
masakjm 4:4fe5674bf409 47 };
masakjm 4:4fe5674bf409 48 const int keyCodeGroup2[NUM_GROUP2]= { // Switch 3
masakjm 4:4fe5674bf409 49 KEY_TAB,
masakjm 4:4fe5674bf409 50 0,
masakjm 4:4fe5674bf409 51 0,
masakjm 4:4fe5674bf409 52 MODIFY_COMMAND + 'r', // 再読み込み
masakjm 4:4fe5674bf409 53 0,
masakjm 4:4fe5674bf409 54 0
masakjm 4:4fe5674bf409 55 };
masakjm 4:4fe5674bf409 56
masakjm 4:4fe5674bf409 57 //in "BLE_HID\Keyboad_types.h"
masakjm 4:4fe5674bf409 58 //enum FUNCTION_KEY {
masakjm 4:4fe5674bf409 59 // KEY_F1 = 128, /* F1 key */
masakjm 4:4fe5674bf409 60 // KEY_F2, /* F2 key */
masakjm 4:4fe5674bf409 61 // KEY_F3, /* F3 key */
masakjm 4:4fe5674bf409 62 // KEY_F4, /* F4 key */
masakjm 4:4fe5674bf409 63 // KEY_F5, /* F5 key */
masakjm 4:4fe5674bf409 64 // KEY_F6, /* F6 key */
masakjm 4:4fe5674bf409 65 // KEY_F7, /* F7 key */
masakjm 4:4fe5674bf409 66 // KEY_F8, /* F8 key */
masakjm 4:4fe5674bf409 67 // KEY_F9, /* F9 key */
masakjm 4:4fe5674bf409 68 // KEY_F10, /* F10 key */
masakjm 4:4fe5674bf409 69 // KEY_F11, /* F11 key */
masakjm 4:4fe5674bf409 70 // KEY_F12, /* F12 key */
masakjm 4:4fe5674bf409 71 //
masakjm 4:4fe5674bf409 72 // KEY_PRINT_SCREEN, /* Print Screen key */
masakjm 4:4fe5674bf409 73 // KEY_SCROLL_LOCK, /* Scroll lock */
masakjm 4:4fe5674bf409 74 // KEY_CAPS_LOCK, /* caps lock */
masakjm 4:4fe5674bf409 75 // KEY_NUM_LOCK, /* num lock */
masakjm 4:4fe5674bf409 76 // KEY_INSERT, /* Insert key */
masakjm 4:4fe5674bf409 77 // KEY_HOME, /* Home key */
masakjm 4:4fe5674bf409 78 // KEY_PAGE_UP, /* Page Up key */
masakjm 4:4fe5674bf409 79 // KEY_PAGE_DOWN, /* Page Down key */
masakjm 4:4fe5674bf409 80 //
masakjm 4:4fe5674bf409 81 // RIGHT_ARROW, /* Right arrow */
masakjm 4:4fe5674bf409 82 // LEFT_ARROW, /* Left arrow */
masakjm 4:4fe5674bf409 83 // DOWN_ARROW, /* Down arrow */
masakjm 4:4fe5674bf409 84 // UP_ARROW, /* Up arrow */
masakjm 4:4fe5674bf409 85 //};
masakjm 4:4fe5674bf409 86
masakjm 4:4fe5674bf409 87 //----------------------
masakjm 4:4fe5674bf409 88 // Display
masakjm 4:4fe5674bf409 89 //----------------------
masakjm 4:4fe5674bf409 90 #define TIME_TURN_OFF 7.0 // 非表示モードに入るまでの時間 (s)
masakjm 4:4fe5674bf409 91 #define SETTING_DISPLAY_WAIT 1.0 // 設定モード表示時間 (s)
masakjm 4:4fe5674bf409 92
masakjm 4:4fe5674bf409 93 //----------------------
masakjm 4:4fe5674bf409 94 // State
masakjm 4:4fe5674bf409 95 //----------------------
masakjm 4:4fe5674bf409 96 enum STATE {
masakjm 4:4fe5674bf409 97 STATE_DESABLE_INPUT, // 入力無効時
masakjm 4:4fe5674bf409 98 STATE_SETTING, // パラメータ設定時
masakjm 4:4fe5674bf409 99 STATE_OPERATING, // 操作時
masakjm 4:4fe5674bf409 100 };
masakjm 4:4fe5674bf409 101 //----------------------
masakjm 4:4fe5674bf409 102 // Disable debug messages by setting NO_DEBUG
masakjm 4:4fe5674bf409 103 //----------------------
masakjm 4:4fe5674bf409 104 #ifndef NO_DEBUG
masakjm 4:4fe5674bf409 105 #define DEBUG(...) printf(__VA_ARGS__)
masakjm 4:4fe5674bf409 106 #else
masakjm 4:4fe5674bf409 107 #define DEBUG(...)
masakjm 4:4fe5674bf409 108 #endif
masakjm 4:4fe5674bf409 109
masakjm 4:4fe5674bf409 110 //----------------------
masakjm 4:4fe5674bf409 111 // BLE & HID
masakjm 4:4fe5674bf409 112 //----------------------
masakjm 4:4fe5674bf409 113 /**
masakjm 4:4fe5674bf409 114 * IO capabilities of the device. During development, you most likely want "JustWorks", which means
masakjm 4:4fe5674bf409 115 * no IO capabilities.
masakjm 4:4fe5674bf409 116 * It is also possible to use IO_CAPS_DISPLAY_ONLY to generate and show a pincode on the serial
masakjm 4:4fe5674bf409 117 * output.
masakjm 4:4fe5674bf409 118 */
masakjm 4:4fe5674bf409 119 #ifndef HID_SECURITY_IOCAPS
masakjm 4:4fe5674bf409 120 #define HID_SECURITY_IOCAPS (SecurityManager::IO_CAPS_NONE)
masakjm 4:4fe5674bf409 121 #endif
masakjm 4:4fe5674bf409 122
masakjm 4:4fe5674bf409 123 /**
masakjm 4:4fe5674bf409 124 * Security level. MITM disabled forces "Just Works". If you require MITM, HID_SECURITY_IOCAPS must
masakjm 4:4fe5674bf409 125 * be at least IO_CAPS_DISPLAY_ONLY.
masakjm 4:4fe5674bf409 126 */
masakjm 4:4fe5674bf409 127 #ifndef HID_SECURITY_REQUIRE_MITM
masakjm 4:4fe5674bf409 128 #define HID_SECURITY_REQUIRE_MITM false
masakjm 4:4fe5674bf409 129 #endif
masakjm 4:4fe5674bf409 130
masakjm 4:4fe5674bf409 131 /**
masakjm 4:4fe5674bf409 132 * Initialize security manager: set callback functions and required security level
masakjm 4:4fe5674bf409 133 */
masakjm 4:4fe5674bf409 134 void initializeSecurity(BLE &_ble);
masakjm 4:4fe5674bf409 135
masakjm 4:4fe5674bf409 136 /**
masakjm 4:4fe5674bf409 137 * - Initialize auxiliary services required by the HID-over-GATT Profile.
masakjm 4:4fe5674bf409 138 * - Initialize common Gap advertisement.
masakjm 4:4fe5674bf409 139 *
masakjm 4:4fe5674bf409 140 * Demos only have to set a custom device name and appearance, and their HID
masakjm 4:4fe5674bf409 141 * service.
masakjm 4:4fe5674bf409 142 */
masakjm 4:4fe5674bf409 143 void initializeHOGP(BLE &_ble);
masakjm 4:4fe5674bf409 144
masakjm 4:4fe5674bf409 145 enum BLE_MESSAGE {
masakjm 4:4fe5674bf409 146 BLE_NO_MESSAGE, // メッセージ無し
masakjm 4:4fe5674bf409 147 BLE_CONNECTED, // BLE接続完了
masakjm 4:4fe5674bf409 148 BLE_PAIRING_SUCCESS, // ペアリング成功
masakjm 4:4fe5674bf409 149 BLE_PAIRING_FAILED, // ペアリング失敗
masakjm 4:4fe5674bf409 150 };
masakjm 4:4fe5674bf409 151
masakjm 4:4fe5674bf409 152 const char bleDispChar[]={0, 'C', 'P', 'F'};
masakjm 4:4fe5674bf409 153