1919#include < temperature_sensor.h>
2020
2121/* Config */
22- static constexpr char *TAG = " LoMa" ;
22+ static constexpr const char *TAG = " LoMa" ;
2323
2424// MARK: Function Prototypes
2525// Main Tasks
26- void vTaskUpdateFSM (void *pvParameters);
27- void vTaskPollSensors (void *pvParameters);
28- void vTaskAdjustLoad (void *pvParameters);
29- void vTaskRecvData (void *pvParameters);
30-
31- void vTaskSendData (void *pvParameters);
32- void vTaskConfigure (void *pvParameters);
33- void vTaskStatusLED (void *pvParameters);
34- void vTaskLogData (void *pvParameters);
26+ void
27+ vTaskUpdateFSM ([[maybe_unused]] void *pvParameters);
28+ void
29+ vTaskPollSensors ([[maybe_unused]] void *pvParameters);
30+ void
31+ vTaskAdjustLoad ([[maybe_unused]] void *pvParameters);
32+ void
33+ vTaskRecvData ([[maybe_unused]] void *pvParameters);
34+
35+ [[noreturn]] void
36+ vTaskSendData ([[maybe_unused]] void *pvParameters);
37+ [[noreturn]] void
38+ vTaskConfigure ([[maybe_unused]] void *pvParameters);
39+ [[noreturn]] void
40+ vTaskStatusLED ([[maybe_unused]] void *pvParameters);
41+ [[noreturn]] void
42+ vTaskLogData ([[maybe_unused]] void *pvParameters);
3543
3644// Optional Tasks
37- void vTaskTelnet (void *pvParameters);
38- void vTaskOTA (void *pvParameters);
45+ [[noreturn]] void vTaskTelnet ([[maybe_unused]] void *pvParameters);
46+ [[noreturn]] void vTaskOTA ([[maybe_unused]] void *pvParameters);
3947
4048// Helper Functions
4149bool configureLoad ();
@@ -119,6 +127,21 @@ bool configureLoad() {
119127 return true ;
120128}
121129
130+ // todo: INA260 addresses: INA260: 0x40, 0x41, 0x44, 0x45
131+
132+ /* *
133+ * @brief Helper - Checks canShow() and then shows them.
134+ * @return Whether the LEDs were updated
135+ */
136+ inline bool showLEDsIfReady () {
137+ if (leds.canShow ()) {
138+ leds.show ();
139+ return true ;
140+ } else {
141+ return false ;
142+ }
143+ }
144+
122145/* *
123146 * MARK: Setup
124147 * put your setup code here, to run once:
@@ -146,22 +169,16 @@ void setup() {
146169 // No need to save power here
147170 leds.setPixelColor (0 , 0xFF , 0xA5 , 0x00 ); // orange
148171 }
149- if (leds.canShow ()) {
150- leds.show ();
151- }
172+ (void )showLEDsIfReady ();
152173
153174 // Configure WiFi
154175 static bool wifiInitialized = false ;
155176 if (!wifiInitialized) {
156177 leds.setPixelColor (0 , 0x00 , 0x00 , 0xFF ); // blue
157- if (leds.canShow ()) {
158- leds.show ();
159- }
178+ (void )showLEDsIfReady ();
160179 uint8_t optimalChannel = adapterWLAN.identifyOptimalChannel ();
161180 leds.setPixelColor (0 , 0xFF , 0xA5 , 0x00 ); // orange
162- if (leds.canShow ()) {
163- leds.show ();
164- }
181+ (void )showLEDsIfReady ();
165182 ESP_LOGI (TAG , " Optimal WiFi Channel: %d" , optimalChannel);
166183 if (adapterWLAN.begin (optimalChannel)) {
167184 ESP_LOGI (TAG , " WiFi initialized" );
@@ -171,9 +188,7 @@ void setup() {
171188 }
172189 }
173190 leds.setPixelColor (0 , 0x00 , 0xFF , 0x00 ); // green
174- if (leds.canShow ()) {
175- leds.show ();
176- }
191+ (void )showLEDsIfReady ();
177192
178193 // Configure ESP-NOW
179194 static bool espNowInitalized = false ;
@@ -186,9 +201,7 @@ void setup() {
186201 }
187202 }
188203 leds.setPixelColor (0 , 0xFF , 0xA5 , 0x00 ); // orange
189- if (leds.canShow ()) {
190- leds.show ();
191- }
204+ (void )showLEDsIfReady ();
192205
193206 // Configure ESP-NOW Peers
194207 static bool peerRegistered = false ;
@@ -201,9 +214,7 @@ void setup() {
201214 }
202215 }
203216 leds.setPixelColor (0 , 0x00 , 0xFF , 0x00 ); // green
204- if (leds.canShow ()) {
205- leds.show ();
206- }
217+ (void )showLEDsIfReady ();
207218
208219 // Sync Time // FIXME! - Load accesses fault
209220 static bool timeSynced = false ;
@@ -216,27 +227,21 @@ void setup() {
216227 }
217228 }
218229 leds.setPixelColor (0 , 0x00 , 0xFF , 0x00 ); // green
219- if (leds.canShow ()) {
220- leds.show ();
221- }
230+ (void )showLEDsIfReady ();
222231
223232 // Print MAC Address // todo - verify
224233 ESP_LOGI (
225234 TAG , " MAC Address: %s" ,
226235 AdapterWLAN::formatMACAddress (adapterWLAN.getMACAddress ()).c_str ());
227236 leds.setPixelColor (0 , 0xFF , 0xA5 , 0x00 ); // orange
228- if (leds.canShow ()) {
229- leds.show ();
230- }
237+ (void )showLEDsIfReady ();
231238
232239 // TODO: Check ESP-NOW impl against last years
233240 // TODO: Configure response handler, load server
234241
235242 loadConfigured = configureLoad ();
236243 leds.setPixelColor (0 , 0x00 , 0xFF , 0x00 ); // green
237- if (leds.canShow ()) {
238- leds.show ();
239- }
244+ (void )showLEDsIfReady ();
240245
241246 // Set up tasks
242247 static bool tasksSetup = false ;
@@ -280,15 +285,17 @@ void setup() {
280285/* *
281286 * @brief Task to control run the FSM
282287 */
283- void vTaskUpdateFSM (void *pvParameters) {
288+ [[noreturn]] void
289+ vTaskUpdateFSM ([[maybe_unused]] void *pvParameters) {
284290 while (true ) {
285291 }
286292}
287293
288294/* *
289295 * @brief Task to poll high priority sensors
290296 */
291- void vTaskPollSensors (void *pvParameters) {
297+ [[noreturn]] void
298+ vTaskPollSensors ([[maybe_unused]] void *pvParameters) {
292299 while (true ) {
293300 delay (RUN ::TASK_INTERVALS ::TI_POLL_SENSORS_mS);
294301 }
@@ -297,7 +304,8 @@ void vTaskPollSensors(void *pvParameters) {
297304/* *
298305 * @brief Task to control the pitch actuator
299306 */
300- void vTaskAdjustLoad (void *pvParameters) {
307+ [[noreturn]] void
308+ vTaskAdjustLoad ([[maybe_unused]] void *pvParameters) {
301309 while (true ) {
302310 static int i = 0 ;
303311 // ESP_LOGI(TAG, "Pitch PID Output: %f",
@@ -311,7 +319,8 @@ void vTaskAdjustLoad(void *pvParameters) {
311319/* *
312320 * @brief Task to control run the variable load
313321 */
314- // void vTaskVarLoad(void *pvParameters) {
322+ // [[noreturn]] void vTaskVarLoad([[maybe_unused]] void
323+ // *pvParameters) {
315324// while (true) {
316325// }
317326// }
@@ -321,7 +330,8 @@ void vTaskAdjustLoad(void *pvParameters) {
321330/* *
322331 * @brief Task to handle inbound data that has been queued
323332 */
324- void vTaskRecvData (void *pvParameters) {
333+ [[noreturn]] void
334+ vTaskRecvData ([[maybe_unused]] void *pvParameters) {
325335 while (true ) {
326336 if (false ) {
327337 delay (RUN ::TASK_INTERVALS ::TI_RECV_ms);
@@ -335,23 +345,26 @@ void vTaskRecvData(void *pvParameters) {
335345/* *
336346 * @brief Task to handle inbound data that has been queued
337347 */
338- // void vTaskHandleInboundData(void *pvParameters) {
348+ // [[noreturn]] void vTaskHandleInboundData([[maybe_unused]] void
349+ // *pvParameters) {
339350// while (true) {
340351// }
341352// }
342353
343354/* *
344355 * @brief Task to handle outbound data that has been queued
345356 */
346- // void vTaskHandleOutboundData(void *pvParameters) {
357+ // [[noreturn]] void vTaskHandleOutboundData([[maybe_unused]] void
358+ // *pvParameters) {
347359// while (true) {
348360// }
349361// }
350362
351363/* *
352364 * @brief Task to handle outbound data that has been queued
353365 */
354- void vTaskSendData (void *pvParameters) {
366+ [[noreturn]] void
367+ vTaskSendData ([[maybe_unused]] void *pvParameters) {
355368 while (true ) {
356369 if (false ) {
357370 delay (RUN ::TASK_INTERVALS ::TI_SEND_ms);
@@ -364,7 +377,8 @@ void vTaskSendData(void *pvParameters) {
364377
365378// MARK: Utility Tasks
366379
367- void vTaskConfigure (void *pvParameters) {
380+ [[noreturn]] void
381+ vTaskConfigure ([[maybe_unused]] void *pvParameters) {
368382 while (true ) {
369383 if (!loadConfigured) {
370384 if (loadDevice.begin ()) {
@@ -386,7 +400,8 @@ void vTaskConfigure(void *pvParameters) {
386400/* *
387401 * @brief Task to handle Telnet connections
388402 */
389- void vTaskTelnet (void *pvParameters) {
403+ [[noreturn]] void
404+ vTaskTelnet ([[maybe_unused]] void *pvParameters) {
390405 while (true ) {
391406 // TELNET::loop(); // todo
392407 delay (RUN ::TASK_INTERVALS ::TI_TELNET_ms);
@@ -397,15 +412,16 @@ void vTaskTelnet(void *pvParameters) {
397412 * @brief Task to handle ElegantOTA connections
398413 * @deprecated Just use a USB cable if possible
399414 */
400- void vTaskOTA (void *pvParameters) {
415+ [[noreturn]] void vTaskOTA ([[maybe_unused]] void *pvParameters) {
401416 while (true ) {
402417 delay (RUN ::TASK_INTERVALS ::TI_OTA_ms);
403418 }
404419}
405420
406421// MARK: Status Tasks
407422
408- void vTaskStatusLED (void *pvParameters) {
423+ [[noreturn]] void
424+ vTaskStatusLED ([[maybe_unused]] void *pvParameters) {
409425 while (true ) {
410426 ESP_LOGV (TAG , " vTSL" );
411427 leds.setPixelColor (0 , 0x00 , 0xFF , 0x00 ); // Green
@@ -444,7 +460,8 @@ constexpr uint32_t LOG_ITEM_INTERVAL_MS =
444460/* *
445461 * @brief Task to log data
446462 */
447- void vTaskLogData (void *pvParameters) {
463+ [[noreturn]] void
464+ vTaskLogData ([[maybe_unused]] void *pvParameters) {
448465 /* *
449466 * @See
450467 * https://docs.espressif.com/projects/esp-idf/en/v5.5.2/esp32c5/api-reference/peripherals/temp_sensor.html
0 commit comments