mirror of
https://github.com/eddyem/small_tel.git
synced 2025-12-06 02:35:14 +03:00
Add error counter into wheather checking utility
This commit is contained in:
parent
d5825ed68b
commit
c53e6e4932
@ -54,24 +54,39 @@ int main(int argc, char **argv){
|
|||||||
G = parse_args(argc, argv);
|
G = parse_args(argc, argv);
|
||||||
TTY_descr *dev = new_tty(G->ttyname, G->speed, 64);
|
TTY_descr *dev = new_tty(G->ttyname, G->speed, 64);
|
||||||
if(!dev || !(dev = tty_open(dev, 1))) return 1; // open exclusively
|
if(!dev || !(dev = tty_open(dev, 1))) return 1; // open exclusively
|
||||||
while(read_tty(dev)); // clear buffer
|
|
||||||
if(write_tty(dev->comfd, "?U\r\n", 3)) ERR("write_tty()");
|
|
||||||
size_t got, L = 0;
|
size_t got, L = 0;
|
||||||
char buff[BUFLEN], *ptr = buff;
|
char buff[BUFLEN], *ptr = buff;
|
||||||
double t0 = dtime();
|
int errctr = 0;
|
||||||
while(dtime() - t0 < 1.){ // timeout - 1s
|
for(errctr = 0; errctr < 5; ++errctr){
|
||||||
got = read_tty(dev);
|
while(read_tty(dev)); // clear buffer
|
||||||
if(got == 0) continue;
|
if(write_tty(dev->comfd, "?U\r\n", 3)){
|
||||||
t0 = dtime();
|
WARNX("write_tty()");
|
||||||
L += got;
|
continue;
|
||||||
if(BUFLEN > L){
|
}
|
||||||
strncpy(ptr, dev->buf, dev->buflen);
|
double t0 = dtime();
|
||||||
ptr += got;
|
while(dtime() - t0 < 1.){ // timeout - 1s
|
||||||
|
got = read_tty(dev);
|
||||||
|
if(got == 0) continue;
|
||||||
|
t0 = dtime();
|
||||||
|
L += got;
|
||||||
|
if(BUFLEN > L){
|
||||||
|
strncpy(ptr, dev->buf, dev->buflen);
|
||||||
|
ptr += got;
|
||||||
|
}else break;
|
||||||
|
}
|
||||||
|
buff[L] = 0;
|
||||||
|
if(L == 0){
|
||||||
|
WARNX("Got nothing from TTY");
|
||||||
|
continue;
|
||||||
|
}else if(strncmp(buff, "<?U>", 4)){
|
||||||
|
WARNX("Wrong answer: %s", buff);
|
||||||
|
continue;
|
||||||
}else break;
|
}else break;
|
||||||
}
|
}
|
||||||
buff[L] = 0;
|
if(errctr == 5){
|
||||||
if(L == 0) ERRX("Got nothing from TTY");
|
close_tty(&dev);
|
||||||
if(strncmp(buff, "<?U>", 4)) ERRX("Wrong answer: %s", buff);
|
ERRX("No connection to meteostation");
|
||||||
|
}
|
||||||
ptr = &buff[4];
|
ptr = &buff[4];
|
||||||
for(size_t i = 4; i < L; ++i){
|
for(size_t i = 4; i < L; ++i){
|
||||||
char c = *ptr;
|
char c = *ptr;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user