📄 eibdrv_test.c
字号:
#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <unistd.h>#include <linux/fcntl.h>#include <sys/signal.h>#include <linux/ioctl.h>#include <linux/poll.h>#include <linux/timer.h>#include <sys/types.h>#include <sys/time.h>#include <eibdrv.h>int eib_fd;void make_msg(unsigned char *msg,char c0,char c1,char c2,char c3,char c4,char c5,char c6,char c7,char c8, char c9,char c10,char c11,char c12,char c13,char c14,char c15, char c16,char c17,char c18,char c19,char c20,char c21,char c22){ int i; *msg=c0; *(msg+1)=c1; *(msg+2)=c2; *(msg+3)=c3; *(msg+4)=c4; *(msg+5)=c5; *(msg+6)=c6; *(msg+7)=c7; *(msg+8)=c8; *(msg+9)=c9; *(msg+10)=c10; *(msg+11)=c11; *(msg+12)=c12; *(msg+13)=c13; *(msg+14)=c14; *(msg+15)=c15; *(msg+16)=c16; *(msg+17)=c17; *(msg+18)=c18; *(msg+19)=c19; *(msg+20)=c20; *(msg+21)=c21; *(msg+22)=c22; printf("SEND: "); for (i=0;i<23;i++) printf(" %02X",*(msg+i)); printf("\n");}void signal_handler_IO(int status){ int result,i; unsigned char element[30]; for (i=0;i<30;i++) element[i]=0x00; result=read(eib_fd,&element[0],29); if (result>0) { printf("RECEIVED: "); for (i=0;i<result;i++) printf(" %02X",element[i]%0xFF); printf("\n"); } alarm(1);}main(){ int eib_fd2; int ser_fd; int result; unsigned long size; int i,fd2; struct sigaction saio; struct sigaction saalrm; unsigned char element[30]; unsigned long oflags; struct pollfd polltable; struct flock locker; saio.sa_handler=signal_handler_IO; sigfillset(&saio.sa_mask); saio.sa_flags=0; saio.sa_restorer=NULL; saalrm.sa_handler=signal_handler_IO; sigfillset(&saalrm.sa_mask); saalrm.sa_flags=0; saalrm.sa_restorer=NULL; result=eib_fd=open("/dev/eibdrv",O_RDWR|O_NONBLOCK); printf("EIB_TEST: result (open) = %i %i \n\n",result,errno); sigaction(SIGIO,&saio,NULL); sigaction(SIGALRM,&saalrm,NULL); fcntl(eib_fd,F_SETOWN,getpid()); oflags=fcntl(eib_fd,F_GETFL); fcntl(eib_fd,F_SETFL,oflags|FASYNC); alarm(1); /* Switch to Transport Layer Remote */// make_msg(&element[0],0xa9,0x00,0x12,0x34,0x48,0x88,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],7); /* Switch to Transport Layer Local */ make_msg(&element[0],0xa9,0x00,0x12,0x34,0x56,0x78,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); write(eib_fd,&element[0],7); /* TConnect_req */ make_msg(&element[0],0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); write(eib_fd,&element[0],6); /* TData_req for A_Authorize_Request Service */ make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0xd1,0x00,0xff,0xff,0xfa, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); write(eib_fd,&element[0],14); /* TData_req for A_Key_Write Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0xd3,0x00,0xff,0xff,0xff,// 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],14); /* TData_req for A_Memory_Write Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x81,0x01,0x16,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],12); for (i=0;i<3;i++) sleep(1); /* TData_req for A_Memory_Read Service */ make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x01,0x17,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); write(eib_fd,&element[0],11); /* TData_req for A_DeviceDeskriptor_Read Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],9); /* TData_req for A_Restart Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x80,0x00,0x00,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],9); /* TData_req for ADC_Read Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x84,0x01,0x00,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],9);// for (i=0;i<10;i++) sleep(1); /* TDisConnect_req */ make_msg(&element[0],0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); write(eib_fd,&element[0],6); /* TData_req for A_UserManufacturerInfo_Read Service */// make_msg(&element[0],0x41,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0xc5,0x00,0x00,0x00,0x00,// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00);// write(eib_fd,&element[0],9); // printf("Result (read) = %i ",(result=read(eib_fd,&element[0],29)));// for (i=0;i<result;i++) printf("%i ",element[i]);// printf("\n");// fcntl(eib_fd,F_SETFL,oflags&~FASYNC);// element[0]=19;// printf("Set Wmode to Acknowledged Mode = %i\n",ioctl(eib_fd,FT_SET_WRITE_MODE,1));// printf("Set Wmode to Standard Mode = %i\n",ioctl(eib_fd,FT_SET_WRITE_MODE,0));// printf("Result (write) =%i %i\n",write(eib_fd,&element[0],1),errno);// printf("Result (reset) = %i\n",ioctl(eib_fd,FT_RESET));// printf("Result (status) = %i\n",ioctl(eib_fd,FT_RESP_STATUS)); // printf("Result (write) = %i\n",write(eib_fd,&element[0],1));// printf("Result (fsync) = %i\n",fsync(eib_fd));// polltable.fd=eib_fd;// polltable.events=POLLIN | POLLRDNORM;// printf("Result (poll) = %i\n",poll(&polltable,1,-1));// printf("Ergebnis (poll) %x\n",polltable.revents);// result=ioctl(eib_fd,FT_GET_OUTBUF_SIZE,&size);// if (result<0) result=errno;// printf("Size(outbuf) = %li result=%i %i\n",size,result,EINVAL); // printf("Size (outbuf) = %li\n",ioctl(eib_fd,FT_GET_OUTBUF_SIZE));// printf("Size (wpbuf) = %li\n",ioctl(eib_fd,FT_GET_WPBUF_SIZE));// printf("Size (rpbuf) = %li\n",ioctl(eib_fd,FT_GET_RPBUF_SIZE));// printf("Size (rpbuf_msg) = %li\n",ioctl(eib_fd,FT_GET_RPBUF_MSGSIZE)); for (i=0;i<10;i++) { sleep(1); } result=close(eib_fd); printf("\nEIB_TEST: result (close) = %i\n",result); /* switch(fork()) { case 0: // Kind-Prozess { int eib_fd2; printf("Kind : pid = %i\n",getpid()); element[0]=19; for (i=0;i<1;i++) { sleep(1); } result=eib_fd2=open("/dev/eib_bcu2",O_RDWR); printf("Kind (write) = %i\n",write(eib_fd2,&element[0],1)); printf("Kind : Zeitschleife (5sek)\n"); for (i=0;i<5;i++) { sleep(1); } if (eib_fd2>0) printf("Kind (close) = %i\n",close(eib_fd2)); break; } default: // Eltern-Proze
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -