Skip to content

Commit a3a2f87

Browse files
committed
add conn_hdl to all BLEHidAdafruit API
1 parent 9b0bf8b commit a3a2f87

File tree

2 files changed

+149
-40
lines changed

2 files changed

+149
-40
lines changed

libraries/Bluefruit52Lib/src/services/BLEHidAdafruit.cpp

Lines changed: 115 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,8 @@ err_t BLEHidAdafruit::begin(void)
219219
}
220220

221221
/*------------------------------------------------------------------*/
222-
/* Keyboard
222+
/* Keyboard Multiple Connections
223223
*------------------------------------------------------------------*/
224-
225224
void BLEHidAdafruit::blehid_ada_keyboard_output_cb(uint16_t conn_hdl, BLECharacteristic* chr, uint8_t* data, uint16_t len)
226225
{
227226
LOG_LV2("HID", "Keyboard LED : 0x%02X", data[0]);
@@ -241,64 +240,64 @@ void BLEHidAdafruit::setKeyboardLedCallback(kbd_led_cb_t fp)
241240
_chr_boot_keyboard_output->setWriteCallback(fp ? blehid_ada_keyboard_output_cb : NULL);
242241
}
243242

244-
bool BLEHidAdafruit::keyboardReport(hid_keyboard_report_t* report)
243+
bool BLEHidAdafruit::keyboardReport(uint16_t conn_hdl, hid_keyboard_report_t* report)
245244
{
246245
if ( isBootMode() )
247246
{
248-
return bootKeyboardReport(report, sizeof(hid_keyboard_report_t));
247+
return bootKeyboardReport(conn_hdl, report, sizeof(hid_keyboard_report_t));
249248
}else
250249
{
251-
return inputReport( REPORT_ID_KEYBOARD, report, sizeof(hid_keyboard_report_t));
250+
return inputReport(conn_hdl, REPORT_ID_KEYBOARD, report, sizeof(hid_keyboard_report_t));
252251
}
253252
}
254253

255-
bool BLEHidAdafruit::keyboardReport(uint8_t modifier, uint8_t keycode[6])
254+
bool BLEHidAdafruit::keyboardReport(uint16_t conn_hdl, uint8_t modifier, uint8_t keycode[6])
256255
{
257256
hid_keyboard_report_t report =
258257
{
259258
.modifier = modifier,
260259
};
261260
memcpy(report.keycode, keycode, 6);
262261

263-
return keyboardReport(&report);
262+
return keyboardReport(conn_hdl, &report);
264263
}
265264

266-
bool BLEHidAdafruit::keyPress(char ch)
265+
bool BLEHidAdafruit::keyPress(uint16_t conn_hdl, char ch)
267266
{
268267
hid_keyboard_report_t report;
269268
varclr(&report);
270269

271270
report.modifier = ( HID_ASCII_TO_KEYCODE[(uint8_t)ch].shift ) ? KEYBOARD_MODIFIER_LEFTSHIFT : 0;
272271
report.keycode[0] = HID_ASCII_TO_KEYCODE[(uint8_t)ch].keycode;
273272

274-
return keyboardReport(&report);
273+
return keyboardReport(conn_hdl, &report);
275274
}
276275

277-
bool BLEHidAdafruit::keyRelease(void)
276+
bool BLEHidAdafruit::keyRelease(uint16_t conn_hdl)
278277
{
279278
hid_keyboard_report_t report;
280279
varclr(&report);
281280

282-
return keyboardReport(&report);
281+
return keyboardReport(conn_hdl, &report);
283282
}
284283

285-
bool BLEHidAdafruit::keySequence(const char* str, int interal)
284+
bool BLEHidAdafruit::keySequence(uint16_t conn_hdl, const char* str, int interval)
286285
{
287286
// Send each key in sequence
288287
char ch;
289288
while( (ch = *str++) != 0 )
290289
{
291290
char lookahead = *str;
292291

293-
keyPress(ch);
294-
delay(interal);
292+
keyPress(conn_hdl, ch);
293+
delay(interval);
295294

296295
/* Only need to empty report if the next character is NULL or the same with
297296
* the current one, else no need to send */
298297
if ( lookahead == ch || lookahead == 0 )
299298
{
300-
keyRelease();
301-
delay(interal);
299+
keyRelease(conn_hdl);
300+
delay(interval);
302301
}
303302
}
304303

@@ -308,37 +307,37 @@ bool BLEHidAdafruit::keySequence(const char* str, int interal)
308307
/*------------------------------------------------------------------*/
309308
/* Consumer Media Key
310309
*------------------------------------------------------------------*/
311-
bool BLEHidAdafruit::consumerReport(uint16_t usage_code)
310+
bool BLEHidAdafruit::consumerReport(uint16_t conn_hdl, uint16_t usage_code)
312311
{
313-
return inputReport( REPORT_ID_CONSUMER_CONTROL, &usage_code, sizeof(usage_code));
312+
return inputReport(conn_hdl, REPORT_ID_CONSUMER_CONTROL, &usage_code, sizeof(usage_code));
314313
}
315314

316-
bool BLEHidAdafruit::consumerKeyPress(uint16_t usage_code)
315+
bool BLEHidAdafruit::consumerKeyPress(uint16_t conn_hdl, uint16_t usage_code)
317316
{
318-
return consumerReport(usage_code);
317+
return consumerReport(conn_hdl, usage_code);
319318
}
320319

321-
bool BLEHidAdafruit::consumerKeyRelease(void)
320+
bool BLEHidAdafruit::consumerKeyRelease(uint16_t conn_hdl)
322321
{
323322
uint16_t usage = 0;
324-
return consumerReport(usage);
323+
return consumerReport(conn_hdl, usage);
325324
}
326325

327326
/*------------------------------------------------------------------*/
328327
/* Mouse
329328
*------------------------------------------------------------------*/
330-
bool BLEHidAdafruit::mouseReport(hid_mouse_report_t* report)
329+
bool BLEHidAdafruit::mouseReport(uint16_t conn_hdl, hid_mouse_report_t* report)
331330
{
332331
if ( isBootMode() )
333332
{
334-
return bootMouseReport(report, sizeof(hid_mouse_report_t));
333+
return bootMouseReport(conn_hdl, report, sizeof(hid_mouse_report_t));
335334
}else
336335
{
337-
return inputReport( REPORT_ID_MOUSE, report, sizeof(hid_mouse_report_t));
336+
return inputReport(conn_hdl, REPORT_ID_MOUSE, report, sizeof(hid_mouse_report_t));
338337
}
339338
}
340339

341-
bool BLEHidAdafruit::mouseReport(uint8_t buttons, int8_t x, int8_t y, int8_t wheel, int8_t pan)
340+
bool BLEHidAdafruit::mouseReport(uint16_t conn_hdl, uint8_t buttons, int8_t x, int8_t y, int8_t wheel, int8_t pan)
342341
{
343342
hid_mouse_report_t report =
344343
{
@@ -351,31 +350,114 @@ bool BLEHidAdafruit::mouseReport(uint8_t buttons, int8_t x, int8_t y, int8_t whe
351350

352351
_mse_buttons = buttons;
353352

354-
return mouseReport(&report);
353+
return mouseReport(conn_hdl, &report);
355354
}
356355

357-
bool BLEHidAdafruit::mouseButtonPress(uint8_t buttons)
356+
bool BLEHidAdafruit::mouseButtonPress(uint16_t conn_hdl, uint8_t buttons)
358357
{
359358
_mse_buttons = buttons;
360-
return mouseReport(buttons, 0, 0, 0, 0);
359+
return mouseReport(conn_hdl, buttons, 0, 0, 0, 0);
360+
}
361+
362+
bool BLEHidAdafruit::mouseButtonRelease(uint16_t conn_hdl)
363+
{
364+
return mouseReport(conn_hdl, 0, 0, 0, 0, 0);
365+
}
366+
367+
bool BLEHidAdafruit::mouseMove(uint16_t conn_hdl, int8_t x, int8_t y)
368+
{
369+
return mouseReport(conn_hdl, _mse_buttons, x, y, 0, 0);
370+
}
371+
372+
bool BLEHidAdafruit::mouseScroll(uint16_t conn_hdl, int8_t scroll)
373+
{
374+
return mouseReport(conn_hdl, _mse_buttons, 0, 0, scroll, 0);
375+
}
376+
377+
bool BLEHidAdafruit::mousePan(uint16_t conn_hdl, int8_t pan)
378+
{
379+
return mouseReport(conn_hdl, _mse_buttons, 0, 0, 0, pan);
380+
}
381+
382+
/*------------------------------------------------------------------*/
383+
/* Single Connections
384+
*------------------------------------------------------------------*/
385+
386+
//------------- Keyboard -------------//
387+
bool BLEHidAdafruit::keyboardReport(hid_keyboard_report_t* report)
388+
{
389+
return keyboardReport(BLE_GATT_HANDLE_INVALID, report);
390+
}
391+
392+
bool BLEHidAdafruit::keyboardReport(uint8_t modifier, uint8_t keycode[6])
393+
{
394+
return keyboardReport(BLE_GATT_HANDLE_INVALID, modifier, keycode);
395+
}
396+
397+
bool BLEHidAdafruit::keyPress(char ch)
398+
{
399+
return keyPress(BLE_GATT_HANDLE_INVALID, ch);
400+
}
401+
402+
bool BLEHidAdafruit::keyRelease(void)
403+
{
404+
return keyRelease(BLE_GATT_HANDLE_INVALID);
405+
}
406+
407+
bool BLEHidAdafruit::keySequence(const char* str, int interval)
408+
{
409+
return keySequence(BLE_GATT_HANDLE_INVALID, str, interval);
410+
}
411+
412+
//------------- Consumer Media Keys -------------//
413+
bool BLEHidAdafruit::consumerReport(uint16_t usage_code)
414+
{
415+
return consumerReport(BLE_GATT_HANDLE_INVALID, usage_code);
416+
}
417+
418+
bool BLEHidAdafruit::consumerKeyPress(uint16_t usage_code)
419+
{
420+
return consumerKeyPress(BLE_GATT_HANDLE_INVALID, usage_code);
421+
}
422+
423+
bool BLEHidAdafruit::consumerKeyRelease(void)
424+
{
425+
return consumerKeyRelease(BLE_GATT_HANDLE_INVALID);
426+
}
427+
428+
//------------- Mouse -------------//
429+
bool BLEHidAdafruit::mouseReport(hid_mouse_report_t* report)
430+
{
431+
return mouseReport(BLE_GATT_HANDLE_INVALID, report);
432+
}
433+
434+
bool BLEHidAdafruit::mouseReport(uint8_t buttons, int8_t x, int8_t y, int8_t wheel, int8_t pan)
435+
{
436+
return mouseReport(BLE_GATT_HANDLE_INVALID, buttons, x, y, wheel, pan);
437+
}
438+
439+
bool BLEHidAdafruit::mouseButtonPress(uint8_t buttons)
440+
{
441+
return mouseButtonPress(BLE_GATT_HANDLE_INVALID, buttons);
361442
}
362443

363444
bool BLEHidAdafruit::mouseButtonRelease(void)
364445
{
365-
return mouseReport(0, 0, 0, 0, 0);
446+
return mouseButtonRelease(BLE_GATT_HANDLE_INVALID);
366447
}
367448

368449
bool BLEHidAdafruit::mouseMove(int8_t x, int8_t y)
369450
{
370-
return mouseReport(_mse_buttons, x, y, 0, 0);
451+
return mouseMove(BLE_GATT_HANDLE_INVALID, x, y);
371452
}
372453

373454
bool BLEHidAdafruit::mouseScroll(int8_t scroll)
374455
{
375-
return mouseReport(_mse_buttons, 0, 0, scroll, 0);
456+
return mouseScroll(BLE_GATT_HANDLE_INVALID, scroll);
376457
}
377458

378459
bool BLEHidAdafruit::mousePan(int8_t pan)
379460
{
380-
return mouseReport(_mse_buttons, 0, 0, 0, pan);
461+
return mousePan(BLE_GATT_HANDLE_INVALID, pan);
381462
}
463+

libraries/Bluefruit52Lib/src/services/BLEHidAdafruit.h

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,45 @@
4646
class BLEHidAdafruit : public BLEHidGeneric
4747
{
4848
public:
49-
/*--------- Callback Signatures ----------*/
49+
// Callback Signatures
5050
typedef void (*kbd_led_cb_t) (uint16_t conn_hdl, uint8_t leds_bitmap);
5151

5252
BLEHidAdafruit(void);
5353

5454
virtual err_t begin(void);
5555

56-
// Keyboard
56+
//------------- Keyboard -------------//
57+
// Single connection
58+
void setKeyboardLedCallback(kbd_led_cb_t fp);
59+
5760
bool keyboardReport(hid_keyboard_report_t* report);
5861
bool keyboardReport(uint8_t modifier, uint8_t keycode[6]);
5962

60-
void setKeyboardLedCallback(kbd_led_cb_t fp);
61-
6263
bool keyPress(char ch);
6364
bool keyRelease(void);
64-
bool keySequence(const char* str, int interal=5);
65+
bool keySequence(const char* str, int interval=5);
66+
67+
// Multiple connections
68+
bool keyboardReport(uint16_t conn_hdl, hid_keyboard_report_t* report);
69+
bool keyboardReport(uint16_t conn_hdl, uint8_t modifier, uint8_t keycode[6]);
6570

66-
// Consumer Media Keys
71+
bool keyPress(uint16_t conn_hdl, char ch);
72+
bool keyRelease(uint16_t conn_hdl);
73+
bool keySequence(uint16_t conn_hdl, const char* str, int interval=5);
74+
75+
//------------- Consumer Media Keys -------------//
76+
// Single connection
6777
bool consumerReport(uint16_t usage_code);
6878
bool consumerKeyPress(uint16_t usage_code);
6979
bool consumerKeyRelease(void);
7080

71-
// Mouse
81+
// Multiple connections
82+
bool consumerReport(uint16_t conn_hdl, uint16_t usage_code);
83+
bool consumerKeyPress(uint16_t conn_hdl, uint16_t usage_code);
84+
bool consumerKeyRelease(uint16_t conn_hdl);
85+
86+
//------------- Mouse -------------//
87+
// Single connection
7288
bool mouseReport(hid_mouse_report_t* report);
7389
bool mouseReport(uint8_t buttons, int8_t x, int8_t y, int8_t wheel=0, int8_t pan=0);
7490

@@ -79,6 +95,17 @@ class BLEHidAdafruit : public BLEHidGeneric
7995
bool mouseScroll(int8_t scroll);
8096
bool mousePan(int8_t pan);
8197

98+
// Multiple connections
99+
bool mouseReport(uint16_t conn_hdl, hid_mouse_report_t* report);
100+
bool mouseReport(uint16_t conn_hdl, uint8_t buttons, int8_t x, int8_t y, int8_t wheel=0, int8_t pan=0);
101+
102+
bool mouseButtonPress(uint16_t conn_hdl, uint8_t buttons);
103+
bool mouseButtonRelease(uint16_t conn_hdl);
104+
105+
bool mouseMove(uint16_t conn_hdl, int8_t x, int8_t y);
106+
bool mouseScroll(uint16_t conn_hdl, int8_t scroll);
107+
bool mousePan(uint16_t conn_hdl, int8_t pan);
108+
82109
protected:
83110
uint8_t _mse_buttons;
84111
kbd_led_cb_t _kbd_led_cb;

0 commit comments

Comments
 (0)