18#ifndef NIMBLE_CPP_HIDDEVICE_H_
19#define NIMBLE_CPP_HIDDEVICE_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_ROLE_PERIPHERAL)
27# define GENERIC_HID 0x03C0
28# define HID_KEYBOARD 0x03C1
29# define HID_MOUSE 0x03C2
30# define HID_JOYSTICK 0x03C3
31# define HID_GAMEPAD 0x03C4
32# define HID_TABLET 0x03C5
33# define HID_CARD_READER 0x03C6
34# define HID_DIGITAL_PEN 0x03C7
35# define HID_BARCODE 0x03C8
37# define PNPVersionField(MajorVersion, MinorVersion, PatchVersion) \
38 ((MajorVersion << 16) & 0xFF00) | ((MinorVersion << 8) & 0x00F0) | (PatchVersion & 0x000F)
42class NimBLECharacteristic;
47class NimBLEHIDDevice {
49 NimBLEHIDDevice(NimBLEServer* server);
51 void setReportMap(uint8_t* map, uint16_t);
52 void startServices() __attribute__((deprecated("Services are now started by the server when start() is called, "
53 "this function is no longer needed and will be removed in a future release.")));
54 bool setManufacturer(const std::
string& name);
55 void setPnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version);
56 void setHidInfo(uint8_t country, uint8_t flags);
57 void setBatteryLevel(uint8_t level,
bool notify = false);
58 NimBLECharacteristic* getBatteryLevel();
59 NimBLECharacteristic* getReportMap();
60 NimBLECharacteristic* getHidControl();
61 NimBLECharacteristic* getInputReport(uint8_t reportId);
62 NimBLECharacteristic* getOutputReport(uint8_t reportId);
63 NimBLECharacteristic* getFeatureReport(uint8_t reportId);
64 NimBLECharacteristic* getProtocolMode();
65 NimBLECharacteristic* getBootInput();
66 NimBLECharacteristic* getBootOutput();
67 NimBLECharacteristic* getPnp();
68 NimBLECharacteristic* getHidInfo();
69 NimBLEService* getDeviceInfoService();
70 NimBLEService* getHidService();
71 NimBLEService* getBatteryService();
74 NimBLEService* m_deviceInfoSvc{
nullptr};
75 NimBLEService* m_hidSvc{
nullptr};
76 NimBLEService* m_batterySvc{
nullptr};
78 NimBLECharacteristic* m_manufacturerChr{
nullptr};
79 NimBLECharacteristic* m_pnpChr{
nullptr};
80 NimBLECharacteristic* m_hidInfoChr{
nullptr};
81 NimBLECharacteristic* m_reportMapChr{
nullptr};
82 NimBLECharacteristic* m_hidControlChr{
nullptr};
83 NimBLECharacteristic* m_protocolModeChr{
nullptr};
84 NimBLECharacteristic* m_batteryLevelChr{
nullptr};
86 NimBLECharacteristic* locateReportCharacteristicByIdAndType(uint8_t reportId, uint8_t reportType);