Copyright © 2005-2024 Uwe Vogt, UV Software, Berlin ([email protected])
CAN API V3 is a wrapper specification to have a uniform CAN Interface API for various CAN interfaces from different vendors running under multiple operating systems.
This repo contains the source code for a CAN API V3 compatible wrapper library under Windows for PCAN Interfaces from PEAK-System Technik GmbH. The wrapper library is build upon Peak´s PCANBasic DLL.
/// \name PeakCAN API
/// \brief CAN API V3 driver for PEAK-System PCAN interfaces
/// \note See CCanApi for a description of the overridden methods
/// \{
class CPeakCAN : public CCanApi {
public:
// constructor / destructor
CPeakCAN();
~CPeakCAN();
// CCanApi overrides
static bool GetFirstChannel(SChannelInfo &info, void *param = NULL);
static bool GetNextChannel(SChannelInfo &info, void *param = NULL);
static CANAPI_Return_t ProbeChannel(int32_t channel, const CANAPI_OpMode_t &opMode, const void *param, EChannelState &state);
static CANAPI_Return_t ProbeChannel(int32_t channel, const CANAPI_OpMode_t &opMode, EChannelState &state);
CANAPI_Return_t InitializeChannel(int32_t channel, const CANAPI_OpMode_t &opMode, const void *param = NULL);
CANAPI_Return_t TeardownChannel();
CANAPI_Return_t SignalChannel();
CANAPI_Return_t StartController(CANAPI_Bitrate_t bitrate);
CANAPI_Return_t ResetController();
CANAPI_Return_t WriteMessage(CANAPI_Message_t message, uint16_t timeout = 0U);
CANAPI_Return_t ReadMessage(CANAPI_Message_t &message, uint16_t timeout = CANWAIT_INFINITE);
CANAPI_Return_t GetStatus(CANAPI_Status_t &status);
CANAPI_Return_t GetBusLoad(uint8_t &load);
CANAPI_Return_t GetBitrate(CANAPI_Bitrate_t &bitrate);
CANAPI_Return_t GetBusSpeed(CANAPI_BusSpeed_t &speed);
CANAPI_Return_t GetProperty(uint16_t param, void *value, uint32_t nbyte);
CANAPI_Return_t SetProperty(uint16_t param, const void *value, uint32_t nbyte);
CANAPI_Return_t SetFilter11Bit(uint32_t code, uint32_t mask);
CANAPI_Return_t GetFilter11Bit(uint32_t &code, uint32_t &mask);
CANAPI_Return_t SetFilter29Bit(uint32_t code, uint32_t mask);
CANAPI_Return_t GetFilter29Bit(uint32_t &code, uint32_t &mask);
CANAPI_Return_t ResetFilters();
char *GetHardwareVersion(); // (for compatibility reasons)
char *GetFirmwareVersion(); // (for compatibility reasons)
static char *GetVersion(); // (for compatibility reasons)
static CANAPI_Return_t MapIndex2Bitrate(int32_t index, CANAPI_Bitrate_t &bitrate);
static CANAPI_Return_t MapString2Bitrate(const char *string, CANAPI_Bitrate_t &bitrate);
static CANAPI_Return_t MapBitrate2String(CANAPI_Bitrate_t bitrate, char *string, size_t length);
static CANAPI_Return_t MapBitrate2Speed(CANAPI_Bitrate_t bitrate, CANAPI_BusSpeed_t &speed);
static uint8_t Dlc2Len(uint8_t dlc) { return CCanApi::Dlc2Len(dlc); }
static uint8_t Len2Dlc(uint8_t len) { return CCanApi::Len2Dlc(len); }
};
/// \}
See header file PeakCAN.h
for a description of the provided methods.
Important note: To build any of the following build targets run the script build_no.bat
to generate a pseudo build number.
C:\Users\haumea>cd C:\Projects\CAN\Drivers\PeakCAN
C:\Projects\CAN\Drivers\PeakCAN>build_no.bat
Repeat this step after each git commit
, git pull
, git clone
, etc.
To build all 32-bit targets (x86) run the script x86_build.bat
.
C:\Users\haumea>cd C:\Projects\CAN\Drivers\PeakCAN
C:\Projects\CAN\Drivers\PeakCAN>x86_build.bat
To build all 64-bit targets (x64) run the script x64_build.bat
.
C:\Users\haumea>cd C:\Projects\CAN\Drivers\PeakCAN
C:\Projects\CAN\Drivers\PeakCAN>x64_build.bat
uvPeakCAN is a dynamic link library with a CAN API V3 compatible application programming interface for use in C++ applications.
See header file PeakCAN.h
for a description of all class members.
u3canpcb is a dynamic link library with a CAN API V3 compatible application programming interface for use in C applications.
See header file can_api.h
for a description of all API functions.
can_moni
is a command line tool to view incoming CAN messages.
I hate this messing around with binary masks for identifier filtering.
So I wrote this little program to have an exclude list for single identifiers or identifier ranges (see program option /EXCLUDE
or just /X
). Precede the list with a ~
and you get an include list.
Type can_moni /?
to display all program options.
can_test
is a command line tool to test CAN communication.
Originally developed for electronic environmental tests on an embedded Linux system with SocketCAN, I´m using it for many years as a traffic generator for CAN stress-tests.
Type can_test /?
to display all program options.
- Windows 10 & 11 (x64 operating systems)
- Microsoft Visual Studio Community 2022 (Version 17.10.5)
- Version 4.5 or later (Latest is Greatest!)
- PCAN-USB - single channel, CAN 2.0 (Peak´s item no.: IPEH-002021, IPEH-002021)
- PCAN-USB FD - single channel, CAN 2.0 and CAN FD (Peak´s item no.: IPEH-004022)
- PCAN-USB Pro FD - dual channel, CAN 2.0 and CAN FD (Peak´s item no.: IPEH-004061)
For a list of known bugs and caveats see tab Issues in the GitHub repo.
The PCANBasic DLL can be downloaded from PEAK-System website.
Please note the copyright and license agreements.
A version for macOS and Linux can be downloaded from / cloned at GitHub.
A generic documentation of the CAN API V3 application programming interface can be found here.
Except where otherwise noted, this work is dual-licensed under the terms of the BSD 2-Clause "Simplified" License and under the terms of the GNU General Public License v3.0 (or any later version). You can choose between one of them if you use these portions of this work in whole or in part.
Windows is a registered trademark of Microsoft Corporation in the United States and/or other countries.
PCAN is a registered trademark of PEAK-System Technik GmbH, Darmstadt, Germany.
Mac and macOS are trademarks of Apple Inc., registered in the U.S. and other countries.
Linux is a registered trademark of Linus Torvalds.
All other company, product and service names mentioned herein may be trademarks, registered trademarks, or service marks of their respective owners.
If you connect your CAN device to a real CAN network when using this library, you might damage your application.
E-Mail: mailto://[email protected]
Internet: https://www.uv-software.com