From 7c7ef483f848b56e7094182e81ebc4e4d71a997a Mon Sep 17 00:00:00 2001 From: chrismcna Date: Sat, 22 Aug 2020 12:50:20 +0100 Subject: [PATCH] BLE - Add battery power state --- src/hardware/blectl.cpp | 16 ++++++++++++++-- src/hardware/blectl.h | 28 ++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/hardware/blectl.cpp b/src/hardware/blectl.cpp index db2fc44..b25322c 100644 --- a/src/hardware/blectl.cpp +++ b/src/hardware/blectl.cpp @@ -52,6 +52,7 @@ BLECharacteristic *pRxCharacteristic; uint8_t txValue = 0; BLECharacteristic *pBatteryLevelCharacteristic; +BLECharacteristic *pBatteryPowerStateCharacteristic; char *gadgetbridge_msg = NULL; uint32_t gadgetbridge_msg_size = 0; @@ -291,11 +292,15 @@ void blectl_setup( void ) { BLEService *pBatteryService = pServer->createService(BATTERY_SERVICE_UUID); // Create a BLE battery service, batttery level Characteristic - - pBatteryLevelCharacteristic = pBatteryService->createCharacteristic( BATTERY_SERVICE_BATTERY_LEVEL_CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); + pBatteryLevelCharacteristic = pBatteryService->createCharacteristic( BATTERY_LEVEL_CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); pBatteryLevelCharacteristic->setAccessPermissions(ESP_GATT_PERM_READ_ENCRYPTED | ESP_GATT_PERM_WRITE_ENCRYPTED); - pBatteryLevelCharacteristic->addDescriptor( new BLEDescriptor(BATTERY_SERVICE_BATTERY_LEVEL_DESCRIPTOR_UUID) ); + pBatteryLevelCharacteristic->addDescriptor( new BLEDescriptor(BATTERY_LEVEL_DESCRIPTOR_UUID) ); pBatteryLevelCharacteristic->addDescriptor( new BLE2902() ); + pBatteryPowerStateCharacteristic = pBatteryService->createCharacteristic( BATTERY_POWER_STATE_CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); + pBatteryPowerStateCharacteristic->setAccessPermissions(ESP_GATT_PERM_READ_ENCRYPTED | ESP_GATT_PERM_WRITE_ENCRYPTED); + pBatteryPowerStateCharacteristic->addDescriptor( new BLE2902() ); + // Start battery service pBatteryService->start(); @@ -485,4 +490,11 @@ void blectl_update_battery( int32_t percent, bool charging, bool plug ) pBatteryLevelCharacteristic->setValue(&level, 1); pBatteryLevelCharacteristic->notify(); + + uint8_t batteryPowerState = BATTERY_POWER_STATE_BATTERY_PRESENT | + (plug ? BATTERY_POWER_STATE_DISCHARGE_NOT_DISCHARING : BATTERY_POWER_STATE_DISCHARGE_DISCHARING) | + (charging? BATTERY_POWER_STATE_CHARGE_CHARING : BATTERY_POWER_STATE_CHARGE_NOT_CHARING) | + (percent > 10 ? BATTERY_POWER_STATE_LEVEL_GOOD : BATTERY_POWER_STATE_LEVEL_CRITICALLY_LOW ); + pBatteryPowerStateCharacteristic->setValue(&batteryPowerState, 1); + pBatteryPowerStateCharacteristic->notify(); } \ No newline at end of file diff --git a/src/hardware/blectl.h b/src/hardware/blectl.h index 1417c5d..865519d 100644 --- a/src/hardware/blectl.h +++ b/src/hardware/blectl.h @@ -36,8 +36,32 @@ #define FIRMWARE_REVISION_STRING_CHARACTERISTIC_UUID BLEUUID((uint16_t)0x2A26) // Device Information - firmware revision UUID #define BATTERY_SERVICE_UUID BLEUUID((uint16_t)0x180F) // Battery service UUID - #define BATTERY_SERVICE_BATTERY_LEVEL_CHARACTERISTIC_UUID BLEUUID((uint16_t)0x2A19) // Battery service - battery level characteristic UUID - #define BATTERY_SERVICE_BATTERY_LEVEL_DESCRIPTOR_UUID BLEUUID((uint16_t)0x2901) // Battery service - battery level descriptor UUID + #define BATTERY_LEVEL_CHARACTERISTIC_UUID BLEUUID((uint16_t)0x2A19) // battery level characteristic UUID + #define BATTERY_LEVEL_DESCRIPTOR_UUID BLEUUID((uint16_t)0x2901) // battery level descriptor UUID + #define BATTERY_POWER_STATE_CHARACTERISTIC_UUID BLEUUID((uint16_t)0x2A1A) // battery power state characteristic UUID + + + #define BATTERY_POWER_STATE_BATTERY_UNKNOWN 0x0 + #define BATTERY_POWER_STATE_BATTERY_NOT_SUPPORTED 0x1 + #define BATTERY_POWER_STATE_BATTERY_NOT_PRESENT 0x2 + #define BATTERY_POWER_STATE_BATTERY_PRESENT 0x3 + + #define BATTERY_POWER_STATE_DISCHARGE_UNKNOWN 0x0 + #define BATTERY_POWER_STATE_DISCHARGE_NOT_SUPPORTED 0x4 + #define BATTERY_POWER_STATE_DISCHARGE_NOT_DISCHARING 0x8 + #define BATTERY_POWER_STATE_DISCHARGE_DISCHARING 0xc + + #define BATTERY_POWER_STATE_CHARGE_UNKNOWN 0x0 + #define BATTERY_POWER_STATE_CHARGE_NOT_CHARGEABLE 0x10 + #define BATTERY_POWER_STATE_CHARGE_NOT_CHARING 0x20 + #define BATTERY_POWER_STATE_CHARGE_CHARING 0x30 + + #define BATTERY_POWER_STATE_LEVEL_UNKNOWN 0x0 + #define BATTERY_POWER_STATE_LEVEL_NOT_SUPPORTED 0x40 + #define BATTERY_POWER_STATE_LEVEL_GOOD 0x80 + #define BATTERY_POWER_STATE_LEVEL_CRITICALLY_LOW 0xC0 + + #define BLECTL_JSON_COFIG_FILE "/blectl.json"