DD2-monitor/essai.c

182 lines
3.8 KiB
C
Raw Normal View History

2018-12-08 13:02:24 +01:00
/*
* essai.c
*/
2019-02-06 17:22:32 +01:00
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
2019-02-06 17:22:32 +01:00
#include <string.h>
2019-05-16 12:28:47 +02:00
#include <ncurses.h>
2019-02-06 17:22:32 +01:00
#include <time.h>
2018-12-08 13:02:24 +01:00
2019-02-06 17:22:32 +01:00
#include "core/utils.h"
#include "core/sysmetrics.h"
2019-03-28 12:04:40 +01:00
#include "serial/serial.h"
2019-02-06 17:22:32 +01:00
#include "viz/curses/ecran.h"
2018-12-08 13:02:24 +01:00
2019-01-17 18:37:30 +01:00
2019-05-20 18:20:18 +02:00
int run_the_terminal(int fd_serial, char *title, WINDOW *win); /* XXX */
int verbosity;
2019-05-16 12:28:47 +02:00
2019-01-17 18:37:30 +01:00
/* --------------------------------------------------------------- */
int traite_les_messages(int sfd, int nbloops)
2019-01-30 19:14:40 +01:00
{
2019-05-13 17:48:58 +02:00
int idx, foo, key;
2019-04-03 16:25:38 +02:00
char ligne[200];
int Idatas[4];
float Fdatas[4];
FILE *fp;
2019-04-10 17:13:54 +02:00
time_t temps,
old_temps = (time_t)0L;
fp = fopen("serial/foo.dat", "a");
if (NULL==fp) {
fprintf(stderr, "*** error fopen datafile ***\n");
return -1;
}
2019-01-30 19:14:40 +01:00
for (idx=0; idx<nbloops; idx++) {
2019-05-13 17:48:58 +02:00
if (kbhit()) {
2019-05-20 18:20:18 +02:00
static char valid_k[] = "+-01";
key = getch();
/* if it is a valid key, send it to the Arduino */
if (NULL!=strchr(valid_k, key)) {
foo = putbyte(sfd, key);
fprintf(stderr, "put byte %02X -> %d\n",
key, foo);
}
2019-05-20 18:20:18 +02:00
else if (0x14==key) { /* request for terminal */
foo = run_the_terminal(sfd, " terminal ", 0);
2019-05-20 19:53:24 +02:00
putbyte(sfd, 'x'); putbyte(sfd, '\r');
2019-05-20 18:20:18 +02:00
sprintf(ligne, "retour terminal = %d", foo);
aff_message(ligne); sleep(1);
}
else {
sprintf(ligne, "Key 0x%02X invalid ", key);
fprintf(stderr, "%s\n", ligne);
aff_message(ligne); sleep(1); aff_message("");
}
2019-05-13 17:48:58 +02:00
}
/* here we are waiting for a frame from the
Arduino. In the future, we may have an
finely tunned event-synth system here */
foo = getline_to(sfd, ligne, 100, 0);
2019-03-28 12:04:40 +01:00
#if DEBUG_LEVEL
if (foo) fprintf(stderr, "get values -> %d\n", foo);
#endif
2019-01-30 19:14:40 +01:00
switch (*ligne) {
case 'M':
case 'L':
aff_message(ligne);
break;
case 'T':
foo = parse4_Ivalues(ligne, 'T', Idatas);
2019-03-28 12:04:40 +01:00
#if DEBUG_LEVEL
if (foo) fprintf(stderr, "parse I val -> %d\n", foo);
2019-03-28 12:04:40 +01:00
#endif
values2temperature(Idatas, Fdatas);
2019-03-28 12:04:40 +01:00
for (foo=0; foo<3; foo++) {
sprintf(ligne, "%4d", Idatas[foo]);
minidigit_affstr(stdscr, 12+(12*foo), 8, ligne);
aff7segs_float(stdscr, 8+(12*foo), 55, Fdatas[foo]);
}
2019-03-28 12:04:40 +01:00
/* here we are loging all that temps values */
temps = time(NULL);
2019-04-14 11:33:52 +02:00
if ((temps-old_temps) > 50) {
2019-04-10 17:13:54 +02:00
fprintf(fp, "%ld %f %f %f %f\n", temps,
Fdatas[0], Fdatas[1],
Fdatas[2], Fdatas[3]);
2019-04-10 17:13:54 +02:00
fflush(fp);
old_temps = temps;
}
break; /* case 'T' */
}
fflush(stderr); /* really WTF? here */
2019-01-30 19:14:40 +01:00
}
2019-04-10 17:13:54 +02:00
fclose(fp);
2019-01-30 19:14:40 +01:00
return 0;
}
/* --------------------------------------------------------------- */
static void finish(int signal)
{
2019-02-02 03:52:30 +01:00
endwin();
fprintf(stderr, "end of pid %d\n", getpid());
exit(0);
2019-01-30 19:14:40 +01:00
}
2018-12-08 13:02:24 +01:00
/* --------------------------------------------------------------- */
2019-03-28 12:04:40 +01:00
void help(int k)
{
puts("options : ");
puts("\t-d\tserial device to read.");
2019-05-16 12:28:47 +02:00
puts("\t-K\tset the K parameter.");
2019-03-28 12:04:40 +01:00
puts("\t-v\tincrease verbosity.");
exit(0);
}
/* --------------------------------------------------------------- */
2018-12-08 13:02:24 +01:00
int main(int argc, char *argv[])
{
int opt;
2019-03-28 12:04:40 +01:00
int serial_in;
char *device = "/dev/ttyACM0";
2019-05-16 12:28:47 +02:00
int K = 0;
2019-05-15 17:22:44 +02:00
char ligne[100];
2018-12-08 13:02:24 +01:00
2019-03-28 12:04:40 +01:00
while ((opt = getopt(argc, argv, "d:hv")) != -1) {
2018-12-08 13:02:24 +01:00
switch (opt) {
2019-03-28 12:04:40 +01:00
case 'd': device = optarg; break;
case 'h': help(0); break;
2019-05-16 12:28:47 +02:00
case 'K': K = atoi(optarg); break;
2018-12-08 13:02:24 +01:00
case 'v': verbosity++; break;
default: break;
}
}
printf("\n**** %s **** compiled the %s at %s ***\n",
argv[0], __DATE__, __TIME__);
2018-12-08 13:02:24 +01:00
2019-03-28 12:04:40 +01:00
serial_in = prepare_UART(device, 9600);
if (serial_in < 0) {
fprintf(stderr, "\n%s : open device : error %d on %s\n",
2019-03-28 12:04:40 +01:00
argv[0], serial_in, device);
exit(1);
}
sleep(1);
2019-03-28 12:04:40 +01:00
2019-01-30 19:14:40 +01:00
initscr();
nonl(); cbreak(); noecho();
keypad(stdscr, TRUE); /* acces aux touches 'curseur' */
2019-05-20 21:31:28 +02:00
sprintf(ligne, " Demonstrator pid:%d %s ", getpid(), device);
2019-05-15 17:22:44 +02:00
fond_ecran(ligne);
2019-01-30 19:14:40 +01:00
traite_les_messages(serial_in, 50000000);
2019-01-30 19:14:40 +01:00
/*
* plop, on a fini, il faut restaurer la console
*/
finish(0);
2018-12-08 13:02:24 +01:00
return 0;
}
/* --------------------------------------------------------------- */