📄 test_driver.c
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include <signal.h>#include "galil_ioctl.h"volatile int got_signal = 0;#define MAXIRQSTACK 32unsigned char irqstack[MAXIRQSTACK];void gotsignal(int signum, siginfo_t *info, void *data){ int i; ++got_signal; printf("Numero di valori in stack: %d\nValues:", info->si_code); for(i=0; i<info->si_code; ++i) printf(" 0x%x", irqstack[i]); printf("\n");}int main(void){ int fd, rc; struct sigaction sa; char buf[256]; char buf2[256] = {0,}; sa.sa_sigaction = gotsignal; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_SIGINFO; rc = sigaction(SIGUSR1, &sa, NULL); if (rc == -1) { perror(0); exit(1); } fd = open("./galil0", O_RDWR); if (fd == -1) { perror("./galil0"); exit(1); } rc = ioctl(fd, GALIL_SIGNAL_INTERRUPTS, irqstack); if (rc == -1) { perror("./galil0"); exit(1); } restart: sprintf(buf, ";SH;"); rc= write(fd, buf, strlen(buf)); if (rc != (int) strlen(buf)) fprintf(stderr, "write ret %di (errno=%d)\n", rc, errno); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); if (buf[0] == '?') { sprintf(buf, "TC0;"); rc = write(fd, buf, strlen(buf)); if (rc != (int) strlen(buf)) fprintf(stderr, "write ret %di (errno=%d)\n", rc, errno); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc]=0; fprintf(stderr, "TC0 returned %s\n", buf); goto restart; } } } sprintf(buf, "TM?;"); rc = write(fd, buf, strlen(buf)); if (rc != (int) strlen(buf)) fprintf(stderr, "write ret %di (errno=%d)\n", rc, errno); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("TM=%s\n", buf); } sprintf(buf, "DR-6;"); rc = write(fd, buf, strlen(buf)); if (rc != (int) strlen(buf)) fprintf(stderr, "write ret %di (errno=%d)\n", rc, errno); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("DR=%s\n", buf); } sprintf(buf, "DP,,,,0;"); rc = write(fd, buf, strlen(buf)); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); } sprintf(buf, "SB1;EI16;JG0,0,0,0,200;PR,,,,-500;BG;"); rc= write(fd, buf, strlen(buf)); if (rc != (int) strlen(buf)) fprintf(stderr, "write ret %di (errno=%d)\n", rc, errno); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); } while (!got_signal) { sprintf(buf, "TP;"); rc = write(fd, buf, strlen(buf)); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); } rc = ioctl(fd, GALIL_READ_2ND_FIFO, buf); if (rc < 0) fprintf(stderr, "ioctl ret %d, errno=%d\n", rc, errno); else { int j; printf("FIFO2: "); for (j=0; j<256; j++) if (buf2[j] != buf[j]) { printf("[%d]: new %u old %u", j, (unsigned char) buf[j], (unsigned char)buf2[j]); buf2[j] = buf[j]; } printf("\n"); printf("e axis motor pos = %u %u %u %u\n", (unsigned char) buf[152], (unsigned char)buf[153], (unsigned char)buf[154], (unsigned char)buf[155]); printf("e axis error pos = %d\n", *(int *)(buf+156)); } } sprintf(buf, "CB1;ST;"); rc = write(fd, buf, strlen(buf)); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); } sprintf(buf, "MO;"); rc = write(fd, buf, strlen(buf)); rc = read(fd, buf, 256); if (rc <= 0) fprintf(stderr, "read ret %d (errno=%d)\n", rc, errno); else { buf[rc] = '\0'; printf("%s\n", buf); } rc = ioctl(fd, GALIL_READ_2ND_FIFO, buf); if (rc < 0) fprintf(stderr, "ioctl ret %d, errno=%d\n", rc, errno); else { int j; printf("FIFO2: "); for (j=0; j<256; j++) if (buf2[j] != buf[j]) { printf("[%d]: new %u old %u", j, (unsigned char) buf[j], (unsigned char)buf2[j]); buf2[j] = buf[j]; } printf("\n"); printf("e axis motor pos = %u %u %u %u\n", (unsigned char) buf[152], (unsigned char)buf[153], (unsigned char)buf[154], (unsigned char)buf[155]); printf("e axis error pos = %d\n", *(int *)(buf+156)); } sprintf(buf, "CB1;ST;"); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -