Skip to content

Commit feb728e

Browse files
committed
Add missing DLL, set specific error reason when opening a Softing CAN channel fails.
1 parent 7bbd754 commit feb728e

2 files changed

Lines changed: 37 additions & 16 deletions

File tree

cmake/deps.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ if(WIN32)
141141

142142
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
143143
"${SOFTING_PATH}/CAN/CAN Layer2/APIDLL/${SOFTING_PLATFORM}/canL2${SOFTING_POSTFIX}.dll"
144+
"${SOFTING_PATH}/CAN/CAN Layer2/APIDLL/${SOFTING_PLATFORM}/CANusbM.dll"
144145
"${SOFTING_PATH}/CAN/CAN Layer2/APIDLL/Win64/canchd_64.dll"
145146
${CMAKE_CURRENT_BINARY_DIR}/
146147

src/drivers/CANvenient_Softing.c

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -140,26 +140,46 @@ int softing_open(int index)
140140
}
141141

142142
ret = INIL2_initialize_channel(&ctx->hChannel, ctx->channel_name);
143-
if (CANL2_OK != ret)
143+
if (ret)
144144
{
145-
set_error_reason("Failed to initialize Softing CAN channel.");
145+
switch (ret)
146+
{
147+
case -1000:
148+
set_error_reason("Invalid channel handle.");
149+
break;
150+
case -1002:
151+
set_error_reason("Too many channels opened.");
152+
break;
153+
case -1003:
154+
set_error_reason("Version conflict: incompatible driver or DLL.");
155+
break;
156+
case -1004:
157+
set_error_reason("Firmware download error (may be a DPRAM access error).");
158+
break;
159+
case -1005:
160+
set_error_reason("CAN USB DLL (canusbm.dll) not found or could not be loaded.");
161+
break;
162+
default:
163+
set_error_reason("Unknown error while initializing Softing CAN channel.");
164+
break;
165+
}
146166
return -1;
147167
}
148168

149-
cfg.fBaudrate = softing_baudrate_to_kbps(can_interface[index].baudrate);
150-
cfg.s32Prescaler = GET_FROM_SCIM;
151-
cfg.s32Tseg1 = GET_FROM_SCIM;
152-
cfg.s32Tseg2 = GET_FROM_SCIM;
153-
cfg.s32Sjw = GET_FROM_SCIM;
154-
cfg.s32Sam = GET_FROM_SCIM;
155-
cfg.s32AccCodeStd = GET_FROM_SCIM;
156-
cfg.s32AccMaskStd = GET_FROM_SCIM;
157-
cfg.s32AccCodeXtd = GET_FROM_SCIM;
158-
cfg.s32AccMaskXtd = GET_FROM_SCIM;
159-
cfg.s32OutputCtrl = GET_FROM_SCIM;
160-
cfg.bEnableAck = GET_FROM_SCIM;
169+
cfg.fBaudrate = softing_baudrate_to_kbps(can_interface[index].baudrate);
170+
cfg.s32Prescaler = GET_FROM_SCIM;
171+
cfg.s32Tseg1 = GET_FROM_SCIM;
172+
cfg.s32Tseg2 = GET_FROM_SCIM;
173+
cfg.s32Sjw = GET_FROM_SCIM;
174+
cfg.s32Sam = GET_FROM_SCIM;
175+
cfg.s32AccCodeStd = GET_FROM_SCIM;
176+
cfg.s32AccMaskStd = GET_FROM_SCIM;
177+
cfg.s32AccCodeXtd = GET_FROM_SCIM;
178+
cfg.s32AccMaskXtd = GET_FROM_SCIM;
179+
cfg.s32OutputCtrl = GET_FROM_SCIM;
180+
cfg.bEnableAck = GET_FROM_SCIM;
161181
cfg.bEnableErrorframe = GET_FROM_SCIM;
162-
cfg.hEvent = NULL;
182+
cfg.hEvent = NULL;
163183

164184
ret = CANL2_initialize_fifo_mode(ctx->hChannel, &cfg);
165185
if (CANL2_OK != ret)
@@ -264,7 +284,7 @@ int softing_update(int index)
264284

265285
free(channels);
266286

267-
if (!found)
287+
if (! found)
268288
{
269289
can_release(index);
270290
return -1;

0 commit comments

Comments
 (0)