From 75aafabc54204b548695a68cb8c0f4cd6341f44b Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Fri, 15 May 2026 15:35:04 +0300 Subject: [PATCH] seems like it works --- Daemons/domedaemon-astrosib/main.c | 2 ++ Daemons/domedaemon-astrosib/server.c | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Daemons/domedaemon-astrosib/main.c b/Daemons/domedaemon-astrosib/main.c index c7d7a2f..9bc1cc6 100644 --- a/Daemons/domedaemon-astrosib/main.c +++ b/Daemons/domedaemon-astrosib/main.c @@ -126,7 +126,9 @@ int main(int argc, char **argv){ ERRX("Cannot write into '%s'", G.headerfile); domename(G.dome_name); sl_check4running((char*)__progname, G.pidfile); +#ifndef EBUG if(sl_daemonize()) ERR("Can't daemonize!"); +#endif sl_loglevel_e lvl = G.verbose + LOGLEVEL_ERR; if(lvl >= LOGLEVEL_AMOUNT) lvl = LOGLEVEL_AMOUNT - 1; if(G.logfile) OPENLOG(G.logfile, lvl, 1); diff --git a/Daemons/domedaemon-astrosib/server.c b/Daemons/domedaemon-astrosib/server.c index 5f6f2cd..fdd9a26 100644 --- a/Daemons/domedaemon-astrosib/server.c +++ b/Daemons/domedaemon-astrosib/server.c @@ -26,6 +26,7 @@ #include #include "dome.h" +#include "server.h" // max age time of last status - 30s #define STATUS_MAX_AGE (30.) @@ -89,7 +90,8 @@ static sl_sock_hresult_e statusth(sl_sock_t *c, _U_ sl_sock_hitem_t *item, _U_ c dome_status_t dome_status; double lastt = get_dome_status(&dome_status); if(sl_dtime() - lastt > STATUS_MAX_AGE) return RESULT_FAIL; - snprintf(buf, 127, "cover1=%s\ncover2=%s\nangle1=%d\nangle2=%d\nrelay1=%d\nrelay2=%d\nrelay3=%d\nreqtime=%.9f\n", + snprintf(buf, 127, "operations=%s\ncover1=%s\ncover2=%s\nangle1=%d\nangle2=%d\nrelay1=%d\nrelay2=%d\nrelay3=%d\nreqtime=%.9f\n", + get_forbidden() ? "forbidden" : "permitted", textst(dome_status.coverstate[0]), textst(dome_status.coverstate[1]), dome_status.encoder[0], dome_status.encoder[1], dome_status.relay[0], dome_status.relay[1], dome_status.relay[2], @@ -221,23 +223,30 @@ void server_run(sl_socktype_e type, const char *node, sl_tty_t *serial){ sl_sock_maxclhandler(s, toomuch); sl_sock_connhandler(s, connected); sl_sock_dischandler(s, disconnected); - double tnow = sl_dtime(), tweather = 0.; + double tnow = 0., tweather = 0.; int cmdclosed = 0; while(s && s->connected){ + tnow = sl_dtime(); if(!s->rthread){ LOGERR("Server handlers thread is dead"); break; } if(tnow - tweather > WEATH_POLL){ + DBG("Poll weather"); if(0 == get_weather_data(&weather)){ // got OK -> check if observations are forbidden + DBG("Got weather data"); tweather = tnow; int bad = 0; - if((double)weather.last_update - tnow > WEATHER_LOST) bad = 1; - if(weather.forceoff || weather.rain || weather.weather > WEATHER_BAD) bad = 1; + if(tnow - (double)weather.last_update > WEATHER_LOST){ bad = 1; DBG("weather measurements are too old"); } + if(weather.forceoff || weather.rain || weather.weather > WEATHER_BAD){ bad = 1; DBG("Bad weather"); } if(bad) BadWeather = 1; else BadWeather = 0; }else{ - if(tnow - tweather > WEATHER_LOST) BadWeather = 1; // lost weather IPC + DBG("Can't get weather"); + if(tnow - tweather > WEATHER_LOST){ + DBG("Lost weather timeout"); + BadWeather = 1; // lost weather IPC + } } } // finite state machine polling @@ -249,7 +258,7 @@ void server_run(sl_socktype_e type, const char *node, sl_tty_t *serial){ cmdclosed = 1; } } - } + } else cmdclosed = 0; } sl_sock_delete(&s); ERRX("Server handlers thread is dead");