@@ -46,6 +46,8 @@ BLEHidGeneric::BLEHidGeneric(uint8_t num_input, uint8_t num_output, uint8_t num_
4646 : BLEService(UUID16_SVC_HUMAN_INTERFACE_DEVICE), _chr_control(UUID16_CHR_HID_CONTROL_POINT)
4747{
4848 _has_keyboard = _has_mouse = false ;
49+ _protocol_mode = 1 ; // report mode
50+
4951 _report_map = NULL ;
5052 _report_map_len = 0 ;
5153
@@ -88,6 +90,9 @@ BLEHidGeneric::BLEHidGeneric(uint8_t num_input, uint8_t num_output, uint8_t num_
8890 }
8991}
9092
93+ /* ------------------------------------------------------------------*/
94+ /* CONFIG
95+ *------------------------------------------------------------------*/
9196void BLEHidGeneric::enableKeyboard (bool enable)
9297{
9398 _has_keyboard = enable;
@@ -98,7 +103,6 @@ void BLEHidGeneric::enableMouse(bool enable)
98103 _has_mouse = enable;
99104}
100105
101-
102106void BLEHidGeneric::setHidInfo (uint16_t bcd, uint8_t country, uint8_t flags)
103107{
104108 memcpy (_hid_info, &bcd, 2 );
@@ -124,6 +128,10 @@ void BLEHidGeneric::setOutputReportCallback(uint8_t reportID, output_report_cb_t
124128 _output_cbs[reportID] = fp;
125129}
126130
131+ /* ------------------------------------------------------------------*/
132+ /* Callbacks
133+ *------------------------------------------------------------------*/
134+ // TODO output report
127135COMMENT_OUT (
128136void blehidgeneric_output_cb (BLECharacteristic& chr, ble_gatts_evt_write_t * request)
129137{
@@ -134,6 +142,17 @@ void blehidgeneric_output_cb(BLECharacteristic& chr, ble_gatts_evt_write_t* requ
134142}
135143)
136144
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+ *------------------------------------------------------------------*/
137156err_t BLEHidGeneric::begin (void )
138157{
139158 VERIFY ( (_report_map != NULL ) && _report_map_len, NRF_ERROR_INVALID_PARAM);
@@ -149,8 +168,9 @@ err_t BLEHidGeneric::begin(void)
149168
150169 _chr_protocol->setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE_WO_RESP);
151170 _chr_protocol->setFixedLen (1 );
171+ _chr_protocol->setWriteCallback (blehid_generic_protocol_mode_cb);
152172 VERIFY_STATUS ( _chr_protocol->begin () );
153- _chr_protocol->write8 (1 );
173+ _chr_protocol->write8 (_protocol_mode );
154174 }
155175
156176 // Input reports
@@ -242,6 +262,9 @@ err_t BLEHidGeneric::begin(void)
242262 return ERROR_NONE;
243263}
244264
265+ /* ------------------------------------------------------------------*/
266+ /* Input Report
267+ *------------------------------------------------------------------*/
245268bool BLEHidGeneric::inputReport (uint8_t reportID, void const * data, int len)
246269{
247270 // 0 will treated as report ID = 1
@@ -250,6 +273,16 @@ bool BLEHidGeneric::inputReport(uint8_t reportID, void const* data, int len)
250273 return _chr_inputs[reportID-1 ].notify ( (uint8_t const *) data, len);
251274}
252275
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+
253286/* ------------------------------------------------------------------*/
254287/*
255288 *------------------------------------------------------------------*/
0 commit comments