diff -r 6efc85c5493e -r 1c1e3599d66a doc/doxygen/html/can__virtual_8c-source.html --- a/doc/doxygen/html/can__virtual_8c-source.html Mon Feb 11 11:00:12 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ - -
-00001 /* -00002 This file is part of CanFestival, a library implementing CanOpen Stack. -00003 -00004 Copyright (C): Edouard TISSERANT and Francis DUPIN -00005 -00006 See COPYING file for copyrights details. -00007 -00008 This library is free software; you can redistribute it and/or -00009 modify it under the terms of the GNU Lesser General Public -00010 License as published by the Free Software Foundation; either -00011 version 2.1 of the License, or (at your option) any later version. -00012 -00013 This library is distributed in the hope that it will be useful, -00014 but WITHOUT ANY WARRANTY; without even the implied warranty of -00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -00016 Lesser General Public License for more details. -00017 -00018 You should have received a copy of the GNU Lesser General Public -00019 License along with this library; if not, write to the Free Software -00020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -00021 */ -00022 -00023 /* -00024 Virtual CAN driver. -00025 */ -00026 -00027 #include <stdio.h> -00028 #include <unistd.h> -00029 -00030 #include "can_driver.h" -00031 #include "def.h" -00032 -00033 #define MAX_NB_CAN_PIPES 16 -00034 -00035 typedef struct { -00036 char used; -00037 int pipe[2]; -00038 } CANPipe; -00039 -00040 CANPipe canpipes[MAX_NB_CAN_PIPES] = {{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},}; -00041 -00042 /*********functions which permit to communicate with the board****************/ -00043 UNS8 canReceive_driver(CAN_HANDLE fd0, Message *m) -00044 { -00045 if(read(((CANPipe*)fd0)->pipe[0], m, sizeof(Message)) != (ssize_t)sizeof(Message)) -00046 { -00047 return 1; -00048 } -00049 return 0; -00050 } -00051 -00052 #define MyCase(fc) case fc: printf(#fc);break; -00053 void print_message(Message *m) -00054 { -00055 int i; -00056 switch(m->cob_id.w >> 7) -00057 { -00058 MyCase(SYNC) -00059 MyCase(TIME_STAMP) -00060 MyCase(PDO1tx) -00061 MyCase(PDO1rx) -00062 MyCase(PDO2tx) -00063 MyCase(PDO2rx) -00064 MyCase(PDO3tx) -00065 MyCase(PDO3rx) -00066 MyCase(PDO4tx) -00067 MyCase(PDO4rx) -00068 MyCase(SDOtx) -00069 MyCase(SDOrx) -00070 MyCase(NODE_GUARD) -00071 MyCase(NMT) -00072 } -00073 printf(" rtr:%d", m->rtr); -00074 printf(" len:%d", m->len); -00075 for (i = 0 ; i < m->len ; i++) -00076 printf(" %02x", m->data[i]); -00077 printf("\n"); -00078 } -00079 -00080 /***************************************************************************/ -00081 UNS8 canSend_driver(CAN_HANDLE fd0, Message *m) -00082 { -00083 int i; -00084 -00085 printf("%x->[ ", (CANPipe*)fd0 - &canpipes[0]); -00086 for(i=0; i < MAX_NB_CAN_PIPES; i++) -00087 { -00088 if(canpipes[i].used && &canpipes[i] != (CANPipe*)fd0) -00089 { -00090 printf("%x ",i); -00091 } -00092 } -00093 printf(" ]"); -00094 print_message(m); -00095 -00096 // Send to all readers, except myself -00097 for(i=0; i < MAX_NB_CAN_PIPES; i++) -00098 { -00099 if(canpipes[i].used && &canpipes[i] != (CANPipe*)fd0) -00100 { -00101 write(canpipes[i].pipe[1], m, sizeof(Message)); -00102 } -00103 } -00104 return 0; -00105 } -00106 /* -00107 int TranslateBaudeRate(char* optarg){ -00108 if(!strcmp( optarg, "1M")) return 1000; -00109 if(!strcmp( optarg, "500K")) return 500; -00110 if(!strcmp( optarg, "250K")) return 250; -00111 if(!strcmp( optarg, "125K")) return 125; -00112 if(!strcmp( optarg, "100K")) return 100; -00113 if(!strcmp( optarg, "50K")) return 50; -00114 if(!strcmp( optarg, "20K")) return 20; -00115 if(!strcmp( optarg, "10K")) return 10; -00116 if(!strcmp( optarg, "5K")) return 5; -00117 if(!strcmp( optarg, "none")) return 0; -00118 return 0; -00119 }*/ -00120 /***************************************************************************/ -00121 CAN_HANDLE canOpen_driver(s_BOARD *board) -00122 { -00123 int i; -00124 for(i=0; i < MAX_NB_CAN_PIPES; i++) -00125 { -00126 if(!canpipes[i].used) -00127 break; -00128 } -00129 -00130 /* Create the pipe. */ -00131 if (i==MAX_NB_CAN_PIPES || pipe(canpipes[i].pipe)) -00132 { -00133 fprintf (stderr, "Open failed.\n"); -00134 return (CAN_HANDLE)NULL; -00135 } -00136 -00137 canpipes[i].used = 1; -00138 return (CAN_HANDLE) &canpipes[i]; -00139 } -00140 -00141 /***************************************************************************/ -00142 int canClose_driver(CAN_HANDLE fd0) -00143 { -00144 close(((CANPipe*)fd0)->pipe[0]); -00145 close(((CANPipe*)fd0)->pipe[1]); -00146 ((CANPipe*)fd0)->used = 0; -00147 return 0; -00148 } -00149 -00150 -