@@ -219,9 +219,8 @@ err_t BLEHidAdafruit::begin(void)
219
219
}
220
220
221
221
/* ------------------------------------------------------------------*/
222
- /* Keyboard
222
+ /* Keyboard Multiple Connections
223
223
*------------------------------------------------------------------*/
224
-
225
224
void BLEHidAdafruit::blehid_ada_keyboard_output_cb (uint16_t conn_hdl, BLECharacteristic* chr, uint8_t * data, uint16_t len)
226
225
{
227
226
LOG_LV2 (" HID" , " Keyboard LED : 0x%02X" , data[0 ]);
@@ -241,64 +240,64 @@ void BLEHidAdafruit::setKeyboardLedCallback(kbd_led_cb_t fp)
241
240
_chr_boot_keyboard_output->setWriteCallback (fp ? blehid_ada_keyboard_output_cb : NULL );
242
241
}
243
242
244
- bool BLEHidAdafruit::keyboardReport (hid_keyboard_report_t * report)
243
+ bool BLEHidAdafruit::keyboardReport (uint16_t conn_hdl, hid_keyboard_report_t * report)
245
244
{
246
245
if ( isBootMode () )
247
246
{
248
- return bootKeyboardReport (report, sizeof (hid_keyboard_report_t ));
247
+ return bootKeyboardReport (conn_hdl, report, sizeof (hid_keyboard_report_t ));
249
248
}else
250
249
{
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 ));
252
251
}
253
252
}
254
253
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 ])
256
255
{
257
256
hid_keyboard_report_t report =
258
257
{
259
258
.modifier = modifier,
260
259
};
261
260
memcpy (report.keycode , keycode, 6 );
262
261
263
- return keyboardReport (&report);
262
+ return keyboardReport (conn_hdl, &report);
264
263
}
265
264
266
- bool BLEHidAdafruit::keyPress (char ch)
265
+ bool BLEHidAdafruit::keyPress (uint16_t conn_hdl, char ch)
267
266
{
268
267
hid_keyboard_report_t report;
269
268
varclr (&report);
270
269
271
270
report.modifier = ( HID_ASCII_TO_KEYCODE[(uint8_t )ch].shift ) ? KEYBOARD_MODIFIER_LEFTSHIFT : 0 ;
272
271
report.keycode [0 ] = HID_ASCII_TO_KEYCODE[(uint8_t )ch].keycode ;
273
272
274
- return keyboardReport (&report);
273
+ return keyboardReport (conn_hdl, &report);
275
274
}
276
275
277
- bool BLEHidAdafruit::keyRelease (void )
276
+ bool BLEHidAdafruit::keyRelease (uint16_t conn_hdl )
278
277
{
279
278
hid_keyboard_report_t report;
280
279
varclr (&report);
281
280
282
- return keyboardReport (&report);
281
+ return keyboardReport (conn_hdl, &report);
283
282
}
284
283
285
- bool BLEHidAdafruit::keySequence (const char * str, int interal )
284
+ bool BLEHidAdafruit::keySequence (uint16_t conn_hdl, const char * str, int interval )
286
285
{
287
286
// Send each key in sequence
288
287
char ch;
289
288
while ( (ch = *str++) != 0 )
290
289
{
291
290
char lookahead = *str;
292
291
293
- keyPress (ch);
294
- delay (interal );
292
+ keyPress (conn_hdl, ch);
293
+ delay (interval );
295
294
296
295
/* Only need to empty report if the next character is NULL or the same with
297
296
* the current one, else no need to send */
298
297
if ( lookahead == ch || lookahead == 0 )
299
298
{
300
- keyRelease ();
301
- delay (interal );
299
+ keyRelease (conn_hdl );
300
+ delay (interval );
302
301
}
303
302
}
304
303
@@ -308,37 +307,37 @@ bool BLEHidAdafruit::keySequence(const char* str, int interal)
308
307
/* ------------------------------------------------------------------*/
309
308
/* Consumer Media Key
310
309
*------------------------------------------------------------------*/
311
- bool BLEHidAdafruit::consumerReport (uint16_t usage_code)
310
+ bool BLEHidAdafruit::consumerReport (uint16_t conn_hdl, uint16_t usage_code)
312
311
{
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));
314
313
}
315
314
316
- bool BLEHidAdafruit::consumerKeyPress (uint16_t usage_code)
315
+ bool BLEHidAdafruit::consumerKeyPress (uint16_t conn_hdl, uint16_t usage_code)
317
316
{
318
- return consumerReport (usage_code);
317
+ return consumerReport (conn_hdl, usage_code);
319
318
}
320
319
321
- bool BLEHidAdafruit::consumerKeyRelease (void )
320
+ bool BLEHidAdafruit::consumerKeyRelease (uint16_t conn_hdl )
322
321
{
323
322
uint16_t usage = 0 ;
324
- return consumerReport (usage);
323
+ return consumerReport (conn_hdl, usage);
325
324
}
326
325
327
326
/* ------------------------------------------------------------------*/
328
327
/* Mouse
329
328
*------------------------------------------------------------------*/
330
- bool BLEHidAdafruit::mouseReport (hid_mouse_report_t * report)
329
+ bool BLEHidAdafruit::mouseReport (uint16_t conn_hdl, hid_mouse_report_t * report)
331
330
{
332
331
if ( isBootMode () )
333
332
{
334
- return bootMouseReport (report, sizeof (hid_mouse_report_t ));
333
+ return bootMouseReport (conn_hdl, report, sizeof (hid_mouse_report_t ));
335
334
}else
336
335
{
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 ));
338
337
}
339
338
}
340
339
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)
342
341
{
343
342
hid_mouse_report_t report =
344
343
{
@@ -351,31 +350,114 @@ bool BLEHidAdafruit::mouseReport(uint8_t buttons, int8_t x, int8_t y, int8_t whe
351
350
352
351
_mse_buttons = buttons;
353
352
354
- return mouseReport (&report);
353
+ return mouseReport (conn_hdl, &report);
355
354
}
356
355
357
- bool BLEHidAdafruit::mouseButtonPress (uint8_t buttons)
356
+ bool BLEHidAdafruit::mouseButtonPress (uint16_t conn_hdl, uint8_t buttons)
358
357
{
359
358
_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);
361
442
}
362
443
363
444
bool BLEHidAdafruit::mouseButtonRelease (void )
364
445
{
365
- return mouseReport ( 0 , 0 , 0 , 0 , 0 );
446
+ return mouseButtonRelease (BLE_GATT_HANDLE_INVALID );
366
447
}
367
448
368
449
bool BLEHidAdafruit::mouseMove (int8_t x, int8_t y)
369
450
{
370
- return mouseReport (_mse_buttons , x, y, 0 , 0 );
451
+ return mouseMove (BLE_GATT_HANDLE_INVALID , x, y);
371
452
}
372
453
373
454
bool BLEHidAdafruit::mouseScroll (int8_t scroll)
374
455
{
375
- return mouseReport (_mse_buttons, 0 , 0 , scroll, 0 );
456
+ return mouseScroll (BLE_GATT_HANDLE_INVALID, scroll);
376
457
}
377
458
378
459
bool BLEHidAdafruit::mousePan (int8_t pan)
379
460
{
380
- return mouseReport (_mse_buttons, 0 , 0 , 0 , pan);
461
+ return mousePan (BLE_GATT_HANDLE_INVALID , pan);
381
462
}
463
+
0 commit comments