⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_driver.c

📁 galil1800 linux驱动程序演示
💻 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 + -