BLE switch interface with GROVE joystic for micro:bit http://mahoro-ba.net/e2073.html
Diff: microbit_switch_if_joy.h
- Revision:
- 7:e2779d2fef9c
- Child:
- 11:8e0b379efcb3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/microbit_switch_if_joy.h Fri Feb 22 21:10:14 2019 +0000 @@ -0,0 +1,172 @@ +//================================= +// microbit_switch_if_joy +//================================= +// BLE switch interface with GROVE joystic for micro:bit +// The MIT License (MIT) Copyright (c) 2019 Masatomo Kojima + +#include "mbed.h" +#include "MicroBit.h" +#include "ble/services/BatteryService.h" +#include "KeyboardService.h" +#include "Keyboard_types.h" +#include "HIDServiceBase.h" +#include "HIDDeviceInformationService.h" + +//---------------------- +// GROVE JoyStick +//---------------------- +#define JOY_ERR_THRE 0.4 // JoyStick 異常入力の閾値 +#define JOY_LOW_THRE 0.35 // JoyStick 入力値の低い側の閾値 +#define JOY_HIGH_THRE 0.65 // JoyStick 入力値の高い側の閾値 +#define JOY_CENTER_THRE 0.90 // JoyStick の押しスイッチの閾値 +enum JOY_STATUS { + JOY_NEUTRAL = -1, + JOY_CENTER_PRESS , // 中央 + JOY_YHIGH_PRESS, // 左 + JOY_YLOW_PRESS, // 右 + JOY_XHIGH_PRESS, // 上 + JOY_XLOW_PRESS, // 下 +}; + +//---------------------- +// Keybord +//---------------------- +const int KEY_BS = 8; /* Keyboard Backspace */ +const int KEY_TAB = 9; /* Keyboard Tab */ +const int KEY_ENTER = 10; /* Keyboard Return (Enter) */ +//const int KEY_ESC = 27; /* Keyboard Escape */ +const int KEY_SPACE = 32; /* Keyboard Space */ + +const int KEY_NUMPAD0 = 0x60; /* Numpad 0 */ +const int KEY_NUMPAD1 = 0x61; /* Numpad 1 */ +const int KEY_NUMPAD2 = 0x62; /* Numpad 2 */ +const int KEY_NUMPAD3 = 0x63; /* Numpad 3 */ +const int KEY_NUMPAD4 = 0x64; /* Numpad 4 */ +const int KEY_NUMPAD5 = 0x65; /* Numpad 5 */ +const int KEY_NUMPAD6 = 0x66; /* Numpad 6 */ +const int KEY_NUMPAD7 = 0x67; /* Numpad 7 */ +const int KEY_NUMPAD8 = 0x68; /* Numpad 8 */ +const int KEY_NUMPAD9 = 0x69; /* Numpad 9 */ + +//---------------------- +// Setting +//---------------------- +#define NUM_GROUP1 4 +#define NUM_G1MEMBER 5 + +#define MODIFY_CTRL 0x100 +#define MODIFY_SHIFT 0x200 +#define MODIFY_OPTION 0x400 /* option or alt */ +#define MODIFY_COMMAND 0x800 /* command or Windows */ + +const int keyCodeGroup0[3] = { // Button A, Button B, Button A&B + 'a', + 'b', + MODIFY_COMMAND + 'h' // アプリ終了 +}; +const int keyCodeGroup1[NUM_GROUP1][NUM_G1MEMBER] = { // 中央 左 右 上 下 + {KEY_ENTER, KEY_TAB, KEY_SPACE, 0, KEY_ENTER }, + {KEY_HOME, RIGHT_ARROW, LEFT_ARROW, DOWN_ARROW, UP_ARROW }, + {KEY_NUMPAD1, KEY_NUMPAD2, KEY_NUMPAD3, KEY_NUMPAD4, KEY_NUMPAD5}, + {KEY_ENTER, MODIFY_OPTION+MODIFY_SHIFT+KEY_TAB, MODIFY_OPTION+KEY_TAB, + MODIFY_OPTION+DOWN_ARROW, MODIFY_OPTION+UP_ARROW}, +// {KEY_ENTER, MODIFY_SHIFT+KEY_TAB, KEY_TAB, KEY_SPACE, MODIFY_SHIFT+KEY_SPACE}, +}; + +//in "BLE_HID\Keyboad_types.h" +//enum FUNCTION_KEY { +// KEY_F1 = 128, /* F1 key */ +// KEY_F2, /* F2 key */ +// KEY_F3, /* F3 key */ +// KEY_F4, /* F4 key */ +// KEY_F5, /* F5 key */ +// KEY_F6, /* F6 key */ +// KEY_F7, /* F7 key */ +// KEY_F8, /* F8 key */ +// KEY_F9, /* F9 key */ +// KEY_F10, /* F10 key */ +// KEY_F11, /* F11 key */ +// KEY_F12, /* F12 key */ +// +// KEY_PRINT_SCREEN, /* Print Screen key */ +// KEY_SCROLL_LOCK, /* Scroll lock */ +// KEY_CAPS_LOCK, /* caps lock */ +// KEY_NUM_LOCK, /* num lock */ +// KEY_INSERT, /* Insert key */ +// KEY_HOME, /* Home key */ +// KEY_PAGE_UP, /* Page Up key */ +// KEY_PAGE_DOWN, /* Page Down key */ +// +// RIGHT_ARROW, /* Right arrow */ +// LEFT_ARROW, /* Left arrow */ +// DOWN_ARROW, /* Down arrow */ +// UP_ARROW, /* Up arrow */ +//}; + +//---------------------- +// Display +//---------------------- +#define TIME_TURN_OFF 7.0 // 非表示モードに入るまでの時間 (s) +#define SETTING_DISPLAY_WAIT 1.0 // 設定モード表示時間 (s) + +//---------------------- +// State +//---------------------- +enum STATE { + STATE_DESABLE_INPUT, // 入力無効時 + STATE_SETTING, // パラメータ設定時 + STATE_OPERATING, // 操作時 +}; +//---------------------- +// Disable debug messages by setting NO_DEBUG +//---------------------- +#ifndef NO_DEBUG +#define DEBUG(...) printf(__VA_ARGS__) +#else +#define DEBUG(...) +#endif + +//---------------------- +// BLE & HID +//---------------------- +/** + * IO capabilities of the device. During development, you most likely want "JustWorks", which means + * no IO capabilities. + * It is also possible to use IO_CAPS_DISPLAY_ONLY to generate and show a pincode on the serial + * output. + */ +#ifndef HID_SECURITY_IOCAPS +#define HID_SECURITY_IOCAPS (SecurityManager::IO_CAPS_NONE) +#endif + +/** + * Security level. MITM disabled forces "Just Works". If you require MITM, HID_SECURITY_IOCAPS must + * be at least IO_CAPS_DISPLAY_ONLY. + */ +#ifndef HID_SECURITY_REQUIRE_MITM +#define HID_SECURITY_REQUIRE_MITM false +#endif + +/** + * Initialize security manager: set callback functions and required security level + */ +void initializeSecurity(BLE &_ble); + +/** + * - Initialize auxiliary services required by the HID-over-GATT Profile. + * - Initialize common Gap advertisement. + * + * Demos only have to set a custom device name and appearance, and their HID + * service. + */ +void initializeHOGP(BLE &_ble); + +enum BLE_MESSAGE { + BLE_NO_MESSAGE, // メッセージ無し + BLE_CONNECTED, // BLE接続完了 + BLE_PAIRING_SUCCESS, // ペアリング成功 + BLE_PAIRING_FAILED, // ペアリング失敗 +}; + +const char bleDispChar[]={0, 'C', 'P', 'F'}; + \ No newline at end of file