mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-24 14:10:55 +01:00
Merge branch 'h2zero:master' into master
This commit is contained in:
commit
88b465e0fd
11 changed files with 64 additions and 41 deletions
|
@ -66,7 +66,7 @@ If false the service is only removed from visibility by clients. The pointers to
|
||||||
# Advertising
|
# Advertising
|
||||||
`NimBLEAdvertising::start`
|
`NimBLEAdvertising::start`
|
||||||
|
|
||||||
Now takes 2 optional parameters, the first is the duration to advertise for (in seconds), the second is a callback that is invoked when advertising ends and takes a pointer to a `NimBLEAdvertising` object (similar to the `NimBLEScan::start` API).
|
Now takes 2 optional parameters, the first is the duration to advertise for (in milliseconds), the second is a callback that is invoked when advertising ends and takes a pointer to a `NimBLEAdvertising` object (similar to the `NimBLEScan::start` API).
|
||||||
|
|
||||||
This provides an opportunity to update the advertisement data if desired.
|
This provides an opportunity to update the advertisement data if desired.
|
||||||
|
|
||||||
|
|
|
@ -255,7 +255,7 @@ Calling `NimBLEAdvertising::setAdvertisementData` will entirely replace any data
|
||||||
|
|
||||||
> BLEAdvertising::start (NimBLEAdvertising::start)
|
> BLEAdvertising::start (NimBLEAdvertising::start)
|
||||||
|
|
||||||
Now takes 2 optional parameters, the first is the duration to advertise for (in seconds), the second is a callback that is invoked when advertising ends and takes a pointer to a `NimBLEAdvertising` object (similar to the `NimBLEScan::start` API).
|
Now takes 2 optional parameters, the first is the duration to advertise for (in milliseconds), the second is a callback that is invoked when advertising ends and takes a pointer to a `NimBLEAdvertising` object (similar to the `NimBLEScan::start` API).
|
||||||
This provides an opportunity to update the advertisement data if desired.
|
This provides an opportunity to update the advertisement data if desired.
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|
|
@ -146,8 +146,8 @@ bool connectToServer() {
|
||||||
* Min interval: 12 * 1.25ms = 15, Max interval: 12 * 1.25ms = 15, 0 latency, 12 * 10ms = 120ms timeout
|
* Min interval: 12 * 1.25ms = 15, Max interval: 12 * 1.25ms = 15, 0 latency, 12 * 10ms = 120ms timeout
|
||||||
*/
|
*/
|
||||||
pClient->setConnectionParams(6,6,0,15);
|
pClient->setConnectionParams(6,6,0,15);
|
||||||
/** Set how long we are willing to wait for the connection to complete (seconds), default is 30. */
|
/** Set how long we are willing to wait for the connection to complete (milliseconds), default is 30000. */
|
||||||
pClient->setConnectTimeout(5);
|
pClient->setConnectTimeout(5 * 1000);
|
||||||
|
|
||||||
|
|
||||||
if (!pClient->connect(advDevice)) {
|
if (!pClient->connect(advDevice)) {
|
||||||
|
@ -358,7 +358,7 @@ void app_main (void){
|
||||||
* but will use more energy from both devices
|
* but will use more energy from both devices
|
||||||
*/
|
*/
|
||||||
pScan->setActiveScan(true);
|
pScan->setActiveScan(true);
|
||||||
/** Start scanning for advertisers for the scan time specified (in seconds) 0 = forever
|
/** Start scanning for advertisers for the scan time specified (in milliseconds) 0 = forever
|
||||||
* Optional callback for when scanning stops.
|
* Optional callback for when scanning stops.
|
||||||
*/
|
*/
|
||||||
pScan->start(scanTime);
|
pScan->start(scanTime);
|
||||||
|
|
|
@ -154,7 +154,7 @@ void app_main (void) {
|
||||||
*/
|
*/
|
||||||
pScan->setActiveScan(true);
|
pScan->setActiveScan(true);
|
||||||
|
|
||||||
/* Start scanning for advertisers for the scan time specified (in seconds) 0 = forever
|
/* Start scanning for advertisers for the scan time specified (in milliseconds) 0 = forever
|
||||||
* Optional callback for when scanning stops.
|
* Optional callback for when scanning stops.
|
||||||
*/
|
*/
|
||||||
pScan->start(scanTime);
|
pScan->start(scanTime);
|
||||||
|
|
|
@ -403,7 +403,7 @@ void NimBLEAdvertising::setScanResponseData(NimBLEAdvertisementData& advertiseme
|
||||||
* @param [in] dirAddr The address of a peer to directly advertise to.
|
* @param [in] dirAddr The address of a peer to directly advertise to.
|
||||||
* @return True if advertising started successfully.
|
* @return True if advertising started successfully.
|
||||||
*/
|
*/
|
||||||
bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdvertising *pAdv), NimBLEAddress* dirAddr) {
|
bool NimBLEAdvertising::start(uint32_t duration, advCompleteCB_t advCompleteCB, NimBLEAddress* dirAddr) {
|
||||||
NIMBLE_LOGD(LOG_TAG, ">> Advertising start: customAdvData: %d, customScanResponseData: %d",
|
NIMBLE_LOGD(LOG_TAG, ">> Advertising start: customAdvData: %d, customScanResponseData: %d",
|
||||||
m_customAdvData, m_customScanResponseData);
|
m_customAdvData, m_customScanResponseData);
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "NimBLEUUID.h"
|
#include "NimBLEUUID.h"
|
||||||
#include "NimBLEAddress.h"
|
#include "NimBLEAddress.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
/* COMPATIBILITY - DO NOT USE */
|
/* COMPATIBILITY - DO NOT USE */
|
||||||
|
@ -44,6 +45,9 @@
|
||||||
#define ESP_BLE_ADV_FLAG_NON_LIMIT_DISC (0x00 )
|
#define ESP_BLE_ADV_FLAG_NON_LIMIT_DISC (0x00 )
|
||||||
/* ************************* */
|
/* ************************* */
|
||||||
|
|
||||||
|
class NimBLEAdvertising;
|
||||||
|
|
||||||
|
typedef std::function<void(NimBLEAdvertising*)> advCompleteCB_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Advertisement data set by the programmer to be published by the %BLE server.
|
* @brief Advertisement data set by the programmer to be published by the %BLE server.
|
||||||
|
@ -92,7 +96,7 @@ public:
|
||||||
void addServiceUUID(const NimBLEUUID &serviceUUID);
|
void addServiceUUID(const NimBLEUUID &serviceUUID);
|
||||||
void addServiceUUID(const char* serviceUUID);
|
void addServiceUUID(const char* serviceUUID);
|
||||||
void removeServiceUUID(const NimBLEUUID &serviceUUID);
|
void removeServiceUUID(const NimBLEUUID &serviceUUID);
|
||||||
bool start(uint32_t duration = 0, void (*advCompleteCB)(NimBLEAdvertising *pAdv) = nullptr, NimBLEAddress* dirAddr = nullptr);
|
bool start(uint32_t duration = 0, advCompleteCB_t advCompleteCB = nullptr, NimBLEAddress* dirAddr = nullptr);
|
||||||
bool stop();
|
bool stop();
|
||||||
void setAppearance(uint16_t appearance);
|
void setAppearance(uint16_t appearance);
|
||||||
void setName(const std::string &name);
|
void setName(const std::string &name);
|
||||||
|
@ -129,7 +133,7 @@ private:
|
||||||
bool m_customScanResponseData;
|
bool m_customScanResponseData;
|
||||||
bool m_scanResp;
|
bool m_scanResp;
|
||||||
bool m_advDataSet;
|
bool m_advDataSet;
|
||||||
void (*m_advCompCB)(NimBLEAdvertising *pAdv);
|
advCompleteCB_t m_advCompCB{nullptr};
|
||||||
uint8_t m_slaveItvl[4];
|
uint8_t m_slaveItvl[4];
|
||||||
uint32_t m_duration;
|
uint32_t m_duration;
|
||||||
std::vector<uint8_t> m_svcData16;
|
std::vector<uint8_t> m_svcData16;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
#ifndef CONFIG_NIMBLE_CPP_ATT_VALUE_TIMESTAMP_ENABLED
|
#ifndef CONFIG_NIMBLE_CPP_ATT_VALUE_TIMESTAMP_ENABLED
|
||||||
# define CONFIG_NIMBLE_CPP_ATT_VALUE_TIMESTAMP_ENABLED 0
|
# define CONFIG_NIMBLE_CPP_ATT_VALUE_TIMESTAMP_ENABLED 0
|
||||||
|
|
|
@ -35,6 +35,12 @@ NimBLEHIDDevice::NimBLEHIDDevice(NimBLEServer* server) {
|
||||||
*/
|
*/
|
||||||
m_pnpCharacteristic = m_deviceInfoService->createCharacteristic((uint16_t)0x2a50, NIMBLE_PROPERTY::READ);
|
m_pnpCharacteristic = m_deviceInfoService->createCharacteristic((uint16_t)0x2a50, NIMBLE_PROPERTY::READ);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Non-mandatory characteristics for device info service
|
||||||
|
* Will be created on demand
|
||||||
|
*/
|
||||||
|
m_manufacturerCharacteristic = nullptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mandatory characteristics for HID service
|
* Mandatory characteristics for HID service
|
||||||
*/
|
*/
|
||||||
|
@ -86,7 +92,10 @@ void NimBLEHIDDevice::startServices() {
|
||||||
* @brief Create a manufacturer characteristic (this characteristic is optional).
|
* @brief Create a manufacturer characteristic (this characteristic is optional).
|
||||||
*/
|
*/
|
||||||
NimBLECharacteristic* NimBLEHIDDevice::manufacturer() {
|
NimBLECharacteristic* NimBLEHIDDevice::manufacturer() {
|
||||||
|
if (m_manufacturerCharacteristic == nullptr) {
|
||||||
m_manufacturerCharacteristic = m_deviceInfoService->createCharacteristic((uint16_t)0x2a29, NIMBLE_PROPERTY::READ);
|
m_manufacturerCharacteristic = m_deviceInfoService->createCharacteristic((uint16_t)0x2a29, NIMBLE_PROPERTY::READ);
|
||||||
|
}
|
||||||
|
|
||||||
return m_manufacturerCharacteristic;
|
return m_manufacturerCharacteristic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +104,7 @@ NimBLECharacteristic* NimBLEHIDDevice::manufacturer() {
|
||||||
* @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(std::string name) {
|
||||||
m_manufacturerCharacteristic->setValue(name);
|
manufacturer()->setValue(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -106,7 +115,15 @@ 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[] = { sig, (uint8_t) (vid >> 8), (uint8_t) vid, (uint8_t) (pid >> 8), (uint8_t) pid, (uint8_t) (version >> 8), (uint8_t) version };
|
uint8_t pnp[] = {
|
||||||
|
sig,
|
||||||
|
((uint8_t*)&vid)[0],
|
||||||
|
((uint8_t*)&vid)[1],
|
||||||
|
((uint8_t*)&pid)[0],
|
||||||
|
((uint8_t*)&pid)[1],
|
||||||
|
((uint8_t*)&version)[0],
|
||||||
|
((uint8_t*)&version)[1]
|
||||||
|
};
|
||||||
m_pnpCharacteristic->setValue(pnp, sizeof(pnp));
|
m_pnpCharacteristic->setValue(pnp, sizeof(pnp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#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)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A model of a %BLE Human Interface Device.
|
* @brief A model of a %BLE Human Interface Device.
|
||||||
|
|
|
@ -459,7 +459,7 @@ void NimBLEScan::onHostSync() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Start scanning and block until scanning has been completed.
|
* @brief Start scanning and block until scanning has been completed.
|
||||||
* @param [in] duration The duration in seconds for which to scan.
|
* @param [in] duration The duration in milliseconds for which to scan.
|
||||||
* @param [in] is_continue Set to true to save previous scan results, false to clear them.
|
* @param [in] is_continue Set to true to save previous scan results, false to clear them.
|
||||||
* @return The scan results.
|
* @return The scan results.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -159,7 +159,7 @@ bool NimBLEService::start() {
|
||||||
// Nimble requires the last characteristic to have it's uuid = 0 to indicate the end
|
// Nimble requires the last characteristic to have it's uuid = 0 to indicate the end
|
||||||
// of the characteristics for the service. We create 1 extra and set it to null
|
// of the characteristics for the service. We create 1 extra and set it to null
|
||||||
// for this purpose.
|
// for this purpose.
|
||||||
pChr_a = new ble_gatt_chr_def[numChrs + 1];
|
pChr_a = new ble_gatt_chr_def[numChrs + 1]{};
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(auto chr_it = m_chrVec.begin(); chr_it != m_chrVec.end(); ++chr_it) {
|
for(auto chr_it = m_chrVec.begin(); chr_it != m_chrVec.end(); ++chr_it) {
|
||||||
if((*chr_it)->m_removed > 0) {
|
if((*chr_it)->m_removed > 0) {
|
||||||
|
|
Loading…
Reference in a new issue