patch from Stefan Kratochwil <entwicklung@inovel.de> : canfestival-3-fm3_698.patch
Bug:
If an object dictionary entry was requested whose size exceeds
SDO_MAX_LENGTH_TRANSFERT, the memcpy() call at line 139 of objacces.c overwrites
the memory after *pDestData which causes stack corruption.
-> Bugfix:
The bug was corrected by size checking the requested data. An 'Out of
memory' error message will be generated if the requested data exceeds
SDO_MAX_LENGTH_TRANSFERT.
Additional changes:
Added dynamic buffer allocation for the SDO transfer. This feature can be used
if SDO_DYNAMIC_BUFFER_ALLOCATION is defined in config.h. The size of the
dynamically allocated buffer is controlled with
SDO_DYNAMIC_BUFFER_ALLOCATION_SIZE.
-> Note:
This change removes the detection of OD_LENGTH_DATA_INVALID errors!
#ifndef CANFESTIVAL_H_
#define CANFESTIVAL_H_
#include "timerscfg.h"
#include "can_driver.h"
#include "data.h"
#include "timers_driver.h"
typedef void* LIB_HANDLE;
/** @defgroup userapi User API */
/** @defgroup can CAN management
* @ingroup userapi
*/
/**
* @ingroup can
* @brief Load CAN driver interface.
* @param *driver_name The location of the library to load
* @return
* - handle of the CAN driver interface is returned upon success.
* - NULL is returned if the CAN driver interface can't be loaded.
*/
#define LoadCanDriver(driver_name) 1
/**
* @brief Send a CAN message
* @param port CanFestival file descriptor
* @param *m The CAN message to send
* @return 0 if succes
*/
UNS8 canSend(CAN_PORT port, Message *m);
/**
* @ingroup can
* @brief Open a CANOpen device
* @param *board Pointer to the board structure that contains busname and baudrate
* @param *d Pointer to the CAN object data structure
* @return
* - CanFestival file descriptor is returned upon success.
* - NULL is returned if the CANOpen board can't be opened.
*/
CAN_PORT canOpen(s_BOARD *board, CO_Data * d);
/**
* @ingroup can
* @brief Close a CANOpen device
* @param *d Pointer to the CAN object data structure
* @return
* - 0 is returned upon success.
* - errorcode if error. (if implemented)
*/
int canClose(CO_Data * d);
/**
* @ingroup can
* @brief Change the CANOpen device baudrate
* @param port CanFestival file descriptor
* @param *baud The new baudrate to assign
* @return
* - 0 is returned upon success or if not supported by the CAN driver.
* - errorcode from the CAN driver is returned if an error occurs. (if implemented in the CAN driver)
*/
UNS8 canChangeBaudRate(CAN_PORT port, char* baud);
#endif