1
0
Fork 0

convert missing uint16_t CAN ids to CO_CANident_t

This commit is contained in:
rgruening 2025-04-24 13:35:44 +02:00
parent 5e4f7b8742
commit c7c100e111
10 changed files with 97 additions and 35 deletions

View file

@ -28,6 +28,15 @@
#error CO_CONFIG_HB_CONS_CALLBACK_CHANGE and CO_CONFIG_HB_CONS_CALLBACK_MULTI cannot be set simultaneously!
#endif
#if ((CO_CONFIG_HB_CONS)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/*
* Read received message from CAN module.
*
@ -181,7 +190,7 @@ CO_HBconsumer_initEntry(CO_HBconsumer_t* HBcons, uint8_t idx, uint8_t nodeId, ui
/* Configure one monitored node */
if (ret == CO_ERROR_NO) {
uint16_t COB_ID;
CO_CANident_t COB_ID;
CO_HBconsNode_t* monitoredNode = &HBcons->monitoredNodes[idx];
monitoredNode->nodeId = nodeId;
@ -195,7 +204,7 @@ CO_HBconsumer_initEntry(CO_HBconsumer_t* HBcons, uint8_t idx, uint8_t nodeId, ui
/* is channel used */
if ((monitoredNode->nodeId != 0U) && (monitoredNode->time_us != 0U)) {
COB_ID = monitoredNode->nodeId + (uint16_t)CO_CAN_ID_HEARTBEAT;
COB_ID = (CO_CANident_t)(monitoredNode->nodeId + CO_CAN_ID_HEARTBEAT);
monitoredNode->HBstate = CO_HBconsumer_UNKNOWN;
} else {
COB_ID = 0;
@ -204,7 +213,7 @@ CO_HBconsumer_initEntry(CO_HBconsumer_t* HBcons, uint8_t idx, uint8_t nodeId, ui
}
/* configure Heartbeat consumer (or disable) CAN reception */
ret = CO_CANrxBufferInit(HBcons->CANdevRx, HBcons->CANdevRxIdxStart + idx, COB_ID, CO_COB_STD_MASK, false,
ret = CO_CANrxBufferInit(HBcons->CANdevRx, HBcons->CANdevRxIdxStart + idx, COB_ID, CO_COB_ID_MASK, false,
(void*)&HBcons->monitoredNodes[idx], CO_HBcons_receive);
}
return ret;

View file

@ -20,6 +20,15 @@
#include "301/CO_NMT_Heartbeat.h"
#if ((CO_CONFIG_NMT)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/*
* Read received message from CAN module.
*
@ -126,7 +135,7 @@ CO_NMT_init(CO_NMT_t* NMT, OD_entry_t* OD_1017_ProducerHbTime, CO_EM_t* em, uint
}
/* configure NMT CAN reception */
ret = CO_CANrxBufferInit(NMT_CANdevRx, NMT_rxIdx & CO_COB_STD_MASK, CANidRxNMT, CO_COB_STD_MASK, false, (void*)NMT, CO_NMT_receive);
ret = CO_CANrxBufferInit(NMT_CANdevRx, NMT_rxIdx, CANidRxNMT, CO_COB_ID_MASK, false, (void*)NMT, CO_NMT_receive);
if (ret != CO_ERROR_NO) {
return ret;
}

View file

@ -22,6 +22,15 @@
#if ((CO_CONFIG_NODE_GUARDING)&CO_CONFIG_NODE_GUARDING_SLAVE_ENABLE) != 0
#if ((CO_CONFIG_NODE_GUARDING)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/*
* Read received message from CAN module.
*
@ -155,7 +164,8 @@ CO_nodeGuardingSlave_init(CO_nodeGuardingSlave_t* ngs, OD_entry_t* OD_100C_Guard
}
/* configure CAN reception */
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidNodeGuarding & CO_COB_STD_MASK, CO_COB_STD_MASK, true, (void*)ngs, CO_ngs_receive);
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidNodeGuarding, CO_COB_ID_MASK, true, (void*)ngs,
CO_ngs_receive);
if (ret != CO_ERROR_NO) {
return ret;
}
@ -282,7 +292,8 @@ CO_nodeGuardingMaster_init(CO_nodeGuardingMaster_t* ngm, CO_EM_t* em, CO_CANmodu
ngm->em = em;
/* configure CAN reception. One buffer will receive all messages from CAN-id 0x700 to 0x7FF. */
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CO_CAN_ID_HEARTBEAT, CO_COB_STD_MASK ^ 0x7FU, false, (void*)ngm, CO_ngm_receive);
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CO_CAN_ID_HEARTBEAT, CO_COB_ID_MASK ^ 0x7FU, false, (void*)ngm,
CO_ngm_receive);
if (ret != CO_ERROR_NO) {
return ret;
}

View file

@ -292,7 +292,7 @@ CO_SDOserver_init(CO_SDOserver_t* SDO, OD_t* OD, OD_entry_t* OD_1200_SDOsrvPar,
#endif
/* configure CAN identifiers and SDO server parameters if available */
uint16_t CanId_ClientToServer, CanId_ServerToClient;
CO_CANident_t CanId_ClientToServer, CanId_ServerToClient;
if (OD_1200_SDOsrvPar == NULL) {
/* configure default SDO channel */
@ -300,8 +300,8 @@ CO_SDOserver_init(CO_SDOserver_t* SDO, OD_t* OD, OD_entry_t* OD_1200_SDOsrvPar,
return CO_ERROR_ILLEGAL_ARGUMENT;
}
CanId_ClientToServer = CO_CAN_ID_SDO_CLI + nodeId;
CanId_ServerToClient = CO_CAN_ID_SDO_SRV + nodeId;
CanId_ClientToServer = (CO_CANident_t)(CO_CAN_ID_SDO_CLI + nodeId);
CanId_ServerToClient = (CO_CANident_t)(CO_CAN_ID_SDO_SRV + nodeId);
SDO->valid = true;
} else {
uint16_t OD_SDOsrvParIdx = OD_getIndex(OD_1200_SDOsrvPar);
@ -312,8 +312,8 @@ CO_SDOserver_init(CO_SDOserver_t* SDO, OD_t* OD, OD_entry_t* OD_1200_SDOsrvPar,
return CO_ERROR_ILLEGAL_ARGUMENT;
}
CanId_ClientToServer = CO_CAN_ID_SDO_CLI + nodeId;
CanId_ServerToClient = CO_CAN_ID_SDO_SRV + nodeId;
CanId_ClientToServer = (CO_CANident_t)(CO_CAN_ID_SDO_CLI + nodeId);
CanId_ServerToClient = (CO_CANident_t)(CO_CAN_ID_SDO_SRV + nodeId);
SDO->valid = true;
(void)OD_set_u32(OD_1200_SDOsrvPar, 1, CanId_ClientToServer, true);

View file

@ -23,6 +23,14 @@
#if ((CO_CONFIG_GFC)&CO_CONFIG_GFC_ENABLE) != 0
#if ((CO_CONFIG_GFC)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/*
* Custom function for reading or writing OD object.
*
@ -107,7 +115,7 @@ CO_GFC_init(CO_GFC_t* GFC, OD_entry_t* OD_1300_gfcParameter, CO_CANmodule_t* GFC
#if ((CO_CONFIG_GFC)&CO_CONFIG_GFC_CONSUMER) != 0
GFC->functSignalObjectSafe = NULL;
GFC->pFunctSignalSafe = NULL;
const CO_ReturnError_t r = CO_CANrxBufferInit(GFC_CANdevRx, GFC_rxIdx, CANidRxGFC & CO_COB_STD_MASK, CO_COB_STD_MASK, false,
const CO_ReturnError_t r = CO_CANrxBufferInit(GFC_CANdevRx, GFC_rxIdx, CANidRxGFC, CO_COB_ID_MASK, false,
(void*)GFC, CO_GFC_receive);
if (r != CO_ERROR_NO) {
return r;

View file

@ -35,6 +35,15 @@
#warning CO_CONFORMANCE_TEST_TOOL_ADAPTATION may be used only for conformance testing (because of CTT limitations)
#endif
#if ((CO_CONFIG_SRDO)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/* values for informationDirection and configurationValid */
#define CO_SRDO_INVALID (0U)
#define CO_SRDO_TX (1U)
@ -165,7 +174,7 @@ OD_read_SRDO_communicationParam(OD_stream_t* stream, void* buf, OD_size_t count,
CO_SRDO_t* SRDO = stream->object;
uint32_t value = CO_getUint32(buf);
uint16_t defaultCOB_ID = SRDO->defaultCOB_ID + ((uint16_t)(stream->subIndex) - 5U);
CO_CANident_t defaultCOB_ID = (CO_CANident_t)(SRDO->defaultCOB_ID + (stream->subIndex - 5U));
/* If default COB ID is used, then OD entry does not contain $NodeId. Add it here. */
if ((value == defaultCOB_ID) && (SRDO->nodeId <= 64U)) {
@ -225,7 +234,7 @@ OD_write_SRDO_communicationParam(OD_stream_t* stream, const void* buf, OD_size_t
} else if ((stream->subIndex == 5U) || (stream->subIndex == 6U)) { /* COB_ID */
uint32_t value = CO_getUint32(buf);
uint16_t index = (uint16_t)(stream->subIndex) - 5U;
uint16_t defaultCOB_ID = SRDO->defaultCOB_ID + index;
CO_CANident_t defaultCOB_ID = (CO_CANident_t)(SRDO->defaultCOB_ID + index);
/* check value range, the spec does not specify if COB-ID flags are allowed */
if ((value < 0x101U) || (value > 0x180U) || ((value & 1U) == index)) {
@ -601,7 +610,7 @@ CO_SRDO_config(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, u
/* Configure CAN tx buffers */
if ((err == 0U) && configurationInProgress && (informationDirection == CO_SRDO_TX)) {
/* Normal Configuration */
SRDO->CANtxBuff[0] = CO_CANtxBufferInit(SRDO->CANdevTx[0], SRDO->CANdevTxIdx[0], (uint16_t)COB_ID1_normal,
SRDO->CANtxBuff[0] = CO_CANtxBufferInit(SRDO->CANdevTx[0], SRDO->CANdevTxIdx[0], (CO_CANident_t)COB_ID1_normal,
false, SRDO->dataLength, false);
if (SRDO->CANtxBuff[0] == NULL) {
@ -609,8 +618,8 @@ CO_SRDO_config(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, u
}
/* Inverted Configuration */
SRDO->CANtxBuff[1] = CO_CANtxBufferInit(SRDO->CANdevTx[1], SRDO->CANdevTxIdx[1], (uint16_t)COB_ID2_inverted,
false, SRDO->dataLength, false);
SRDO->CANtxBuff[1] = CO_CANtxBufferInit(SRDO->CANdevTx[1], SRDO->CANdevTxIdx[1],
(CO_CANident_t)COB_ID2_inverted, false, SRDO->dataLength, false);
if (SRDO->CANtxBuff[1] == NULL) {
err = ERR_INFO(0x1301UL + SRDO_Index, 6, 10);
@ -620,18 +629,16 @@ CO_SRDO_config(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, u
/* Configure CAN rx buffers */
if ((err == 0U) && configurationInProgress && (informationDirection == CO_SRDO_RX)) {
/* Normal Configuration */
ret = CO_CANrxBufferInit(SRDO->CANdevRx[0], SRDO->CANdevRxIdx[0],
(CO_CANident_t)(COB_ID1_normal & CO_COB_STD_MASK), CO_COB_STD_MASK, false, (void*)SRDO,
CO_SRDO_receive_normal);
ret = CO_CANrxBufferInit(SRDO->CANdevRx[0], SRDO->CANdevRxIdx[0], (CO_CANident_t)COB_ID1_normal, CO_COB_ID_MASK,
false, (void*)SRDO, CO_SRDO_receive_normal);
if (ret != CO_ERROR_NO) {
err = ERR_INFO(0x1301UL + SRDO_Index, 5, 11);
}
/* Inverted Configuration */
ret = CO_CANrxBufferInit(SRDO->CANdevRx[1], SRDO->CANdevRxIdx[1],
(CO_CANident_t)(COB_ID2_inverted & CO_COB_STD_MASK), CO_COB_STD_MASK, false,
(void*)SRDO, CO_SRDO_receive_inverted);
ret = CO_CANrxBufferInit(SRDO->CANdevRx[1], SRDO->CANdevRxIdx[1], (CO_CANident_t)COB_ID2_inverted,
CO_COB_ID_MASK, false, (void*)SRDO, CO_SRDO_receive_inverted);
if (ret != CO_ERROR_NO) {
err = ERR_INFO(0x1301UL + SRDO_Index, 6, 11);
@ -659,7 +666,7 @@ CO_SRDO_config(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, u
CO_ReturnError_t
CO_SRDO_init(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, OD_t* OD, CO_EM_t* em, uint8_t nodeId,
uint16_t defaultCOB_ID, OD_entry_t* OD_130x_SRDOCommPar, OD_entry_t* OD_138x_SRDOMapPar,
CO_CANident_t defaultCOB_ID, OD_entry_t* OD_130x_SRDOCommPar, OD_entry_t* OD_138x_SRDOMapPar,
CO_CANmodule_t* CANdevRxNormal, CO_CANmodule_t* CANdevRxInverted, uint16_t CANdevRxIdxNormal,
uint16_t CANdevRxIdxInverted, CO_CANmodule_t* CANdevTxNormal, CO_CANmodule_t* CANdevTxInverted,
uint16_t CANdevTxIdxNormal, uint16_t CANdevTxIdxInverted, uint32_t* errInfo) {

View file

@ -134,7 +134,7 @@ typedef struct {
CO_SRDOGuard_t* SRDOGuard; /**< From CO_SRDO_init() */
OD_t* OD; /**< From CO_SRDO_init() */
CO_EM_t* em; /**< From CO_SRDO_init() */
uint16_t defaultCOB_ID; /**< From CO_SRDO_init() */
CO_CANident_t defaultCOB_ID; /**< From CO_SRDO_init() */
uint8_t nodeId; /**< From CO_SRDO_init() */
CO_CANmodule_t* CANdevTx[2]; /**< From CO_SRDO_init() */
uint16_t CANdevTxIdx[2]; /**< From CO_SRDO_init() */
@ -215,7 +215,7 @@ CO_ReturnError_t CO_SRDOGuard_init(CO_SRDOGuard_t* SRDOGuard, OD_entry_t* OD_13F
* @return #CO_ReturnError_t: CO_ERROR_NO, CO_ERROR_ILLEGAL_ARGUMENT or CO_ERROR_OD_PARAMETERS.
*/
CO_ReturnError_t CO_SRDO_init(CO_SRDO_t* SRDO, uint8_t SRDO_Index, CO_SRDOGuard_t* SRDOGuard, OD_t* OD, CO_EM_t* em,
uint8_t nodeId, uint16_t defaultCOB_ID, OD_entry_t* OD_130x_SRDOCommPar,
uint8_t nodeId, CO_CANident_t defaultCOB_ID, OD_entry_t* OD_130x_SRDOCommPar,
OD_entry_t* OD_138x_SRDOMapPar, CO_CANmodule_t* CANdevRxNormal,
CO_CANmodule_t* CANdevRxInverted, uint16_t CANdevRxIdxNormal,
uint16_t CANdevRxIdxInverted, CO_CANmodule_t* CANdevTxNormal,

View file

@ -25,6 +25,15 @@
#if ((CO_CONFIG_LSS)&CO_CONFIG_LSS_MASTER) != 0
#if ((CO_CONFIG_LSS)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/*
* @defgroup CO_LSSmaster_state_t
* @{
@ -136,8 +145,8 @@ CO_LSSmaster_init(CO_LSSmaster_t* LSSmaster, uint16_t timeout_ms, CO_CANmodule_t
#endif
/* configure LSS CAN Slave response message reception */
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidLssSlave & CO_COB_STD_MASK, CO_COB_STD_MASK, false,
(void*)LSSmaster, CO_LSSmaster_receive);
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidLssSlave, CO_COB_ID_MASK, false, (void*)LSSmaster,
CO_LSSmaster_receive);
/* configure LSS CAN Master message transmission */
LSSmaster->CANdevTx = CANdevTx;

View file

@ -26,6 +26,15 @@
#if ((CO_CONFIG_LSS)&CO_CONFIG_LSS_SLAVE) != 0
#if ((CO_CONFIG_LSS)&CO_CONFIG_FLAG_ALLOW_EXT_ID) != 0
#if (((CO_CONFIG_CAN)&CO_CONFIG_FLAG_ALLOW_EXT_ID) == 0)
#error CO_CONFIG_CAN must have CO_CONFIG_FLAG_ALLOW_EXT_ID enabled
#endif
#define CO_COB_ID_MASK CO_COB_EXT_MASK
#else
#define CO_COB_ID_MASK CO_COB_STD_MASK
#endif
/* 'bit' must be unsigned or additional range check must be added: bit>=CO_LSS_FASTSCAN_BIT0 */
#define CO_LSS_FASTSCAN_BITCHECK_VALID(bit) ((bit <= CO_LSS_FASTSCAN_BIT31) || (bit == CO_LSS_FASTSCAN_CONFIRM))
/* 'index' must be unsigned or additional range check must be added: index>=CO_LSS_FASTSCAN_VENDOR_ID */
@ -206,7 +215,7 @@ CO_LSSslave_init(CO_LSSslave_t* LSSslave, CO_LSS_address_t* lssAddress, uint16_t
CO_FLAG_CLEAR(LSSslave->sendResponse);
/* configure LSS CAN Master message reception */
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidLssMaster & CO_COB_STD_MASK, CO_COB_STD_MASK, false, (void*)LSSslave, CO_LSSslave_receive);
ret = CO_CANrxBufferInit(CANdevRx, CANdevRxIdx, CANidLssMaster, CO_COB_ID_MASK, false, (void*)LSSslave, CO_LSSslave_receive);
/* configure LSS CAN Slave response message transmission */
LSSslave->CANdevTx = CANdevTx;

View file

@ -1198,14 +1198,14 @@ CO_CANopenInitPDO(CO_t* co, CO_EM_t* em, OD_t* od, uint8_t nodeId, uint32_t* err
OD_entry_t* RPDOmap = OD_GET(H1600, OD_H1600_RXPDO_1_MAPPING);
for (uint16_t i = 0; i < CO_GET_CNT(RPDO); i++) {
CO_ReturnError_t err;
uint16_t preDefinedCanId = 0;
CO_CANident_t preDefinedCanId = 0;
if (i < CO_RPDO_DEFAULT_CANID_COUNT) {
#if CO_RPDO_DEFAULT_CANID_COUNT <= 4
preDefinedCanId = (uint16_t)((CO_CAN_ID_RPDO_1 + (i * 0x100U)) + nodeId);
preDefinedCanId = (CO_CANident_t)((CO_CAN_ID_RPDO_1 + (i * 0x100U)) + nodeId);
#else
uint16_t pdoOffset = i % 4;
uint16_t nodeIdOffset = i / 4;
preDefinedCanId = (CO_CAN_ID_RPDO_1 + pdoOffset * 0x100) + nodeId + nodeIdOffset;
preDefinedCanId = (CO_CANident_t)((CO_CAN_ID_RPDO_1 + pdoOffset * 0x100) + nodeId + nodeIdOffset);
#endif
}
err = CO_RPDO_init(&co->RPDO[i], od, em,
@ -1228,14 +1228,14 @@ CO_CANopenInitPDO(CO_t* co, CO_EM_t* em, OD_t* od, uint8_t nodeId, uint32_t* err
OD_entry_t* TPDOmap = OD_GET(H1A00, OD_H1A00_TXPDO_1_MAPPING);
for (uint16_t i = 0; i < CO_GET_CNT(TPDO); i++) {
CO_ReturnError_t err;
uint16_t preDefinedCanId = 0;
CO_CANident_t preDefinedCanId = 0;
if (i < CO_TPDO_DEFAULT_CANID_COUNT) {
#if CO_TPDO_DEFAULT_CANID_COUNT <= 4
preDefinedCanId = (uint16_t)((CO_CAN_ID_TPDO_1 + (i * 0x100U)) + nodeId);
preDefinedCanId = (CO_CANident_t)((CO_CAN_ID_TPDO_1 + (i * 0x100U)) + nodeId);
#else
uint16_t pdoOffset = i % 4;
uint16_t nodeIdOffset = i / 4;
preDefinedCanId = (CO_CAN_ID_TPDO_1 + pdoOffset * 0x100) + nodeId + nodeIdOffset;
preDefinedCanId = (CO_CANident_t)((CO_CAN_ID_TPDO_1 + pdoOffset * 0x100) + nodeId + nodeIdOffset);
#endif
}
err = CO_TPDO_init(&co->TPDO[i], od, em,