Skip to content

Commit a092479

Browse files
committed
more central hid code
1 parent 98e6963 commit a092479

File tree

4 files changed

+49
-15
lines changed

4 files changed

+49
-15
lines changed

libraries/Bluefruit52Lib/examples/Central/central_hid/central_hid.ino

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ void connect_callback(uint16_t conn_handle)
8383
{
8484
Serial.println("Found it");
8585

86+
// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.hid_information.xml
87+
uint8_t hidInfo[4];
88+
hid.getHidInfo(hidInfo);
89+
90+
Serial.printf("HID version: %d.%d\n", hidInfo[0], hidInfo[1]);
91+
Serial.print("Country code: "); Serial.println(hidInfo[2]);
92+
Serial.printf("HID Flags : 0x%02X\n", hidInfo[3]);
93+
94+
8695
// Serial.println("Enable TXD's notify");
8796
// clientUart.enableTXD();
8897

libraries/Bluefruit52Lib/src/BLEGap.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ class BLEGap
7979
void configPrphConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
8080
void configCentralConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
8181

82+
// bool requestPairing (uint16_t conn_handle);
83+
8284
/*------------------------------------------------------------------*/
8385
/* INTERNAL USAGE ONLY
8486
* Although declare as public, it is meant to be invoked by internal
@@ -108,6 +110,9 @@ class BLEGap
108110

109111
SemaphoreHandle_t indicate_confirm_sem;
110112
bool hvc_received;
113+
114+
// not really peer data
115+
// ble_gap_sec_params_t sec_param;
111116
} gap_peer_t;
112117

113118
gap_peer_t _peers[BLE_MAX_CONN];

libraries/Bluefruit52Lib/src/clients/BLEClientHidAdafruit.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,40 +36,33 @@
3636

3737
#include "bluefruit.h"
3838

39-
void kbd_client_notify_cb(BLEClientCharacteristic* chr, uint8_t* data, uint16_t len)
40-
{
41-
42-
}
43-
44-
void mouse_client_notify_cb(BLEClientCharacteristic* chr, uint8_t* data, uint16_t len)
45-
{
46-
47-
}
48-
4939
BLEClientHidAdafruit::BLEClientHidAdafruit(void)
5040
: BLEClientService(UUID16_SVC_HUMAN_INTERFACE_DEVICE),
5141
_protcol_mode(UUID16_CHR_PROTOCOL_MODE),
5242
_kbd_boot_input(UUID16_CHR_BOOT_KEYBOARD_INPUT_REPORT), _kbd_boot_output(UUID16_CHR_BOOT_KEYBOARD_OUTPUT_REPORT),
5343
_mouse_boot_input(UUID16_CHR_BOOT_MOUSE_INPUT_REPORT),
5444
_hid_info(UUID16_CHR_HID_INFORMATION), _hid_control(UUID16_CHR_HID_CONTROL_POINT)
5545
{
56-
_country = 0;
5746
}
5847

5948
bool BLEClientHidAdafruit::begin(void)
6049
{
6150
// Invoke base class begin()
6251
BLEClientService::begin();
6352

53+
_protcol_mode.begin(this);
54+
_hid_info.begin(this);
55+
_hid_control.begin(this);
56+
6457
_kbd_boot_input.begin(this);
6558
_kbd_boot_output.begin(this);
6659

6760
_mouse_boot_input.begin(this);
6861

69-
// set notify callback
70-
_kbd_boot_input.setNotifyCallback(kbd_client_notify_cb);
71-
_mouse_boot_input.setNotifyCallback(mouse_client_notify_cb);
7262

63+
// set notify callback
64+
// _kbd_boot_input.setNotifyCallback(kbd_client_notify_cb);
65+
// _mouse_boot_input.setNotifyCallback(mouse_client_notify_cb);
7366
}
7467

7568
bool BLEClientHidAdafruit::discover(uint16_t conn_handle)
@@ -88,6 +81,19 @@ bool BLEClientHidAdafruit::discover(uint16_t conn_handle)
8881
return true;
8982
}
9083

84+
bool BLEClientHidAdafruit::getHidInfo(uint8_t info[4])
85+
{
86+
return 4 == _hid_info.read(info, 4);
87+
}
88+
89+
uint8_t BLEClientHidAdafruit::getCountryCode(void)
90+
{
91+
uint8_t info[4] = { 0 };
92+
getHidInfo(info);
93+
94+
return info[2];
95+
}
96+
9197
bool BLEClientHidAdafruit::keyboardPresent(void)
9298
{
9399
return _kbd_boot_input.discovered() && _kbd_boot_output.discovered();

libraries/Bluefruit52Lib/src/clients/BLEClientHidAdafruit.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,36 @@
4646
class BLEClientHidAdafruit : public BLEClientService
4747
{
4848
public:
49+
// Callback Signatures
50+
typedef void (*kbd_callback_t ) (uint8_t modifier, uint8_t keycode[6]);
51+
typedef void (*mouse_callback_t ) (uint8_t buttons, int8_t x, int8_t y, int8_t wheel, int8_t pan);
52+
4953
BLEClientHidAdafruit(void);
5054

5155
virtual bool begin(void);
5256
virtual bool discover(uint16_t conn_handle);
5357

58+
bool getHidInfo(uint8_t info[4]);
59+
uint8_t getCountryCode(void);
60+
61+
// Check if peripheral support keyboard/mouse
5462
bool keyboardPresent(void);
5563
bool mousePresent(void);
5664

65+
// Enable/Disable report notification for keyboard/mouse
5766
bool enableKeyboard(void);
5867
bool disableKeyboard(void);
5968

6069
bool enableMouse(void);
6170
bool disableMouse(void);
6271

72+
// Report callback
73+
void setKeyboardReportCallback(kbd_callback_t fp);
74+
void setMouseReportCallback(mouse_callback_t fp);
75+
6376
private:
64-
uint8_t _country;
77+
kbd_callback_t _kbd_cb;
78+
mouse_callback_t _mouse_cb;
6579

6680
// Only support Boot protocol for keyboard and Mouse
6781
BLEClientCharacteristic _protcol_mode;

0 commit comments

Comments
 (0)