📄 rxtx.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(void){ int i=0, fd=0, ret=0, count=0; char loop=0; char ch, transmission[MAXL+1], specialfile[MAXL+1]="/dev/can0", emptystring[MAXL+1]="", buf[MAXL+1]; char remote[MAXL+1]; struct canmsg_t message; printf("\nThis program allows you to send or receive Can messages.\n"); printf("Please answer the following questions:\n\n"); while ( (*transmission!='s') && (*transmission!='r') ) { printf("Would you like to send or receive a message?\n"); printf("send: <s> | receive: <r> "); strcpy(transmission,emptystring); count=0; while ( (ch=getchar()) != '\n' ) transmission[count++]=ch; transmission[count]='\0'; } while ( *remote!='y' && *remote!='n' ) { printf("Should the message be configured for Remote Transmission Requests?\n"); printf("yes: <y> | no: <n> "); strcpy(remote,emptystring); count=0; while ( (ch=getchar()) != '\n' ) remote[count++]=ch; remote[count]='\0'; } if (remote[0]=='y') message.flags |= MSG_RTR; else message.flags = 0;// message.flags |= MSG_EXT; hard code EXT for now if (transmission[0]=='s') { printf("From wich device file would you like to send the message?\n"); printf(specialfile); *buf='\0'; fgets(buf,MAXL,stdin); buf[strcspn(buf,"\n")]='\0'; if(*buf) strncpy(specialfile,buf,MAXL); specialfile[MAXL]='\0'; specialfile[MAXL]='\0'; printf("Enter the Message ID "); scanf("%lx",&message.id); printf("Enter the Message Length "); scanf("%d",&message.length); for (i=0; i<message.length; i++) { printf("Enter data byte [%d] ",i); scanf("%x",(int *)&message.data[i]); } } if (*transmission=='r') { printf("At which device file would you like to receive the message?\n"); printf(specialfile); *buf='\0'; fgets(buf,MAXL,stdin); buf[strcspn(buf,"\n")]='\0'; if(*buf) strncpy(specialfile,buf,MAXL); specialfile[MAXL]='\0'; printf("Enter the Message ID "); scanf("%ld",&message.id); getchar(); } fd=open(specialfile,O_RDWR); if (fd<0) { printf("Error opening %s\n",specialfile); return -1; } if (transmission[0]=='s') { printf("Press enter to send message\n"); getchar(); while (getchar() != '\n'); ret=write(fd, &message, sizeof(struct canmsg_t)); if (ret<0) printf("Error sending message from %s\n",specialfile); else printf("Message successfully sent from %s\n",specialfile); } if (*transmission=='r') { ioctl(fd,CONF_FILTER,message.id); printf("Press enter to receive message or <l>oop\n"); loop = 'l'; while ( loop == 'l') { loop = getchar(); ret=read(fd, &message, sizeof(struct canmsg_t)); if (ret<0) printf("Error receiving message on %s\n", specialfile); else { printf("Id : %lx\n",message.id); printf("length : %d\n",message.length); printf("flags : 0x%02x\n", message.flags); printf("time : %ld\n", message.timestamp); for (i=0; i<message.length; i++) printf("data%d : %02x\n",i, message.data[i]); } } } if (close(fd)) { printf("Error closing %s\n",specialfile); return -1; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -