#ifndef _BLEHIDDEVICE_H_
#define _BLEHIDDEVICE_H_
#include "sdkconfig.h"
#if defined(CONFIG_BT_ENABLED)
#include "BLECharacteristic.h"
#include "BLEService.h"
#include "BLEDescriptor.h"
#include "BLE2902.h"
#include "HIDTypes.h"
#define GENERIC_HID 960
#define HID_KEYBOARD 961
#define HID_MOUSE 962
#define HID_JOYSTICK 963
#define HID_GAMEPAD 964
#define HID_TABLET 965
#define HID_CARD_READER 966
#define HID_DIGITAL_PEN 967
#define HID_BARCODE 968
class BLEHIDDevice {
public:
BLEHIDDevice(BLEServer*);
virtual ~BLEHIDDevice();
void reportMap(uint8_t* map, uint16_t);
void startServices();
BLEService* deviceInfo();
BLEService* hidService();
BLEService* batteryService();
BLECharacteristic* manufacturer();
void manufacturer(std::string name);
void pnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version);
void hidInfo(uint8_t country, uint8_t flags);
void setBatteryLevel(uint8_t level);
BLECharacteristic* hidControl();
BLECharacteristic* inputReport(uint8_t reportID);
BLECharacteristic* outputReport(uint8_t reportID);
BLECharacteristic* featureReport(uint8_t reportID);
BLECharacteristic* protocolMode();
BLECharacteristic* bootInput();
BLECharacteristic* bootOutput();
private:
BLEService* m_deviceInfoService;
BLEService* m_hidService;
BLEService* m_batteryService = 0;
BLECharacteristic* m_manufacturerCharacteristic;
BLECharacteristic* m_pnpCharacteristic;
BLECharacteristic* m_hidInfoCharacteristic;
BLECharacteristic* m_reportMapCharacteristic;
BLECharacteristic* m_hidControlCharacteristic;
BLECharacteristic* m_protocolModeCharacteristic;
BLECharacteristic* m_batteryLevelCharacteristic;
};
#endif
#endif