mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-23 13:40:55 +01:00
WIP
This commit is contained in:
parent
5f2730de02
commit
198b045380
2 changed files with 155 additions and 149 deletions
|
@ -15,8 +15,8 @@
|
||||||
#include "nimconfig.h"
|
#include "nimconfig.h"
|
||||||
#if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
#if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
||||||
|
|
||||||
#include "NimBLEHIDDevice.h"
|
# include "NimBLEHIDDevice.h"
|
||||||
#include "NimBLE2904.h"
|
# include "NimBLE2904.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Construct a default NimBLEHIDDevice object.
|
* @brief Construct a default NimBLEHIDDevice object.
|
||||||
|
@ -47,13 +47,15 @@ NimBLEHIDDevice::NimBLEHIDDevice(NimBLEServer* server) {
|
||||||
m_hidInfoCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4a, NIMBLE_PROPERTY::READ);
|
m_hidInfoCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4a, NIMBLE_PROPERTY::READ);
|
||||||
m_reportMapCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4b, NIMBLE_PROPERTY::READ);
|
m_reportMapCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4b, NIMBLE_PROPERTY::READ);
|
||||||
m_hidControlCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4c, NIMBLE_PROPERTY::WRITE_NR);
|
m_hidControlCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4c, NIMBLE_PROPERTY::WRITE_NR);
|
||||||
m_protocolModeCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4e, NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::READ);
|
m_protocolModeCharacteristic =
|
||||||
|
m_hidService->createCharacteristic((uint16_t)0x2a4e, NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::READ);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mandatory battery level characteristic with notification and presence descriptor
|
* Mandatory battery level characteristic with notification and presence descriptor
|
||||||
*/
|
*/
|
||||||
m_batteryLevelCharacteristic = m_batteryService->createCharacteristic((uint16_t)0x2a19, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
|
m_batteryLevelCharacteristic =
|
||||||
NimBLE2904 *batteryLevelDescriptor = (NimBLE2904*)m_batteryLevelCharacteristic->createDescriptor((uint16_t)0x2904);
|
m_batteryService->createCharacteristic((uint16_t)0x2a19, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
|
||||||
|
NimBLE2904* batteryLevelDescriptor = (NimBLE2904*)m_batteryLevelCharacteristic->createDescriptor((uint16_t)0x2904);
|
||||||
batteryLevelDescriptor->setFormat(NimBLE2904::FORMAT_UINT8);
|
batteryLevelDescriptor->setFormat(NimBLE2904::FORMAT_UINT8);
|
||||||
batteryLevelDescriptor->setNamespace(1);
|
batteryLevelDescriptor->setNamespace(1);
|
||||||
batteryLevelDescriptor->setUnit(0x27ad);
|
batteryLevelDescriptor->setUnit(0x27ad);
|
||||||
|
@ -62,11 +64,8 @@ NimBLEHIDDevice::NimBLEHIDDevice(NimBLEServer* server) {
|
||||||
* This value is setup here because its default value in most usage cases, its very rare to use boot mode
|
* This value is setup here because its default value in most usage cases, its very rare to use boot mode
|
||||||
* and we want to simplify library using as much as possible
|
* and we want to simplify library using as much as possible
|
||||||
*/
|
*/
|
||||||
const uint8_t pMode[] = {0x01};
|
const uint8_t pMode{0x01};
|
||||||
protocolMode()->setValue((uint8_t*)pMode, 1);
|
protocolMode()->setValue(pMode);
|
||||||
}
|
|
||||||
|
|
||||||
NimBLEHIDDevice::~NimBLEHIDDevice() {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,7 +102,7 @@ NimBLECharacteristic* NimBLEHIDDevice::manufacturer() {
|
||||||
* @brief Set manufacturer name
|
* @brief Set manufacturer name
|
||||||
* @param [in] name The manufacturer name of this HID device.
|
* @param [in] name The manufacturer name of this HID device.
|
||||||
*/
|
*/
|
||||||
void NimBLEHIDDevice::manufacturer(std::string name) {
|
void NimBLEHIDDevice::manufacturer(const std::string& name) {
|
||||||
manufacturer()->setValue(name);
|
manufacturer()->setValue(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,15 +114,13 @@ void NimBLEHIDDevice::manufacturer(std::string name) {
|
||||||
* @param [in] version The produce version number.
|
* @param [in] version The produce version number.
|
||||||
*/
|
*/
|
||||||
void NimBLEHIDDevice::pnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version) {
|
void NimBLEHIDDevice::pnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version) {
|
||||||
uint8_t pnp[] = {
|
uint8_t pnp[] = {sig,
|
||||||
sig,
|
|
||||||
((uint8_t*)&vid)[0],
|
((uint8_t*)&vid)[0],
|
||||||
((uint8_t*)&vid)[1],
|
((uint8_t*)&vid)[1],
|
||||||
((uint8_t*)&pid)[0],
|
((uint8_t*)&pid)[0],
|
||||||
((uint8_t*)&pid)[1],
|
((uint8_t*)&pid)[1],
|
||||||
((uint8_t*)&version)[0],
|
((uint8_t*)&version)[0],
|
||||||
((uint8_t*)&version)[1]
|
((uint8_t*)&version)[1]};
|
||||||
};
|
|
||||||
m_pnpCharacteristic->setValue(pnp, sizeof(pnp));
|
m_pnpCharacteristic->setValue(pnp, sizeof(pnp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,8 +140,11 @@ void NimBLEHIDDevice::hidInfo(uint8_t country, uint8_t flags) {
|
||||||
* @return pointer to new input report characteristic
|
* @return pointer to new input report characteristic
|
||||||
*/
|
*/
|
||||||
NimBLECharacteristic* NimBLEHIDDevice::inputReport(uint8_t reportID) {
|
NimBLECharacteristic* NimBLEHIDDevice::inputReport(uint8_t reportID) {
|
||||||
NimBLECharacteristic *inputReportCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4d, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY | NIMBLE_PROPERTY::READ_ENC);
|
NimBLECharacteristic* inputReportCharacteristic =
|
||||||
NimBLEDescriptor *inputReportDescriptor = inputReportCharacteristic->createDescriptor((uint16_t)0x2908, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
m_hidService->createCharacteristic((uint16_t)0x2a4d,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
NimBLEDescriptor* inputReportDescriptor =
|
||||||
|
inputReportCharacteristic->createDescriptor((uint16_t)0x2908, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
|
||||||
uint8_t desc1_val[] = {reportID, 0x01};
|
uint8_t desc1_val[] = {reportID, 0x01};
|
||||||
inputReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
inputReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
||||||
|
@ -158,8 +158,13 @@ NimBLECharacteristic* NimBLEHIDDevice::inputReport(uint8_t reportID) {
|
||||||
* @return Pointer to new output report characteristic
|
* @return Pointer to new output report characteristic
|
||||||
*/
|
*/
|
||||||
NimBLECharacteristic* NimBLEHIDDevice::outputReport(uint8_t reportID) {
|
NimBLECharacteristic* NimBLEHIDDevice::outputReport(uint8_t reportID) {
|
||||||
NimBLECharacteristic *outputReportCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4d, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
NimBLECharacteristic* outputReportCharacteristic =
|
||||||
NimBLEDescriptor *outputReportDescriptor = outputReportCharacteristic->createDescriptor((uint16_t)0x2908, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
m_hidService->createCharacteristic((uint16_t)0x2a4d,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_NR |
|
||||||
|
NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
||||||
|
NimBLEDescriptor* outputReportDescriptor = outputReportCharacteristic->createDescriptor(
|
||||||
|
(uint16_t)0x2908,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
||||||
|
|
||||||
uint8_t desc1_val[] = {reportID, 0x02};
|
uint8_t desc1_val[] = {reportID, 0x02};
|
||||||
outputReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
outputReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
||||||
|
@ -173,8 +178,12 @@ NimBLECharacteristic* NimBLEHIDDevice::outputReport(uint8_t reportID) {
|
||||||
* @return Pointer to new feature report characteristic
|
* @return Pointer to new feature report characteristic
|
||||||
*/
|
*/
|
||||||
NimBLECharacteristic* NimBLEHIDDevice::featureReport(uint8_t reportID) {
|
NimBLECharacteristic* NimBLEHIDDevice::featureReport(uint8_t reportID) {
|
||||||
NimBLECharacteristic *featureReportCharacteristic = m_hidService->createCharacteristic((uint16_t)0x2a4d, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
NimBLECharacteristic* featureReportCharacteristic = m_hidService->createCharacteristic(
|
||||||
NimBLEDescriptor *featureReportDescriptor = featureReportCharacteristic->createDescriptor((uint16_t)0x2908, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
(uint16_t)0x2a4d,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
||||||
|
NimBLEDescriptor* featureReportDescriptor = featureReportCharacteristic->createDescriptor(
|
||||||
|
(uint16_t)0x2908,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::READ_ENC | NIMBLE_PROPERTY::WRITE_ENC);
|
||||||
|
|
||||||
uint8_t desc1_val[] = {reportID, 0x03};
|
uint8_t desc1_val[] = {reportID, 0x03};
|
||||||
featureReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
featureReportDescriptor->setValue((uint8_t*)desc1_val, 2);
|
||||||
|
@ -193,7 +202,8 @@ NimBLECharacteristic* NimBLEHIDDevice::bootInput() {
|
||||||
* @brief Create a keyboard boot output report characteristic
|
* @brief Create a keyboard boot output report characteristic
|
||||||
*/
|
*/
|
||||||
NimBLECharacteristic* NimBLEHIDDevice::bootOutput() {
|
NimBLECharacteristic* NimBLEHIDDevice::bootOutput() {
|
||||||
return m_hidService->createCharacteristic((uint16_t)0x2a32, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_NR);
|
return m_hidService->createCharacteristic((uint16_t)0x2a32,
|
||||||
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_NR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -12,54 +12,50 @@
|
||||||
* Author: chegewara
|
* Author: chegewara
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _BLEHIDDEVICE_H_
|
#ifndef NIMBLE_CPP_HIDDEVICE_H_
|
||||||
#define _BLEHIDDEVICE_H_
|
#define NIMBLE_CPP_HIDDEVICE_H_
|
||||||
|
|
||||||
#include "nimconfig.h"
|
#include "nimconfig.h"
|
||||||
#if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_BROADCASTER)
|
#if defined(CONFIG_BT_ENABLED) && defined(CONFIG_BT_NIMBLE_ROLE_BROADCASTER) && defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
|
||||||
|
|
||||||
#include "NimBLECharacteristic.h"
|
#include <stdint.h>
|
||||||
#include "NimBLEService.h"
|
#include <string>
|
||||||
#include "NimBLEDescriptor.h"
|
|
||||||
#include "HIDTypes.h"
|
|
||||||
|
|
||||||
#define GENERIC_HID 0x03C0
|
# define GENERIC_HID 0x03C0
|
||||||
#define HID_KEYBOARD 0x03C1
|
# define HID_KEYBOARD 0x03C1
|
||||||
#define HID_MOUSE 0x03C2
|
# define HID_MOUSE 0x03C2
|
||||||
#define HID_JOYSTICK 0x03C3
|
# define HID_JOYSTICK 0x03C3
|
||||||
#define HID_GAMEPAD 0x03C4
|
# define HID_GAMEPAD 0x03C4
|
||||||
#define HID_TABLET 0x03C5
|
# define HID_TABLET 0x03C5
|
||||||
#define HID_CARD_READER 0x03C6
|
# define HID_CARD_READER 0x03C6
|
||||||
#define HID_DIGITAL_PEN 0x03C7
|
# define HID_DIGITAL_PEN 0x03C7
|
||||||
#define HID_BARCODE 0x03C8
|
# define HID_BARCODE 0x03C8
|
||||||
|
|
||||||
#define PNPVersionField(MajorVersion, MinorVersion, PatchVersion) ((MajorVersion << 16) & 0xFF00) | ((MinorVersion << 8) & 0x00F0) | (PatchVersion & 0x000F)
|
# define PNPVersionField(MajorVersion, MinorVersion, PatchVersion) \
|
||||||
|
((MajorVersion << 16) & 0xFF00) | ((MinorVersion << 8) & 0x00F0) | (PatchVersion & 0x000F)
|
||||||
|
|
||||||
|
class NimBLEServer;
|
||||||
|
class NimBLEService;
|
||||||
|
class NimBLECharacteristic;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A model of a %BLE Human Interface Device.
|
* @brief A model of a BLE Human Interface Device.
|
||||||
*/
|
*/
|
||||||
class NimBLEHIDDevice {
|
class NimBLEHIDDevice {
|
||||||
public:
|
public:
|
||||||
NimBLEHIDDevice(NimBLEServer*);
|
NimBLEHIDDevice(NimBLEServer* server);
|
||||||
virtual ~NimBLEHIDDevice();
|
|
||||||
|
|
||||||
void reportMap(uint8_t* map, uint16_t);
|
void reportMap(uint8_t* map, uint16_t);
|
||||||
void startServices();
|
void startServices();
|
||||||
|
|
||||||
NimBLEService* deviceInfo();
|
NimBLEService* deviceInfo();
|
||||||
NimBLEService* hidService();
|
NimBLEService* hidService();
|
||||||
NimBLEService* batteryService();
|
NimBLEService* batteryService();
|
||||||
|
|
||||||
NimBLECharacteristic* manufacturer();
|
NimBLECharacteristic* manufacturer();
|
||||||
void manufacturer(std::string name);
|
void manufacturer(const std::string& name);
|
||||||
//NimBLECharacteristic* pnp();
|
|
||||||
void pnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version);
|
void pnp(uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version);
|
||||||
//NimBLECharacteristic* hidInfo();
|
|
||||||
void hidInfo(uint8_t country, uint8_t flags);
|
void hidInfo(uint8_t country, uint8_t flags);
|
||||||
NimBLECharacteristic* batteryLevel();
|
|
||||||
void setBatteryLevel(uint8_t level);
|
void setBatteryLevel(uint8_t level);
|
||||||
|
NimBLECharacteristic* batteryLevel();
|
||||||
|
|
||||||
NimBLECharacteristic* reportMap();
|
NimBLECharacteristic* reportMap();
|
||||||
NimBLECharacteristic* hidControl();
|
NimBLECharacteristic* hidControl();
|
||||||
NimBLECharacteristic* inputReport(uint8_t reportID);
|
NimBLECharacteristic* inputReport(uint8_t reportID);
|
||||||
|
@ -69,19 +65,19 @@ public:
|
||||||
NimBLECharacteristic* bootInput();
|
NimBLECharacteristic* bootInput();
|
||||||
NimBLECharacteristic* bootOutput();
|
NimBLECharacteristic* bootOutput();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NimBLEService* m_deviceInfoService; //0x180a
|
NimBLEService* m_deviceInfoService; // 0x180a
|
||||||
NimBLEService* m_hidService; //0x1812
|
NimBLEService* m_hidService; // 0x1812
|
||||||
NimBLEService* m_batteryService = 0; //0x180f
|
NimBLEService* m_batteryService = 0; // 0x180f
|
||||||
|
|
||||||
NimBLECharacteristic* m_manufacturerCharacteristic; //0x2a29
|
NimBLECharacteristic* m_manufacturerCharacteristic; // 0x2a29
|
||||||
NimBLECharacteristic* m_pnpCharacteristic; //0x2a50
|
NimBLECharacteristic* m_pnpCharacteristic; // 0x2a50
|
||||||
NimBLECharacteristic* m_hidInfoCharacteristic; //0x2a4a
|
NimBLECharacteristic* m_hidInfoCharacteristic; // 0x2a4a
|
||||||
NimBLECharacteristic* m_reportMapCharacteristic; //0x2a4b
|
NimBLECharacteristic* m_reportMapCharacteristic; // 0x2a4b
|
||||||
NimBLECharacteristic* m_hidControlCharacteristic; //0x2a4c
|
NimBLECharacteristic* m_hidControlCharacteristic; // 0x2a4c
|
||||||
NimBLECharacteristic* m_protocolModeCharacteristic; //0x2a4e
|
NimBLECharacteristic* m_protocolModeCharacteristic; // 0x2a4e
|
||||||
NimBLECharacteristic* m_batteryLevelCharacteristic; //0x2a19
|
NimBLECharacteristic* m_batteryLevelCharacteristic; // 0x2a19
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_BROADCASTER */
|
#endif /* CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_BROADCASTER && defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) */
|
||||||
#endif /* _BLEHIDDEVICE_H_ */
|
#endif /* NIMBLE_CPP_HIDDEVICE_H_ */
|
||||||
|
|
Loading…
Reference in a new issue