mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-11-21 15:46:06 +01:00
Diagnostics
This commit is contained in:
parent
f6ef24e312
commit
69ceaba85e
|
@ -11,7 +11,7 @@ CFLAGS_CUSTOM += -g
|
||||||
## Générateurs de drapeaux pour les bibliothèques
|
## Générateurs de drapeaux pour les bibliothèques
|
||||||
PKG_CONFIG=pkg-config
|
PKG_CONFIG=pkg-config
|
||||||
## Nom des objets communs
|
## Nom des objets communs
|
||||||
OBJS=buttons CF debug i2c ihm lcd movement parcours points position
|
OBJS=buttons CF debug diagnostics i2c ihm lcd movement parcours points position
|
||||||
OBJS_O=$(addprefix obj/,$(addsuffix .o,$(OBJS)))
|
OBJS_O=$(addprefix obj/,$(addsuffix .o,$(OBJS)))
|
||||||
|
|
||||||
# VARIABLES AUTOMATIQUES
|
# VARIABLES AUTOMATIQUES
|
||||||
|
|
|
@ -26,27 +26,49 @@ void configureFpga()
|
||||||
// Connection au port série
|
// Connection au port série
|
||||||
printf("Connexion à %s... ", FPGA_PORTNAME);
|
printf("Connexion à %s... ", FPGA_PORTNAME);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fpga = open(FPGA_PORTNAME, O_RDWR | O_NOCTTY | O_NDELAY);
|
fpga = open(FPGA_PORTNAME, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
|
||||||
|
fpga = serialOpen(FPGA_PORTNAME, 9600);
|
||||||
if (fpga < 0) {
|
if (fpga < 0) {
|
||||||
printf("Échec !\n");
|
printf("Échec !\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configuration du port série
|
// Configuration du port série
|
||||||
|
fcntl(fpga, F_SETFL, O_RDWR);
|
||||||
|
|
||||||
struct termios cfg;
|
struct termios cfg;
|
||||||
bzero(&cfg, sizeof(cfg));
|
|
||||||
cfg.c_cflag = CLOCAL | CREAD | CF_BAUDRATE | CS8;
|
tcgetattr(fpga, &cfg);
|
||||||
cfg.c_iflag = 0;
|
|
||||||
cfg.c_oflag = 0;
|
cfmakeraw(&cfg);
|
||||||
cfg.c_lflag = 0; /* set input mode (non-canonical, no echo,...) */
|
cfsetispeed(&cfg, CF_BAUDRATE);
|
||||||
cfg.c_cc[VTIME] = 0; /* inter-character timer unused */
|
cfsetospeed(&cfg, CF_BAUDRATE);
|
||||||
cfg.c_cc[VMIN] = 1; /* blocking read until 1 char received */
|
|
||||||
|
cfg.c_cflag |= (CLOCAL | CREAD);
|
||||||
|
cfg.c_cflag &= ~PARENB;
|
||||||
|
cfg.c_cflag &= ~CSTOPB;
|
||||||
|
cfg.c_cflag &= ~CSIZE;
|
||||||
|
cfg.c_cflag |= CS8;
|
||||||
|
cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
|
||||||
|
cfg.c_oflag &= ~OPOST;
|
||||||
|
|
||||||
|
cfg.c_cc[VMIN] = 0;
|
||||||
|
cfg.c_cc[VTIME] = 10;
|
||||||
|
|
||||||
if (tcsetattr(fpga, TCSANOW, &cfg) < 0) {
|
if (tcsetattr(fpga, TCSANOW, &cfg) < 0) {
|
||||||
perror("serialConfig.tcsetattr");
|
perror("serialConfig.tcsetattr");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1);
|
int status;
|
||||||
|
ioctl(fpga, TIOCMGET, &status);
|
||||||
|
|
||||||
|
status |= TIOCM_DTR;
|
||||||
|
status |= TIOCM_RTS;
|
||||||
|
|
||||||
|
ioctl(fpga, TIOCMSET, &status);
|
||||||
|
|
||||||
|
usleep(10 * 1000);
|
||||||
|
|
||||||
// Flush
|
// Flush
|
||||||
unsigned char trash[1024];
|
unsigned char trash[1024];
|
||||||
|
@ -101,7 +123,6 @@ void setPret()
|
||||||
|
|
||||||
void doNothing()
|
void doNothing()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureCF()
|
void configureCF()
|
||||||
|
@ -116,16 +137,13 @@ void configureCF()
|
||||||
|
|
||||||
printf("Attente de réponse du Fpga... ");
|
printf("Attente de réponse du Fpga... ");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
struct timespec tim;
|
|
||||||
tim.tv_sec = 0;
|
|
||||||
tim.tv_nsec = 100000000L;
|
|
||||||
// Dans le cas où on aurait laissé l'Fpga en attente de donnée,
|
// Dans le cas où on aurait laissé l'Fpga en attente de donnée,
|
||||||
// on envoie des pings en boucle jusqu'à ce qu'il nous réponde.
|
// on envoie des pings en boucle jusqu'à ce qu'il nous réponde.
|
||||||
pret = false;
|
pret = false;
|
||||||
registerRxHandler(C2FD_PING, setPret);
|
registerRxHandler(C2FD_PING, setPret);
|
||||||
while (!pret) {
|
while (!pret) {
|
||||||
sendCF(C2FD_PING, NULL, 0);
|
sendCF(C2FD_PING, NULL, 0);
|
||||||
nanosleep(&tim, NULL);
|
usleep(100 * 1000);
|
||||||
}
|
}
|
||||||
registerRxHandler(C2FD_PING, doNothing); // TODO
|
registerRxHandler(C2FD_PING, doNothing); // TODO
|
||||||
registerRxHandler(C2FD_PING, NULL);
|
registerRxHandler(C2FD_PING, NULL);
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h> // sleep
|
#include <unistd.h> // sleep
|
||||||
#include <wiringPi.h>
|
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
@ -91,7 +90,7 @@ void* TaskDebug(void* pdata)
|
||||||
fprintf(debugFd, "\n");
|
fprintf(debugFd, "\n");
|
||||||
fflush(debugFd);
|
fflush(debugFd);
|
||||||
|
|
||||||
delay(DEBUG_INTERVAL);
|
usleep(DEBUG_INTERVAL * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
56
chef/src/diagnostics.c
Normal file
56
chef/src/diagnostics.c
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "diagnostics.h"
|
||||||
|
#include "buttons.h"
|
||||||
|
#include "lcd.h"
|
||||||
|
|
||||||
|
#include "CF.h"
|
||||||
|
|
||||||
|
bool recu;
|
||||||
|
|
||||||
|
void setRecu()
|
||||||
|
{
|
||||||
|
recu = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool diagFPGA()
|
||||||
|
{
|
||||||
|
recu = false;
|
||||||
|
registerRxHandler(C2FD_PING, setRecu);
|
||||||
|
sendCF(C2FD_PING, NULL, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i <= DIAGNOSTIC_SERIAL_TIMEOUT; i += DIAGNOSTIC_POLL_INTERVAL) {
|
||||||
|
if (recu) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
usleep(DIAGNOSTIC_POLL_INTERVAL * 1000);
|
||||||
|
}
|
||||||
|
return recu;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool diagArduino()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void execDiagnostic(char *name, bool (*diagnostic)(void))
|
||||||
|
{
|
||||||
|
clearLCD();
|
||||||
|
printToLCD(LCD_LINE_1, name);
|
||||||
|
printToLCD(LCD_LINE_2, "...");
|
||||||
|
bool res = diagnostic();
|
||||||
|
if (res) {
|
||||||
|
printToLCD(LCD_LINE_2, "Ok!");
|
||||||
|
usleep(DIAGNOSTIC_INTERVAL * 1000);
|
||||||
|
} else {
|
||||||
|
printToLCD(LCD_LINE_2, "Echec!");
|
||||||
|
pressedButton(BUT_BLOCK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void runDiagnostics()
|
||||||
|
{
|
||||||
|
execDiagnostic("Lien FPGA", diagFPGA);
|
||||||
|
/* execDiagnostic("Lien Arduino", diagArduino); */
|
||||||
|
}
|
||||||
|
|
17
chef/src/diagnostics.h
Normal file
17
chef/src/diagnostics.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#ifndef __DIAGNOSTICS_H_
|
||||||
|
#define __DIAGNOSTICS_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
// Constantes
|
||||||
|
#define DIAGNOSTIC_INTERVAL 500
|
||||||
|
#define DIAGNOSTIC_POLL_INTERVAL 100
|
||||||
|
#define DIAGNOSTIC_SERIAL_TIMEOUT 10000
|
||||||
|
|
||||||
|
// Public
|
||||||
|
void runDiagnostics();
|
||||||
|
|
||||||
|
// Private
|
||||||
|
void execDiagnostic(char *name, bool (*diagnostic)(void));
|
||||||
|
|
||||||
|
#endif
|
|
@ -8,6 +8,7 @@
|
||||||
#include "points.h"
|
#include "points.h"
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "buttons.h"
|
#include "buttons.h"
|
||||||
|
#include "diagnostics.h"
|
||||||
|
|
||||||
// Globales
|
// Globales
|
||||||
pthread_t tIHM;
|
pthread_t tIHM;
|
||||||
|
@ -117,8 +118,7 @@ void* TaskIHM(void* pdata)
|
||||||
|
|
||||||
if (bout == rouge) {
|
if (bout == rouge) {
|
||||||
clearLCD();
|
clearLCD();
|
||||||
printToLCD(LCD_LINE_1, "Diagnostics...");
|
runDiagnostics();
|
||||||
delay(3000); // TODO
|
|
||||||
} else if (bout == jaune) {
|
} else if (bout == jaune) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,6 @@ NET "BACKECHO" LOC = "P73" | IOSTANDARD = LVTTL ;
|
||||||
# IO<20>
|
# IO<20>
|
||||||
NET "ENA" LOC = "P5" | IOSTANDARD = LVTTL ;
|
NET "ENA" LOC = "P5" | IOSTANDARD = LVTTL ;
|
||||||
|
|
||||||
|
|
||||||
# IO<21>
|
# IO<21>
|
||||||
NET "IN1ENC" LOC = "P4" | IOSTANDARD = LVTTL ;
|
NET "IN1ENC" LOC = "P4" | IOSTANDARD = LVTTL ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue