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

📄 eibdrv_test.c

📁 欧洲安装总线系统的USB串口接口驱动c程序源代码.软件代码由西门子公司提供
💻 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 + -