Add device information service

This commit is contained in:
samuelbles07
2025-11-10 14:36:29 +07:00
parent e196e6c6b8
commit f1110905ca
3 changed files with 29 additions and 16 deletions

View File

@@ -998,7 +998,8 @@ void initializeNetwork() {
}
if (networkOption == UseWifi) {
if (!wifiConnector.connect()) {
String modelName = AgFirmwareModeName(fwMode);
if (!wifiConnector.connect(modelName)) {
Serial.println("Cannot initiate wifi connection");
return;
}

View File

@@ -44,7 +44,7 @@ WifiConnector::~WifiConnector() {}
* @return true Success
* @return false Failure
*/
bool WifiConnector::connect(void) {
bool WifiConnector::connect(String modelName) {
if (wifi == NULL) {
wifi = new WiFiManager();
if (wifi == NULL) {
@@ -123,7 +123,7 @@ bool WifiConnector::connect(void) {
#ifdef ESP32
// Provision by BLE only for ESP32
setupProvisionByBLE();
setupProvisionByBLE(modelName.c_str());
// Task handling WiFi portal
xTaskCreate(
@@ -664,9 +664,8 @@ void WifiConnector::setupProvisionByPortal(WiFiManagerParameter *disableCloudPar
logInfo("Wait for configure portal");
}
void WifiConnector::setupProvisionByBLE() {
Serial.printf("Setup BLE with device name %s\n", ssid.c_str());
NimBLEDevice::init(ssid.c_str());
void WifiConnector::setupProvisionByBLE(const char *modelName) {
NimBLEDevice::init("AirGradient");
NimBLEDevice::setPower(3); /** +3db */
/** 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->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);
NimBLEService *pService = pServer->createService(BLE_SERVICE_UUID);
NimBLECharacteristic *pCredentialCharacteristic =
pService->createCharacteristic(BLE_CRED_CHAR_UUID,
pServProvisioning->createCharacteristic(BLE_CRED_CHAR_UUID,
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::READ_ENC |
NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::WRITE_ENC | NIMBLE_PROPERTY::NOTIFY);
pCredentialCharacteristic->setCallbacks(characteristicCallback);
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);
// Start services
pServProvisioning->start();
pServDeviceInfo->start();
pService->start();
// Advertise
NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
pAdvertising->addServiceUUID(pService->getUUID());
// pAdvertising->setName(ssid.c_str());
pAdvertising->addServiceUUID(pServDeviceInfo->getUUID());
pAdvertising->addServiceUUID(pServProvisioning->getUUID());
pAdvertising->start();
bleServerRunning = true;

View File

@@ -94,9 +94,9 @@ public:
~WifiConnector();
void setupProvisionByPortal(WiFiManagerParameter *disableCloudParam, WiFiManagerParameter *disableCloudInfo);
void setupProvisionByBLE();
void setupProvisionByBLE(const char *modelName);
void stopBLE();
bool connect(void);
bool connect(String modelName = "");
void disconnect(void);
void handle(void);
void _wifiApCallback(void);