aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ble
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ble')
-rw-r--r--src/components/ble/AlertNotificationClient.cpp6
-rw-r--r--src/components/ble/AlertNotificationClient.h2
-rw-r--r--src/components/ble/AlertNotificationService.cpp6
-rw-r--r--src/components/ble/AlertNotificationService.h3
-rw-r--r--src/components/ble/BatteryInformationService.cpp9
-rw-r--r--src/components/ble/BatteryInformationService.h4
-rw-r--r--src/components/ble/BleController.h8
-rw-r--r--src/components/ble/CurrentTimeClient.cpp20
-rw-r--r--src/components/ble/CurrentTimeClient.h13
-rw-r--r--src/components/ble/CurrentTimeService.cpp97
-rw-r--r--src/components/ble/CurrentTimeService.h27
-rw-r--r--src/components/ble/DeviceInformationService.cpp6
-rw-r--r--src/components/ble/DeviceInformationService.h4
-rw-r--r--src/components/ble/DfuService.h4
-rw-r--r--src/components/ble/FSService.h6
-rw-r--r--src/components/ble/HeartRateService.cpp14
-rw-r--r--src/components/ble/HeartRateService.h8
-rw-r--r--src/components/ble/ImmediateAlertService.cpp6
-rw-r--r--src/components/ble/ImmediateAlertService.h4
-rw-r--r--src/components/ble/MotionService.cpp13
-rw-r--r--src/components/ble/MotionService.h8
-rw-r--r--src/components/ble/MusicService.cpp6
-rw-r--r--src/components/ble/MusicService.h3
-rw-r--r--src/components/ble/NavigationService.cpp8
-rw-r--r--src/components/ble/NavigationService.h3
-rw-r--r--src/components/ble/NimbleController.cpp12
-rw-r--r--src/components/ble/NimbleController.h3
-rw-r--r--src/components/ble/NotificationManager.h2
-rw-r--r--src/components/ble/weather/WeatherService.cpp20
-rw-r--r--src/components/ble/weather/WeatherService.h3
30 files changed, 207 insertions, 121 deletions
diff --git a/src/components/ble/AlertNotificationClient.cpp b/src/components/ble/AlertNotificationClient.cpp
index 095fdef6..e3bc9242 100644
--- a/src/components/ble/AlertNotificationClient.cpp
+++ b/src/components/ble/AlertNotificationClient.cpp
@@ -35,9 +35,9 @@ namespace {
return client->OnDescriptorDiscoveryEventCallback(conn_handle, error, chr_val_handle, dsc);
}
- int NewAlertSubcribeCallback(uint16_t conn_handle, const struct ble_gatt_error* error, struct ble_gatt_attr* attr, void* arg) {
+ int NewAlertSubcribeCallback(uint16_t conn_handle, const struct ble_gatt_error* error, struct ble_gatt_attr* /*attr*/, void* arg) {
auto client = static_cast<AlertNotificationClient*>(arg);
- return client->OnNewAlertSubcribe(conn_handle, error, attr);
+ return client->OnNewAlertSubcribe(conn_handle, error);
}
}
@@ -107,7 +107,7 @@ int AlertNotificationClient::OnCharacteristicsDiscoveryEvent(uint16_t connection
return 0;
}
-int AlertNotificationClient::OnNewAlertSubcribe(uint16_t connectionHandle, const ble_gatt_error* error, ble_gatt_attr* attribute) {
+int AlertNotificationClient::OnNewAlertSubcribe(uint16_t connectionHandle, const ble_gatt_error* error) {
if (error->status == 0) {
NRF_LOG_INFO("ANS New alert subscribe OK");
} else {
diff --git a/src/components/ble/AlertNotificationClient.h b/src/components/ble/AlertNotificationClient.h
index 2d6a3873..b038f0d8 100644
--- a/src/components/ble/AlertNotificationClient.h
+++ b/src/components/ble/AlertNotificationClient.h
@@ -25,7 +25,7 @@ namespace Pinetime {
bool OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_svc* service);
int OnCharacteristicsDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
- int OnNewAlertSubcribe(uint16_t connectionHandle, const ble_gatt_error* error, ble_gatt_attr* attribute);
+ int OnNewAlertSubcribe(uint16_t connectionHandle, const ble_gatt_error* error);
int OnDescriptorDiscoveryEventCallback(uint16_t connectionHandle,
const ble_gatt_error* error,
uint16_t characteristicValueHandle,
diff --git a/src/components/ble/AlertNotificationService.cpp b/src/components/ble/AlertNotificationService.cpp
index 04819122..d9f28698 100644
--- a/src/components/ble/AlertNotificationService.cpp
+++ b/src/components/ble/AlertNotificationService.cpp
@@ -11,9 +11,9 @@ constexpr ble_uuid16_t AlertNotificationService::ansUuid;
constexpr ble_uuid16_t AlertNotificationService::ansCharUuid;
constexpr ble_uuid128_t AlertNotificationService::notificationEventUuid;
-int AlertNotificationCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+int AlertNotificationCallback(uint16_t /*conn_handle*/, uint16_t /*attr_handle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto anService = static_cast<AlertNotificationService*>(arg);
- return anService->OnAlert(conn_handle, attr_handle, ctxt);
+ return anService->OnAlert(ctxt);
}
void AlertNotificationService::Init() {
@@ -44,7 +44,7 @@ AlertNotificationService::AlertNotificationService(System::SystemTask& systemTas
notificationManager {notificationManager} {
}
-int AlertNotificationService::OnAlert(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
+int AlertNotificationService::OnAlert(struct ble_gatt_access_ctxt* ctxt) {
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
constexpr size_t stringTerminatorSize = 1; // end of string '\0'
constexpr size_t headerSize = 3;
diff --git a/src/components/ble/AlertNotificationService.h b/src/components/ble/AlertNotificationService.h
index 5c7d428c..4b3c6385 100644
--- a/src/components/ble/AlertNotificationService.h
+++ b/src/components/ble/AlertNotificationService.h
@@ -16,6 +16,7 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class NotificationManager;
@@ -24,7 +25,7 @@ namespace Pinetime {
AlertNotificationService(Pinetime::System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager);
void Init();
- int OnAlert(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
+ int OnAlert(struct ble_gatt_access_ctxt* ctxt);
void AcceptIncomingCall();
void RejectIncomingCall();
diff --git a/src/components/ble/BatteryInformationService.cpp b/src/components/ble/BatteryInformationService.cpp
index 9a3f86f5..db7c8566 100644
--- a/src/components/ble/BatteryInformationService.cpp
+++ b/src/components/ble/BatteryInformationService.cpp
@@ -7,9 +7,9 @@ using namespace Pinetime::Controllers;
constexpr ble_uuid16_t BatteryInformationService::batteryInformationServiceUuid;
constexpr ble_uuid16_t BatteryInformationService::batteryLevelUuid;
-int BatteryInformationServiceCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+int BatteryInformationServiceCallback(uint16_t /*conn_handle*/, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto* batteryInformationService = static_cast<BatteryInformationService*>(arg);
- return batteryInformationService->OnBatteryServiceRequested(conn_handle, attr_handle, ctxt);
+ return batteryInformationService->OnBatteryServiceRequested(attr_handle, ctxt);
}
BatteryInformationService::BatteryInformationService(Controllers::Battery& batteryController)
@@ -38,9 +38,7 @@ void BatteryInformationService::Init() {
ASSERT(res == 0);
}
-int BatteryInformationService::OnBatteryServiceRequested(uint16_t connectionHandle,
- uint16_t attributeHandle,
- ble_gatt_access_ctxt* context) {
+int BatteryInformationService::OnBatteryServiceRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
if (attributeHandle == batteryLevelHandle) {
NRF_LOG_INFO("BATTERY : handle = %d", batteryLevelHandle);
uint8_t batteryValue = batteryController.PercentRemaining();
@@ -49,6 +47,7 @@ int BatteryInformationService::OnBatteryServiceRequested(uint16_t connectionHand
}
return 0;
}
+
void BatteryInformationService::NotifyBatteryLevel(uint16_t connectionHandle, uint8_t level) {
auto* om = ble_hs_mbuf_from_flat(&level, 1);
ble_gattc_notify_custom(connectionHandle, batteryLevelHandle, om);
diff --git a/src/components/ble/BatteryInformationService.h b/src/components/ble/BatteryInformationService.h
index c6fc52e4..7f0a89ad 100644
--- a/src/components/ble/BatteryInformationService.h
+++ b/src/components/ble/BatteryInformationService.h
@@ -9,14 +9,16 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class Battery;
+
class BatteryInformationService {
public:
BatteryInformationService(Controllers::Battery& batteryController);
void Init();
- int OnBatteryServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context);
+ int OnBatteryServiceRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context);
void NotifyBatteryLevel(uint16_t connectionHandle, uint8_t level);
private:
diff --git a/src/components/ble/BleController.h b/src/components/ble/BleController.h
index 675ede2d..de0a1bc2 100644
--- a/src/components/ble/BleController.h
+++ b/src/components/ble/BleController.h
@@ -24,6 +24,7 @@ namespace Pinetime {
void StopFirmwareUpdate();
void FirmwareUpdateTotalBytes(uint32_t totalBytes);
void FirmwareUpdateCurrentBytes(uint32_t currentBytes);
+
void State(FirmwareUpdateStates state) {
firmwareUpdateState = state;
}
@@ -31,12 +32,15 @@ namespace Pinetime {
bool IsFirmwareUpdating() const {
return isFirmwareUpdating;
}
+
uint32_t FirmwareUpdateTotalBytes() const {
return firmwareUpdateTotalBytes;
}
+
uint32_t FirmwareUpdateCurrentBytes() const {
return firmwareUpdateCurrentBytes;
}
+
FirmwareUpdateStates State() const {
return firmwareUpdateState;
}
@@ -44,15 +48,19 @@ namespace Pinetime {
void Address(BleAddress&& addr) {
address = addr;
}
+
const BleAddress& Address() const {
return address;
}
+
void AddressType(AddressTypes t) {
addressType = t;
}
+
void SetPairingKey(uint32_t k) {
pairingKey = k;
}
+
uint32_t GetPairingKey() const {
return pairingKey;
}
diff --git a/src/components/ble/CurrentTimeClient.cpp b/src/components/ble/CurrentTimeClient.cpp
index 53e98cb6..e535ae83 100644
--- a/src/components/ble/CurrentTimeClient.cpp
+++ b/src/components/ble/CurrentTimeClient.cpp
@@ -85,21 +85,11 @@ int CurrentTimeClient::OnCurrentTimeReadResult(uint16_t conn_handle, const ble_g
// TODO check that attribute->handle equals the handle discovered in OnCharacteristicDiscoveryEvent
CtsData result;
os_mbuf_copydata(attribute->om, 0, sizeof(CtsData), &result);
- NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d",
- result.year,
- result.month,
- result.dayofmonth,
- result.hour,
- result.minute,
- result.second);
- dateTimeController.SetTime(result.year,
- result.month,
- result.dayofmonth,
- 0,
- result.hour,
- result.minute,
- result.second,
- nrf_rtc_counter_get(portNRF_RTC_REG));
+ uint16_t year = ((uint16_t) result.year_MSO << 8) + result.year_LSO;
+
+ NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", year, result.month, result.dayofmonth, result.hour, result.minute, result.second);
+ dateTimeController
+ .SetTime(year, result.month, result.dayofmonth, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG));
} else {
NRF_LOG_INFO("Error retrieving current time: %d", error->status);
}
diff --git a/src/components/ble/CurrentTimeClient.h b/src/components/ble/CurrentTimeClient.h
index 9e48be79..0a3a8735 100644
--- a/src/components/ble/CurrentTimeClient.h
+++ b/src/components/ble/CurrentTimeClient.h
@@ -19,24 +19,29 @@ namespace Pinetime {
bool OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_svc* service);
int OnCharacteristicDiscoveryEvent(uint16_t conn_handle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
int OnCurrentTimeReadResult(uint16_t conn_handle, const ble_gatt_error* error, const ble_gatt_attr* attribute);
+
static constexpr const ble_uuid16_t* Uuid() {
return &CurrentTimeClient::ctsServiceUuid;
}
+
static constexpr const ble_uuid16_t* CurrentTimeCharacteristicUuid() {
return &CurrentTimeClient::currentTimeCharacteristicUuid;
}
+
void Discover(uint16_t connectionHandle, std::function<void(uint16_t)> lambda) override;
private:
typedef struct __attribute__((packed)) {
- uint16_t year;
+ uint8_t year_LSO; // explicit byte ordering to be independent of machine order
+ uint8_t year_MSO; // BLE GATT is little endian
uint8_t month;
uint8_t dayofmonth;
uint8_t hour;
uint8_t minute;
uint8_t second;
- uint8_t millis;
- uint8_t reason;
+ uint8_t dayofweek;
+ uint8_t fractions256; // currently ignored
+ uint8_t reason; // currently ignored, not that any host would set it anyway
} CtsData;
static constexpr uint16_t ctsServiceId {0x1805};
@@ -55,4 +60,4 @@ namespace Pinetime {
std::function<void(uint16_t)> onServiceDiscovered;
};
}
-} \ No newline at end of file
+}
diff --git a/src/components/ble/CurrentTimeService.cpp b/src/components/ble/CurrentTimeService.cpp
index 8430d1bc..856bc63a 100644
--- a/src/components/ble/CurrentTimeService.cpp
+++ b/src/components/ble/CurrentTimeService.cpp
@@ -5,11 +5,23 @@
using namespace Pinetime::Controllers;
constexpr ble_uuid16_t CurrentTimeService::ctsUuid;
-constexpr ble_uuid16_t CurrentTimeService::ctChrUuid;
+constexpr ble_uuid16_t CurrentTimeService::ctsCtChrUuid;
+constexpr ble_uuid16_t CurrentTimeService::ctsLtChrUuid;
-int CTSCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+int CTSCallback(uint16_t /*conn_handle*/, uint16_t /*attr_handle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto cts = static_cast<CurrentTimeService*>(arg);
- return cts->OnTimeAccessed(conn_handle, attr_handle, ctxt);
+
+ return cts->OnCurrentTimeServiceAccessed(ctxt);
+}
+
+int CurrentTimeService::OnCurrentTimeServiceAccessed(struct ble_gatt_access_ctxt* ctxt) {
+ switch (ble_uuid_u16(ctxt->chr->uuid)) {
+ case ctsCurrentTimeCharId:
+ return OnCurrentTimeAccessed(ctxt);
+ case ctsLocalTimeCharId:
+ return OnLocalTimeAccessed(ctxt);
+ }
+ return -1; // Unknown characteristic
}
void CurrentTimeService::Init() {
@@ -18,45 +30,69 @@ void CurrentTimeService::Init() {
ASSERT(res == 0);
res = ble_gatts_add_svcs(serviceDefinition);
+
ASSERT(res == 0);
}
-int CurrentTimeService::OnTimeAccessed(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
+int CurrentTimeService::OnCurrentTimeAccessed(struct ble_gatt_access_ctxt* ctxt) {
NRF_LOG_INFO("Setting time...");
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
- CtsData result;
- os_mbuf_copydata(ctxt->om, 0, sizeof(CtsData), &result);
+ CtsCurrentTimeData result;
+ int res = os_mbuf_copydata(ctxt->om, 0, sizeof(CtsCurrentTimeData), &result);
+ if (res < 0) {
+ NRF_LOG_ERROR("Error reading BLE Data writing to CTS Current Time (too little data)")
+ return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
+ }
+
+ uint16_t year = ((uint16_t) result.year_MSO << 8) + result.year_LSO;
- NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d",
- result.year,
- result.month,
- result.dayofmonth,
- result.hour,
- result.minute,
- result.second);
+ NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", year, result.month, result.dayofmonth, result.hour, result.minute, result.second);
- m_dateTimeController.SetTime(result.year,
- result.month,
- result.dayofmonth,
- 0,
- result.hour,
- result.minute,
- result.second,
- nrf_rtc_counter_get(portNRF_RTC_REG));
+ m_dateTimeController
+ .SetTime(year, result.month, result.dayofmonth, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG));
} else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
- CtsData currentDateTime;
- currentDateTime.year = m_dateTimeController.Year();
+ CtsCurrentTimeData currentDateTime;
+ currentDateTime.year_LSO = m_dateTimeController.Year() & 0xff;
+ currentDateTime.year_MSO = (m_dateTimeController.Year() >> 8) & 0xff;
currentDateTime.month = static_cast<u_int8_t>(m_dateTimeController.Month());
currentDateTime.dayofmonth = m_dateTimeController.Day();
currentDateTime.hour = m_dateTimeController.Hours();
currentDateTime.minute = m_dateTimeController.Minutes();
currentDateTime.second = m_dateTimeController.Seconds();
- currentDateTime.millis = 0;
+ currentDateTime.fractions256 = 0;
- int res = os_mbuf_append(ctxt->om, &currentDateTime, sizeof(CtsData));
+ int res = os_mbuf_append(ctxt->om, &currentDateTime, sizeof(CtsCurrentTimeData));
+ return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
+ }
+
+ return 0;
+}
+
+int CurrentTimeService::OnLocalTimeAccessed(struct ble_gatt_access_ctxt* ctxt) {
+ NRF_LOG_INFO("Setting timezone...");
+
+ if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
+ CtsLocalTimeData result;
+ int res = os_mbuf_copydata(ctxt->om, 0, sizeof(CtsLocalTimeData), &result);
+
+ if (res < 0) {
+ NRF_LOG_ERROR("Error reading BLE Data writing to CTS Local Time (too little data)")
+ return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN;
+ }
+
+ NRF_LOG_INFO("Received data: %d %d", result.timezone, result.dst);
+
+ m_dateTimeController.SetTimeZone(result.timezone, result.dst);
+
+ } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) {
+ CtsLocalTimeData currentTimezone;
+ currentTimezone.timezone = m_dateTimeController.TzOffset();
+ currentTimezone.dst = m_dateTimeController.DstOffset();
+
+ int res = os_mbuf_append(ctxt->om, &currentTimezone, sizeof(currentTimezone));
return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
}
@@ -64,12 +100,19 @@ int CurrentTimeService::OnTimeAccessed(uint16_t conn_handle, uint16_t attr_handl
}
CurrentTimeService::CurrentTimeService(DateTime& dateTimeController)
- : characteristicDefinition {{.uuid = &ctChrUuid.u,
+ : characteristicDefinition {
+
+ {.uuid = &ctsLtChrUuid.u,
.access_cb = CTSCallback,
+ .arg = this,
+ .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ},
+ {.uuid = &ctsCtChrUuid.u,
+ .access_cb = CTSCallback,
.arg = this,
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ},
- {0}},
+
+ {0}},
serviceDefinition {
{/* Device Information Service */
.type = BLE_GATT_SVC_TYPE_PRIMARY,
diff --git a/src/components/ble/CurrentTimeService.h b/src/components/ble/CurrentTimeService.h
index ca87d970..bec75a2b 100644
--- a/src/components/ble/CurrentTimeService.h
+++ b/src/components/ble/CurrentTimeService.h
@@ -16,29 +16,40 @@ namespace Pinetime {
CurrentTimeService(DateTime& dateTimeController);
void Init();
- int OnTimeAccessed(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
+ int OnCurrentTimeServiceAccessed(struct ble_gatt_access_ctxt* ctxt);
+ int OnCurrentTimeAccessed(struct ble_gatt_access_ctxt* ctxt);
+ int OnLocalTimeAccessed(struct ble_gatt_access_ctxt* ctxt);
private:
static constexpr uint16_t ctsId {0x1805};
- static constexpr uint16_t ctsCharId {0x2a2b};
+ static constexpr uint16_t ctsCurrentTimeCharId {0x2a2b};
+ static constexpr uint16_t ctsLocalTimeCharId {0x2a0f};
static constexpr ble_uuid16_t ctsUuid {.u {.type = BLE_UUID_TYPE_16}, .value = ctsId};
- static constexpr ble_uuid16_t ctChrUuid {.u {.type = BLE_UUID_TYPE_16}, .value = ctsCharId};
+ static constexpr ble_uuid16_t ctsCtChrUuid {.u {.type = BLE_UUID_TYPE_16}, .value = ctsCurrentTimeCharId};
+ static constexpr ble_uuid16_t ctsLtChrUuid {.u {.type = BLE_UUID_TYPE_16}, .value = ctsLocalTimeCharId};
- struct ble_gatt_chr_def characteristicDefinition[2];
+ struct ble_gatt_chr_def characteristicDefinition[3];
struct ble_gatt_svc_def serviceDefinition[2];
typedef struct __attribute__((packed)) {
- uint16_t year;
+ uint8_t year_LSO; // BLE GATT is little endian
+ uint8_t year_MSO;
uint8_t month;
uint8_t dayofmonth;
uint8_t hour;
uint8_t minute;
uint8_t second;
- uint8_t millis;
- uint8_t reason;
- } CtsData;
+ uint8_t dayofweek;
+ uint8_t fractions256; // currently ignored
+ uint8_t reason; // currently ignored, not that any host would set it anyway
+ } CtsCurrentTimeData;
+
+ typedef struct __attribute__((packed)) {
+ int8_t timezone;
+ int8_t dst;
+ } CtsLocalTimeData;
DateTime& m_dateTimeController;
};
diff --git a/src/components/ble/DeviceInformationService.cpp b/src/components/ble/DeviceInformationService.cpp
index 0f47c90f..f0d1b5a7 100644
--- a/src/components/ble/DeviceInformationService.cpp
+++ b/src/components/ble/DeviceInformationService.cpp
@@ -10,9 +10,9 @@ constexpr ble_uuid16_t DeviceInformationService::deviceInfoUuid;
constexpr ble_uuid16_t DeviceInformationService::hwRevisionUuid;
constexpr ble_uuid16_t DeviceInformationService::swRevisionUuid;
-int DeviceInformationCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+int DeviceInformationCallback(uint16_t /*conn_handle*/, uint16_t /*attr_handle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto deviceInformationService = static_cast<DeviceInformationService*>(arg);
- return deviceInformationService->OnDeviceInfoRequested(conn_handle, attr_handle, ctxt);
+ return deviceInformationService->OnDeviceInfoRequested(ctxt);
}
void DeviceInformationService::Init() {
@@ -24,7 +24,7 @@ void DeviceInformationService::Init() {
ASSERT(res == 0);
}
-int DeviceInformationService::OnDeviceInfoRequested(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
+int DeviceInformationService::OnDeviceInfoRequested(struct ble_gatt_access_ctxt* ctxt) {
const char* str;
switch (ble_uuid_u16(ctxt->chr->uuid)) {
diff --git a/src/components/ble/DeviceInformationService.h b/src/components/ble/DeviceInformationService.h
index a269afb4..c4babd1b 100644
--- a/src/components/ble/DeviceInformationService.h
+++ b/src/components/ble/DeviceInformationService.h
@@ -14,7 +14,7 @@ namespace Pinetime {
DeviceInformationService();
void Init();
- int OnDeviceInfoRequested(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
+ int OnDeviceInfoRequested(struct ble_gatt_access_ctxt* ctxt);
private:
static constexpr uint16_t deviceInfoId {0x180a};
@@ -50,4 +50,4 @@ namespace Pinetime {
struct ble_gatt_svc_def serviceDefinition[2];
};
}
-} \ No newline at end of file
+}
diff --git a/src/components/ble/DfuService.h b/src/components/ble/DfuService.h
index 4708a4a6..b56911b9 100644
--- a/src/components/ble/DfuService.h
+++ b/src/components/ble/DfuService.h
@@ -13,9 +13,11 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Drivers {
class SpiNorFlash;
}
+
namespace Controllers {
class Ble;
@@ -46,10 +48,12 @@ namespace Pinetime {
void OnNotificationTimer();
void Reset();
};
+
class DfuImage {
public:
DfuImage(Pinetime::Drivers::SpiNorFlash& spiNorFlash) : spiNorFlash {spiNorFlash} {
}
+
void Init(size_t chunkSize, size_t totalSize, uint16_t expectedCrc);
void Erase();
void Append(uint8_t* data, size_t size);
diff --git a/src/components/ble/FSService.h b/src/components/ble/FSService.h
index 828925a8..b2299623 100644
--- a/src/components/ble/FSService.h
+++ b/src/components/ble/FSService.h
@@ -11,8 +11,10 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class Ble;
+
class FSService {
public:
FSService(Pinetime::System::SystemTask& systemTask, Pinetime::Controllers::FS& fs);
@@ -71,6 +73,7 @@ namespace Pinetime {
FSState state;
char filepath[maxpathlen]; // TODO ..ugh fixed filepath len
int fileSize;
+
using ReadHeader = struct __attribute__((packed)) {
commands command;
uint8_t padding;
@@ -89,6 +92,7 @@ namespace Pinetime {
uint32_t chunklen;
uint8_t chunk[];
};
+
using ReadPacing = struct __attribute__((packed)) {
commands command;
uint8_t status;
@@ -124,6 +128,7 @@ namespace Pinetime {
uint32_t dataSize;
uint8_t data[];
};
+
using ListDirHeader = struct __attribute__((packed)) {
commands command;
uint8_t padding;
@@ -171,6 +176,7 @@ namespace Pinetime {
commands command;
uint8_t status;
};
+
using MoveHeader = struct __attribute__((packed)) {
commands command;
uint8_t padding;
diff --git a/src/components/ble/HeartRateService.cpp b/src/components/ble/HeartRateService.cpp
index d49a02c8..c522e67e 100644
--- a/src/components/ble/HeartRateService.cpp
+++ b/src/components/ble/HeartRateService.cpp
@@ -9,9 +9,9 @@ constexpr ble_uuid16_t HeartRateService::heartRateServiceUuid;
constexpr ble_uuid16_t HeartRateService::heartRateMeasurementUuid;
namespace {
- int HeartRateServiceCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ int HeartRateServiceCallback(uint16_t /*conn_handle*/, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto* heartRateService = static_cast<HeartRateService*>(arg);
- return heartRateService->OnHeartRateRequested(conn_handle, attr_handle, ctxt);
+ return heartRateService->OnHeartRateRequested(attr_handle, ctxt);
}
}
@@ -45,7 +45,7 @@ void HeartRateService::Init() {
ASSERT(res == 0);
}
-int HeartRateService::OnHeartRateRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
+int HeartRateService::OnHeartRateRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
if (attributeHandle == heartRateMeasurementHandle) {
NRF_LOG_INFO("HEARTRATE : handle = %d", heartRateMeasurementHandle);
uint8_t buffer[2] = {0, heartRateController.HeartRate()}; // [0] = flags, [1] = hr value
@@ -60,7 +60,7 @@ void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) {
if (!heartRateMeasurementNotificationEnable)
return;
- uint8_t buffer[2] = {0, heartRateController.HeartRate()}; // [0] = flags, [1] = hr value
+ uint8_t buffer[2] = {0, heartRateValue}; // [0] = flags, [1] = hr value
auto* om = ble_hs_mbuf_from_flat(buffer, 2);
uint16_t connectionHandle = system.nimble().connHandle();
@@ -72,12 +72,12 @@ void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) {
ble_gattc_notify_custom(connectionHandle, heartRateMeasurementHandle, om);
}
-void HeartRateService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) {
+void HeartRateService::SubscribeNotification(uint16_t attributeHandle) {
if (attributeHandle == heartRateMeasurementHandle)
heartRateMeasurementNotificationEnable = true;
}
-void HeartRateService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) {
+void HeartRateService::UnsubscribeNotification(uint16_t attributeHandle) {
if (attributeHandle == heartRateMeasurementHandle)
heartRateMeasurementNotificationEnable = false;
-} \ No newline at end of file
+}
diff --git a/src/components/ble/HeartRateService.h b/src/components/ble/HeartRateService.h
index 4e4a5a42..003bdbd1 100644
--- a/src/components/ble/HeartRateService.h
+++ b/src/components/ble/HeartRateService.h
@@ -10,17 +10,19 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class HeartRateController;
+
class HeartRateService {
public:
HeartRateService(Pinetime::System::SystemTask& system, Controllers::HeartRateController& heartRateController);
void Init();
- int OnHeartRateRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context);
+ int OnHeartRateRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context);
void OnNewHeartRateValue(uint8_t hearRateValue);
- void SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle);
- void UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle);
+ void SubscribeNotification(uint16_t attributeHandle);
+ void UnsubscribeNotification(uint16_t attributeHandle);
private:
Pinetime::System::SystemTask& system;
diff --git a/src/components/ble/ImmediateAlertService.cpp b/src/components/ble/ImmediateAlertService.cpp
index c80b3783..b9de615a 100644
--- a/src/components/ble/ImmediateAlertService.cpp
+++ b/src/components/ble/ImmediateAlertService.cpp
@@ -9,9 +9,9 @@ constexpr ble_uuid16_t ImmediateAlertService::immediateAlertServiceUuid;
constexpr ble_uuid16_t ImmediateAlertService::alertLevelUuid;
namespace {
- int AlertLevelCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ int AlertLevelCallback(uint16_t /*conn_handle*/, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto* immediateAlertService = static_cast<ImmediateAlertService*>(arg);
- return immediateAlertService->OnAlertLevelChanged(conn_handle, attr_handle, ctxt);
+ return immediateAlertService->OnAlertLevelChanged(attr_handle, ctxt);
}
const char* ToString(ImmediateAlertService::Levels level) {
@@ -56,7 +56,7 @@ void ImmediateAlertService::Init() {
ASSERT(res == 0);
}
-int ImmediateAlertService::OnAlertLevelChanged(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
+int ImmediateAlertService::OnAlertLevelChanged(uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
if (attributeHandle == alertLevelHandle) {
if (context->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
auto alertLevel = static_cast<Levels>(context->om->om_data[0]);
diff --git a/src/components/ble/ImmediateAlertService.h b/src/components/ble/ImmediateAlertService.h
index 1f778acd..47a05439 100644
--- a/src/components/ble/ImmediateAlertService.h
+++ b/src/components/ble/ImmediateAlertService.h
@@ -9,15 +9,17 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class NotificationManager;
+
class ImmediateAlertService {
public:
enum class Levels : uint8_t { NoAlert = 0, MildAlert = 1, HighAlert = 2 };
ImmediateAlertService(Pinetime::System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager);
void Init();
- int OnAlertLevelChanged(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context);
+ int OnAlertLevelChanged(uint16_t attributeHandle, ble_gatt_access_ctxt* context);
private:
Pinetime::System::SystemTask& systemTask;
diff --git a/src/components/ble/MotionService.cpp b/src/components/ble/MotionService.cpp
index 121ad3b0..604f22d5 100644
--- a/src/components/ble/MotionService.cpp
+++ b/src/components/ble/MotionService.cpp
@@ -21,9 +21,9 @@ namespace {
constexpr ble_uuid128_t stepCountCharUuid {CharUuid(0x01, 0x00)};
constexpr ble_uuid128_t motionValuesCharUuid {CharUuid(0x02, 0x00)};
- int MotionServiceCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ int MotionServiceCallback(uint16_t /*conn_handle*/, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
auto* motionService = static_cast<MotionService*>(arg);
- return motionService->OnStepCountRequested(conn_handle, attr_handle, ctxt);
+ return motionService->OnStepCountRequested(attr_handle, ctxt);
}
}
@@ -59,7 +59,7 @@ void MotionService::Init() {
ASSERT(res == 0);
}
-int MotionService::OnStepCountRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
+int MotionService::OnStepCountRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
if (attributeHandle == stepCountHandle) {
NRF_LOG_INFO("Motion-stepcount : handle = %d", stepCountHandle);
uint32_t buffer = motionController.NbSteps();
@@ -90,11 +90,12 @@ void MotionService::OnNewStepCountValue(uint32_t stepCount) {
ble_gattc_notify_custom(connectionHandle, stepCountHandle, om);
}
+
void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) {
if (!motionValuesNoficationEnabled)
return;
- int16_t buffer[3] = {motionController.X(), motionController.Y(), motionController.Z()};
+ int16_t buffer[3] = {x, y, z};
auto* om = ble_hs_mbuf_from_flat(buffer, 3 * sizeof(int16_t));
uint16_t connectionHandle = system.nimble().connHandle();
@@ -106,14 +107,14 @@ void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) {
ble_gattc_notify_custom(connectionHandle, motionValuesHandle, om);
}
-void MotionService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) {
+void MotionService::SubscribeNotification(uint16_t attributeHandle) {
if (attributeHandle == stepCountHandle)
stepCountNoficationEnabled = true;
else if (attributeHandle == motionValuesHandle)
motionValuesNoficationEnabled = true;
}
-void MotionService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) {
+void MotionService::UnsubscribeNotification(uint16_t attributeHandle) {
if (attributeHandle == stepCountHandle)
stepCountNoficationEnabled = false;
else if (attributeHandle == motionValuesHandle)
diff --git a/src/components/ble/MotionService.h b/src/components/ble/MotionService.h
index 1b4ac0a3..1b172528 100644
--- a/src/components/ble/MotionService.h
+++ b/src/components/ble/MotionService.h
@@ -10,18 +10,20 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class MotionController;
+
class MotionService {
public:
MotionService(Pinetime::System::SystemTask& system, Controllers::MotionController& motionController);
void Init();
- int OnStepCountRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context);
+ int OnStepCountRequested(uint16_t attributeHandle, ble_gatt_access_ctxt* context);
void OnNewStepCountValue(uint32_t stepCount);
void OnNewMotionValues(int16_t x, int16_t y, int16_t z);
- void SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle);
- void UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle);
+ void SubscribeNotification(uint16_t attributeHandle);
+ void UnsubscribeNotification(uint16_t attributeHandle);
private:
Pinetime::System::SystemTask& system;
diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp
index fc7cef01..403c957b 100644
--- a/src/components/ble/MusicService.cpp
+++ b/src/components/ble/MusicService.cpp
@@ -48,8 +48,8 @@ namespace {
constexpr uint8_t MaxStringSize {40};
- int MusicCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
- return static_cast<Pinetime::Controllers::MusicService*>(arg)->OnCommand(conn_handle, attr_handle, ctxt);
+ int MusicCallback(uint16_t /*conn_handle*/, uint16_t /*attr_handle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ return static_cast<Pinetime::Controllers::MusicService*>(arg)->OnCommand(ctxt);
}
}
@@ -122,7 +122,7 @@ void Pinetime::Controllers::MusicService::Init() {
ASSERT(res == 0);
}
-int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
+int Pinetime::Controllers::MusicService::OnCommand(struct ble_gatt_access_ctxt* ctxt) {
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
size_t bufferSize = notifSize;
diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h
index 047d0d26..6aebc3c5 100644
--- a/src/components/ble/MusicService.h
+++ b/src/components/ble/MusicService.h
@@ -30,6 +30,7 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class MusicService {
public:
@@ -37,7 +38,7 @@ namespace Pinetime {
void Init();
- int OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
+ int OnCommand(struct ble_gatt_access_ctxt* ctxt);
void event(char event);
diff --git a/src/components/ble/NavigationService.cpp b/src/components/ble/NavigationService.cpp
index 76143686..5508d08c 100644
--- a/src/components/ble/NavigationService.cpp
+++ b/src/components/ble/NavigationService.cpp
@@ -39,9 +39,9 @@ namespace {
constexpr ble_uuid128_t navManDistCharUuid {CharUuid(0x03, 0x00)};
constexpr ble_uuid128_t navProgressCharUuid {CharUuid(0x04, 0x00)};
- int NAVCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
- auto navService = static_cast<Pinetime::Controllers::NavigationService*>(arg);
- return navService->OnCommand(conn_handle, attr_handle, ctxt);
+ int NAVCallback(uint16_t /*conn_handle*/, uint16_t /*attr_handle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ auto* navService = static_cast<Pinetime::Controllers::NavigationService*>(arg);
+ return navService->OnCommand(ctxt);
}
} // namespace
@@ -81,7 +81,7 @@ void Pinetime::Controllers::NavigationService::Init() {
ASSERT(res == 0);
}
-int Pinetime::Controllers::NavigationService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
+int Pinetime::Controllers::NavigationService::OnCommand(struct ble_gatt_access_ctxt* ctxt) {
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
diff --git a/src/components/ble/NavigationService.h b/src/components/ble/NavigationService.h
index c0c77f35..1c1739ba 100644
--- a/src/components/ble/NavigationService.h
+++ b/src/components/ble/NavigationService.h
@@ -30,6 +30,7 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class NavigationService {
@@ -38,7 +39,7 @@ namespace Pinetime {
void Init();
- int OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
+ int OnCommand(struct ble_gatt_access_ctxt* ctxt);
std::string getFlag();
diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp
index 52f4e4ce..912f5927 100644
--- a/src/components/ble/NimbleController.cpp
+++ b/src/components/ble/NimbleController.cpp
@@ -322,14 +322,14 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
event->subscribe.prev_indicate);
if (event->subscribe.reason == BLE_GAP_SUBSCRIBE_REASON_TERM) {
- heartRateService.UnsubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
- motionService.UnsubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
+ heartRateService.UnsubscribeNotification(event->subscribe.attr_handle);
+ motionService.UnsubscribeNotification(event->subscribe.attr_handle);
} else if (event->subscribe.prev_notify == 0 && event->subscribe.cur_notify == 1) {
- heartRateService.SubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
- motionService.SubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
+ heartRateService.SubscribeNotification(event->subscribe.attr_handle);
+ motionService.SubscribeNotification(event->subscribe.attr_handle);
} else if (event->subscribe.prev_notify == 1 && event->subscribe.cur_notify == 0) {
- heartRateService.UnsubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
- motionService.UnsubscribeNotification(event->subscribe.conn_handle, event->subscribe.attr_handle);
+ heartRateService.UnsubscribeNotification(event->subscribe.attr_handle);
+ motionService.UnsubscribeNotification(event->subscribe.attr_handle);
}
break;
diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h
index 000231fe..8f1dfed7 100644
--- a/src/components/ble/NimbleController.h
+++ b/src/components/ble/NimbleController.h
@@ -58,12 +58,15 @@ namespace Pinetime {
Pinetime::Controllers::MusicService& music() {
return musicService;
};
+
Pinetime::Controllers::NavigationService& navigation() {
return navService;
};
+
Pinetime::Controllers::AlertNotificationService& alertService() {
return anService;
};
+
Pinetime::Controllers::WeatherService& weather() {
return weatherService;
};
diff --git a/src/components/ble/NotificationManager.h b/src/components/ble/NotificationManager.h
index 4c199dbf..09b5a561 100644
--- a/src/components/ble/NotificationManager.h
+++ b/src/components/ble/NotificationManager.h
@@ -51,9 +51,11 @@ namespace Pinetime {
static constexpr size_t MaximumMessageSize() {
return MessageSize;
};
+
bool IsEmpty() const {
return size == 0;
}
+
size_t NbNotifications() const;
private:
diff --git a/src/components/ble/weather/WeatherService.cpp b/src/components/ble/weather/WeatherService.cpp
index 23f53b74..e606d9bf 100644
--- a/src/components/ble/weather/WeatherService.cpp
+++ b/src/components/ble/weather/WeatherService.cpp
@@ -20,8 +20,8 @@
#include "libs/QCBOR/inc/qcbor/qcbor.h"
#include "systemtask/SystemTask.h"
-int WeatherCallback(uint16_t connHandle, uint16_t attrHandle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
- return static_cast<Pinetime::Controllers::WeatherService*>(arg)->OnCommand(connHandle, attrHandle, ctxt);
+int WeatherCallback(uint16_t /*connHandle*/, uint16_t /*attrHandle*/, struct ble_gatt_access_ctxt* ctxt, void* arg) {
+ return static_cast<Pinetime::Controllers::WeatherService*>(arg)->OnCommand(ctxt);
}
namespace Pinetime {
@@ -41,7 +41,7 @@ namespace Pinetime {
ASSERT(res == 0);
}
- int WeatherService::OnCommand(uint16_t connHandle, uint16_t attrHandle, struct ble_gatt_access_ctxt* ctxt) {
+ int WeatherService::OnCommand(struct ble_gatt_access_ctxt* ctxt) {
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
const uint8_t packetLen = OS_MBUF_PKTLEN(ctxt->om); // NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic)
if (packetLen <= 0) {
@@ -552,11 +552,12 @@ namespace Pinetime {
int16_t WeatherService::GetTodayMinTemp() const {
uint64_t currentTimestamp = GetCurrentUnixTimestamp();
- uint64_t currentDayEnd = currentTimestamp - ((24 - dateTimeController.Hours()) * 60 * 60) -
- ((60 - dateTimeController.Minutes()) * 60) - (60 - dateTimeController.Seconds());
+ uint64_t currentDayEnd = currentTimestamp + ((24 - dateTimeController.Hours()) * 60 * 60) +
+ ((60 - dateTimeController.Minutes()) * 60) + (60 - dateTimeController.Seconds());
+ uint64_t currentDayStart = currentDayEnd - 86400;
int16_t result = -32768;
for (auto&& header : this->timeline) {
- if (header->eventType == WeatherData::eventtype::Temperature && IsEventStillValid(header, currentTimestamp) &&
+ if (header->eventType == WeatherData::eventtype::Temperature && header->timestamp >= currentDayStart &&
header->timestamp < currentDayEnd &&
reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature != -32768) {
int16_t temperature = reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature;
@@ -575,11 +576,12 @@ namespace Pinetime {
int16_t WeatherService::GetTodayMaxTemp() const {
uint64_t currentTimestamp = GetCurrentUnixTimestamp();
- uint64_t currentDayEnd = currentTimestamp - ((24 - dateTimeController.Hours()) * 60 * 60) -
- ((60 - dateTimeController.Minutes()) * 60) - (60 - dateTimeController.Seconds());
+ uint64_t currentDayEnd = currentTimestamp + ((24 - dateTimeController.Hours()) * 60 * 60) +
+ ((60 - dateTimeController.Minutes()) * 60) + (60 - dateTimeController.Seconds());
+ uint64_t currentDayStart = currentDayEnd - 86400;
int16_t result = -32768;
for (auto&& header : this->timeline) {
- if (header->eventType == WeatherData::eventtype::Temperature && IsEventStillValid(header, currentTimestamp) &&
+ if (header->eventType == WeatherData::eventtype::Temperature && header->timestamp >= currentDayStart &&
header->timestamp < currentDayEnd &&
reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature != -32768) {
int16_t temperature = reinterpret_cast<const std::unique_ptr<WeatherData::Temperature>&>(header)->temperature;
diff --git a/src/components/ble/weather/WeatherService.h b/src/components/ble/weather/WeatherService.h
index e37417da..00650e90 100644
--- a/src/components/ble/weather/WeatherService.h
+++ b/src/components/ble/weather/WeatherService.h
@@ -39,6 +39,7 @@ namespace Pinetime {
namespace System {
class SystemTask;
}
+
namespace Controllers {
class WeatherService {
@@ -47,7 +48,7 @@ namespace Pinetime {
void Init();
- int OnCommand(uint16_t connHandle, uint16_t attrHandle, struct ble_gatt_access_ctxt* ctxt);
+ int OnCommand(struct ble_gatt_access_ctxt* ctxt);
/*
* Helper functions for quick access to currently valid data