|
4 | 4 |
|
5 | 5 | #include "recorder.hpp" |
6 | 6 |
|
7 | | -bool Recorder::begin() { |
8 | | - int32_t number = 0; |
| 7 | +#include "config.hpp" |
9 | 8 |
|
10 | | - if (!fatfs.chdir(directory)) { |
| 9 | +bool Recorder::begin() { |
| 10 | + if (!fatfs.chdir(m_directory)) { |
11 | 11 | 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]); |
14 | 14 | console.log.println("[REC] Crating directory"); |
15 | | - if (!fatfs.chdir(directory)) { |
| 15 | + if (!fatfs.chdir(m_directory)) { |
16 | 16 | console.error.println("[REC] Open directory failed"); |
17 | 17 | return false; |
18 | 18 | } |
19 | 19 | } |
20 | 20 |
|
21 | | - do { |
22 | | - snprintf(fileName, 30, "log_%03ld.csv", number); |
23 | | - number++; |
24 | | - } while (fatfs.exists(fileName)); |
| 21 | + setNewFileName(); |
25 | 22 |
|
26 | | - queue = xQueueCreate(64, sizeof(RecorderElement)); |
| 23 | + m_queue = xQueueCreate(64, sizeof(RecorderElement)); |
27 | 24 | xTaskCreate(recordTask, "task_recorder", 4096, this, 1, nullptr); |
28 | | - initialized = true; |
29 | | - return initialized; |
| 25 | + m_initialized = true; |
| 26 | + return m_initialized; |
30 | 27 | } |
31 | 28 |
|
32 | 29 | 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) { |
36 | 34 | console.error.println("[REC] Open file failed"); |
37 | 35 | return; |
38 | 36 | } |
39 | | - fileCreated = true; |
40 | | - file.println( |
| 37 | + m_fileCreated = true; |
| 38 | + m_file.println( |
41 | 39 | "link,ts[deciseconds],state,errors,lat[deg/10000],lon[deg/10000],altitude[m],velocity[m/" |
42 | 40 | "s],battery[decivolts],pyro1,pyro2"); |
43 | 41 | } |
44 | 42 |
|
| 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 | + |
45 | 66 | void Recorder::recordTask(void *pvParameter) { |
46 | | - auto *ref = static_cast<Recorder *>(pvParameter); |
| 67 | + auto *rec = static_cast<Recorder *>(pvParameter); |
47 | 68 | char line[128]; |
48 | 69 | uint32_t count = 0; |
49 | 70 | 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(); |
54 | 75 | } |
55 | 76 | const auto &data = element.data; |
56 | 77 | const auto pyro1_continuity = static_cast<bool>(data.pyro_continuity & 0x01U); |
57 | 78 | const auto pyro2_continuity = static_cast<bool>(data.pyro_continuity & 0x02U); |
58 | 79 | snprintf(line, 128, "%hu,%d,%d,%d,%d,%d,%d,%d,%d,%hu,%hu", element.source, data.timestamp, data.state, |
59 | 80 | data.errors, data.lat, data.lon, data.altitude, data.velocity, data.voltage, |
60 | 81 | static_cast<uint8_t>(pyro1_continuity), static_cast<uint8_t>(pyro2_continuity)); |
61 | | - ref->file.println(line); |
| 82 | + rec->m_file.println(line); |
62 | 83 | count++; |
63 | 84 |
|
64 | 85 | if (count == 10) { |
65 | 86 | count = 0; |
66 | | - ref->file.sync(); |
| 87 | + rec->m_file.sync(); |
67 | 88 | } |
68 | 89 | } |
69 | 90 | } |
|
0 commit comments