mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-12-20 22:12:44 +01:00
Add device information service
This commit is contained in:
@@ -998,7 +998,8 @@ void initializeNetwork() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (networkOption == UseWifi) {
|
if (networkOption == UseWifi) {
|
||||||
if (!wifiConnector.connect()) {
|
String modelName = AgFirmwareModeName(fwMode);
|
||||||
|
if (!wifiConnector.connect(modelName)) {
|
||||||
Serial.println("Cannot initiate wifi connection");
|
Serial.println("Cannot initiate wifi connection");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ WifiConnector::~WifiConnector() {}
|
|||||||
* @return true Success
|
* @return true Success
|
||||||
* @return false Failure
|
* @return false Failure
|
||||||
*/
|
*/
|
||||||
bool WifiConnector::connect(void) {
|
bool WifiConnector::connect(String modelName) {
|
||||||
if (wifi == NULL) {
|
if (wifi == NULL) {
|
||||||
wifi = new WiFiManager();
|
wifi = new WiFiManager();
|
||||||
if (wifi == NULL) {
|
if (wifi == NULL) {
|
||||||
@@ -123,7 +123,7 @@ bool WifiConnector::connect(void) {
|
|||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
// Provision by BLE only for ESP32
|
// Provision by BLE only for ESP32
|
||||||
setupProvisionByBLE();
|
setupProvisionByBLE(modelName.c_str());
|
||||||
|
|
||||||
// Task handling WiFi portal
|
// Task handling WiFi portal
|
||||||
xTaskCreate(
|
xTaskCreate(
|
||||||
@@ -664,9 +664,8 @@ void WifiConnector::setupProvisionByPortal(WiFiManagerParameter *disableCloudPar
|
|||||||
logInfo("Wait for configure portal");
|
logInfo("Wait for configure portal");
|
||||||
}
|
}
|
||||||
|
|
||||||
void WifiConnector::setupProvisionByBLE() {
|
void WifiConnector::setupProvisionByBLE(const char *modelName) {
|
||||||
Serial.printf("Setup BLE with device name %s\n", ssid.c_str());
|
NimBLEDevice::init("AirGradient");
|
||||||
NimBLEDevice::init(ssid.c_str());
|
|
||||||
NimBLEDevice::setPower(3); /** +3db */
|
NimBLEDevice::setPower(3); /** +3db */
|
||||||
|
|
||||||
/** bonding, MITM, don't need BLE secure connections as we are using passkey pairing */
|
/** bonding, MITM, don't need BLE secure connections as we are using passkey pairing */
|
||||||
@@ -676,25 +675,38 @@ void WifiConnector::setupProvisionByBLE() {
|
|||||||
pServer = NimBLEDevice::createServer();
|
pServer = NimBLEDevice::createServer();
|
||||||
pServer->setCallbacks(new ServerCallbacks(this));
|
pServer->setCallbacks(new ServerCallbacks(this));
|
||||||
|
|
||||||
|
// Service and characteristics for device information
|
||||||
|
NimBLEService *pServDeviceInfo = pServer->createService("180A");
|
||||||
|
NimBLECharacteristic *pModelCharacteristic = pServDeviceInfo->createCharacteristic("2A24", NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
pModelCharacteristic->setValue(modelName);
|
||||||
|
NimBLECharacteristic *pSerialCharacteristic = pServDeviceInfo->createCharacteristic("2A25", NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
pSerialCharacteristic->setValue(ag->deviceId().c_str());
|
||||||
|
NimBLECharacteristic *pFwCharacteristic = pServDeviceInfo->createCharacteristic("2A26", NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
pFwCharacteristic->setValue(ag->getVersion().c_str());
|
||||||
|
NimBLECharacteristic *pManufCharacteristic = pServDeviceInfo->createCharacteristic("2A29", NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC);
|
||||||
|
pManufCharacteristic->setValue("AirGradient");
|
||||||
|
|
||||||
|
// Service and characteristics for wifi provisioning
|
||||||
|
NimBLEService *pServProvisioning = pServer->createService(BLE_SERVICE_UUID);
|
||||||
auto characteristicCallback = new CharacteristicCallbacks(this);
|
auto characteristicCallback = new CharacteristicCallbacks(this);
|
||||||
|
|
||||||
NimBLEService *pService = pServer->createService(BLE_SERVICE_UUID);
|
|
||||||
NimBLECharacteristic *pCredentialCharacteristic =
|
NimBLECharacteristic *pCredentialCharacteristic =
|
||||||
pService->createCharacteristic(BLE_CRED_CHAR_UUID,
|
pServProvisioning->createCharacteristic(BLE_CRED_CHAR_UUID,
|
||||||
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC |
|
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC |
|
||||||
NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_ENC | NIMBLE_PROPERTY::NOTIFY);
|
NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_ENC | NIMBLE_PROPERTY::NOTIFY);
|
||||||
pCredentialCharacteristic->setCallbacks(characteristicCallback);
|
pCredentialCharacteristic->setCallbacks(characteristicCallback);
|
||||||
|
|
||||||
NimBLECharacteristic *pScanCharacteristic =
|
NimBLECharacteristic *pScanCharacteristic =
|
||||||
pService->createCharacteristic(BLE_SCAN_CHAR_UUID, NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_ENC | NIMBLE_PROPERTY::NOTIFY);
|
pServProvisioning->createCharacteristic(BLE_SCAN_CHAR_UUID, NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_ENC | NIMBLE_PROPERTY::NOTIFY);
|
||||||
pScanCharacteristic->setCallbacks(characteristicCallback);
|
pScanCharacteristic->setCallbacks(characteristicCallback);
|
||||||
|
|
||||||
|
// Start services
|
||||||
|
pServProvisioning->start();
|
||||||
|
pServDeviceInfo->start();
|
||||||
|
|
||||||
pService->start();
|
// Advertise
|
||||||
|
|
||||||
NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
|
NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
|
||||||
pAdvertising->addServiceUUID(pService->getUUID());
|
// pAdvertising->setName(ssid.c_str());
|
||||||
|
pAdvertising->addServiceUUID(pServDeviceInfo->getUUID());
|
||||||
|
pAdvertising->addServiceUUID(pServProvisioning->getUUID());
|
||||||
pAdvertising->start();
|
pAdvertising->start();
|
||||||
bleServerRunning = true;
|
bleServerRunning = true;
|
||||||
|
|
||||||
|
|||||||
@@ -94,9 +94,9 @@ public:
|
|||||||
~WifiConnector();
|
~WifiConnector();
|
||||||
|
|
||||||
void setupProvisionByPortal(WiFiManagerParameter *disableCloudParam, WiFiManagerParameter *disableCloudInfo);
|
void setupProvisionByPortal(WiFiManagerParameter *disableCloudParam, WiFiManagerParameter *disableCloudInfo);
|
||||||
void setupProvisionByBLE();
|
void setupProvisionByBLE(const char *modelName);
|
||||||
void stopBLE();
|
void stopBLE();
|
||||||
bool connect(void);
|
bool connect(String modelName = "");
|
||||||
void disconnect(void);
|
void disconnect(void);
|
||||||
void handle(void);
|
void handle(void);
|
||||||
void _wifiApCallback(void);
|
void _wifiApCallback(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user