battery_service.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "battery_service.h"
  2. #include "app_common.h"
  3. #include "ble.h"
  4. #include <furi.h>
  5. #define BATTERY_SERVICE_TAG "battery service"
  6. typedef struct {
  7. uint16_t svc_handle;
  8. uint16_t char_level_handle;
  9. } BatterySvc;
  10. static BatterySvc battery_svc;
  11. bool battery_svc_init() {
  12. tBleStatus status;
  13. const uint16_t service_uuid = BATTERY_SERVICE_UUID;
  14. const uint16_t char_battery_level_uuid = BATTERY_LEVEL_CHAR_UUID;
  15. // Add Battery service
  16. status = aci_gatt_add_service(UUID_TYPE_16, (Service_UUID_t*)&service_uuid, PRIMARY_SERVICE, 4, &battery_svc.svc_handle);
  17. if(status) {
  18. FURI_LOG_E(BATTERY_SERVICE_TAG, "Failed to add Battery service: %d", status);
  19. }
  20. // Add Battery level characteristic
  21. status = aci_gatt_add_char(battery_svc.svc_handle,
  22. UUID_TYPE_16,
  23. (Char_UUID_t *) &char_battery_level_uuid,
  24. 1,
  25. CHAR_PROP_READ | CHAR_PROP_NOTIFY,
  26. ATTR_PERMISSION_NONE,
  27. GATT_DONT_NOTIFY_EVENTS,
  28. 10,
  29. CHAR_VALUE_LEN_CONSTANT,
  30. &battery_svc.char_level_handle);
  31. if(status) {
  32. FURI_LOG_E(BATTERY_SERVICE_TAG, "Failed to add Battery level characteristic: %d", status);
  33. }
  34. return status != BLE_STATUS_SUCCESS;
  35. }
  36. bool battery_svc_update_level(uint8_t battery_charge) {
  37. FURI_LOG_I(BATTERY_SERVICE_TAG, "Updating battery level characteristic");
  38. tBleStatus result = aci_gatt_update_char_value(battery_svc.svc_handle,
  39. battery_svc.char_level_handle,
  40. 0,
  41. 1,
  42. &battery_charge);
  43. if(result) {
  44. FURI_LOG_E(BATTERY_SERVICE_TAG, "Failed updating RX characteristic: %d", result);
  45. }
  46. return result != BLE_STATUS_SUCCESS;
  47. }