Added Blank FSService that exposes only version info
This commit is contained in:
parent
42a5cdb5b7
commit
f57f797ff5
5 changed files with 132 additions and 3 deletions
|
@ -487,6 +487,7 @@ list(APPEND SOURCE_FILES
|
||||||
components/ble/NavigationService.cpp
|
components/ble/NavigationService.cpp
|
||||||
displayapp/fonts/lv_font_navi_80.c
|
displayapp/fonts/lv_font_navi_80.c
|
||||||
components/ble/BatteryInformationService.cpp
|
components/ble/BatteryInformationService.cpp
|
||||||
|
components/ble/FSService.cpp
|
||||||
components/ble/ImmediateAlertService.cpp
|
components/ble/ImmediateAlertService.cpp
|
||||||
components/ble/ServiceDiscovery.cpp
|
components/ble/ServiceDiscovery.cpp
|
||||||
components/ble/HeartRateService.cpp
|
components/ble/HeartRateService.cpp
|
||||||
|
@ -557,6 +558,7 @@ list(APPEND RECOVERY_SOURCE_FILES
|
||||||
components/ble/MusicService.cpp
|
components/ble/MusicService.cpp
|
||||||
components/ble/weather/WeatherService.cpp
|
components/ble/weather/WeatherService.cpp
|
||||||
components/ble/BatteryInformationService.cpp
|
components/ble/BatteryInformationService.cpp
|
||||||
|
components/ble/FSService.cpp
|
||||||
components/ble/ImmediateAlertService.cpp
|
components/ble/ImmediateAlertService.cpp
|
||||||
components/ble/ServiceDiscovery.cpp
|
components/ble/ServiceDiscovery.cpp
|
||||||
components/ble/NavigationService.cpp
|
components/ble/NavigationService.cpp
|
||||||
|
@ -669,6 +671,7 @@ set(INCLUDE_FILES
|
||||||
components/ble/DfuService.h
|
components/ble/DfuService.h
|
||||||
components/firmwarevalidator/FirmwareValidator.h
|
components/firmwarevalidator/FirmwareValidator.h
|
||||||
components/ble/BatteryInformationService.h
|
components/ble/BatteryInformationService.h
|
||||||
|
components/ble/FSService.h
|
||||||
components/ble/ImmediateAlertService.h
|
components/ble/ImmediateAlertService.h
|
||||||
components/ble/ServiceDiscovery.h
|
components/ble/ServiceDiscovery.h
|
||||||
components/ble/BleClient.h
|
components/ble/BleClient.h
|
||||||
|
|
55
src/components/ble/FSService.cpp
Normal file
55
src/components/ble/FSService.cpp
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#include <nrf_log.h>
|
||||||
|
#include "FSService.h"
|
||||||
|
|
||||||
|
using namespace Pinetime::Controllers;
|
||||||
|
|
||||||
|
constexpr ble_uuid128_t FSService::fsServiceUuid;
|
||||||
|
constexpr ble_uuid128_t FSService::fsVersionUuid;
|
||||||
|
constexpr ble_uuid128_t FSService::fsTransferUuid;
|
||||||
|
|
||||||
|
int FSServiceCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
|
||||||
|
auto* fsService = static_cast<FSService*>(arg);
|
||||||
|
return fsService->OnFSServiceRequested(conn_handle, attr_handle, ctxt);
|
||||||
|
}
|
||||||
|
|
||||||
|
FSService::FSService(Pinetime::Controllers::FS& fs)
|
||||||
|
: fs {fs},
|
||||||
|
characteristicDefinition {{.uuid = &fsVersionUuid.u,
|
||||||
|
.access_cb = FSServiceCallback,
|
||||||
|
.arg = this,
|
||||||
|
.flags = BLE_GATT_CHR_F_READ,
|
||||||
|
.val_handle = &versionCharacteristicHandle},
|
||||||
|
{
|
||||||
|
.uuid = &fsTransferUuid.u,
|
||||||
|
.access_cb = FSServiceCallback,
|
||||||
|
.arg = this,
|
||||||
|
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_NOTIFY,
|
||||||
|
.val_handle = nullptr,
|
||||||
|
},
|
||||||
|
{0}},
|
||||||
|
serviceDefinition {
|
||||||
|
{/* Device Information Service */
|
||||||
|
.type = BLE_GATT_SVC_TYPE_PRIMARY,
|
||||||
|
.uuid = &fsServiceUuid.u,
|
||||||
|
.characteristics = characteristicDefinition},
|
||||||
|
{0},
|
||||||
|
} {
|
||||||
|
}
|
||||||
|
|
||||||
|
void FSService::Init() {
|
||||||
|
int res = 0;
|
||||||
|
res = ble_gatts_count_cfg(serviceDefinition);
|
||||||
|
ASSERT(res == 0);
|
||||||
|
|
||||||
|
res = ble_gatts_add_svcs(serviceDefinition);
|
||||||
|
ASSERT(res == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int FSService::OnFSServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) {
|
||||||
|
if (attributeHandle == versionCharacteristicHandle) {
|
||||||
|
NRF_LOG_INFO("FS_S : handle = %d", versionCharacteristicHandle);
|
||||||
|
int res = os_mbuf_append(context->om, &fsVersion, sizeof(fsVersion));
|
||||||
|
return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
65
src/components/ble/FSService.h
Normal file
65
src/components/ble/FSService.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#pragma once
|
||||||
|
#define min // workaround: nimble's min/max macros conflict with libstdc++
|
||||||
|
#define max
|
||||||
|
#include <host/ble_gap.h>
|
||||||
|
#undef max
|
||||||
|
#undef min
|
||||||
|
#include "components/fs/FS.h"
|
||||||
|
|
||||||
|
namespace Pinetime {
|
||||||
|
namespace System {
|
||||||
|
class SystemTask;
|
||||||
|
}
|
||||||
|
namespace Controllers {
|
||||||
|
class Ble;
|
||||||
|
class FSService {
|
||||||
|
public:
|
||||||
|
FSService(Pinetime::Controllers::FS& fs);
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
int OnFSServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context);
|
||||||
|
void NotifyFSRaw(uint16_t connectionHandle);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Pinetime::Controllers::FS& fs;
|
||||||
|
static constexpr uint16_t FSServiceId {0xFEBB};
|
||||||
|
static constexpr uint16_t fsVersionId {0x0100};
|
||||||
|
static constexpr uint16_t fsTransferId {0x0200};
|
||||||
|
uint16_t fsVersion = {0x0004};
|
||||||
|
|
||||||
|
static constexpr ble_uuid128_t fsServiceUuid {
|
||||||
|
.u {.type = BLE_UUID_TYPE_128},
|
||||||
|
.value = {0x72, 0x65, 0x66, 0x73, 0x6e, 0x61, 0x72, 0x54, 0x65, 0x6c, 0x69, 0x46, 0xBB, 0xFE, 0xAF, 0xAD}};
|
||||||
|
|
||||||
|
static constexpr ble_uuid128_t fsVersionUuid {
|
||||||
|
.u {.type = BLE_UUID_TYPE_128},
|
||||||
|
.value = {0x72, 0x65, 0x66, 0x73, 0x6e, 0x61, 0x72, 0x54, 0x65, 0x6c, 0x69, 0x46, 0x00, 0x01, 0xAF, 0xAD}};
|
||||||
|
|
||||||
|
static constexpr ble_uuid128_t fsTransferUuid {
|
||||||
|
.u {.type = BLE_UUID_TYPE_128},
|
||||||
|
.value = {0x72, 0x65, 0x66, 0x73, 0x6e, 0x61, 0x72, 0x54, 0x65, 0x6c, 0x69, 0x46, 0x00, 0x02, 0xAF, 0xAD}};
|
||||||
|
|
||||||
|
struct ble_gatt_chr_def characteristicDefinition[3];
|
||||||
|
struct ble_gatt_svc_def serviceDefinition[2];
|
||||||
|
uint16_t versionCharacteristicHandle;
|
||||||
|
|
||||||
|
enum class commands {
|
||||||
|
INVALID = 0x00,
|
||||||
|
READ = 0x10,
|
||||||
|
READ_DATA = 0x11,
|
||||||
|
READ_PACING = 0x12,
|
||||||
|
WRITE = 0x20,
|
||||||
|
WRITE_PACING = 0x21,
|
||||||
|
WRITE_DATA = 0x22,
|
||||||
|
DELETE = 0x30,
|
||||||
|
DELETE_STATUS = 0x31,
|
||||||
|
MKDIR = 0x40,
|
||||||
|
MKDIR_STATUS = 0x41,
|
||||||
|
LISTDIR = 0x50,
|
||||||
|
LISTDIR_ENTRY = 0x51,
|
||||||
|
MOVE = 0x60,
|
||||||
|
MOVE_STATUS = 0x61,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,7 +30,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
|
||||||
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
|
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
|
||||||
Controllers::HeartRateController& heartRateController,
|
Controllers::HeartRateController& heartRateController,
|
||||||
Controllers::MotionController& motionController,
|
Controllers::MotionController& motionController,
|
||||||
Pinetime::Controllers::FS& fs)
|
Controllers::FS& fs)
|
||||||
: systemTask {systemTask},
|
: systemTask {systemTask},
|
||||||
bleController {bleController},
|
bleController {bleController},
|
||||||
dateTimeController {dateTimeController},
|
dateTimeController {dateTimeController},
|
||||||
|
@ -49,7 +49,9 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
|
||||||
batteryInformationService {batteryController},
|
batteryInformationService {batteryController},
|
||||||
immediateAlertService {systemTask, notificationManager},
|
immediateAlertService {systemTask, notificationManager},
|
||||||
heartRateService {systemTask, heartRateController},
|
heartRateService {systemTask, heartRateController},
|
||||||
motionService {systemTask, motionController},
|
motionService{systemTask, motionController},
|
||||||
|
fs {fs},
|
||||||
|
fsService {fs},
|
||||||
serviceDiscovery({¤tTimeClient, &alertNotificationClient}) {
|
serviceDiscovery({¤tTimeClient, &alertNotificationClient}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,6 +99,7 @@ void NimbleController::Init() {
|
||||||
immediateAlertService.Init();
|
immediateAlertService.Init();
|
||||||
heartRateService.Init();
|
heartRateService.Init();
|
||||||
motionService.Init();
|
motionService.Init();
|
||||||
|
fsService.Init();
|
||||||
|
|
||||||
int rc;
|
int rc;
|
||||||
rc = ble_hs_util_ensure_addr(0);
|
rc = ble_hs_util_ensure_addr(0);
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "components/ble/MotionService.h"
|
#include "components/ble/MotionService.h"
|
||||||
#include "components/ble/weather/WeatherService.h"
|
#include "components/ble/weather/WeatherService.h"
|
||||||
#include "components/fs/FS.h"
|
#include "components/fs/FS.h"
|
||||||
|
#include "components/ble/FSService.h"
|
||||||
|
|
||||||
namespace Pinetime {
|
namespace Pinetime {
|
||||||
namespace Drivers {
|
namespace Drivers {
|
||||||
|
@ -110,6 +111,8 @@ namespace Pinetime {
|
||||||
HeartRateService heartRateService;
|
HeartRateService heartRateService;
|
||||||
MotionService motionService;
|
MotionService motionService;
|
||||||
ServiceDiscovery serviceDiscovery;
|
ServiceDiscovery serviceDiscovery;
|
||||||
|
FS fs;
|
||||||
|
FSService fsService;
|
||||||
|
|
||||||
uint8_t addrType;
|
uint8_t addrType;
|
||||||
uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE;
|
uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE;
|
||||||
|
|
Loading…
Reference in a new issue