equal
deleted
inserted
replaced
68 IXXAT(s_BOARD *board); |
68 IXXAT(s_BOARD *board); |
69 ~IXXAT(); |
69 ~IXXAT(); |
70 bool send(const Message *m); |
70 bool send(const Message *m); |
71 bool receive(Message *m); |
71 bool receive(Message *m); |
72 private: |
72 private: |
73 bool open(const char* board_name, int board_number, const char* baud_rate); |
73 bool open(int board_number, const char* baud_rate); |
74 bool close(); |
74 bool close(); |
75 void receive_queuedata(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj); |
75 void receive_queuedata(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj); |
76 // VCI2 handler |
76 // VCI2 handler |
77 static void VCI_CALLBACKATTR message_handler(char *msg_str); |
77 static void VCI_CALLBACKATTR message_handler(char *msg_str); |
78 static void VCI_CALLBACKATTR receive_queuedata_handler(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj); |
78 static void VCI_CALLBACKATTR receive_queuedata_handler(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj); |
79 static void VCI_CALLBACKATTR exception_handler(VCI_FUNC_NUM func_num, INT32 err_code, UINT16 ext_err, char* err_str); |
79 static void VCI_CALLBACKATTR exception_handler(VCI_FUNC_NUM func_num, INT32 err_code, UINT16 ext_err, char* err_str); |
106 IXXAT::IXXAT(s_BOARD *board) : m_BoardHdl(0xFFFF), |
106 IXXAT::IXXAT(s_BOARD *board) : m_BoardHdl(0xFFFF), |
107 m_TxQueHdl(0xFFFF), |
107 m_TxQueHdl(0xFFFF), |
108 m_RxQueHdl(0xFFFF) |
108 m_RxQueHdl(0xFFFF) |
109 |
109 |
110 { |
110 { |
111 char busname[100]; |
111 if (!board) |
112 ::strcpy(busname,board->busname); |
112 { |
113 char board_name[100]; |
113 close(); |
114 long board_number = 0; |
114 throw error(); |
115 char *ptr = ::strrchr(busname,':'); |
115 } |
116 if (ptr != 0) |
116 |
117 { |
117 long board_number = 0; |
118 *ptr = 0; |
118 |
119 ::strcpy(board_name,busname); |
119 if (board->busname) |
120 if (++ptr - busname < (int)::strlen(board->busname)) |
120 { |
121 board_number = ::atoi(ptr); |
121 board_number = atol(board->busname); |
122 } |
122 } |
123 if (!open(board_name,board_number,board->baudrate)) |
123 |
|
124 if (!open(board_number, board->baudrate)) |
124 { |
125 { |
125 close(); |
126 close(); |
126 throw error(); |
127 throw error(); |
127 } |
128 } |
128 m_callbackPtr = this; |
129 m_callbackPtr = this; |
163 return true; |
164 return true; |
164 } |
165 } |
165 return false; |
166 return false; |
166 } |
167 } |
167 |
168 |
168 bool IXXAT::open(const char* board_name, int board_number, const char* baud_rate) |
169 bool IXXAT::open(int board_number, const char* baud_rate) |
169 { |
170 { |
170 // check, if baudrate is supported |
171 // check, if baudrate is supported |
171 struct IXXAT_baud_rate_param |
172 struct IXXAT_baud_rate_param |
172 { |
173 { |
173 UINT8 bt0; |
174 UINT8 bt0; |
202 return false; |
203 return false; |
203 } |
204 } |
204 // close existing board |
205 // close existing board |
205 close(); |
206 close(); |
206 // init IXXAT board |
207 // init IXXAT board |
207 unsigned long board_type = VCI_GetBrdTypeByName(const_cast<char*>(board_name)); |
208 long res = VCI2_PrepareBoard( 0, // board type, unused in VCI2 |
208 long res = VCI2_PrepareBoard( board_type, // board type |
209 board_number, // unique board index, see XAT_EnumHwEntry() and XAT_GetConfig() |
209 board_number, // unique board index |
|
210 NULL, // pointer to buffer for additional info |
210 NULL, // pointer to buffer for additional info |
211 0, // length of additional info buffer |
211 0, // length of additional info buffer |
212 message_handler, // pointer to msg-callbackhandler |
212 message_handler, // pointer to msg-callbackhandler |
213 receive_queuedata_handler, // pointer to receive-callbackhandler |
213 receive_queuedata_handler, // pointer to receive-callbackhandler |
214 exception_handler); // pointer to exception-callbackhandler |
214 exception_handler); // pointer to exception-callbackhandler |
234 |
234 |
235 // definition of Receive Queue (interrupt mode) |
235 // definition of Receive Queue (interrupt mode) |
236 res = VCI_ConfigQueue(m_BoardHdl, CAN_NUM, VCI_RX_QUE, 500, 1, 0, 100, &m_RxQueHdl); |
236 res = VCI_ConfigQueue(m_BoardHdl, CAN_NUM, VCI_RX_QUE, 500, 1, 0, 100, &m_RxQueHdl); |
237 |
237 |
238 // assign the all IDs to the Receive Queue |
238 // assign the all IDs to the Receive Queue |
239 res = VCI_AssignRxQueObj(m_BoardHdl, m_RxQueHdl ,VCI_ACCEPT, 0, 0) ; |
239 res = VCI_AssignRxQueObj(m_BoardHdl, m_RxQueHdl ,VCI_ACCEPT, 0, 0); |
240 |
240 |
241 // And now start the CAN |
241 // And now start the CAN |
242 res = VCI_StartCan(m_BoardHdl, CAN_NUM); |
242 res = VCI_StartCan(m_BoardHdl, CAN_NUM); |
243 |
243 |
244 //Start CAN Bus-Off watchdog |
244 //Start CAN Bus-Off watchdog |