summaryrefslogtreecommitdiff
path: root/src/components/ble
diff options
context:
space:
mode:
authorTim Keller <geekboy1011@gmail.com>2021-10-20 01:30:04 +0000
committerTim Keller <geekboy1011@gmail.com>2021-12-10 01:18:57 +0000
commit6393a17d7402b92e00cd748bc7e901ba053135de (patch)
tree4f7f634ae7270ff4f6b5de696d8f093de4e2f21c /src/components/ble
parentf841b8c98498a01211036fd0720a1f8c949e28f2 (diff)
List Dir works?
Diffstat (limited to 'src/components/ble')
-rw-r--r--src/components/ble/FSService.cpp41
-rw-r--r--src/components/ble/FSService.h8
-rw-r--r--src/components/ble/NimbleController.cpp2
3 files changed, 34 insertions, 17 deletions
diff --git a/src/components/ble/FSService.cpp b/src/components/ble/FSService.cpp
index 0a1fabb7..cd2cc07a 100644
--- a/src/components/ble/FSService.cpp
+++ b/src/components/ble/FSService.cpp
@@ -1,6 +1,7 @@
#include <nrf_log.h>
#include "FSService.h"
#include "components/ble/BleController.h"
+#include "systemtask/SystemTask.h"
using namespace Pinetime::Controllers;
@@ -13,8 +14,9 @@ int FSServiceCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gat
return fsService->OnFSServiceRequested(conn_handle, attr_handle, ctxt);
}
-FSService::FSService(Pinetime::Controllers::FS& fs)
- : fs {fs},
+FSService::FSService(Pinetime::System::SystemTask& systemTask, Pinetime::Controllers::FS& fs)
+ : systemTask {systemTask},
+ fs {fs},
characteristicDefinition {{.uuid = &fsVersionUuid.u,
.access_cb = FSServiceCallback,
.arg = this,
@@ -60,8 +62,13 @@ int FSService::OnFSServiceRequested(uint16_t connectionHandle, uint16_t attribut
int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
auto command = static_cast<commands>(om->om_data[0]);
- NRF_LOG_INFO("[FS_S] -> FSCommandHandler %d",command);
- fs.Mount();
+ NRF_LOG_INFO("[FS_S] -> FSCommandHandler Command %d", command);
+ // Just always make sure we are awake...
+ systemTask.PushMessage(Pinetime::System::Messages::StartFileTransfer);
+ vTaskDelay(10);
+ while (systemTask.IsSleeping()) {
+ vTaskDelay(100); // 50ms
+ }
switch (command) {
/*
case commands::READ: {
@@ -203,6 +210,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
char path[plen + 1] = {0};
memcpy(path, header->pathstr, plen);
NRF_LOG_INFO("[FS_S] -> DIR %.10s", path);
+
lfs_dir_t dir = {};
struct lfs_info info = {};
@@ -212,9 +220,11 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
resp.totalentries = 0;
resp.entry = 0;
- int res = fs.DirOpen(path, &dir);
+ if (fs.DirOpen(path, &dir)) {
+ return 0;
+ }
- NRF_LOG_INFO("[FS_S] ->diropen %d ", res);
+ // NRF_LOG_INFO("[FS_S] ->diropen %d ", res);
while (fs.DirRead(&dir, &info)) {
resp.totalentries++;
}
@@ -222,9 +232,11 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
fs.DirRewind(&dir);
- while (true) {
+ // NRF_LOG_INFO("[FS_S] ->diropen %d ", res);
+
+ while (resp.entry < resp.totalentries) {
int res = fs.DirRead(&dir, &info);
- if(res <= 0){
+ if (res <= 0) {
break;
}
switch (info.type) {
@@ -243,23 +255,26 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
strcpy(resp.path, info.name);
resp.path_length = strlen(info.name);
NRF_LOG_INFO("[FS_S] ->Path %s ,", info.name);
- auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(ListDirResponse)+resp.path_length);
+ auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(ListDirResponse) + resp.path_length);
ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om);
- vTaskDelay(10); // Allow stuff to actually go out over the BLE conn
+ vTaskDelay(100); // Allow stuff to actually go out over the BLE conn
resp.entry++;
}
- fs.DirClose(&dir);
+
+ if (fs.DirClose(&dir)) {
+ return 0;
+ }
resp.file_size = 0;
resp.path_length = 0;
resp.flags = 0;
// TODO Handle Size of response better.
- auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(ListDirResponse)+resp.path_length);
+ auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(ListDirResponse) + resp.path_length);
ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om);
NRF_LOG_INFO("[FS_S] -> done ");
break;
}
}
- fs.UnMount();
+ systemTask.PushMessage(Pinetime::System::Messages::StopFileTransfer);
return 0;
}
// Loads resp with file data given a valid filepath header and resp
diff --git a/src/components/ble/FSService.h b/src/components/ble/FSService.h
index 114c1e0d..69ed094b 100644
--- a/src/components/ble/FSService.h
+++ b/src/components/ble/FSService.h
@@ -15,13 +15,15 @@ namespace Pinetime {
class Ble;
class FSService {
public:
- FSService(Pinetime::Controllers::FS& fs);
+ FSService(Pinetime::System::SystemTask& systemTask,
+ 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::System::SystemTask& systemTask;
Pinetime::Controllers::FS& fs;
static constexpr uint16_t FSServiceId {0xFEBB};
static constexpr uint16_t fsVersionId {0x0100};
@@ -30,7 +32,7 @@ namespace Pinetime {
static constexpr uint8_t maxpathlen = 100;
static constexpr ble_uuid16_t fsServiceUuid {
.u {.type = BLE_UUID_TYPE_16},
- .value = {0xFEBB}};// {0x72, 0x65, 0x66, 0x73, 0x6e, 0x61, 0x72, 0x54, 0x65, 0x6c, 0x69, 0x46, 0xBB, 0xFE, 0xAF, 0xAD}};
+ .value = {0xFEBB}}; // {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},
@@ -144,7 +146,7 @@ namespace Pinetime {
};
int FSCommandHandler(uint16_t connectionHandle, os_mbuf* om);
- void prepareReadDataResp(ReadHeader *header, ReadResponse *resp);
+ void prepareReadDataResp(ReadHeader* header, ReadResponse* resp);
};
}
}
diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp
index b5eb46b8..01230661 100644
--- a/src/components/ble/NimbleController.cpp
+++ b/src/components/ble/NimbleController.cpp
@@ -51,7 +51,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
heartRateService {systemTask, heartRateController},
motionService{systemTask, motionController},
fs {fs},
- fsService {fs},
+ fsService {systemTask,fs},
serviceDiscovery({&currentTimeClient, &alertNotificationClient}) {
}