Merge branch 'dergentk-newOD_fixes' into newOD
This commit is contained in:
commit
78d5f2569b
5 changed files with 17 additions and 7 deletions
|
|
@ -351,10 +351,10 @@ static void CO_EM_receive(void *object, void *msg) {
|
|||
|
||||
/******************************************************************************/
|
||||
CO_ReturnError_t CO_EM_init(CO_EM_t *em,
|
||||
CO_CANmodule_t *CANdevTx,
|
||||
const OD_entry_t *OD_1001_errReg,
|
||||
#if (CO_CONFIG_EM) & CO_CONFIG_EM_PRODUCER
|
||||
OD_entry_t *OD_1014_cobIdEm,
|
||||
CO_CANmodule_t *CANdevTx,
|
||||
uint16_t CANdevTxIdx,
|
||||
#if (CO_CONFIG_EM) & CO_CONFIG_EM_PROD_INHIBIT
|
||||
OD_entry_t *OD_1015_InhTime,
|
||||
|
|
@ -396,6 +396,9 @@ CO_ReturnError_t CO_EM_init(CO_EM_t *em,
|
|||
/* clear the object */
|
||||
memset(em, 0, sizeof(CO_EM_t));
|
||||
|
||||
/* set object variables */
|
||||
em->CANdevTx = CANdevTx;
|
||||
|
||||
/* get and verify "Error register" from Object Dictionary */
|
||||
em->errorRegister = OD_getPtr(OD_1001_errReg, 0, sizeof(uint8_t), NULL);
|
||||
if (em->errorRegister == NULL) {
|
||||
|
|
@ -451,7 +454,6 @@ CO_ReturnError_t CO_EM_init(CO_EM_t *em,
|
|||
|
||||
/* configure parameters and emergency message CAN transmission */
|
||||
em->nodeId = nodeId;
|
||||
em->CANdevTx = CANdevTx;
|
||||
|
||||
em->CANtxBuff = CO_CANtxBufferInit(
|
||||
CANdevTx, /* CAN device */
|
||||
|
|
|
|||
|
|
@ -373,6 +373,8 @@ typedef struct {
|
|||
uint8_t *errorRegister;
|
||||
/** Old CAN error status bitfield */
|
||||
uint16_t CANerrorStatusOld;
|
||||
/** From CO_EM_init() */
|
||||
CO_CANmodule_t *CANdevTx;
|
||||
|
||||
#if ((CO_CONFIG_EM) & (CO_CONFIG_EM_PRODUCER | CO_CONFIG_EM_HISTORY)) \
|
||||
|| defined CO_DOXYGEN
|
||||
|
|
@ -403,8 +405,6 @@ typedef struct {
|
|||
bool_t producerEnabled;
|
||||
/** Copy of CANopen node ID, from CO_EM_init() */
|
||||
uint8_t nodeId;
|
||||
/** From CO_EM_init() */
|
||||
CO_CANmodule_t *CANdevTx;
|
||||
/** CAN transmit buffer */
|
||||
CO_CANtx_t *CANtxBuff;
|
||||
/** Extension for OD object */
|
||||
|
|
@ -459,11 +459,11 @@ typedef struct {
|
|||
* Function must be called in the communication reset section.
|
||||
*
|
||||
* @param em This object will be initialized.
|
||||
* @param CANdevTx CAN device for Emergency transmission.
|
||||
* @param OD_1001_errReg OD entry for 0x1001 - "Error register", entry is
|
||||
* required, without IO extension.
|
||||
* @param OD_1014_cobIdEm OD entry for 0x1014 - "COB-ID EMCY", entry is
|
||||
* required, IO extension is required.
|
||||
* @param CANdevTx CAN device for Emergency transmission.
|
||||
* @param CANdevTxIdx Index of transmit buffer in the above CAN device.
|
||||
* @param OD_1015_InhTime OD entry for 0x1015 - "Inhibit time EMCY", entry is
|
||||
* optional (can be NULL), IO extension is optional for runtime configuration.
|
||||
|
|
@ -483,10 +483,10 @@ typedef struct {
|
|||
* @return @ref CO_ReturnError_t CO_ERROR_NO in case of success.
|
||||
*/
|
||||
CO_ReturnError_t CO_EM_init(CO_EM_t *em,
|
||||
CO_CANmodule_t *CANdevTx,
|
||||
const OD_entry_t *OD_1001_errReg,
|
||||
#if ((CO_CONFIG_EM) & CO_CONFIG_EM_PRODUCER) || defined CO_DOXYGEN
|
||||
OD_entry_t *OD_1014_cobIdEm,
|
||||
CO_CANmodule_t *CANdevTx,
|
||||
uint16_t CANdevTxIdx,
|
||||
#if ((CO_CONFIG_EM) & CO_CONFIG_EM_PROD_INHIBIT) || defined CO_DOXYGEN
|
||||
OD_entry_t *OD_1015_InhTime,
|
||||
|
|
|
|||
|
|
@ -333,7 +333,9 @@ CO_ReturnError_t CO_SDOserver_init(CO_SDOserver_t *SDO,
|
|||
/* Configure object variables */
|
||||
SDO->OD = OD;
|
||||
SDO->nodeId = nodeId;
|
||||
#if ((CO_CONFIG_SDO_SRV) & CO_CONFIG_SDO_SRV_SEGMENTED)
|
||||
SDO->SDOtimeoutTime_us = (uint32_t)SDOtimeoutTime_ms * 1000;
|
||||
#endif
|
||||
#if (CO_CONFIG_SDO_SRV) & CO_CONFIG_SDO_SRV_BLOCK
|
||||
SDO->block_SDOtimeoutTime_us = (uint32_t)SDOtimeoutTime_ms * 700;
|
||||
#endif
|
||||
|
|
@ -1137,7 +1139,9 @@ CO_SDO_return_t CO_SDOserver_process(CO_SDOserver_t *SDO,
|
|||
SDO->state = CO_SDO_ST_ABORT;
|
||||
}
|
||||
} /* switch (SDO->state) */
|
||||
#if (CO_CONFIG_SDO_SRV) & CO_CONFIG_SDO_SRV_SEGMENTED
|
||||
SDO->timeoutTimer = 0;
|
||||
#endif
|
||||
timeDifference_us = 0;
|
||||
CO_FLAG_CLEAR(SDO->CANrxNew);
|
||||
} /* if (isNew) */
|
||||
|
|
@ -1206,7 +1210,9 @@ CO_SDO_return_t CO_SDOserver_process(CO_SDOserver_t *SDO,
|
|||
SDO->CANtxBuff->data[3] = SDO->subIndex;
|
||||
|
||||
/* reset timeout timer and send message */
|
||||
#if (CO_CONFIG_SDO_SRV) & CO_CONFIG_SDO_SRV_SEGMENTED
|
||||
SDO->timeoutTimer = 0;
|
||||
#endif
|
||||
CO_CANsend(SDO->CANdevTx, SDO->CANtxBuff);
|
||||
#if (CO_CONFIG_SDO_SRV) & CO_CONFIG_SDO_SRV_SEGMENTED
|
||||
if (SDO->finished) {
|
||||
|
|
|
|||
|
|
@ -181,7 +181,9 @@ static inline void CO_TIME_set(CO_TIME_t *TIME,
|
|||
TIME->residual_us = 0;
|
||||
TIME->ms = ms;
|
||||
TIME->days = days;
|
||||
#if ((CO_CONFIG_TIME) & CO_CONFIG_TIME_PRODUCER)
|
||||
TIME->producerTimer_ms = TIME->producerInterval_ms =producerInterval_ms;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -960,10 +960,10 @@ CO_ReturnError_t CO_CANopenInit(CO_t *co,
|
|||
/* Emergency */
|
||||
if (CO_GET_CNT(EM) == 1) {
|
||||
err = CO_EM_init(co->em,
|
||||
co->CANmodule,
|
||||
OD_GET(H1001, OD_H1001_ERR_REG),
|
||||
#if (CO_CONFIG_EM) & CO_CONFIG_EM_PRODUCER
|
||||
OD_GET(H1014, OD_H1014_COBID_EMERGENCY),
|
||||
co->CANmodule,
|
||||
CO_GET_CO(TX_IDX_EM_PROD),
|
||||
#if (CO_CONFIG_EM) & CO_CONFIG_EM_PROD_INHIBIT
|
||||
OD_GET(H1015, OD_H1015_INHIBIT_TIME_EMCY),
|
||||
|
|
|
|||
Loading…
Reference in a new issue