Replace all memcpy/memset-like functions with standard <string.h> functions (#175)
* Use standard memcpy() instead of CO_memcpy()
* Remove CO_memcpy()
* Use standard memset() instead of CO_memset()
* Remove CO_memset()
* Move helper functions from CO_SDOserver.c to header and make them inline
* Implement CO_getUint16() with memcpy()
* Implement CO_getUint32() with memcpy()
* Implement CO_setUint16() with memcpy()
* Implement CO_setUint32() with memcpy()
* Define memcpy() as CO_memcpySwapX() for little-endian systems
* Fix several writes past the buffer due to hardcoded sizes
Use more "generic" sizes (via sizeof()) instead of hardcoded number in
all calls to memset() to avoid 1-byte errors which result in writes past
the buffer, for example:
memset(&LSSslave->TXbuff->data[5], 0, 4);
in CO_LSSslave_serviceInquire()
memset(&LSSmaster->TXbuff->data[6], 0, 3);
in CO_LSSmaster_switchStateSelectInitiate()
* Use "generic" size in calls to memcpy() where possible
* Remove CO_bytes_t
This type was used only for CO_{get,set}Uint{16,32}().
This commit is contained in:
parent
5a2a1e85cf
commit
4c3011d34a
8 changed files with 106 additions and 189 deletions
|
|
@ -24,6 +24,8 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "301/CO_driver.h"
|
||||
#include "301/CO_SDOserver.h"
|
||||
#include "301/CO_Emergency.h"
|
||||
|
|
@ -331,8 +333,8 @@ void CO_EM_process(
|
|||
#endif
|
||||
|
||||
/* copy data to CAN emergency message */
|
||||
CO_memcpy(emPr->CANtxBuff->data, em->bufReadPtr, 8U);
|
||||
CO_memcpy((uint8_t*)&preDEF, em->bufReadPtr, 4U);
|
||||
memcpy(emPr->CANtxBuff->data, em->bufReadPtr, sizeof(emPr->CANtxBuff->data));
|
||||
memcpy(&preDEF, em->bufReadPtr, sizeof(preDEF));
|
||||
em->bufReadPtr += 8;
|
||||
|
||||
/* Update read buffer pointer and reset inhibit timer */
|
||||
|
|
@ -427,7 +429,7 @@ void CO_errorReport(CO_EM_t *em, const uint8_t errorBit, const uint16_t errorCod
|
|||
|
||||
/* copy data to the buffer, increment writePtr and verify buffer full */
|
||||
CO_LOCK_EMCY();
|
||||
CO_memcpy(em->bufWritePtr, &bufCopy[0], 8);
|
||||
memcpy(em->bufWritePtr, bufCopy, sizeof(bufCopy));
|
||||
em->bufWritePtr += 8;
|
||||
|
||||
if(em->bufWritePtr == em->bufEnd) em->bufWritePtr = em->buf;
|
||||
|
|
@ -488,7 +490,7 @@ void CO_errorReset(CO_EM_t *em, const uint8_t errorBit, const uint32_t infoCode)
|
|||
|
||||
/* copy data to the buffer, increment writePtr and verify buffer full */
|
||||
CO_LOCK_EMCY();
|
||||
CO_memcpy(em->bufWritePtr, &bufCopy[0], 8);
|
||||
memcpy(em->bufWritePtr, bufCopy, sizeof(bufCopy));
|
||||
em->bufWritePtr += 8;
|
||||
|
||||
if(em->bufWritePtr == em->bufEnd) em->bufWritePtr = em->buf;
|
||||
|
|
|
|||
|
|
@ -47,123 +47,6 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* Helper functions. **********************************************************/
|
||||
void CO_memcpy(uint8_t dest[], const uint8_t src[], const uint16_t size){
|
||||
uint16_t i;
|
||||
for(i = 0; i < size; i++){
|
||||
dest[i] = src[i];
|
||||
}
|
||||
}
|
||||
|
||||
void CO_memset(uint8_t dest[], uint8_t c, const uint16_t size){
|
||||
uint16_t i;
|
||||
for(i = 0; i < size; i++){
|
||||
dest[i] = c;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t CO_getUint16(const uint8_t data[]){
|
||||
CO_bytes_t b;
|
||||
b.u8[0] = data[0];
|
||||
b.u8[1] = data[1];
|
||||
return b.u16[0];
|
||||
}
|
||||
|
||||
uint32_t CO_getUint32(const uint8_t data[]){
|
||||
CO_bytes_t b;
|
||||
b.u8[0] = data[0];
|
||||
b.u8[1] = data[1];
|
||||
b.u8[2] = data[2];
|
||||
b.u8[3] = data[3];
|
||||
return b.u32[0];
|
||||
}
|
||||
|
||||
void CO_setUint16(uint8_t data[], const uint16_t value){
|
||||
CO_bytes_t b;
|
||||
b.u16[0] = value;
|
||||
data[0] = b.u8[0];
|
||||
data[1] = b.u8[1];
|
||||
}
|
||||
|
||||
void CO_setUint32(uint8_t data[], const uint32_t value){
|
||||
CO_bytes_t b;
|
||||
b.u32[0] = value;
|
||||
data[0] = b.u8[0];
|
||||
data[1] = b.u8[1];
|
||||
data[2] = b.u8[2];
|
||||
data[3] = b.u8[3];
|
||||
}
|
||||
|
||||
#ifdef CO_LITTLE_ENDIAN
|
||||
void CO_memcpySwap2(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[0];
|
||||
cdest[1] = csrc[1];
|
||||
}
|
||||
void CO_memcpySwap4(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[0];
|
||||
cdest[1] = csrc[1];
|
||||
cdest[2] = csrc[2];
|
||||
cdest[3] = csrc[3];
|
||||
}
|
||||
void CO_memcpySwap8(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[0];
|
||||
cdest[1] = csrc[1];
|
||||
cdest[2] = csrc[2];
|
||||
cdest[3] = csrc[3];
|
||||
cdest[4] = csrc[4];
|
||||
cdest[5] = csrc[5];
|
||||
cdest[6] = csrc[6];
|
||||
cdest[7] = csrc[7];
|
||||
}
|
||||
#endif
|
||||
#ifdef CO_BIG_ENDIAN
|
||||
void CO_memcpySwap2(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[1];
|
||||
cdest[1] = csrc[0];
|
||||
}
|
||||
void CO_memcpySwap4(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[3];
|
||||
cdest[1] = csrc[2];
|
||||
cdest[2] = csrc[1];
|
||||
cdest[3] = csrc[0];
|
||||
}
|
||||
void CO_memcpySwap8(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[7];
|
||||
cdest[1] = csrc[6];
|
||||
cdest[2] = csrc[5];
|
||||
cdest[3] = csrc[4];
|
||||
cdest[4] = csrc[3];
|
||||
cdest[5] = csrc[2];
|
||||
cdest[6] = csrc[1];
|
||||
cdest[7] = csrc[0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Read received message from CAN module.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
#ifndef CO_SDO_SERVER_H
|
||||
#define CO_SDO_SERVER_H
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
@ -779,46 +781,17 @@ typedef struct{
|
|||
}CO_SDO_t;
|
||||
|
||||
|
||||
/**
|
||||
* Helper union for manipulating data bytes.
|
||||
*/
|
||||
typedef union{
|
||||
uint8_t u8[8]; /**< 8 bytes */
|
||||
uint16_t u16[4]; /**< 4 words */
|
||||
uint32_t u32[2]; /**< 2 double words */
|
||||
}CO_bytes_t;
|
||||
|
||||
|
||||
/**
|
||||
* Helper function like memcpy.
|
||||
*
|
||||
* Function copies n data bytes from source to destination.
|
||||
*
|
||||
* @param dest Destination location.
|
||||
* @param src Source location.
|
||||
* @param size Number of data bytes to be copied (max 0xFFFF).
|
||||
*/
|
||||
void CO_memcpy(uint8_t dest[], const uint8_t src[], const uint16_t size);
|
||||
|
||||
/**
|
||||
* Helper function like memset.
|
||||
*
|
||||
* Function fills destination with char "c".
|
||||
*
|
||||
* @param dest Destination location.
|
||||
* @param c set value.
|
||||
* @param size Number of data bytes to be copied (max 0xFFFF).
|
||||
*/
|
||||
void CO_memset(uint8_t dest[], uint8_t c, const uint16_t size);
|
||||
|
||||
|
||||
/**
|
||||
* Helper function returns uint16 from byte array.
|
||||
*
|
||||
* @param data Location of source data.
|
||||
* @return Variable of type uint16_t.
|
||||
*/
|
||||
uint16_t CO_getUint16(const uint8_t data[]);
|
||||
static inline uint16_t CO_getUint16(const uint8_t data[]){
|
||||
uint16_t value;
|
||||
memcpy(&value, data, sizeof(value));
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -827,7 +800,11 @@ uint16_t CO_getUint16(const uint8_t data[]);
|
|||
* @param data Location of source data.
|
||||
* @return Variable of type uint32_t.
|
||||
*/
|
||||
uint32_t CO_getUint32(const uint8_t data[]);
|
||||
static inline uint32_t CO_getUint32(const uint8_t data[]){
|
||||
uint32_t value;
|
||||
memcpy(&value, data, sizeof(value));
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -836,7 +813,9 @@ uint32_t CO_getUint32(const uint8_t data[]);
|
|||
* @param data Location of destination data.
|
||||
* @param value Variable of type uint16_t to be written into data.
|
||||
*/
|
||||
void CO_setUint16(uint8_t data[], const uint16_t value);
|
||||
static inline void CO_setUint16(uint8_t data[], const uint16_t value){
|
||||
memcpy(data, &value, sizeof(value));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -845,7 +824,9 @@ void CO_setUint16(uint8_t data[], const uint16_t value);
|
|||
* @param data Location of destination data.
|
||||
* @param value Variable of type uint32_t to be written into data.
|
||||
*/
|
||||
void CO_setUint32(uint8_t data[], const uint32_t value);
|
||||
static inline void CO_setUint32(uint8_t data[], const uint32_t value){
|
||||
memcpy(data, &value, sizeof(value));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -855,7 +836,19 @@ void CO_setUint32(uint8_t data[], const uint32_t value);
|
|||
* @param dest Destination location.
|
||||
* @param src Source location.
|
||||
*/
|
||||
void CO_memcpySwap2(void* dest, const void* src);
|
||||
#ifdef CO_LITTLE_ENDIAN
|
||||
#define CO_memcpySwap2(dest, src) memcpy(dest, src, 2)
|
||||
#endif
|
||||
#ifdef CO_BIG_ENDIAN
|
||||
static inline void CO_memcpySwap2(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[1];
|
||||
cdest[1] = csrc[0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -865,7 +858,21 @@ void CO_memcpySwap2(void* dest, const void* src);
|
|||
* @param dest Destination location.
|
||||
* @param src Source location.
|
||||
*/
|
||||
void CO_memcpySwap4(void* dest, const void* src);
|
||||
#ifdef CO_LITTLE_ENDIAN
|
||||
#define CO_memcpySwap4(dest, src) memcpy(dest, src, 4)
|
||||
#endif
|
||||
#ifdef CO_BIG_ENDIAN
|
||||
static inline void CO_memcpySwap4(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[3];
|
||||
cdest[1] = csrc[2];
|
||||
cdest[2] = csrc[1];
|
||||
cdest[3] = csrc[0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -875,7 +882,25 @@ void CO_memcpySwap4(void* dest, const void* src);
|
|||
* @param dest Destination location.
|
||||
* @param src Source location.
|
||||
*/
|
||||
void CO_memcpySwap8(void* dest, const void* src);
|
||||
#ifdef CO_LITTLE_ENDIAN
|
||||
#define CO_memcpySwap8(dest, src) memcpy(dest, src, 8)
|
||||
#endif
|
||||
#ifdef CO_BIG_ENDIAN
|
||||
static inline void CO_memcpySwap8(void* dest, const void* src){
|
||||
char *cdest;
|
||||
char *csrc;
|
||||
cdest = (char *) dest;
|
||||
csrc = (char *) src;
|
||||
cdest[0] = csrc[7];
|
||||
cdest[1] = csrc[6];
|
||||
cdest[2] = csrc[5];
|
||||
cdest[3] = csrc[4];
|
||||
cdest[4] = csrc[3];
|
||||
cdest[5] = csrc[2];
|
||||
cdest[6] = csrc[1];
|
||||
cdest[7] = csrc[0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "301/CO_driver.h"
|
||||
#include "301/CO_SDOserver.h"
|
||||
#include "301/CO_Emergency.h"
|
||||
|
|
@ -47,7 +49,7 @@ static void CO_TIME_receive(void *object, void *msg){
|
|||
|
||||
if((operState == CO_NMT_OPERATIONAL) || (operState == CO_NMT_PRE_OPERATIONAL)){
|
||||
// Process Time from msg buffer
|
||||
CO_memcpy((uint8_t*)&TIME->Time.ullValue, data, DLC);
|
||||
memcpy(&TIME->Time.ullValue, data, DLC);
|
||||
CO_FLAG_SET(TIME->CANrxNew);
|
||||
}
|
||||
else{
|
||||
|
|
@ -156,7 +158,7 @@ uint8_t CO_TIME_process(
|
|||
if(TIME->timer >= TIME->periodTime){
|
||||
TIME->timer = 0;
|
||||
ret = 1;
|
||||
CO_memcpy(TIME->TXbuff->data, (const uint8_t*)&TIME->Time.ullValue, TIME_MSG_LENGTH);
|
||||
memcpy(TIME->TXbuff->data, &TIME->Time.ullValue, TIME_MSG_LENGTH);
|
||||
CO_CANsend(TIME->CANdevTx, TIME->TXbuff);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "301/CO_driver.h"
|
||||
#include "301/CO_SDOserver.h" /* for helper functions */
|
||||
#include "305/CO_LSSmaster.h"
|
||||
|
|
@ -151,7 +153,7 @@ CO_ReturnError_t CO_LSSmaster_init(
|
|||
LSSmaster->command = CO_LSSmaster_COMMAND_WAITING;
|
||||
LSSmaster->timeoutTimer = 0;
|
||||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
CO_memset(LSSmaster->CANrxData, 0, sizeof(LSSmaster->CANrxData));
|
||||
memset(LSSmaster->CANrxData, 0, sizeof(LSSmaster->CANrxData));
|
||||
#if (CO_CONFIG_LSS_MST) & CO_CONFIG_FLAG_CALLBACK_PRE
|
||||
LSSmaster->pFunctSignal = NULL;
|
||||
LSSmaster->functSignalObject = NULL;
|
||||
|
|
@ -227,7 +229,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_switchStateSelectInitiate(
|
|||
LSSmaster->timeoutTimer = 0;
|
||||
|
||||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
CO_memset(&LSSmaster->TXbuff->data[6], 0, 3);
|
||||
memset(&LSSmaster->TXbuff->data[6], 0, sizeof(LSSmaster->TXbuff->data) - 6);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_VENDOR;
|
||||
CO_setUint32(&LSSmaster->TXbuff->data[1], lssAddress->identity.vendorID);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
|
@ -250,7 +252,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_switchStateSelectInitiate(
|
|||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_GLOBAL;
|
||||
LSSmaster->TXbuff->data[1] = CO_LSS_STATE_CONFIGURATION;
|
||||
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
/* This is non-confirmed service! */
|
||||
|
|
@ -343,7 +345,7 @@ CO_LSSmaster_return_t CO_LSSmaster_switchStateDeselect(
|
|||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_GLOBAL;
|
||||
LSSmaster->TXbuff->data[1] = CO_LSS_STATE_WAITING;
|
||||
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
/* This is non-confirmed service! */
|
||||
|
|
@ -447,7 +449,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureBitTiming(
|
|||
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_BIT_TIMING;
|
||||
LSSmaster->TXbuff->data[1] = 0;
|
||||
LSSmaster->TXbuff->data[2] = bitTiming;
|
||||
CO_memset(&LSSmaster->TXbuff->data[3], 0, 5);
|
||||
memset(&LSSmaster->TXbuff->data[3], 0, sizeof(LSSmaster->TXbuff->data) - 3);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
ret = CO_LSSmaster_WAIT_SLAVE;
|
||||
|
|
@ -492,7 +494,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureNodeId(
|
|||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_NODE_ID;
|
||||
LSSmaster->TXbuff->data[1] = nodeId;
|
||||
CO_memset(&LSSmaster->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
ret = CO_LSSmaster_WAIT_SLAVE;
|
||||
|
|
@ -532,7 +534,7 @@ CO_LSSmaster_return_t CO_LSSmaster_configureStore(
|
|||
|
||||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_STORE;
|
||||
CO_memset(&LSSmaster->TXbuff->data[1], 0, 7);
|
||||
memset(&LSSmaster->TXbuff->data[1], 0, sizeof(LSSmaster->TXbuff->data) - 1);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
ret = CO_LSSmaster_WAIT_SLAVE;
|
||||
|
|
@ -571,7 +573,7 @@ CO_LSSmaster_return_t CO_LSSmaster_ActivateBit(
|
|||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = CO_LSS_CFG_ACTIVATE_BIT_TIMING;
|
||||
CO_setUint16(&LSSmaster->TXbuff->data[1], switchDelay_ms);
|
||||
CO_memset(&LSSmaster->TXbuff->data[3], 0, 5);
|
||||
memset(&LSSmaster->TXbuff->data[3], 0, sizeof(LSSmaster->TXbuff->data) - 3);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
/* This is non-confirmed service! */
|
||||
|
|
@ -590,7 +592,7 @@ static CO_LSSmaster_return_t CO_LSSmaster_inquireInitiate(
|
|||
{
|
||||
CO_FLAG_CLEAR(LSSmaster->CANrxNew);
|
||||
LSSmaster->TXbuff->data[0] = cs;
|
||||
CO_memset(&LSSmaster->TXbuff->data[1], 0, 7);
|
||||
memset(&LSSmaster->TXbuff->data[1], 0, sizeof(LSSmaster->TXbuff->data) - 1);
|
||||
CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
|
||||
|
||||
return CO_LSSmaster_WAIT_SLAVE;
|
||||
|
|
@ -1051,7 +1053,7 @@ CO_LSSmaster_return_t CO_LSSmaster_IdentifyFastscan(
|
|||
case CO_LSSmaster_FS_STATE_CHECK:
|
||||
ret = CO_LSSmaster_FsCheckWait(LSSmaster, timeDifference_us);
|
||||
if (ret == CO_LSSmaster_SCAN_FINISHED) {
|
||||
CO_memset((uint8_t*)&fastscan->found, 0, sizeof(fastscan->found));
|
||||
memset(&fastscan->found, 0, sizeof(fastscan->found));
|
||||
|
||||
/* start scanning procedure by triggering vendor ID scan */
|
||||
CO_LSSmaster_FsScanInitiate(LSSmaster, timeDifference_us,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "301/CO_driver.h"
|
||||
#include "301/CO_SDOserver.h" /* for helper functions */
|
||||
#include "305/CO_LSSslave.h"
|
||||
|
|
@ -42,7 +44,7 @@ static void CO_LSSslave_serviceSwitchStateGlobal(
|
|||
switch (mode) {
|
||||
case CO_LSS_STATE_WAITING:
|
||||
LSSslave->lssState = CO_LSS_STATE_WAITING;
|
||||
CO_memset((uint8_t*)&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
|
||||
memset(&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
|
||||
break;
|
||||
case CO_LSS_STATE_CONFIGURATION:
|
||||
LSSslave->lssState = CO_LSS_STATE_CONFIGURATION;
|
||||
|
|
@ -86,7 +88,7 @@ static void CO_LSSslave_serviceSwitchStateSelective(
|
|||
|
||||
/* send confirmation */
|
||||
LSSslave->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL;
|
||||
CO_memset(&LSSslave->TXbuff->data[1], 0, 7);
|
||||
memset(&LSSslave->TXbuff->data[1], 0, sizeof(LSSslave->TXbuff->data) - 1);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
}
|
||||
break;
|
||||
|
|
@ -134,7 +136,7 @@ static void CO_LSSslave_serviceConfig(
|
|||
LSSslave->TXbuff->data[0] = CO_LSS_CFG_NODE_ID;
|
||||
LSSslave->TXbuff->data[1] = errorCode;
|
||||
/* we do not use spec-error, always 0 */
|
||||
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
break;
|
||||
case CO_LSS_CFG_BIT_TIMING:
|
||||
|
|
@ -168,7 +170,7 @@ static void CO_LSSslave_serviceConfig(
|
|||
LSSslave->TXbuff->data[0] = CO_LSS_CFG_BIT_TIMING;
|
||||
LSSslave->TXbuff->data[1] = errorCode;
|
||||
/* we do not use spec-error, always 0 */
|
||||
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
break;
|
||||
case CO_LSS_CFG_ACTIVATE_BIT_TIMING:
|
||||
|
|
@ -206,7 +208,7 @@ static void CO_LSSslave_serviceConfig(
|
|||
LSSslave->TXbuff->data[0] = CO_LSS_CFG_STORE;
|
||||
LSSslave->TXbuff->data[1] = errorCode;
|
||||
/* we do not use spec-error, always 0 */
|
||||
CO_memset(&LSSslave->TXbuff->data[2], 0, 6);
|
||||
memset(&LSSslave->TXbuff->data[2], 0, sizeof(LSSslave->TXbuff->data) - 2);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -250,7 +252,7 @@ static void CO_LSSslave_serviceInquire(
|
|||
/* send response */
|
||||
LSSslave->TXbuff->data[0] = service;
|
||||
CO_memcpySwap4(&LSSslave->TXbuff->data[1], &value);
|
||||
CO_memset(&LSSslave->TXbuff->data[5], 0, 4);
|
||||
memset(&LSSslave->TXbuff->data[5], 0, sizeof(LSSslave->TXbuff->data) - 5);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
}
|
||||
|
||||
|
|
@ -300,8 +302,7 @@ static void CO_LSSslave_serviceIdent(
|
|||
/* Confirm, Reset */
|
||||
ack = true;
|
||||
LSSslave->fastscanPos = CO_LSS_FASTSCAN_VENDOR_ID;
|
||||
CO_memset((uint8_t*)&LSSslave->lssFastscan, 0,
|
||||
sizeof(LSSslave->lssFastscan));
|
||||
memset(&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
|
||||
}
|
||||
else if (LSSslave->fastscanPos == lssSub) {
|
||||
uint32_t mask = 0xFFFFFFFF << bitCheck;
|
||||
|
|
@ -319,7 +320,7 @@ static void CO_LSSslave_serviceIdent(
|
|||
}
|
||||
if (ack) {
|
||||
LSSslave->TXbuff->data[0] = CO_LSS_IDENT_SLAVE;
|
||||
CO_memset(&LSSslave->TXbuff->data[1], 0, 7);
|
||||
memset(&LSSslave->TXbuff->data[1], 0, sizeof(LSSslave->TXbuff->data) - 1);
|
||||
CO_CANsend(LSSslave->CANdevTx, LSSslave->TXbuff);
|
||||
}
|
||||
}
|
||||
|
|
@ -392,11 +393,11 @@ CO_ReturnError_t CO_LSSslave_init(
|
|||
return CO_ERROR_ILLEGAL_ARGUMENT;
|
||||
}
|
||||
|
||||
CO_memcpy((uint8_t*)&LSSslave->lssAddress, (uint8_t*)&lssAddress, sizeof(LSSslave->lssAddress));
|
||||
memcpy(&LSSslave->lssAddress, &lssAddress, sizeof(LSSslave->lssAddress));
|
||||
LSSslave->lssState = CO_LSS_STATE_WAITING;
|
||||
CO_memset((uint8_t*)&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
|
||||
memset(&LSSslave->lssSelect, 0, sizeof(LSSslave->lssSelect));
|
||||
|
||||
CO_memset((uint8_t*)&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
|
||||
memset(&LSSslave->lssFastscan, 0, sizeof(LSSslave->lssFastscan));
|
||||
LSSslave->fastscanPos = CO_LSS_FASTSCAN_VENDOR_ID;
|
||||
|
||||
LSSslave->pendingBitRate = pendingBitRate;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "301/CO_driver.h"
|
||||
#include "301/CO_SDOserver.h"
|
||||
#include "301/CO_Emergency.h"
|
||||
|
|
@ -49,7 +51,7 @@ static CO_SDO_abortCode_t CO_ODF_1010(CO_ODF_arg_t *ODF_arg){
|
|||
|
||||
if(!ODF_arg->reading){
|
||||
/* don't change the old value */
|
||||
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
|
||||
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
|
||||
|
||||
if(ODF_arg->subIndex == 1U){
|
||||
if(value == 0x65766173UL){
|
||||
|
|
@ -86,7 +88,7 @@ static CO_SDO_abortCode_t CO_ODF_1011(CO_ODF_arg_t *ODF_arg){
|
|||
|
||||
if(!ODF_arg->reading){
|
||||
/* don't change the old value */
|
||||
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
|
||||
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
|
||||
|
||||
if(ODF_arg->subIndex >= 1U){
|
||||
if(value == 0x64616F6CUL){
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ CO_SDO_abortCode_t CO_ODF_1010(CO_ODF_arg_t *ODF_arg) {
|
|||
|
||||
if(!ODF_arg->reading) {
|
||||
/* don't change the old value */
|
||||
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
|
||||
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
|
||||
|
||||
if(ODF_arg->subIndex == 1) {
|
||||
/* store parameters */
|
||||
|
|
@ -79,7 +79,7 @@ CO_SDO_abortCode_t CO_ODF_1011(CO_ODF_arg_t *ODF_arg) {
|
|||
|
||||
if(!ODF_arg->reading) {
|
||||
/* don't change the old value */
|
||||
CO_memcpy(ODF_arg->data, (const uint8_t*)ODF_arg->ODdataStorage, 4U);
|
||||
memcpy(ODF_arg->data, ODF_arg->ODdataStorage, 4);
|
||||
|
||||
if(ODF_arg->subIndex >= 1) {
|
||||
/* restore default parameters */
|
||||
|
|
|
|||
Loading…
Reference in a new issue