mirror of
https://github.com/eddyem/small_tel.git
synced 2026-06-19 10:26:25 +03:00
fixed some bugs, check @ real system
This commit is contained in:
@@ -64,3 +64,7 @@ if(LIGHTNING)
|
||||
endif()
|
||||
|
||||
install(TARGETS ${LIBS} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
install(CODE [===[
|
||||
message(STATUS "Run ldconfig")
|
||||
execute_process(COMMAND ldconfig)
|
||||
]===])
|
||||
|
||||
@@ -59,8 +59,6 @@ static void *mainthread(void *s){
|
||||
}else break; // no connection?
|
||||
sleep(1);
|
||||
}
|
||||
DBG("Lost connection -> suicide");
|
||||
sensor->kill(sensor);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -69,7 +67,6 @@ int sensor_init(sensordata_t *s){
|
||||
if(!s) return FALSE;
|
||||
if(!get_shm_block(&sdat, ClientSide)){
|
||||
WARNX("Can't get BTA shared memory block or create main thread");
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
s->values = MALLOC(val_t, NAMOUNT);
|
||||
@@ -78,7 +75,6 @@ int sensor_init(sensordata_t *s){
|
||||
strncpy(s->name, SENSOR_NAME, NAME_LEN);
|
||||
if(pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
WARN("Can't create main thread");
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
s->fdes = 0;
|
||||
|
||||
@@ -84,7 +84,6 @@ int sensor_init(sensordata_t *s){
|
||||
s->values[5].value.u = 0;
|
||||
//s->values[6].value.f = 4.5;
|
||||
if(pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
s->fdes = 0;
|
||||
|
||||
@@ -115,8 +115,7 @@ static void *mainthread(void *s){
|
||||
}
|
||||
}
|
||||
}
|
||||
DBG("OOOOps!");
|
||||
sensor->kill(sensor);
|
||||
// newer use `kill` here! Master will run it after main thread death
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -132,11 +131,9 @@ int sensor_init(sensordata_t *s){
|
||||
for(int i = 0; i < NS; ++i) s->values[i] = values[i];
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ))){
|
||||
WARNX("Can't init ringbuffer!");
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
if(pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -99,11 +99,11 @@ enum{
|
||||
static const val_t values[NAMOUNT] = { // fields `name` and `comment` have no sense until value meaning is `IS_OTHER`
|
||||
[NPRECIP] = {.sense = VAL_OBLIGATORY, .type = VALT_UINT, .meaning = IS_PRECIP},
|
||||
[NPRECIP_LEVEL] = {.sense = VAL_RECOMMENDED, .type = VALT_FLOAT, .meaning = IS_PRECIP_LEVEL},
|
||||
[NSINCERN] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_OTHER, .name = "TSINCERN", .comment = "Minutes since rain (20 means a lot of)"},
|
||||
[NPOW] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RAINPOW", .comment = "Rain strength, 0..255"},
|
||||
[NAVG] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RAINAVG", .comment = "Average rain strength, 0..255"},
|
||||
[NAMBL] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RSAMBL", .comment = "Ambient light by rain sensor, 0..255"},
|
||||
[NFREEZ] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RSFREEZ", .comment = "Rain sensor is freezed"},
|
||||
[NSINCERN] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_OTHER, .name = "TSINCERN", .comment = "Minutes since rain (20 means a lot of)"},
|
||||
[NPOW] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RAINPOW", .comment = "Rain strength, 0..255"},
|
||||
[NAVG] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RAINAVG", .comment = "Average rain strength, 0..255"},
|
||||
[NAMBL] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RSAMBL", .comment = "Ambient light by rain sensor, 0..255"},
|
||||
[NFREEZ] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_OTHER, .name = "RSFREEZ", .comment = "Rain sensor is freezed"},
|
||||
};
|
||||
|
||||
static int getv(char s, uint8_t *v){
|
||||
@@ -119,7 +119,7 @@ static int getv(char s, uint8_t *v){
|
||||
}
|
||||
|
||||
static int encodepacket(const char *buf, int len, rg11 *Rregs, slowregs *Sregs){
|
||||
DBG("got buffer: %s[%d]", buf, len);
|
||||
// DBG("got buffer: %s[%d]", buf, len);
|
||||
uint8_t databuf[REGLEN/2] = {0};
|
||||
static slowregs slow = {0};
|
||||
if(len != REGMINLEN && len != REGLEN){
|
||||
@@ -172,7 +172,7 @@ static void *mainthread(void *s){
|
||||
if(got > 0){
|
||||
buf[--got] = 0;
|
||||
if(encodepacket(buf, got, &Rregs, &Sregs)){
|
||||
DBG("refresh...");
|
||||
//DBG("refresh...");
|
||||
pthread_mutex_lock(&sensor->valmutex);
|
||||
for(int i = 0; i < NAMOUNT; ++i)
|
||||
sensor->values[i].time = tnow;
|
||||
@@ -189,8 +189,6 @@ static void *mainthread(void *s){
|
||||
}
|
||||
}
|
||||
}
|
||||
DBG("OOOOps!");
|
||||
sensor->kill(sensor);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -207,7 +205,6 @@ int sensor_init(sensordata_t *s){
|
||||
for(int i = 0; i < NAMOUNT; ++i) s->values[i] = values[i];
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ)) ||
|
||||
pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -176,8 +176,6 @@ static void *mainthread(void *s){
|
||||
}
|
||||
usleep(1000);
|
||||
}
|
||||
DBG("suicide");
|
||||
sensor->kill(sensor);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -194,7 +192,6 @@ int sensor_init(sensordata_t *s){
|
||||
for(int i = 0; i < NAMOUNT; ++i) s->values[i] = values[i];
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ)) ||
|
||||
pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -39,9 +39,9 @@ enum{
|
||||
static const val_t values[NAMOUNT] = {
|
||||
[NWIND] = {.sense = VAL_RECOMMENDED, .type = VALT_FLOAT, .meaning = IS_WIND},
|
||||
[NWINDDIR] = {.sense = VAL_RECOMMENDED,.type = VALT_FLOAT, .meaning = IS_WINDDIR},
|
||||
[NHUMIDITY] = {.sense = VAL_BROKEN, .type = VALT_FLOAT, .meaning = IS_HUMIDITY},
|
||||
[NHUMIDITY] = {.sense = VAL_BROKEN, .type = VALT_FLOAT, .meaning = IS_HUMIDITY}, // broken on our meteostation
|
||||
[NAMB_TEMP] = {.sense = VAL_RECOMMENDED, .type = VALT_FLOAT, .meaning = IS_AMB_TEMP},
|
||||
[NPRESSURE] = {.sense = VAL_BROKEN, .type = VALT_FLOAT, .meaning = IS_PRESSURE},
|
||||
[NPRESSURE] = {.sense = VAL_BROKEN, .type = VALT_FLOAT, .meaning = IS_PRESSURE}, // broken on our meteostation
|
||||
[NCLOUDS] = {.sense = VAL_OBLIGATORY, .type = VALT_FLOAT, .meaning = IS_CLOUDS},
|
||||
[NPRECIP] = {.sense = VAL_RECOMMENDED, .type = VALT_UINT, .meaning = IS_PRECIP},
|
||||
[NPRECIPLVL]= {.sense = VAL_UNNECESSARY,.type = VALT_FLOAT, .meaning = IS_PRECIP_LEVEL},
|
||||
@@ -161,7 +161,6 @@ static void *mainthread(void *s){
|
||||
if(sensor->freshdatahandler) sensor->freshdatahandler(sensor);
|
||||
}
|
||||
}
|
||||
sensor->kill(sensor);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -178,7 +177,6 @@ int sensor_init(sensordata_t *s){
|
||||
for(int i = 0; i < NAMOUNT; ++i) s->values[i] = values[i];
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ)) ||
|
||||
pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -192,9 +192,9 @@ int sensor_init(sensordata_t *s){
|
||||
|
||||
snprintf(s->name, NAME_LEN, "%s", SENSOR_NAME);
|
||||
s->fdes = 0;
|
||||
s->Nvalues = NAMOUNT;
|
||||
s->values = MALLOC(val_t, NAMOUNT);
|
||||
for(int i = 0; i < NAMOUNT; ++i) s->values[i] = values[i];
|
||||
s->Nvalues = NAMOUNT;
|
||||
|
||||
DBG("init OIDs");
|
||||
for(int i = 0; i < OID_AMOUNT; ++i){
|
||||
@@ -209,7 +209,6 @@ int sensor_init(sensordata_t *s){
|
||||
DBG("Start main thread");
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ)) ||
|
||||
pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@@ -43,9 +43,9 @@ static const val_t values[NAMOUNT] = {
|
||||
[NHUMIDITY] = {.sense = VAL_OBLIGATORY, .type = VALT_FLOAT, .meaning = IS_HUMIDITY},
|
||||
[NAMB_TEMP] = {.sense = VAL_OBLIGATORY, .type = VALT_FLOAT, .meaning = IS_AMB_TEMP},
|
||||
[NPRESSURE] = {.sense = VAL_OBLIGATORY, .type = VALT_FLOAT, .meaning = IS_PRESSURE},
|
||||
[NPRECIP] = {.sense = VAL_OBLIGATORY, .type = VALT_UINT, .meaning = IS_PRECIP},
|
||||
[NPRECIPLVL]= {.sense = VAL_RECOMMENDED,.type = VALT_FLOAT, .meaning = IS_PRECIP_LEVEL},
|
||||
[NPRECIPINT]= {.sense = VAL_RECOMMENDED,.type = VALT_FLOAT, .meaning = IS_OTHER, .name = "PRECRATE", .comment = "Precipitation rate, mm/h"},
|
||||
[NPRECIP] = {.sense = VAL_UNNECESSARY, .type = VALT_UINT, .meaning = IS_PRECIP}, // this sensor lies
|
||||
[NPRECIPLVL]= {.sense = VAL_UNNECESSARY,.type = VALT_FLOAT, .meaning = IS_PRECIP_LEVEL},
|
||||
[NPRECIPINT]= {.sense = VAL_UNNECESSARY,.type = VALT_FLOAT, .meaning = IS_OTHER, .name = "PRECRATE", .comment = "Precipitation rate, mm/h"},
|
||||
};
|
||||
|
||||
typedef struct{
|
||||
@@ -106,7 +106,7 @@ static int parseans(char *str){
|
||||
}else{
|
||||
*el->weatherpar = strtod(token, &endptr);
|
||||
if(endptr == token){
|
||||
DBG("Wrong double value %s", token);
|
||||
// DBG("Wrong double value %s", token);
|
||||
}else ++ncollected;
|
||||
}
|
||||
break;
|
||||
@@ -115,7 +115,7 @@ static int parseans(char *str){
|
||||
}
|
||||
token = strtok(NULL, ",");
|
||||
}
|
||||
DBG("Got %d values", ncollected);
|
||||
// DBG("Got %d values", ncollected);
|
||||
return ncollected;
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ static void *mainthread(void *s){
|
||||
WARN("Can't ask new data");
|
||||
break;
|
||||
}
|
||||
DBG("poll @%zd, pollt=%zd", tnow, sensor->tpoll);
|
||||
// DBG("poll @%zd, pollt=%zd", tnow, sensor->tpoll);
|
||||
tpoll = tnow;
|
||||
}
|
||||
int canread = sl_canread(sensor->fdes);
|
||||
@@ -190,7 +190,7 @@ static void *mainthread(void *s){
|
||||
if(sensor->freshdatahandler) sensor->freshdatahandler(sensor);
|
||||
}
|
||||
}
|
||||
sensor->kill(sensor);
|
||||
// newer use `kill` here! Master will run it after main thread death
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -201,12 +201,11 @@ int sensor_init(sensordata_t *s){
|
||||
if(fd < 0) return FALSE;
|
||||
snprintf(s->name, NAME_LEN, "%s", SENSOR_NAME);
|
||||
s->fdes = fd;
|
||||
s->Nvalues = NAMOUNT;
|
||||
s->values = MALLOC(val_t, NAMOUNT);
|
||||
for(int i = 0; i < NAMOUNT; ++i) s->values[i] = values[i];
|
||||
s->Nvalues = NAMOUNT;
|
||||
if(!(s->ringbuffer = sl_RB_new(BUFSIZ)) ||
|
||||
pthread_create(&s->thread, NULL, mainthread, (void*)s)){
|
||||
s->kill(s);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
Reference in New Issue
Block a user