BLE - Add battery power state

This commit is contained in:
chrismcna
2020-08-22 12:50:20 +01:00
parent b6907e63f2
commit 7c7ef483f8
2 changed files with 40 additions and 4 deletions

View File

@@ -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();
}

View File

@@ -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"