little fixes

This commit is contained in:
2026-05-22 09:45:35 +03:00
parent 51869f0137
commit 768d46060d
7 changed files with 65 additions and 32 deletions

View File

@@ -41,6 +41,7 @@ static const val_t values[NAMOUNT] = {
static void *mainthread(void *s){
FNAME();
sensordata_t *sensor = (sensordata_t *)s;
double t0 = sl_dtime();
while(sensor->fdes > -1){
if(check_shm_block(&sdat)){
//DBG("Got next");
@@ -57,7 +58,8 @@ static void *mainthread(void *s){
pthread_mutex_unlock(&sensor->valmutex);
if(sensor->freshdatahandler) sensor->freshdatahandler(sensor);
}else break; // no connection?
sleep(1);
while(sl_dtime() - t0 < sensor->tpoll) usleep(500);
t0 = sl_dtime();
}
return NULL;
}

View File

@@ -109,7 +109,7 @@ static void *mainthread(void *s){
sensordata_t *sensor = (sensordata_t *)s;
while(sensor->fdes > -1){
time_t tnow = time(NULL);
if(tnow - tpoll > sensor->tpoll){
if(tnow - tpoll > sensor->tpoll){ // tpoll + 1 second
int dlen = sprintf(buf, "%s0\n%s1\n", commands[CMD_DISTANCE], commands[CMD_DISTANCE]);
if(dlen != write(sensor->fdes, buf, dlen)){
WARN("Can't ask new data from lightning monitor");
@@ -144,15 +144,19 @@ static void *mainthread(void *s){
int idx = parse_string(buf, &val, &nsens);
if(idx > -1){
DBG("Got index=%d", idx);
gotfresh = TRUE;
if(idx == NINTERRUPT && val == ANS_LIGHTNING){
DBG("Interrupt: lightning");
sensor->values[NSENSNO].value.u = nsens;
sensor->values[NSENSNO].time = tnow;
}
sensor->values[idx].value.u = val;
sensor->values[idx].time = tnow;
if(idx == NDISTANCE && val == 63){
// do nothing: this is just polling signal
}else{
gotfresh = TRUE;
sensor->values[idx].value.u = val;
sensor->values[idx].time = tnow;
}
}
}else break;
}

View File

@@ -77,7 +77,7 @@ static void *mainthread(void *s){
sensordata_t *sensor = (sensordata_t *)s;
while(sensor->fdes > -1){
time_t tnow = time(NULL);
if(tnow - tpoll > sensor->tpoll){
if(tnow - tpoll >= sensor->tpoll){
if(4 != write(sensor->fdes, "?U\r\n", 4)){
WARN("Can't ask new data");
break;

View File

@@ -126,7 +126,7 @@ static void *mainthread(void *s){
sensordata_t *sensor = (sensordata_t *)s;
while(sensor->fdes > -1){
time_t tnow = time(NULL);
if(tnow - tpoll > sensor->tpoll){
if(tnow - tpoll >= sensor->tpoll){
if(6 != write(sensor->fdes, "!0R0\r\n", 6)){
WARN("Can't ask new data");
break;