Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ add_library(
${CMAKE_CURRENT_SOURCE_DIR}/src/drivers/CANvenient_PEAK.c
${CMAKE_CURRENT_SOURCE_DIR}/src/drivers/CANvenient_SocketCAN.c
${CMAKE_CURRENT_SOURCE_DIR}/src/drivers/CANvenient_Softing.c
${CMAKE_CURRENT_SOURCE_DIR}/src/drivers/CANvenient_TinyCan.c
)

set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 99)
Expand Down
24 changes: 0 additions & 24 deletions CMakeSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,6 @@
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ]
},
{
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": []
},
{
"name": "x86-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": []
}
]
}
1 change: 1 addition & 0 deletions README.md
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ The following back-ends are currently implemented:
- PCAN-Basic
- SocketCAN
- Softing CAN Layer 2
- MHS Elektronik Tiny-CAN
13 changes: 13 additions & 0 deletions cmake/dep_TinyCan.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.16)
project(TinyCan_devel C)

add_library(
mhstcan
SHARED
${CMAKE_CURRENT_SOURCE_DIR}/dev/lib/mhs_can_drv.c)

set_target_properties(mhstcan PROPERTIES
WINDOWS_EXPORT_ALL_SYMBOLS ON
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
35 changes: 35 additions & 0 deletions cmake/deps.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -152,18 +152,51 @@ if(WIN32)
set(SOFTING_INCLUDE_DIR "${SOFTING_PATH}/CAN/CAN Layer2/APIDLL")
set(SOFTING_LIBRARY "${SOFTING_PATH}/CAN/CAN Layer2/APIDLL/${SOFTING_PLATFORM}/canL2${SOFTING_POSTFIX}.lib")

# Tiny-Can
set(TINYCAN_VERSION "8.12")

set(TINYCAN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/TinyCan")
set(TINYCAN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/TinyCan_devel-prefix/src/TinyCan_devel-build")

set(TINYCAN_DEVEL_PKG TinyCan_v${TINYCAN_VERSION}.zip)
set(TINYCAN_DEVEL_URL https://canopenterm.de/mirror)
set(TINYCAN_DEVEL_HASH c047e901ccb34bc764fb5dc5f2359dad82ff55c4)

ExternalProject_Add(TinyCan_devel
URL ${TINYCAN_DEVEL_URL}/${TINYCAN_DEVEL_PKG}
URL_HASH SHA1=${TINYCAN_DEVEL_HASH}
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps
DOWNLOAD_NO_PROGRESS true
DOWNLOAD_EXTRACT_TIMESTAMP true
TLS_VERIFY true
SOURCE_DIR ${TINYCAN_PATH}/
BUILD_BYPRODUCTS ${TINYCAN_BUILD_DIR}/mhstcan.lib

INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
${TINYCAN_BUILD_DIR}/mhstcan.dll
${CMAKE_CURRENT_BINARY_DIR}/

PATCH_COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/dep_TinyCan.cmake" ${TINYCAN_PATH}/CMakeLists.txt
)

set(TINYCAN_INCLUDE_DIR "${TINYCAN_PATH}/dev/lib")
set(TINYCAN_LIBRARY ${TINYCAN_BUILD_DIR}/mhstcan.lib)

set(PLATFORM_DEPS
Ixxat_devel
Kvaser_devel
PCAN_devel
Softing_devel
TinyCan_devel
)

set(PLATFORM_LIBS
${IXXAT_LIBRARY}
${KVASER_LIBRARY}
${PCAN_LIBRARY}
${SOFTING_LIBRARY}
${TINYCAN_LIBRARY}
)

include_directories(
Expand All @@ -174,6 +207,7 @@ if(WIN32)
SYSTEM ${PCAN_INCLUDE_DIR}/../src/pcan/driver
SYSTEM ${PCAN_INCLUDE_DIR}/../src/pcan/lib
SYSTEM ${SOFTING_INCLUDE_DIR}
SYSTEM ${TINYCAN_INCLUDE_DIR}
)

add_dependencies(
Expand All @@ -182,5 +216,6 @@ if(WIN32)
Kvaser_devel
PCAN_devel
Softing_devel
TinyCan_devel
)
endif()
22 changes: 21 additions & 1 deletion src/CANvenient.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "drivers/CANvenient_SocketCAN.h"
#include "drivers/CANvenient_Softing.h"
#include "drivers/CANvenient_PEAK.h"
#include "drivers/CANvenient_TinyCan.h"

struct can_iface can_interface[CAN_MAX_INTERFACES] = {0};
char can_error_reason[1024] = {0};
Expand Down Expand Up @@ -50,6 +51,12 @@ CANVENIENT_API int can_find_interfaces(void)
return status;
}

status = tinycan_find_interfaces();
if (status < 0)
{
return status;
}

return softing_find_interfaces();
}

Expand Down Expand Up @@ -83,6 +90,8 @@ CANVENIENT_API int can_open(int index, enum can_baudrate baud)
return socketcan_open(index);
case CAN_VENDOR_SOFTING:
return softing_open(index);
case CAN_VENDOR_MHS:
return tinycan_open(index);
default:
case CAN_VENDOR_NONE:
set_error_reason("No CAN interface found at specified index.");
Expand Down Expand Up @@ -116,6 +125,9 @@ CANVENIENT_API void can_close(int index)
case CAN_VENDOR_SOFTING:
softing_close(index);
break;
case CAN_VENDOR_MHS:
tinycan_close(index);
break;
default:
case CAN_VENDOR_NONE:
break;
Expand Down Expand Up @@ -167,6 +179,8 @@ CANVENIENT_API int can_update(int index)
break;
case CAN_VENDOR_SOFTING:
return softing_update(index);
case CAN_VENDOR_MHS:
return tinycan_update(index);
default:
case CAN_VENDOR_NONE:
set_error_reason("No CAN interface found at specified index.");
Expand All @@ -181,7 +195,7 @@ CANVENIENT_API int can_get_baudrate(int index, enum can_baudrate* baud)
set_error_reason("Channel index is out-of-range.");
return -1;
}
else if (!baud)
else if (! baud)
{
set_error_reason("Output parameter is NULL.");
return -1;
Expand Down Expand Up @@ -256,6 +270,8 @@ CANVENIENT_API int can_set_baudrate(int index, enum can_baudrate baud)
return socketcan_set_baudrate(index, baud);
case CAN_VENDOR_SOFTING:
return softing_set_baudrate(index, baud);
case CAN_VENDOR_MHS:
return tinycan_set_baudrate(index, baud);
default:
case CAN_VENDOR_NONE:
set_error_reason("No CAN interface found at specified index.");
Expand Down Expand Up @@ -283,6 +299,8 @@ CANVENIENT_API int can_send(int index, struct can_frame* frame)
return socketcan_send(index, frame);
case CAN_VENDOR_SOFTING:
return softing_send(index, frame);
case CAN_VENDOR_MHS:
return tinycan_send(index, frame);
default:
case CAN_VENDOR_NONE:
set_error_reason("No CAN interface found at specified index.");
Expand Down Expand Up @@ -310,6 +328,8 @@ CANVENIENT_API int can_recv(int index, struct can_frame* frame, u64* timestamp)
return socketcan_recv(index, frame, timestamp);
case CAN_VENDOR_SOFTING:
return softing_recv(index, frame, timestamp);
case CAN_VENDOR_MHS:
return tinycan_recv(index, frame, timestamp);
default:
case CAN_VENDOR_NONE:
set_error_reason("No CAN interface found at specified index.");
Expand Down
6 changes: 3 additions & 3 deletions src/drivers/CANvenient_PEAK.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
#include <stdio.h>
#include <string.h>

#include "CANvenient.h"
#include "CANvenient_internal.h"

#ifdef _WIN32
#include <windows.h>
#include <PCANBasic.h>
Expand All @@ -21,9 +24,6 @@ static char* lookup_error_string(TPCANStatus pcan_status);
static TPCANBaudrate lookup_pcan_baudrate(enum can_baudrate baud);
#endif

#include "CANvenient.h"
#include "CANvenient_internal.h"

int peak_find_interfaces(void)
{
#ifdef _WIN32
Expand Down
Loading