@@ -46,6 +46,8 @@ BLEHidGeneric::BLEHidGeneric(uint8_t num_input, uint8_t num_output, uint8_t num_
46
46
: BLEService(UUID16_SVC_HUMAN_INTERFACE_DEVICE), _chr_control(UUID16_CHR_HID_CONTROL_POINT)
47
47
{
48
48
_has_keyboard = _has_mouse = false ;
49
+ _protocol_mode = 1 ; // report mode
50
+
49
51
_report_map = NULL ;
50
52
_report_map_len = 0 ;
51
53
@@ -88,6 +90,9 @@ BLEHidGeneric::BLEHidGeneric(uint8_t num_input, uint8_t num_output, uint8_t num_
88
90
}
89
91
}
90
92
93
+ /* ------------------------------------------------------------------*/
94
+ /* CONFIG
95
+ *------------------------------------------------------------------*/
91
96
void BLEHidGeneric::enableKeyboard (bool enable)
92
97
{
93
98
_has_keyboard = enable;
@@ -98,7 +103,6 @@ void BLEHidGeneric::enableMouse(bool enable)
98
103
_has_mouse = enable;
99
104
}
100
105
101
-
102
106
void BLEHidGeneric::setHidInfo (uint16_t bcd, uint8_t country, uint8_t flags)
103
107
{
104
108
memcpy (_hid_info, &bcd, 2 );
@@ -124,6 +128,10 @@ void BLEHidGeneric::setOutputReportCallback(uint8_t reportID, output_report_cb_t
124
128
_output_cbs[reportID] = fp;
125
129
}
126
130
131
+ /* ------------------------------------------------------------------*/
132
+ /* Callbacks
133
+ *------------------------------------------------------------------*/
134
+ // TODO output report
127
135
COMMENT_OUT (
128
136
void blehidgeneric_output_cb (BLECharacteristic& chr, ble_gatts_evt_write_t * request)
129
137
{
@@ -134,6 +142,17 @@ void blehidgeneric_output_cb(BLECharacteristic& chr, ble_gatts_evt_write_t* requ
134
142
}
135
143
)
136
144
145
+ void blehid_generic_protocol_mode_cb(BLECharacteristic& chr, uint8_t * data, uint16_t len, uint16_t offset)
146
+ {
147
+ BLEHidGeneric& svc = (BLEHidGeneric&) chr.parentService ();
148
+ svc._protocol_mode = *data;
149
+
150
+ LOG_LV2 (" HID" , " Protocol Mode : %d (0 Boot, 1 Report)" , *data);
151
+ }
152
+
153
+ /* ------------------------------------------------------------------*/
154
+ /* Begin
155
+ *------------------------------------------------------------------*/
137
156
err_t BLEHidGeneric::begin (void )
138
157
{
139
158
VERIFY ( (_report_map != NULL ) && _report_map_len, NRF_ERROR_INVALID_PARAM);
@@ -149,8 +168,9 @@ err_t BLEHidGeneric::begin(void)
149
168
150
169
_chr_protocol->setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE_WO_RESP);
151
170
_chr_protocol->setFixedLen (1 );
171
+ _chr_protocol->setWriteCallback (blehid_generic_protocol_mode_cb);
152
172
VERIFY_STATUS ( _chr_protocol->begin () );
153
- _chr_protocol->write8 (1 );
173
+ _chr_protocol->write8 (_protocol_mode );
154
174
}
155
175
156
176
// Input reports
@@ -242,6 +262,9 @@ err_t BLEHidGeneric::begin(void)
242
262
return ERROR_NONE;
243
263
}
244
264
265
+ /* ------------------------------------------------------------------*/
266
+ /* Input Report
267
+ *------------------------------------------------------------------*/
245
268
bool BLEHidGeneric::inputReport (uint8_t reportID, void const * data, int len)
246
269
{
247
270
// 0 will treated as report ID = 1
@@ -250,6 +273,16 @@ bool BLEHidGeneric::inputReport(uint8_t reportID, void const* data, int len)
250
273
return _chr_inputs[reportID-1 ].notify ( (uint8_t const *) data, len);
251
274
}
252
275
276
+ bool BLEHidGeneric::bootKeyboardReport (void const * data, int len)
277
+ {
278
+ return _chr_boot_keyboard_input->notify (data, len);
279
+ }
280
+
281
+ bool BLEHidGeneric::bootMouseReport (void const * data, int len)
282
+ {
283
+ return _chr_boot_mouse_input->notify (data, len);
284
+ }
285
+
253
286
/* ------------------------------------------------------------------*/
254
287
/*
255
288
*------------------------------------------------------------------*/
0 commit comments