add receiver option
This commit is contained in:
parent
45dffd54ad
commit
21046b2bd3
53
src/main.c
53
src/main.c
@ -173,6 +173,41 @@ void read_uart(Tel *t, int fd, SerialParser *uart_str) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void read_uart_receiver(Tel *t, int fd, SerialParser *uart_str) {
|
||||||
|
char buf[128];
|
||||||
|
int n = read(fd, buf, sizeof(buf));
|
||||||
|
|
||||||
|
if (n < 0) return; // -1 EAGAIN means empty
|
||||||
|
|
||||||
|
if (n > 0) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
char c = buf[i];
|
||||||
|
if (c == '\n') {
|
||||||
|
uart_str->linebuf[uart_str->linepos] = '\0';
|
||||||
|
int tmp_speed, tmp_rpm, tmp_power, tmp_bat, tmp_warn;
|
||||||
|
float tmp_eff, tmp_tens, tmp_amp;
|
||||||
|
if (sscanf(uart_str->linebuf, "%d,%d,%d,%f,%d,%f,%f,%d", &tmp_speed, &tmp_rpm, &tmp_power, &tmp_eff, &tmp_bat, &tmp_tens, &tmp_amp, &tmp_warn) == 8) {
|
||||||
|
t->speed.data = tmp_speed;
|
||||||
|
t->rpm.data = tmp_rpm;
|
||||||
|
t->power.data = tmp_power;
|
||||||
|
t->eff.data = tmp_eff;
|
||||||
|
t->bat.data = tmp_bat;
|
||||||
|
t->tens.data = tmp_tens;
|
||||||
|
t->amp.data = tmp_amp;
|
||||||
|
t->message.error_level = tmp_warn;
|
||||||
|
}
|
||||||
|
|
||||||
|
uart_str->linepos = 0;
|
||||||
|
}
|
||||||
|
if (uart_str->linepos < (int)sizeof(uart_str->linebuf) - 1) {
|
||||||
|
uart_str->linebuf[uart_str->linepos++] = c;
|
||||||
|
} else {
|
||||||
|
uart_str->linepos = 0; // drop line to prevent overflow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void write_uart(Tel *t, int fd) {
|
void write_uart(Tel *t, int fd) {
|
||||||
// speed,rpm,power,eff,bat,tens,amp,warn
|
// speed,rpm,power,eff,bat,tens,amp,warn
|
||||||
char msg[256];
|
char msg[256];
|
||||||
@ -518,6 +553,7 @@ int main(int argc, char **argv) {
|
|||||||
int soc = 0;
|
int soc = 0;
|
||||||
int use_uart = 0;
|
int use_uart = 0;
|
||||||
int uart_fd = 0;
|
int uart_fd = 0;
|
||||||
|
int is_receiver = 0;
|
||||||
|
|
||||||
struct sockaddr_can addr;
|
struct sockaddr_can addr;
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
@ -527,7 +563,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
Bat_state bat_state = {0, 1000, 0};
|
Bat_state bat_state = {0, 1000, 0};
|
||||||
|
|
||||||
while ((option = getopt(argc, argv, "d:hfcu")) !=-1) {
|
while ((option = getopt(argc, argv, "d:hfcur")) !=-1) {
|
||||||
switch (option) {
|
switch (option) {
|
||||||
case 'd' :
|
case 'd' :
|
||||||
delay = atoi(optarg);
|
delay = atoi(optarg);
|
||||||
@ -544,8 +580,11 @@ int main(int argc, char **argv) {
|
|||||||
case 'u' :
|
case 'u' :
|
||||||
use_uart = 1;
|
use_uart = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'r' :
|
||||||
|
is_receiver = 1;
|
||||||
|
break;
|
||||||
case 'h' :
|
case 'h' :
|
||||||
printf("Usage: ./cocomobile-tui [-d int <ms multiplier>] [-h <help>] [-f <random data generation>] [-c <enable can>] [-u <enable uart connection>]\n");
|
printf("Usage: ./cocomobile-tui [-d int <ms multiplier>] [-h <help>] [-f <random data generation>] [-c <enable can>] [-u <enable uart connection>] [-r <set for receiver (not for the car)>]\n");
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -670,12 +709,13 @@ int main(int argc, char **argv) {
|
|||||||
if (fake_data) {
|
if (fake_data) {
|
||||||
get_fake_data(&tel);
|
get_fake_data(&tel);
|
||||||
} else {
|
} else {
|
||||||
if (use_can) read_can(&tel, soc);
|
if (use_can && !is_receiver) read_can(&tel, soc);
|
||||||
if (use_uart) read_uart(&tel, uart_fd, &uart_parser);
|
if (use_uart && !is_receiver) read_uart(&tel, uart_fd, &uart_parser);
|
||||||
|
if (use_uart && is_receiver) read_uart_receiver(&tel, uart_fd, &uart_parser);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
calc_data(&tel, &bat_state, now);
|
if (!is_receiver) calc_data(&tel, &bat_state, now);
|
||||||
now = now_ms();
|
now = now_ms();
|
||||||
if (now - t100 >= 100 * delay) {
|
if (now - t100 >= 100 * delay) {
|
||||||
win_int(&tel.speed, use_color);
|
win_int(&tel.speed, use_color);
|
||||||
@ -687,7 +727,7 @@ int main(int argc, char **argv) {
|
|||||||
win_int(&tel.bat, use_color);
|
win_int(&tel.bat, use_color);
|
||||||
win_warn(&tel, use_color, now);
|
win_warn(&tel, use_color, now);
|
||||||
|
|
||||||
if (use_uart) write_uart(&tel, uart_fd);
|
if (use_uart && !is_receiver) write_uart(&tel, uart_fd);
|
||||||
|
|
||||||
t100 = now;
|
t100 = now;
|
||||||
}
|
}
|
||||||
@ -704,5 +744,6 @@ int main(int argc, char **argv) {
|
|||||||
delwin(tel.message.lwin);
|
delwin(tel.message.lwin);
|
||||||
endwin();
|
endwin();
|
||||||
if (use_can) close(soc);
|
if (use_can) close(soc);
|
||||||
|
if (use_uart) close(uart_fd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user