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);
53 bool setManufacturer(
const std::string& name);
54 void setPnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version);
55 void setHidInfo(uint8_t country, uint8_t flags);
56 void setBatteryLevel(uint8_t level,
bool notify =
false);
57 NimBLECharacteristic* getBatteryLevel();
58 NimBLECharacteristic* getReportMap();
59 NimBLECharacteristic* getHidControl();
60 NimBLECharacteristic* getInputReport(uint8_t reportId);
61 NimBLECharacteristic* getOutputReport(uint8_t reportId);
62 NimBLECharacteristic* getFeatureReport(uint8_t reportId);
63 NimBLECharacteristic* getProtocolMode();
64 NimBLECharacteristic* getBootInput();
65 NimBLECharacteristic* getBootOutput();
66 NimBLECharacteristic* getPnp();
67 NimBLECharacteristic* getHidInfo();
68 NimBLEService* getDeviceInfoService();
69 NimBLEService* getHidService();
70 NimBLEService* getBatteryService();
73 NimBLEService* m_deviceInfoSvc{
nullptr};
74 NimBLEService* m_hidSvc{
nullptr};
75 NimBLEService* m_batterySvc{
nullptr};
77 NimBLECharacteristic* m_manufacturerChr{
nullptr};
78 NimBLECharacteristic* m_pnpChr{
nullptr};
79 NimBLECharacteristic* m_hidInfoChr{
nullptr};
80 NimBLECharacteristic* m_reportMapChr{
nullptr};
81 NimBLECharacteristic* m_hidControlChr{
nullptr};
82 NimBLECharacteristic* m_protocolModeChr{
nullptr};
83 NimBLECharacteristic* m_batteryLevelChr{
nullptr};
85 NimBLECharacteristic* locateReportCharacteristicByIdAndType(uint8_t reportId, uint8_t reportType);