Skip to content

Commit 7f27c0c

Browse files
committed
[wip] Name log after link phrase
1 parent f2ac84d commit 7f27c0c

File tree

9 files changed

+97
-46
lines changed

9 files changed

+97
-46
lines changed

ground_station/platformio.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ build_flags =
3939
-DCFG_TUSB_CONFIG_FILE='"sdkconfig.h"' ; Use default TinyUSB configuration
4040
-DFIRMWARE_VERSION='"1.1.1"' ; Enter Firmware Version here
4141
-DUSB_MANUFACTURER='"CATS"' ; USB Manufacturer string
42-
-DUSB_PRODUCT='"CATS Ground Station"' ; USB Product String
42+
-DUSB_PRODUCT='"Ground Station"' ; USB Product String
4343
-D USB_SERIAL="0" ; Enter Device Serial Number here
4444
-D USB_VID=0x239A ; Default Adafruit USB VID
4545
-D USB_PID=0x80AB ; Default Adafruit USB PID

ground_station/src/config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,5 @@ void Config::load() {
7575
}
7676

7777
config.neverStopLogging = stop;
78-
config.receiverMode = static_cast<ReceiverTelemetryMode_e>(mode);
78+
config.receiverMode = static_cast<ReceiverTelemetryMode>(mode);
7979
}

ground_station/src/config.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88

99
#include <cstdint>
1010

11-
enum ReceiverTelemetryMode_e : bool { SINGLE = false, DUAL = true };
11+
enum class ReceiverTelemetryMode : bool { kSingle = false, kDual = true };
1212

1313
// Maximum number of characters for link & test phrases
1414
inline constexpr uint32_t kMaxPhraseLen = 16;
1515

1616
struct systemConfig_t {
1717
int16_t timeZoneOffset;
1818
bool neverStopLogging;
19-
ReceiverTelemetryMode_e receiverMode;
19+
ReceiverTelemetryMode receiverMode;
2020
char linkPhrase1[kMaxPhraseLen + 1];
2121
char linkPhrase2[kMaxPhraseLen + 1];
2222
char testingPhrase[kMaxPhraseLen + 1];

ground_station/src/hmi/hmi.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,11 +481,19 @@ void Hmi::settings() {
481481
(*static_cast<bool *>(data_ptr)) = true;
482482
configChanged = true;
483483
window.updateSettings(settingIndex);
484+
485+
if (&systemConfig.config.receiverMode == data_ptr) {
486+
console.log.println("telemetry mode changed");
487+
}
484488
}
485489
if (leftButton.wasPressed() && *static_cast<bool *>(data_ptr)) {
486490
(*static_cast<bool *>(data_ptr)) = false;
487491
configChanged = true;
488492
window.updateSettings(settingIndex);
493+
494+
if (&systemConfig.config.receiverMode == data_ptr) {
495+
console.log.println("telemetry mode changed");
496+
}
489497
}
490498
break;
491499
}
@@ -530,21 +538,36 @@ void Hmi::settings() {
530538

531539
if (backButton.wasPressed()) {
532540
state = MENU;
541+
bool closeCurrentFile = false;
533542
if (configChanged) {
534-
configChanged = false;
535-
if (systemConfig.config.receiverMode == SINGLE) {
543+
if (systemConfig.config.receiverMode == ReceiverTelemetryMode::kSingle) {
544+
if (strcmp(link1.getLinkPhrase(), systemConfig.config.linkPhrase1) != 0) {
545+
closeCurrentFile = true;
546+
}
547+
536548
// Set both link phrases to the same
537549
link1.setLinkPhrase(systemConfig.config.linkPhrase1, kMaxPhraseLen);
538550
link2.setLinkPhrase(systemConfig.config.linkPhrase1, kMaxPhraseLen);
539551
} else {
552+
if ((strcmp(link1.getLinkPhrase(), systemConfig.config.linkPhrase1) != 0) ||
553+
(strcmp(link2.getLinkPhrase(), systemConfig.config.linkPhrase2) != 0)) {
554+
closeCurrentFile = true;
555+
}
556+
540557
// Use two different link phrases
541558
link1.setLinkPhrase(systemConfig.config.linkPhrase1, kMaxPhraseLen);
542559
link2.setLinkPhrase(systemConfig.config.linkPhrase2, kMaxPhraseLen);
543560
}
544561

545562
link1.setTestingPhrase(systemConfig.config.testingPhrase, kMaxPhraseLen);
563+
564+
if (closeCurrentFile) {
565+
recorder.closeCurrentFile();
566+
}
567+
546568
systemConfig.save();
547569
console.log.println("Save config");
570+
configChanged = false;
548571
}
549572
window.initMenu(menuIndex);
550573
}

ground_station/src/logging/recorder.cpp

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,66 +4,87 @@
44

55
#include "recorder.hpp"
66

7-
bool Recorder::begin() {
8-
int32_t number = 0;
7+
#include "config.hpp"
98

10-
if (!fatfs.chdir(directory)) {
9+
bool Recorder::begin() {
10+
if (!fatfs.chdir(m_directory)) {
1111
console.error.print("[REC] Open directory failed");
12-
console.error.println(directory);
13-
fatfs.mkdir(&directory[1]);
12+
console.error.println(m_directory);
13+
fatfs.mkdir(&m_directory[1]);
1414
console.log.println("[REC] Crating directory");
15-
if (!fatfs.chdir(directory)) {
15+
if (!fatfs.chdir(m_directory)) {
1616
console.error.println("[REC] Open directory failed");
1717
return false;
1818
}
1919
}
2020

21-
do {
22-
snprintf(fileName, 30, "log_%03ld.csv", number);
23-
number++;
24-
} while (fatfs.exists(fileName));
21+
setNewFileName();
2522

26-
queue = xQueueCreate(64, sizeof(RecorderElement));
23+
m_queue = xQueueCreate(64, sizeof(RecorderElement));
2724
xTaskCreate(recordTask, "task_recorder", 4096, this, 1, nullptr);
28-
initialized = true;
29-
return initialized;
25+
m_initialized = true;
26+
return m_initialized;
3027
}
3128

3229
void Recorder::createFile() {
33-
file = fatfs.open(fileName, FILE_WRITE);
34-
console.log.println(fileName);
35-
if (!file) {
30+
m_file = fatfs.open(m_fileName, FILE_WRITE);
31+
console.log.println(m_fileName);
32+
console.error.printf("[REC] File %s created\n", m_fileName);
33+
if (!m_file) {
3634
console.error.println("[REC] Open file failed");
3735
return;
3836
}
39-
fileCreated = true;
40-
file.println(
37+
m_fileCreated = true;
38+
m_file.println(
4139
"link,ts[deciseconds],state,errors,lat[deg/10000],lon[deg/10000],altitude[m],velocity[m/"
4240
"s],battery[decivolts],pyro1,pyro2");
4341
}
4442

43+
void Recorder::setNewFileName() {
44+
int32_t number = 0;
45+
do {
46+
if (systemConfig.config.receiverMode == ReceiverTelemetryMode::kSingle) {
47+
snprintf(m_fileName, 60, "%s_%03ld.csv", systemConfig.config.linkPhrase1, number);
48+
} else {
49+
snprintf(m_fileName, 60, "%s_%s_%03ld.csv", systemConfig.config.linkPhrase1, systemConfig.config.linkPhrase2,
50+
number);
51+
}
52+
++number;
53+
} while (fatfs.exists(m_fileName));
54+
55+
console.log.printf("[REC] New file name set to %s\n", m_fileName);
56+
}
57+
58+
void Recorder::closeCurrentFile() {
59+
// Close previously opened file
60+
console.log.printf("[REC] Closing %s\n", m_fileName);
61+
m_file.close();
62+
console.log.printf("[REC] %s closed\n", m_fileName);
63+
setNewFileName();
64+
}
65+
4566
void Recorder::recordTask(void *pvParameter) {
46-
auto *ref = static_cast<Recorder *>(pvParameter);
67+
auto *rec = static_cast<Recorder *>(pvParameter);
4768
char line[128];
4869
uint32_t count = 0;
4970
RecorderElement element{};
50-
while (ref->initialized) {
51-
if (xQueueReceive(ref->queue, &element, portMAX_DELAY) == pdPASS) {
52-
if (!ref->fileCreated) {
53-
ref->createFile();
71+
while (rec->m_initialized) {
72+
if (xQueueReceive(rec->m_queue, &element, portMAX_DELAY) == pdPASS) {
73+
if (!rec->m_fileCreated) {
74+
rec->createFile();
5475
}
5576
const auto &data = element.data;
5677
const auto pyro1_continuity = static_cast<bool>(data.pyro_continuity & 0x01U);
5778
const auto pyro2_continuity = static_cast<bool>(data.pyro_continuity & 0x02U);
5879
snprintf(line, 128, "%hu,%d,%d,%d,%d,%d,%d,%d,%d,%hu,%hu", element.source, data.timestamp, data.state,
5980
data.errors, data.lat, data.lon, data.altitude, data.velocity, data.voltage,
6081
static_cast<uint8_t>(pyro1_continuity), static_cast<uint8_t>(pyro2_continuity));
61-
ref->file.println(line);
82+
rec->m_file.println(line);
6283
count++;
6384

6485
if (count == 10) {
6586
count = 0;
66-
ref->file.sync();
87+
rec->m_file.sync();
6788
}
6889
}
6990
}

ground_station/src/logging/recorder.hpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
#pragma once
66

7+
#include <FatLib/FatFile.h>
8+
79
#include "telemetry/telemetryData.hpp"
810
#include "utils.hpp"
911

@@ -14,33 +16,34 @@ struct RecorderElement {
1416

1517
class Recorder {
1618
public:
17-
explicit Recorder(const char* directory) : directory(directory) {}
19+
explicit Recorder(const char* directory) : m_directory(directory) {}
1820
bool begin();
1921

20-
void enable() { enabled = true; }
22+
void enable() { m_enabled = true; }
2123

22-
void disable() { enabled = false; }
24+
void closeCurrentFile();
2325

2426
void record(packedRXMessage* data, uint8_t link_source) {
25-
if (enabled) {
27+
if (m_enabled) {
2628
RecorderElement rec_elem = {*data, link_source};
27-
xQueueSend(queue, &rec_elem, 0);
29+
xQueueSend(m_queue, &rec_elem, 0);
2830
}
2931
}
3032

3133
private:
32-
bool initialized = false;
33-
bool enabled = false;
34-
bool fileCreated = false;
34+
bool m_initialized = false;
35+
bool m_enabled = false;
36+
bool m_fileCreated = false;
3537

36-
const char* directory;
38+
const char* m_directory{nullptr};
3739

38-
char fileName[30] = {};
40+
char m_fileName[60] = {};
3941

40-
QueueHandle_t queue{nullptr};
41-
File file{};
42+
QueueHandle_t m_queue{nullptr};
43+
File32 m_file{};
4244

4345
void createFile();
46+
void setNewFileName();
4447

4548
static void recordTask(void* pvParameter);
4649
};

ground_station/src/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void setup() {
2626

2727
console.begin();
2828

29-
if (!utils.begin(0, "DRIVE")) {
29+
if (!utils.begin()) {
3030
console.error.println("[MAIN] Could not initialize utilities");
3131
}
3232

@@ -45,7 +45,7 @@ void loop() {
4545
static bool ini{false};
4646
if (millis() > 5000 && !ini) {
4747
ini = true;
48-
if (systemConfig.config.receiverMode == SINGLE) {
48+
if (systemConfig.config.receiverMode == ReceiverTelemetryMode::kSingle) {
4949
// Set both link phrases to the same
5050
link1.setLinkPhrase(systemConfig.config.linkPhrase1, kMaxPhraseLen);
5151
link2.setLinkPhrase(systemConfig.config.linkPhrase1, kMaxPhraseLen);
@@ -66,7 +66,7 @@ void loop() {
6666
}
6767

6868
// In single mode, both antennas track the same rocket
69-
if (systemConfig.config.receiverMode == SINGLE) {
69+
if (systemConfig.config.receiverMode == ReceiverTelemetryMode::kSingle) {
7070
const bool link1DataValid = (link1.data.lat() != 0) && (link1.data.lon() != 0);
7171
const bool link2DataValid = (link2.data.lat() != 0) && (link2.data.lon() != 0);
7272
// Check if data from link 1 is newer than link 2

ground_station/src/telemetry/telemetry.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ void Telemetry::setLinkPhrase(const char* phrase, uint32_t length) {
2525

2626
void Telemetry::setLinkPhrase(const String& phrase) { setLinkPhrase(phrase.c_str(), phrase.length()); }
2727

28+
const char* Telemetry::getLinkPhrase() { return reinterpret_cast<const char*>(linkPhrase); }
29+
2830
void Telemetry::setTestingPhrase(const char* phrase, uint32_t length) {
2931
memset(testingPhrase, 0, kMaxPhraseLen + 1);
3032
memcpy(testingPhrase, phrase, length);

ground_station/src/telemetry/telemetry.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class Telemetry {
1717
void setLinkPhrase(const char* phrase, uint32_t length);
1818
void setLinkPhrase(const String& phrase);
1919

20+
const char* getLinkPhrase();
21+
2022
void setTestingPhrase(const char* phrase, uint32_t length);
2123
void setTestingPhrase(const String& phrase);
2224

0 commit comments

Comments
 (0)