73 if (FLAGS_esd_can_extended_frame) {
74 mode = NTCAN_MODE_NO_RTR;
78 int32_t ret = canOpen(port_, mode, NTCAN_MAX_TX_QUEUESIZE,
79 NTCAN_MAX_RX_QUEUESIZE, 5, 5, &dev_handler_);
80 if (ret != NTCAN_SUCCESS) {
82 return ErrorCode::CAN_CLIENT_ERROR_BASE;
98 int32_t id_count = 0x800;
99 ret = canIdRegionAdd(dev_handler_, 0, &id_count);
101 if (FLAGS_esd_can_extended_frame) {
102 id_count = 0x1FFFFFFE;
103 ret = canIdRegionAdd(dev_handler_, 0x20000000, &id_count);
106 if (ret != NTCAN_SUCCESS) {
107 AERROR <<
"add receive msg id filter error code: " << ret <<
", "
109 return ErrorCode::CAN_CLIENT_ERROR_BASE;
113 ret = canSetBaudrate(dev_handler_, NTCAN_BAUD_500);
114 if (ret != NTCAN_SUCCESS) {
116 return ErrorCode::CAN_CLIENT_ERROR_BASE;
120 return ErrorCode::OK;
137 int32_t *
const frame_num) {
138 CHECK_NOTNULL(frame_num);
139 CHECK_EQ(frames.size(),
static_cast<size_t>(*frame_num));
142 AERROR <<
"Esd can client has not been initiated! Please init first!";
143 return ErrorCode::CAN_CLIENT_ERROR_SEND_FAILED;
146 send_frames_[i].id = frames[i].id;
147 send_frames_[i].len = frames[i].len;
148 std::memcpy(send_frames_[i].data, frames[i].data, frames[i].len);
152 int32_t ret = canWrite(dev_handler_, send_frames_, frame_num,
nullptr);
153 if (ret != NTCAN_SUCCESS) {
154 AERROR <<
"send message failed, error code: " << ret <<
", "
156 return ErrorCode::CAN_CLIENT_ERROR_BASE;
158 return ErrorCode::OK;
163 int32_t *
const frame_num) {
165 AERROR <<
"Esd can client is not init! Please init first!";
166 return ErrorCode::CAN_CLIENT_ERROR_RECV_FAILED;
171 <<
"], frame_num:" << *frame_num;
173 return ErrorCode::CAN_CLIENT_ERROR_FRAME_NUM;
176 const int32_t ret = canRead(dev_handler_, recv_frames_, frame_num,
nullptr);
178 if (ret == NTCAN_RX_TIMEOUT) {
179 return ErrorCode::OK;
181 if (ret != NTCAN_SUCCESS) {
182 AERROR <<
"receive message failed, error code: " << ret <<
", "
184 return ErrorCode::CAN_CLIENT_ERROR_BASE;
189 cf.
id = recv_frames_[i].id;
190 cf.
len = recv_frames_[i].len;
191 std::memcpy(cf.
data, recv_frames_[i].data, recv_frames_[i].len);
192 frames->push_back(cf);
195 return ErrorCode::OK;
207 NTCAN_RESULT ntstatus;
213 static const struct ERR2STR err2str[] = {
214 {NTCAN_SUCCESS,
"NTCAN_SUCCESS"},
215 {NTCAN_RX_TIMEOUT,
"NTCAN_RX_TIMEOUT"},
216 {NTCAN_TX_TIMEOUT,
"NTCAN_TX_TIMEOUT"},
217 {NTCAN_TX_ERROR,
"NTCAN_TX_ERROR"},
218 {NTCAN_CONTR_OFF_BUS,
"NTCAN_CONTR_OFF_BUS"},
219 {NTCAN_CONTR_BUSY,
"NTCAN_CONTR_BUSY"},
220 {NTCAN_CONTR_WARN,
"NTCAN_CONTR_WARN"},
221 {NTCAN_NO_ID_ENABLED,
"NTCAN_NO_ID_ENABLED"},
222 {NTCAN_ID_ALREADY_ENABLED,
"NTCAN_ID_ALREADY_ENABLED"},
223 {NTCAN_ID_NOT_ENABLED,
"NTCAN_ID_NOT_ENABLED"},
224 {NTCAN_INVALID_FIRMWARE,
"NTCAN_INVALID_FIRMWARE"},
225 {NTCAN_MESSAGE_LOST,
"NTCAN_MESSAGE_LOST"},
226 {NTCAN_INVALID_PARAMETER,
"NTCAN_INVALID_PARAMETER"},
227 {NTCAN_INVALID_HANDLE,
"NTCAN_INVALID_HANDLE"},
228 {NTCAN_NET_NOT_FOUND,
"NTCAN_NET_NOT_FOUND"},
229#ifdef NTCAN_IO_INCOMPLETE
230 {NTCAN_IO_INCOMPLETE,
"NTCAN_IO_INCOMPLETE"},
232#ifdef NTCAN_IO_PENDING
233 {NTCAN_IO_PENDING,
"NTCAN_IO_PENDING"},
235#ifdef NTCAN_INVALID_HARDWARE
236 {NTCAN_INVALID_HARDWARE,
"NTCAN_INVALID_HARDWARE"},
238#ifdef NTCAN_PENDING_WRITE
239 {NTCAN_PENDING_WRITE,
"NTCAN_PENDING_WRITE"},
241#ifdef NTCAN_PENDING_READ
242 {NTCAN_PENDING_READ,
"NTCAN_PENDING_READ"},
244#ifdef NTCAN_INVALID_DRIVER
245 {NTCAN_INVALID_DRIVER,
"NTCAN_INVALID_DRIVER"},
247#ifdef NTCAN_OPERATION_ABORTED
248 {NTCAN_OPERATION_ABORTED,
"NTCAN_OPERATION_ABORTED"},
250#ifdef NTCAN_WRONG_DEVICE_STATE
251 {NTCAN_WRONG_DEVICE_STATE,
"NTCAN_WRONG_DEVICE_STATE"},
253 {NTCAN_INSUFFICIENT_RESOURCES,
"NTCAN_INSUFFICIENT_RESOURCES"},
254#ifdef NTCAN_HANDLE_FORCED_CLOSE
255 {NTCAN_HANDLE_FORCED_CLOSE,
"NTCAN_HANDLE_FORCED_CLOSE"},
257#ifdef NTCAN_NOT_IMPLEMENTED
258 {NTCAN_NOT_IMPLEMENTED,
"NTCAN_NOT_IMPLEMENTED"},
260#ifdef NTCAN_NOT_SUPPORTED
261 {NTCAN_NOT_SUPPORTED,
"NTCAN_NOT_SUPPORTED"},
263#ifdef NTCAN_SOCK_CONN_TIMEOUT
264 {NTCAN_SOCK_CONN_TIMEOUT,
"NTCAN_SOCK_CONN_TIMEOUT"},
266#ifdef NTCAN_SOCK_CMD_TIMEOUT
267 {NTCAN_SOCK_CMD_TIMEOUT,
"NTCAN_SOCK_CMD_TIMEOUT"},
269#ifdef NTCAN_SOCK_HOST_NOT_FOUND
270 {NTCAN_SOCK_HOST_NOT_FOUND,
"NTCAN_SOCK_HOST_NOT_FOUND"},
272#ifdef NTCAN_CONTR_ERR_PASSIVE
273 {NTCAN_CONTR_ERR_PASSIVE,
"NTCAN_CONTR_ERR_PASSIVE"},
275#ifdef NTCAN_ERROR_NO_BAUDRATE
276 {NTCAN_ERROR_NO_BAUDRATE,
"NTCAN_ERROR_NO_BAUDRATE"},
278#ifdef NTCAN_ERROR_LOM
279 {NTCAN_ERROR_LOM,
"NTCAN_ERROR_LOM"},
281 {(NTCAN_RESULT)0xffffffff,
"NTCAN_UNKNOWN"}
284 const struct ERR2STR *es = err2str;
287 if (es->ntstatus == ntstatus) {
291 }
while ((uint32_t)es->ntstatus != 0xffffffff);
293#ifdef NTCAN_ERROR_FORMAT_LONG
296 char sz_error_text[60];
298 res = canFormatError(ntstatus, NTCAN_ERROR_FORMAT_LONG, sz_error_text,
299 static_cast<uint32_t
>(
sizeof(sz_error_text) - 1));
300 if (NTCAN_SUCCESS == res) {
301 snprintf(
reinterpret_cast<char *
>(str_buf),
ERROR_BUF_SIZE,
"%s - %s",
302 es->str, sz_error_text);
304 snprintf(
reinterpret_cast<char *
>(str_buf),
ERROR_BUF_SIZE,
"%s(0x%08x)",
309 snprintf(
reinterpret_cast<char *
>(str_buf),
ERROR_BUF_SIZE,
"%s(0x%08x)",
313 return std::string((
const char *)(str_buf));