88 |
87 |
89 return 0; |
88 return 0; |
90 } |
89 } |
91 |
90 |
92 /***************************************************************************/ |
91 /***************************************************************************/ |
93 UNS8 canChangeBaudRate_driver( CAN_HANDLE fd, char* baud) |
92 int TranslateBaudeRate(char* optarg){ |
|
93 if(!strcmp( optarg, "1M")) return 1000000; |
|
94 if(!strcmp( optarg, "500K")) return 500000; |
|
95 if(!strcmp( optarg, "250K")) return 250000; |
|
96 if(!strcmp( optarg, "125K")) return 125000; |
|
97 if(!strcmp( optarg, "100K")) return 100000; |
|
98 if(!strcmp( optarg, "50K")) return 50000; |
|
99 if(!strcmp( optarg, "20K")) return 20000; |
|
100 if(!strcmp( optarg, "none")) return 0; |
|
101 return 0x0000; |
|
102 } |
|
103 |
|
104 /***************************************************************************/ |
|
105 UNS8 canChangeBaudRate_driver( CAN_HANDLE fd0, char* baud) |
94 { |
106 { |
95 printf("canChangeBaudRate not yet supported by this driver\n"); |
107 struct can_baudparams_t params; |
96 return 0; |
108 |
|
109 params.baudrate = TranslateBaudeRate(baud); |
|
110 if(params.baudrate == 0) |
|
111 return 0; |
|
112 params.flags = -1; // use driver defaults |
|
113 params.sjw = -1; // use driver defaults |
|
114 params.sample_pt = -1; // use driver defaults |
|
115 if(ioctl((int)fd0, CONF_BAUDPARAMS, ¶ms) < 0) |
|
116 { |
|
117 fprintf(stderr, "canOpen_driver (lincan): IOCTL set speed failed\n"); |
|
118 return 0; |
|
119 } |
|
120 return 1; |
97 } |
121 } |
98 |
122 |
99 /***************************************************************************/ |
123 /***************************************************************************/ |
100 static const char lnx_can_dev_prefix[] = "/dev/can"; |
124 static const char lnx_can_dev_prefix[] = "/dev/can"; |
101 |
125 |
102 CAN_HANDLE canOpen_driver(s_BOARD *board) |
126 CAN_HANDLE canOpen_driver(s_BOARD *board) |
103 { |
127 { |
104 int name_len = strlen(board->busname); |
128 int name_len = strlen(board->busname); |
105 int prefix_len = strlen(lnx_can_dev_prefix); |
129 int prefix_len = strlen(lnx_can_dev_prefix); |
106 char dev_name[prefix_len+name_len+1]; |
130 char dev_name[prefix_len+name_len+1]; |
107 int o_flags = 0; |
131 struct can_baudparams_t params; |
108 CAN_HANDLE fd0; |
132 int o_flags = 0; |
|
133 int fd; |
109 |
134 |
110 fd0=malloc(sizeof(*fd0)); |
135 /*o_flags = O_NONBLOCK;*/ |
111 if(fd0==NULL) |
|
112 return NULL; |
|
113 |
136 |
114 /*o_flags = O_NONBLOCK;*/ |
137 memcpy(dev_name,lnx_can_dev_prefix,prefix_len); |
|
138 memcpy(dev_name+prefix_len,board->busname,name_len); |
|
139 dev_name[prefix_len+name_len] = 0; |
|
140 printf("dev_name %s\n", dev_name); |
115 |
141 |
116 memcpy(dev_name,lnx_can_dev_prefix,prefix_len); |
142 fd = open(dev_name, O_RDWR|o_flags); |
117 memcpy(dev_name+prefix_len,board->busname,name_len); |
143 if(fd < 0) |
118 dev_name[prefix_len+name_len] = 0; |
144 { |
|
145 fprintf(stderr,"!!! Board %s is unknown. See can_lincan.c\n", board->busname); |
|
146 goto error_ret; |
|
147 } |
|
148 printf("fd = %d\n", fd); |
119 |
149 |
120 fd0 = open(dev_name, O_RDWR|o_flags); |
150 // set baudrate |
121 if(fd0 < 0){ |
151 params.baudrate = TranslateBaudeRate(board->baudrate); |
122 fprintf(stderr,"!!! Board %s is unknown. See can_lincan.c\n", board->busname); |
152 if(params.baudrate == 0) |
123 goto error_ret; |
153 goto error_ret; |
124 } |
154 params.flags = -1; // use driver defaults |
|
155 params.sjw = -1; // use driver defaults |
|
156 params.sample_pt = -1; // use driver defaults |
|
157 if(ioctl(fd, CONF_BAUDPARAMS, ¶ms) < 0) |
|
158 { |
|
159 fprintf(stderr, "canOpen_driver (lincan): IOCTL set speed failed\n"); |
|
160 goto error_ret; |
|
161 } |
125 |
162 |
126 return fd0; |
163 return (CAN_HANDLE)fd; |
127 |
164 |
128 error_ret: |
165 error_ret: |
129 free(fd0); |
166 return NULL; |
130 return NULL; |
|
131 } |
167 } |
132 |
168 |
133 /***************************************************************************/ |
169 /***************************************************************************/ |
134 int canClose_driver(CAN_HANDLE fd0) |
170 int canClose_driver(CAN_HANDLE fd0) |
135 { |
171 { |