-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathbluetooth.cpp
More file actions
109 lines (86 loc) · 2.56 KB
/
Copy pathbluetooth.cpp
File metadata and controls
109 lines (86 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <Arduino.h>
#include <bluefruit.h>
#include "config.h"
#include "keycodes.h"
BLEHidAdafruit blehid;
BLECharacteristic battery_level;
#define REPORT_KEYS 6
uint8_t report[REPORT_KEYS] = { 0 };
uint8_t active_mods = 0;
char payload[43] = "";
void add_mods(uint8_t mods) {
active_mods |= mods;
}
void del_mods(uint8_t mods) {
active_mods &= ~mods;
}
void send_report_keyboard() {
bool err = blehid.keyboardReport(
active_mods, report[0], report[1], report[2], report[3], report[4], report[5]
);
}
void register_keydown(uint16_t keycode) {
if (IN_KEYBOARD_RANGE(keycode)) {
add_mods((uint8_t)(keycode >> 8));
for (uint8_t i = 0; i < REPORT_KEYS; i++) {
if (report[i] == (uint8_t)(keycode & 0xFF)) {
break;
}
if (report[i] == 0) {
report[i] = (uint8_t)(keycode & 0xFF);
break;
}
}
send_report_keyboard();
}
}
void register_keyup(uint16_t keycode) {
if (IN_KEYBOARD_RANGE(keycode)) {
del_mods((uint8_t)(keycode >> 8));
for (uint8_t i = 0; i < REPORT_KEYS; i++) {
if (report[i] == (uint8_t)(keycode & 0xFF)) {
report[i] = 0;
}
}
send_report_keyboard();
}
}
void init_bluetooth() {
//Bluefruit.clearBonds();
Bluefruit.setName("The Blanck Keyboard");
Bluefruit.setTxPower(-4);
Bluefruit.begin();
BLEDis bledis;
bledis.setManufacturer("Adrien Friggeri");
bledis.setModel("The Blanck Keyboard");
bledis.begin();
BLECharacteristic pnp_id = BLECharacteristic(UUID16_CHR_PNP_ID);
pnp_id.setProperties(CHR_PROPS_READ);
pnp_id.setFixedLen(7);
pnp_id.begin();
uint8_t pnp_id_data[7] = {0x02, 0x11, 0x23, 0xfe, 0xca, 0x01, 0x00};
pnp_id.write(pnp_id_data, 7);
BLEService battery = BLEService(UUID16_SVC_BATTERY);
battery.begin();
battery_level = BLECharacteristic(UUID16_CHR_BATTERY_LEVEL);
battery_level.setProperties(CHR_PROPS_READ);
battery_level.setFixedLen(1);
battery_level.begin();
battery_level.write(0);
blehid.begin();
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
Bluefruit.Advertising.addAppearance(BLE_APPEARANCE_HID_KEYBOARD);
Bluefruit.Advertising.addService(blehid);
Bluefruit.Advertising.addService(battery);
uint8_t cod_data[2] = {0x25, 0x40};
Bluefruit.Advertising.addData(BLE_GAP_AD_TYPE_CLASS_OF_DEVICE, cod_data, 2);
Bluefruit.Advertising.addName();
Bluefruit.Advertising.start();
}
void update_battery(uint8_t bat_percentage) {
battery_level.write(bat_percentage);
}
bool is_bluetooth_connected() {
return Bluefruit.connected();
}