Browse Source

implement ls and cat commands for rescue mode

pull/377/head
liamcottle 1 year ago
parent
commit
0f601752e4
  1. 10
      examples/companion_radio/DataStore.cpp
  2. 1
      examples/companion_radio/DataStore.h
  3. 48
      examples/companion_radio/MyMesh.cpp

10
examples/companion_radio/DataStore.cpp

@ -42,6 +42,16 @@ void DataStore::begin() {
#include <LittleFS.h>
#endif
File DataStore::openRead(const char* filename) {
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
return _fs->open(filename, FILE_O_READ);
#elif defined(RP2040_PLATFORM)
return _fs->open(filename, "r");
#else
return _fs->open(filename, "r", true);
#endif
}
bool DataStore::formatFileSystem() {
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
return _fs->format();

1
examples/companion_radio/DataStore.h

@ -37,4 +37,5 @@ public:
void saveChannels(DataStoreHost* host);
uint8_t getBlobByKey(const uint8_t key[], int key_len, uint8_t dest_buf[]);
bool putBlobByKey(const uint8_t key[], int key_len, const uint8_t src_buf[], uint8_t len);
File openRead(const char* filename);
};

48
examples/companion_radio/MyMesh.cpp

@ -1305,6 +1305,54 @@ void MyMesh::checkCLIRescueCmd() {
} else {
Serial.println(" Error: erase failed");
}
} else if (memcmp(cli_command, "ls", 2) == 0) {
// get path from command e.g: "ls /adafruit"
const char *path = &cli_command[3];
// log each file and directory
File root = _store->openRead(path);
File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print("[dir] ");
Serial.println(file.name());
} else {
Serial.print("[file] ");
Serial.print(file.name());
Serial.print(" (");
Serial.print(file.size());
Serial.println(" bytes)");
}
// move to next file
file = root.openNextFile();
}
} else if (memcmp(cli_command, "cat", 3) == 0) {
// get path from command e.g: "cat /contacts3"
const char *path = &cli_command[4];
// log file content as hex
File file = _store->openRead(path);
if(file){
// get file content
int file_size = file.available();
uint8_t buffer[file_size];
file.read(buffer, file_size);
// print hex
mesh::Utils::printHex(Serial, buffer, file_size);
Serial.print("\n");
file.close();
}
} else if (strcmp(cli_command, "reboot") == 0) {
board.reboot(); // doesn't return
} else {

Loading…
Cancel
Save