Skip to content

Commit dc129b1

Browse files
added keycodes supported by BlueMicri firmware
1 parent cc16174 commit dc129b1

5 files changed

Lines changed: 700 additions & 1 deletion

File tree

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=bluemicro_hid
2-
version=0.0.7
2+
version=0.0.9
33
author=Pierre Constantineau <jpconstantineau@gmail.com>
44
maintainer=Pierre Constantineau <jpconstantineau@gmail.com>
55
sentence=Creates a unified facade to both TinyUSB and nRF52 BlueFruit HID interfaces.

src/bluemicro_hid.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,65 @@
2121
;
2222
#endif
2323
#endif
24+
25+
static std::vector<uint8_t> reportvector;
26+
27+
/**************************************************************************************************************************/
28+
trigger_keycodes_t sendKeys(trigger_keycodes_t activeKeycodes)
29+
{
30+
// Serial.println("S");
31+
static bool has_key = false; // must be static to remember previous state
32+
if ( activeKeycodes.empty() )
33+
{
34+
// send empty key report if previously has key pressed
35+
if (has_key)
36+
{
37+
bluemicro_hid.keyboardRelease();
38+
has_key = false;
39+
}
40+
}
41+
else
42+
{
43+
has_key = true;
44+
uint8_t currentMod = 0;
45+
for (auto keycode : activeKeycodes)
46+
{
47+
auto hidKeycode = static_cast<uint8_t>(keycode & 0x00FF);
48+
auto extraModifiers = static_cast<uint8_t>((keycode & 0xFF00) >> 8);
49+
50+
if (hidKeycode >= KC_A && hidKeycode <= KC_EXSEL)
51+
{
52+
// add hidKeycode to report vector
53+
reportvector.push_back(hidKeycode);
54+
}
55+
//check if the hid keycode contains a modifier. // also check for macros.
56+
switch (hidKeycode) {
57+
case KC_LCTRL: currentMod |= 1; currentMod |= extraModifiers; break;
58+
case KC_LSHIFT: currentMod |= 2; currentMod |= extraModifiers; break;
59+
case KC_LALT: currentMod |= 4; currentMod |= extraModifiers; break;
60+
case KC_LGUI: currentMod |= 8; currentMod |= extraModifiers; break;
61+
case KC_RCTRL: currentMod |= 16; currentMod |= extraModifiers; break;
62+
case KC_RSHIFT: currentMod |= 32; currentMod |= extraModifiers; break;
63+
case KC_RALT: currentMod |= 64; currentMod |= extraModifiers; break;
64+
case KC_RGUI: currentMod |= 128; currentMod |= extraModifiers; break;
65+
}
66+
//add all of the extra modifiers into the curren modifier
67+
currentMod |= extraModifiers;
68+
}
69+
70+
uint8_t keycode[6] = { 0 };
71+
uint8_t keycodeposition = 0;
72+
for (auto thiskeycode : reportvector)
73+
{
74+
if (keycodeposition<6)
75+
{
76+
keycode[keycodeposition] = thiskeycode;
77+
}
78+
keycodeposition++;
79+
}
80+
bluemicro_hid.keyboardReport(currentMod, keycode);
81+
activeKeycodes.clear();
82+
reportvector.clear();
83+
}
84+
return activeKeycodes;
85+
}

src/bluemicro_hid.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
#include "bluetooth.h"
1010
#include "usb.h"
1111
#include "hid_queues.h"
12+
#include "hid_keycodes.h"
1213
extern HID_Queues bluemicro_hid;
1314

15+
typedef std::vector <uint16_t> trigger_keycodes_t;
16+
typedef std::vector <uint8_t> trigger_keys_t;
17+
trigger_keycodes_t processKeys(trigger_keys_t activeKeys, trigger_keycodes_t activeKeycodes);
18+
trigger_keycodes_t sendKeys(trigger_keycodes_t activeKeycodes);
1419
#endif

0 commit comments

Comments
 (0)