List Dir works?
This commit is contained in:
parent
f841b8c984
commit
6393a17d74
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
|
|||
heartRateService {systemTask, heartRateController},
|
||||
motionService{systemTask, motionController},
|
||||
fs {fs},
|
||||
fsService {fs},
|
||||
fsService {systemTask,fs},
|
||||
serviceDiscovery({¤tTimeClient, &alertNotificationClient}) {
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ namespace Pinetime {
|
|||
StopRinging,
|
||||
MeasureBatteryTimerExpired,
|
||||
BatteryPercentageUpdated,
|
||||
StartFileTransfer,
|
||||
StopFileTransfer,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -342,6 +342,19 @@ void SystemTask::Work() {
|
|||
doNotGoToSleep = false;
|
||||
xTimerStart(dimTimer, 0);
|
||||
break;
|
||||
case Messages::StartFileTransfer:
|
||||
NRF_LOG_INFO("[systemtask] FS Started");
|
||||
doNotGoToSleep = true;
|
||||
if (isSleeping && !isWakingUp)
|
||||
GoToRunning();
|
||||
//TODO add intent of fs access icon or something
|
||||
break;
|
||||
case Messages::StopFileTransfer:
|
||||
NRF_LOG_INFO("[systemtask] FS Stopped");
|
||||
doNotGoToSleep = false;
|
||||
xTimerStart(dimTimer, 0);
|
||||
//TODO add intent of fs access icon or something
|
||||
break;
|
||||
case Messages::OnTouchEvent:
|
||||
if (touchHandler.GetNewTouchInfo()) {
|
||||
touchHandler.UpdateLvglTouchPoint();
|
||||
|
|
Loading…
Reference in New Issue
Block a user