mirror of
https://github.com/InfiniTimeOrg/InfiniTime.git
synced 2024-12-26 11:13:16 +03:00
Added Blank FSService that exposes only version info
This commit is contained in:
parent
42a5cdb5b7
commit
f57f797ff5
@ -487,6 +487,7 @@ list(APPEND SOURCE_FILES
|
||||
components/ble/NavigationService.cpp
|
||||
displayapp/fonts/lv_font_navi_80.c
|
||||
components/ble/BatteryInformationService.cpp
|
||||
components/ble/FSService.cpp
|
||||
components/ble/ImmediateAlertService.cpp
|
||||
components/ble/ServiceDiscovery.cpp
|
||||
components/ble/HeartRateService.cpp
|
||||
@ -557,6 +558,7 @@ list(APPEND RECOVERY_SOURCE_FILES
|
||||
components/ble/MusicService.cpp
|
||||
components/ble/weather/WeatherService.cpp
|
||||
components/ble/BatteryInformationService.cpp
|
||||
components/ble/FSService.cpp
|
||||
components/ble/ImmediateAlertService.cpp
|
||||
components/ble/ServiceDiscovery.cpp
|
||||
components/ble/NavigationService.cpp
|
||||
@ -669,6 +671,7 @@ set(INCLUDE_FILES
|
||||
components/ble/DfuService.h
|
||||
components/firmwarevalidator/FirmwareValidator.h
|
||||
components/ble/BatteryInformationService.h
|
||||
components/ble/FSService.h
|
||||
components/ble/ImmediateAlertService.h
|
||||
components/ble/ServiceDiscovery.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,
|
||||
Controllers::HeartRateController& heartRateController,
|
||||
Controllers::MotionController& motionController,
|
||||
Pinetime::Controllers::FS& fs)
|
||||
Controllers::FS& fs)
|
||||
: systemTask {systemTask},
|
||||
bleController {bleController},
|
||||
dateTimeController {dateTimeController},
|
||||
@ -49,7 +49,9 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
|
||||
batteryInformationService {batteryController},
|
||||
immediateAlertService {systemTask, notificationManager},
|
||||
heartRateService {systemTask, heartRateController},
|
||||
motionService {systemTask, motionController},
|
||||
motionService{systemTask, motionController},
|
||||
fs {fs},
|
||||
fsService {fs},
|
||||
serviceDiscovery({¤tTimeClient, &alertNotificationClient}) {
|
||||
}
|
||||
|
||||
@ -97,7 +99,8 @@ void NimbleController::Init() {
|
||||
immediateAlertService.Init();
|
||||
heartRateService.Init();
|
||||
motionService.Init();
|
||||
|
||||
fsService.Init();
|
||||
|
||||
int rc;
|
||||
rc = ble_hs_util_ensure_addr(0);
|
||||
ASSERT(rc == 0);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "components/ble/MotionService.h"
|
||||
#include "components/ble/weather/WeatherService.h"
|
||||
#include "components/fs/FS.h"
|
||||
#include "components/ble/FSService.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Drivers {
|
||||
@ -110,6 +111,8 @@ namespace Pinetime {
|
||||
HeartRateService heartRateService;
|
||||
MotionService motionService;
|
||||
ServiceDiscovery serviceDiscovery;
|
||||
FS fs;
|
||||
FSService fsService;
|
||||
|
||||
uint8_t addrType;
|
||||
uint16_t connectionHandle = BLE_HS_CONN_HANDLE_NONE;
|
||||
|
Loading…
Reference in New Issue
Block a user