📄 c_can_test.c
字号:
#include <stdio.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include "../include/can.h"#define MAXL 40int main(int argc, char **argv){ int j, i=0, ret=0, count=0; long id; int fds=-1; int fdr=-1; char ch, transmission[MAXL+1]; char *can0file/*[]*/="/dev/cana0"; char *can1file/*[]*/="/dev/canb0"; char emptystring[MAXL+1]="", buf[MAXL+1]; char remote[MAXL+1]; struct canmsg_t smessage; struct canmsg_t rmessage; struct canstatistics_t sstat; struct canstatistics_t rstat; printf("\nThis program sends a message from CAN0 to CAN1.\n\n"); if (argc < 4) { printf("Error: Call \"c_can_test [senddevice] [receivedevice] [message id]\"\n"); return 1; } else { can0file = argv[1]; can1file = argv[2]; id = atol(argv[3]); } printf("Try to open "); printf(can0file); for (j=0; j<500; j++); if ((fds=open(can0file,O_RDWR)) < 0) { printf(" : error\n"); return -1; } printf(" : ok fds=%d\n", fds); printf("Try to open "); printf(can1file); for (j=0; j<500; j++); if ((fdr=open(can1file,O_RDWR)) < 0) { printf(" : error\n"); return -1; } printf(" : ok fdr=%d\n", fdr); smessage.flags = 0; smessage.id = id; smessage.length = 2; smessage.data[0] = 10; smessage.data[1] = 20; rmessage.flags = 0; rmessage.id = id; rmessage.length = 0; rmessage.data[0] = 0; rmessage.data[1] = 0; printf("Setting arbitration mask of %s to id=%d\n", can1file, rmessage.id); ioctl( fdr, IOCTL_CAN_SET_READ_MODE, rmessage.id ); printf("\nPress enter to send message through %s\n", can0file); while (getchar() != '\n'); printf("Id : %lx\n",smessage.id); printf("length : %d\n",smessage.length); printf("flags : 0x%02x\n", smessage.flags); //printf("time : %ld\n", smessage.timestamp); for (i=0; i<smessage.length; i++) printf("data%d : %02x\n",i, smessage.data[i]); ret=write(fds, &smessage, sizeof(struct canmsg_t)); if (ret<0) printf("Error sending message from %s\n",can0file); else printf("Message successfully sent from %s\n",can0file); printf("\nPress enter read received message of %s\n", can1file); while ( getchar() != '\n') ; ret=read(fdr, &rmessage, sizeof(struct canmsg_t)); if (ret<0) printf("Error receiving message on %s\n", can1file); else { printf("Id : %lx\n",rmessage.id); printf("length : %d\n",rmessage.length); printf("flags : 0x%02x\n", rmessage.flags); printf("time : %lds %ldus\n", rmessage.timestamp_sec, rmessage.timestamp_usec); for (i=0; i<rmessage.length; i++) printf("data%d : %02x\n",i, rmessage.data[i]); } printf("\nPress enter print CANstatistics structures of both message objects\n"); while ( getchar() != '\n') ; printf("Read message object:\n"); while ( getchar() != '\n') ; ioctl( fdr, IOCTL_CAN_PRINT_STATISTICS ); printf("\nSend message object:\n"); while ( getchar() != '\n') ; ioctl( fds, IOCTL_CAN_PRINT_STATISTICS ); //printf("wait for interrupt\n"); //while(1); sleep( 2 ); if ( close( fds ) ) { printf("Error closing %s\n",can0file); return -1; } if ( close( fdr ) ) { printf("Error closing %s\n",can1file); return -1; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -