CANopenNode
Change Log

newOD

  • New Object dictionary interface. It has very similar principles as before. All parts of CANopenNode objects, which works with OD entries, are rewritten.
  • New OD.h and OD.c files, replaces CO_OD files.
  • CANopen.c and CANopen.h files redesigned. Integration of "OD.h" is optional. Configuration of multiple object dictionaries is possible with one CANopen device. Interface is the same, with some changes to function arguments.
  • Rewritten SDO server. Object dictionary part is removed.
  • CO_Emergency is mostly rewritten. Now is much easier customization.
  • CO_NMT_Heartbeat is redesigned.

Unreleased master

  • All drivers removed from this project, except Neuberger-socketCAN for Linux.

    Changed

  • Directory structure rearranged. Before was all CANopen object files in stack directory, now they are in separate directories according to standard (301, 305, extra, socketCAN for Linux driver). Include directives for that files now contain directory path. CO_SDO renamed to CO_SDOserver and CO_SDOmaster renamed to CO_SDOclient. Change of the project files will be necessary.
  • Driver interface clarified. Before was pair of CO_driver.h/.c files for each microcontroller, now there is common CO_driver.h file. Drivers for other microcontrollers will be separate projects. Each driver must have own CO_driver_target.h file and function definitions from C_driver.h file. See documentation in CO_driver.h, example/CO_driver_target.h and example/CO_driver.c. There was no other major changes in driver interface.
  • Time base is now microsecond in all functions.
  • CANopen.h/.c files simplified and changed. CO_USE_GLOBALS and CO_init() removed. Interface to those functions changed.
  • CO_NMT_sendCommand() master function renamed and moved from CANopen.c into CO_NMT_Heartbeat.c.
  • Heartbeat consumer CO_HBconsumer_process() optimized.
  • Rename in CO_driver_target.h: IS_CANrxNew -> CO_FLAG_READ, SET_CANrxNew -> CO_FLAG_SET, CLEAR_CANrxNew -> CO_FLAG_CLEAR
  • CO_driver.h file, function CO_CANrxBufferInit(), last argument (callback) changed from (*pFunct)(void *object, const CO_CANrxMsg_t *message) to void (*CANrx_callback)(void *object, void *message). New functions are defined in CO_driver_target.h file: CO_CANrxMsg_readIdent(), CO_CANrxMsg_readDLC() and CO_CANrxMsg_readData().
  • It is necessary to manually update CO_OD.c file - it must include: 301/CO_driver.h, CO_OD.h and 301/CO_SDOserver.h.
  • Added void *object argument to CO_*_initCallback() functions. API clarified.
  • Add emergency receive callback also for own emergency messages.
  • Heartbeat is send immediately after NMT state changes.
  • SDO client is rewritten. Now includes read/write fifo interface to transfer data.
  • LED indicator indication (CiA303-3) moved from NMT into own files. Now fully comply to standard.
  • LSS slave is integrated into CANopenNode more directly.
  • CO_driver interface: remove Emergency object dependency for reporting CAN errors, use CANerrorStatus own variable instead. Emergency object updated.

    Changed SocketCAN

  • ./stack/socketCAN removed from the project, ./stack/Neuberger-socketCAN moved to ./socketCAN
  • driver API updated
  • CO_Linux_threads.h, function void CANrx_threadTmr_init(uint16_t interval_in_milliseconds (changed to) uint32_t interval_in_microseconds)
  • CO_CANrxBufferInit(): remove check COB ID already used.
  • change macros CO_DRIVER_MULTI_INTERFACE and CO_DRIVER_ERROR_REPORTING. To enable(disable), set to 1(0).
  • Rename CO_Linux_threads.h/.c to CO_epoll_interface.h/.c and reorganize them. Move epoll, timerfd and eventfd system calls from CO_driver.c to here.
  • Can run in single thread, including gateway.

    Fixed

  • Bugfix in CO_HBconsumer_process(): argument timeDifference_us was set to 0 inside for loop, fixed now.
  • BUG in CO_HBconsumer.c #168

    Added

  • Documentation added to doc directory: CHANGELOG.md, deviceSupport.md, gettingStarted.md, LSSusage.md and traceUsage.md.
  • All CANopen objects calculates next timer info for OS. Useful for energy saving.
  • Added file CO_config.h for stack configuration. Can be overridden by target specific or by custom definitions. It enables/disables whole CanOpenNode objects or parts of them. It also specifies some constants.
  • CO_fifo.h/c for fifo data buffer, used with rewritten SDO client, etc.
  • CANopen gateway-ascii command interface according to CiA309-3 as a microcontroller independent module. It includes NMT master, LSS master and SDO client interface. Interface is non-blocking, it is added to mainline. Example for Linux stdio and socket is included.

v1.3 - 2020-04-27

  • License changed to Apache 2.0.
  • NMT self start functionality (OD object 1F80) implemented to strictly follow standard. Default value for object 1F80 have to be updated in OD editor. See README.md.

    Fixed

  • Various fixes.
  • neuberger-socketCAN fixed.

    Added

  • CANopen TIME protocol added.

v1.2 - 2019-10-08

  • Memory barrier implemented for setting/clearing flags for CAN received message.
  • CO_Emergency and CO_HBconsumer files revised.

    Added

  • CANopen LSS master/slave protocol added for configuration of bitrate and node ID.
  • Neuberger-socketCAN driver added.
  • Emergency consumer added.
  • Callbacks added to Emergency and Heartbeat consumer.

v1.1 - 2019-10-08

  • Full ChangeLog
  • Bugfixes. Some non-critical warnings in stack, some formatting warnings in tracing stuff.

v1.0 - 2017-08-01

v0.5 - 2015-10-20

  • Git repository started on GitHub.

v0.4 - 2012-02-26

  • Git repository started on Sourceforge git.

v0.1 - 2004-06-29

  • First edition of CANopenNode on SourceForge, files section. (V0.80 on SourceForge).

Changelog written according to recommendations from https://keepachangelog.com/