Rusoku Technologies is an innovative engineering team based in Lithuania, Europe. They offer CAN adapter at a reasonable price. Drivers and utilities for Windows and Linux are available as open-source. A macOS user-space driver for TouCAN USB interfaces from Rusoku is provided by UV Software.
The macOS driver for TouCAN USB Interfaces from Rusoku is based on MacCAN-Core which is an abstraction (or rather a wrapper) of Apple´s IOUsbKit to create USB user-space drivers for CAN interfaces from various vendors under macOS.
The GitHub repository contains the source code for the MacCAN-TouCAN driver and several alternatives to build dynamic libraries for macOS, either as a C++ class library (libTouCAN), or as a CAN API V3 wrapper library (libUVCANTOU), as well as some example programs and my beloved CAN utilities
The MacCAN-TouCAN driver comes with an CAN API V3 compatible API.
CAN API V3 is a wrapper specification by UV Software to have a uniform CAN Interface API for various CAN interfaces from different vendors running under multiple operating systems. See header file
CANAPI.h for the CAN API V3 wrapper specification.
|CAN 2.0||Classical CAN|
|CAN FD||Flexible Data-rate CAN|
|Bit-rate, CAN 2.0||high speed: up to 1 Mbps|
|Bit-rate, CAN FD||nominal: up to 1 Mbps
data phase: up to 8 Mbps
|11-bit identifier (STD)||CAN 2.0 and CAN FD|
|29-bit identifier (XTD)||CAN 2.0 and CAN FD|
|Remote frames (RTR)||CAN 2.0 only|
|Error frames (ERR)||CAN 2.0 and CAN FD|
|Error indicator (ESI)||CAN FD only|
|Bit-rate switching (BRS)||CAN FD only|
|Listen-only mode (MON)||CAN 2.0 and CAN FD|
|Identifier filtering||CAN 2.0 and CAN FD|
|- Monitor mode enable/disable (MON)||disabled by default|
|- Error frames enable/disable (ERR)||disabled by default|
|- Remote frames disable/enable (NRTR)||not supported|
|- Extended frames disable/enable (NXTD)||not supported|
|- Shared access enable/disable (SHRD)||not supported|
|- Non-ISO CAN FD enable/disable (NISO)||not supported|
|- Bit-rate switching enable/disable (BRSE)||disabled by default|
|- CAN FD operation enable/disable (FDOE)||disabled by default|
|- Pre-defined bit-timing indexes||acc. CiA CANopen specification|
|- BTR register values||register fields:
|- Message queue (FIFO)||up to 64K CAN messages|
|- Polling||return immediately|
|- Timed out||wait up to 65’534 milliseconds|
|- Blocking read||wait infinitely|
|- Acknowledged write||not supported|
|- Buffered write||buffer size depends on the hardware|
|Software Development Kit:|
|- VSCP CANAL API||not available|
|- CAN API V3||C API and C++ API by UV Software|
|- Dynamic library||
|- Static library||
|- Source code||GPL-3.0-or-later|
|- Apple silicon||and Intel architecture|
|- Swift wrapper||Swift 5.5 (including SPM)|
|- Python wrapper||Python 2.7 and 3.8|
|- Windows wrapper||not available|
|- Utilities||CLI utilities
|- Examples||C, C++, Swift, Python|
- Reworked the driver layer (to solve the copy constructor issue #16):
- rename sub-folders in
- switch CAN API V3 wrapper from C++ to C
- create a lot of new driver layer modules
- prepare the driver to support further devices
- no obvious functional changes
- rename sub-folders in
- Added a Swift wrapper including SPM configuration
- Added two simple Swift examples for sending and receiving CAN frames
- Added an Xctest target for CAN API V3 C interface to the trial program
- take over all test suites and test cases from MacCAN-KvaserCAN
- test execution: 131 tests, 6 failed - but false positives
- Fixed a testing issue with unsupported acknowledge of transmit messages
- Fixed a testing issue with unsupported bit-timing index 1 (800kbps)
- Fixed a bug with unchecked device handle
- Fixed a bug with missing header file in class
- Fixed an omission with forgotten TouCAN specific properties
- Fixed a bug with non-boolean return value in a boolean function
- Fixed an issue with deprecated function
IOMasterPort(first deprecated in macOS 12.0)
- Set all Xcode deployment targets to macOS 11.0 (
Makefiles still work on OS X 10.13)
- Updated the
Makefiles to build the artifacts as Universal macOS Binary
- Updated my beloved utilities
- Updated the C++ examples
- Fixed the hibernation issue (issue #11)
- Fixed a bug when trying to send a status message
- Fixed a bug when the channel number is invalid
- Fixed a bug when requested operation mode is not supported
- Fixed an out-of-bound violation in companion module
- Fixed some issues from code analysis
- Worked in the latest changes from MacCAN-Core (SVN rev. 986)
- Added a CAN API V3 compatible Python wrapper and two Python examples
- Added two simple C++ examples for sending and receiving CAN frames
- Weakened the sizeof check while reading numerical properties
- Fixed a bug with a locked mutex when device is not present
- Fixed a bug with signaling a wait condition
- Updated the trial program and the utilities
- Fixed a bug with looping over the list of registered devices
- Fixed a bug with non-dereferenceable void* array
- Fixed a bug with
- Plastic surgery
- First release of the MacCAN-TouCAN driver
Only the following devices from Rusoku Technologies are supported:
- TouCAN USB (Model F4FS1)
For technical specifications, prices and delivery terms see Rusoku´s website.
Known Bugs and Caveats
For a list of known bugs and caveats see tab Issues in the GitHub repo.
MacCAN-TouCAN is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
MacCAN-TouCAN is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with MacCAN-TouCAN. If not, see <http://www.gnu.org/licenses/>.
MacCAN-Core (which includes CAN API V3) 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). The terms of the GNU General Public License v3.0 (or any later version) apply to this work, see above.
Mac and macOS are trademarks of Apple Inc., registered in the U.S. and other countries.
Windows is a registered trademark of Microsoft Corporation in the United States and/or other countries.
Linux is a registered trademark of Linus Torvalds.
All other company, product and service names mentioned herein are 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.