fix(sacn): ein nicht gestarteter Empfangs-Task darf die Lampe nicht unbrauchbar machen
nl_sacn_beat ist ein Pflichtterm in der Wachhund-Bedingung. Schlug tls_os_task_create() fehl, bewegte sich der Herzschlag nie, der Wachhund wurde nie gefuettert und die Lampe setzte sich alle 20 s zurueck - ohne Weg hinein. Ein Zusatzdienst muss zu "kein sACN" degradieren, nicht zu "keine Lampe". nl_sacn_running() meldet den Fehlschlag, app_main merkt ihn sich einmal als sacn_required, und eine Zeile auf der Konsole macht ihn sichtbar.
This commit is contained in:
+17
-2
@@ -1,3 +1,4 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "wm_include.h"
|
||||
@@ -24,6 +25,12 @@ static volatile bool s_dirty = true;
|
||||
|
||||
volatile uint32_t nl_sacn_beat;
|
||||
|
||||
/* Faellt nur aus, wenn der Task gar nicht erst entsteht. app_main fragt das ab: ohne Task
|
||||
* bewegt sich nl_sacn_beat nie, und eine Wachhund-Bedingung, die trotzdem darauf besteht,
|
||||
* wuerde die Lampe im 20-s-Takt endlos zuruecksetzen - ein Zusatzdienst darf sie nicht
|
||||
* unbrauchbar machen. */
|
||||
static volatile bool s_running = true;
|
||||
|
||||
void nl_sacn_apply_settings(const nl_settings_t *s)
|
||||
{
|
||||
nl_dmx_cfg_t c;
|
||||
@@ -153,6 +160,14 @@ static void sacn_task(void *arg)
|
||||
|
||||
void nl_sacn_start(void)
|
||||
{
|
||||
tls_os_task_create(NULL, "nl_sacn", sacn_task, NULL, (u8 *)s_stack, sizeof(s_stack),
|
||||
NL_SACN_PRIO, 0);
|
||||
if (tls_os_task_create(NULL, "nl_sacn", sacn_task, NULL, (u8 *)s_stack, sizeof(s_stack),
|
||||
NL_SACN_PRIO, 0) != TLS_OS_SUCCESS) {
|
||||
s_running = false;
|
||||
printf("sacn: task create failed - receiver off\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
bool nl_sacn_running(void)
|
||||
{
|
||||
return s_running;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user