#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#define MAX_FILENAME_LENGTH 256
int main(int argc, char *argv[]) {
int fd, n;
char filename[MAX_FILENAME_LENGTH];
char buf[256];
struct termios tty;
/* Vérifier que le nom de fichier est fourni en argument*/
if (argc < 2) {
printf("Usage: %s <filename.gcode>\n", argv[0]);
return EXIT_FAILURE;
}
/* Vérifier que le nom de fichier est valide (se termine par ".gcode")*/
if (strlen(argv[1]) < 7 || strcmp(&argv[1][strlen(argv[1]) - 6], ".gcode") != 0) {
printf("Le fichier doit être un fichier GCode avec l'extension .gcode.\n");
return EXIT_FAILURE;
}
/* Copier le nom de fichier dans une variable locale */
strncpy(filename, argv[1], MAX_FILENAME_LENGTH - 1);
filename[MAX_FILENAME_LENGTH - 1] = '\0';
/* Ouvrir le port série en écriture seule */
fd = open("/dev/ttyACM0", O_WRONLY | O_NOCTTY);
if (fd == -1) {
perror("Erreur lors de l'ouverture du port série");
return EXIT_FAILURE;
}
/* Configurer les paramètres de la liaison série */
if (tcgetattr(fd, &tty) != 0) {
perror("Erreur lors de la lecture des paramètres de la liaison série");
close(fd);
return EXIT_FAILURE;
}
cfmakeraw(&tty);
cfsetspeed(&tty, B115200);
if (tcsetattr(fd, TCSANOW, &tty) != 0) {
perror("Erreur lors de la configuration des paramètres de la liaison série");
close(fd);
return EXIT_FAILURE;
}
/* Ouvrir le fichier GCode en lecture seule */
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
perror("Erreur lors de l'ouverture du fichier GCode");
close(fd);
return EXIT_FAILURE;
}
/* Envoyer les commandes GCode une par une */
while (fgets(buf, 256, fp) != NULL) {
/* Envoyer la commande sur le port série */
n = write(fd, buf, strlen(buf));
if (n == -1) {
perror("Erreur lors de l'envoi de la commande GCode");
fclose(fp);
close(fd);
return EXIT_FAILURE;
}
/* Attendre la réponse "ok" de la machine */
while (read(fd, buf, 1) > 0) {
if (buf[0] == '\n') {
break;
}
}
/* Afficher la commande envoyée et la réponse reçue */
printf("Envoi: %sRéponse: ok\n", buf);
}
/* Fermer le fichier GCode et le port série */
fclose(fp);
close(fd);
return EXIT_SUCCESS;
}