CiA402 Application implementation.
CiA402 Application implementation.
Copyright (c) 2024 KUNBUS GmbH.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <ecSlvApi.h>
#include <defines/ecSlvApiDef.h>
#include "ecSlvCiA402.h"
#include "ESL_cia402Obd.h"
#include "ESL_cia402Demo.h"
#include "project.h"
#include <ESL_os.h>
#include <ESL_BOARD_config.h>
#include <ESL_vendor.h>
#include <ESL_gpioHelper.h>
#include <ESL_foeDemo.h>
#include <ESL_soeDemo.h>
#include <ESL_eeprom.h>
#include <ESL_version.h>
#include <ecSlvApi.h>
#if !(defined MBXMEM)
#define MBXMEM
#endif
#define I2C_IOEXP_ADDR 0x60
#define RXPDOMAP_INDEX (0x1600u)
#define TXPDOMAP_INDEX (0x1A00u)
#define COE_SM_ERROR_MAX_COUNT (0xFFFFu)
#define AXIS_ONE 0
#define AXIS_TWO 1
#define AXIS_THREE 2
#if !(defined BIT2BYTE)
#define BIT2BYTE(x) (((x)+7) >> 3)
#endif
static void EC_SLV_APP_CIA_applicationRun(void* appCtxt);
#if (defined GPIO_TEST_PINS) && (1==GPIO_TEST_PINS)
#if (defined GPIO_TEST_PROFILE_SEL) && (defined GPIO_TEST_PROFILE_2) && (GPIO_TEST_PROFILE_2 == GPIO_TEST_PROFILE_SEL)
static void EC_SLV_APP_measurement(void* pMsrmtCtxt_p, uint32_t measureChannel_p, bool channelOn_p);
#endif
#endif
{
if (!pApplicationInstance_p)
{
goto Exit;
}
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setRevisionNumber(ptSlave, EC_REVISION);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setProductCode (ptSlave, ECAT_PRODUCTCODE_CIA402);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setProductName (ptSlave, ECAT_PRODUCTNAME_CIA402);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setGroupType (ptSlave,
"EtherCAT Toolkit");
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = ESL_setSWVersion(ptSlave);
{
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setPDOSize(ptSlave, EC_MAX_PD_LEN, EC_MAX_PD_LEN);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setPDICfg(ptSlave, ESC_EE_PDI_CONTROL, ESC_EE_PDI_CONFIG);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_BOOTSTRAP_MBXOUT_START, EC_BOOTSTRAP_MBXOUT_DEF_LENGTH,
EC_BOOTSTRAP_MBXIN_START, EC_BOOTSTRAP_MBXIN_DEF_LENGTH);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_MBXOUT_START, EC_MBXOUT_DEF_LENGTH,
EC_MBXIN_START, EC_MBXIN_DEF_LENGTH);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
0, EC_MBXOUT_START, EC_MBXOUT_DEF_LENGTH,
EC_MBXOUT_CONTROLREG, EC_MBXOUT_ENABLE);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
1, EC_MBXIN_START, EC_MBXIN_DEF_LENGTH,
EC_MBXIN_CONTROLREG, EC_MBXIN_ENABLE);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
2, EC_OUTPUT_START, EC_OUTPUT_DEF_LENGTH,
EC_OUTPUT_CONTROLREG, EC_OUTPUT_ENABLE);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
3, EC_INPUT_START, EC_INPUT_DEF_LENGTH,
EC_INPUT_CONTROLREG, EC_INPUT_ENABLE);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_setSyncManErrLimit(ptSlave, COE_SM_ERROR_MAX_COUNT);
{
OSAL_printf("%s:%d Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
Exit:
return error;
}
{
if (!pApplicationInstance_p)
{
goto Exit;
}
EC_API_SLV_CiA402_setAxisNumber (ptSlave, AXES_NUMBER);
{
OSAL_printf("%s:%d CiA402 Object Dictionary error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
Exit:
return error;
}
{
uint16_t rxIndex = RXPDOMAP_INDEX + axis_p;
uint32_t curOffset = 0;
uint32_t offset = 0;
uint8_t subIndex = 0;
if (!pApplicationInstance_p)
{
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_create(ptSlave,
"RxPDO", rxIndex, &pPdo_p);
{
OSAL_printf("%s:%d Create PDO 0x%04x error code: 0x%08x\r\n", __func__, __LINE__, rxIndex, error);
goto Exit;
}
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 001", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 002", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 003", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 004", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 005", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
Exit:
return error;
}
{
uint16_t txIndex = TXPDOMAP_INDEX + axis_p;
uint32_t curOffset = 0;
uint32_t offset = 0;
uint8_t subIndex = 0;
if (!pApplicationInstance_p)
{
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_create(ptSlave,
"TxPDO", txIndex, &pPdo_p);
{
OSAL_printf("Create PDO for axis %d error code: 0x%08x\r\n", axis_p);
goto Exit;
}
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 001", pObjEntry);
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 002", pObjEntry);
{
OSAL_printf("PDO 0x1A00 Entry 2 Error code: 0x%08x\r\n", error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 003", pObjEntry);
{
OSAL_printf("PDO 0x1A00 Entry 2 Error code: 0x%08x\r\n", error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 004", pObjEntry);
{
OSAL_printf("PDO 0x1A00 Entry 2 Error code: 0x%08x\r\n", error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
subIndex++;
{
OSAL_printf("%s:%d Variable Error code: 0x%08x\r\n", __func__, __LINE__, error);
goto Exit;
}
error = (
EC_API_EError_t)EC_API_SLV_PDO_createEntry(ptSlave, pPdo_p,
"SubIndex 005", pObjEntry);
{
OSAL_printf("PDO 0x1A00 Entry 2 Error code: 0x%08x\r\n", error);
goto Exit;
}
EC_API_SLV_PDO_getEntryDataLength(ptSlave, pPdo_p, subIndex, &offset);
curOffset += BIT2BYTE(offset);
Exit:
return error;
}
#if (defined GPIO_TEST_PINS) && (1==GPIO_TEST_PINS)
#if (defined GPIO_TEST_PROFILE_SEL) && (defined GPIO_TEST_PROFILE_2) && (GPIO_TEST_PROFILE_2 == GPIO_TEST_PROFILE_SEL)
void EC_SLV_APP_measurement(void* pMsrmtCtxt_p, uint32_t measureChannel_p, bool channelOn_p)
{
if(NULL != pApplicationInstance)
{
volatile CSL_GpioBank_registersRegs * pGpioRegBank = NULL;
uint32_t pinMask = 0;
switch (measureChannel_p)
{
case 0: pGpioRegBank = ESL_TESTPIN_STATE_REG_BANK; pinMask = ESL_TESTPIN_0_MASK; break;
case 1: pGpioRegBank = ESL_TESTPIN_STATE_REG_BANK; pinMask = ESL_TESTPIN_1_MASK; break;
case 2: pGpioRegBank = ESL_TESTPIN_STATE_REG_BANK; pinMask = ESL_TESTPIN_2_MASK; break;
default:
break;
}
if (channelOn_p)
{
ESL_GPIO_testPins_set(pGpioRegBank, pinMask);
}
else
{
ESL_GPIO_testPins_clear(pGpioRegBank, pinMask);
}
}
}
#endif
#endif
#if !(defined DPRAM_REMOTE) && !(defined FBTL_REMOTE)
static OSAL_FUNC_UNUSED void EC_SLV_APP_CIA_boardPhyReset(void* pCtxt_p, uint8_t phyIdx_p, bool reset_p)
{
}
#endif
static void EC_SLV_APP_CIA_appBoardStatusLed(void* pCallContext_p, bool runLed_p, bool errLed_p)
{
if (NULL == pApplicationInstance)
{
goto Exit;
}
Exit:
return;
}
{
if (!pApplicationInstance)
{
goto Exit;
}
EC_API_SLV_cbRegisterBoardStatusLed(pApplicationInstance->
ptEcSlvApi
,EC_SLV_APP_CIA_appBoardStatusLed
,pApplicationInstance);
Exit:
return error;
}
{
if (!pAppInstance_p)
{
goto Exit;
}
#if !(defined DPRAM_REMOTE) && !(defined FBTL_REMOTE)
ESL_OS_manualMdioConfig(pAppInstance_p->
ptEcSlvApi);
#else
OSALUNREF_PARM(pAppInstance_p);
#endif
#if !(defined DPRAM_REMOTE) && !(defined FBTL_REMOTE)
#endif
Exit:
return;
}
{
if (!pAppInstance_p)
{
goto Exit;
}
#if !(defined DPRAM_REMOTE) && !(defined FBTL_REMOTE)
EC_API_SLV_cbRegisterPhyReset(pAppInstance_p->
ptEcSlvApi, EC_SLV_APP_CIA_boardPhyReset, pAppInstance_p);
#endif
Exit:
return;
}
{
if (!pAppInstance_p)
{
goto Exit;
}
{
OSAL_error(__func__, __LINE__, OSAL_CONTAINER_NOMEMORY, true, 0);
goto Exit;
}
error = EC_SLV_APP_CIA_populateBoardFunctions(pAppInstance_p);
{
OSAL_printf("Populate board functions Error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_CIA_populateSlaveInfo(pAppInstance_p);
{
OSAL_printf("Create Slave Info Error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateCiA402Functions(pAppInstance_p);
{
OSAL_printf("Create slave information error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateRxPDO(pAppInstance_p, pAppInstance_p->
ptRxPdo1600, AXIS_ONE);
{
OSAL_printf("Create RxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateRxPDO(pAppInstance_p, pAppInstance_p->
ptRxPdo1601, AXIS_TWO);
{
OSAL_printf("Create RxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateRxPDO(pAppInstance_p, pAppInstance_p->
ptRxPdo1602, AXIS_THREE);
{
OSAL_printf("Create RxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateTxPDO(pAppInstance_p, pAppInstance_p->
ptTxPdo1A00, AXIS_ONE);
{
OSAL_printf("Create TxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateTxPDO(pAppInstance_p, pAppInstance_p->
ptTxPdo1A01, AXIS_TWO);
{
OSAL_printf("Create TxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
error = EC_SLV_APP_populateTxPDO(pAppInstance_p, pAppInstance_p->
ptTxPdo1A02, AXIS_THREE);
{
OSAL_printf("Create TxPDO error code: 0x%08x\r\n", error);
goto Exit;
}
#if !(defined DPRAM_REMOTE) && !(defined FBTL_REMOTE)
EC_API_SLV_EEPROM_cbRegisterInit(
EC_SLV_APP_EEP_init,
EC_API_SLV_EEPROM_cbRegisterWrite(
EC_SLV_APP_EEP_write, EEPROM_MAGIC_KEY);
EC_API_SLV_EEPROM_cbRegisterRead(
EC_SLV_APP_EEP_read, EEPROM_MAGIC_KEY);
EC_API_SLV_cbRegisterUserApplicationRun (pAppInstance_p->
ptEcSlvApi, EC_SLV_APP_CIA_applicationRun, pAppInstance_p);
#endif
#if (defined GPIO_TEST_PINS) && (1==GPIO_TEST_PINS)
#if (defined GPIO_TEST_PROFILE_SEL) && (defined GPIO_TEST_PROFILE_2) && (GPIO_TEST_PROFILE_2 == GPIO_TEST_PROFILE_SEL)
EC_API_SLV_cbRegisterMeasurement(pAppInstance_p->
ptEcSlvApi, EC_SLV_APP_measurement, pAppInstance_p);
#endif
#endif
{
OSAL_printf("Slave Init Error Code: 0x%08x\r\n", error);
goto Exit;
}
Exit:
return;
}
void EC_SLV_APP_CIA_applicationRun(void* appCtxt)
{
OSALUNREF_PARM(appCtxt);
#if (defined GPIO_TEST_PINS) && (1==GPIO_TEST_PINS)
#if (defined GPIO_TEST_PROFILE_SEL) && (defined GPIO_TEST_PROFILE_1) && (defined GPIO_TEST_PROFILE_2) && ((GPIO_TEST_PROFILE_1 == GPIO_TEST_PROFILE_SEL) || (GPIO_TEST_PROFILE_2 == GPIO_TEST_PROFILE_SEL))
static bool bToggle = false;
if (bToggle)
{
ESL_GPIO_testPins_set(ESL_TESTPIN_STATE_REG_BANK, ESL_TESTPIN_3_MASK);
}
else
{
ESL_GPIO_testPins_clear(ESL_TESTPIN_STATE_REG_BANK, ESL_TESTPIN_3_MASK);
}
bToggle = !bToggle;
#endif
#endif
}
uint16_t EC_SLV_APP_CIA_startInputHandler(void *ctxt, uint16_t *intMask)
Get cycle time information.
Definition ESL_cia402Demo.c:520
void EC_SLV_APP_cia402Application(void *ctxt)
CiA402 Application function.
Definition ESL_cia402Demo.c:983
void EC_SLV_APP_cia402LocalError(void *ctxt, uint16_t errorCode)
Local Error function handler.
Definition ESL_cia402Demo.c:1316
void EC_SLV_APP_CIA_applicationInit(EC_SLV_APP_CIA_Application_t *pAppInstance_p)
Initialize slave application example.
Definition ecSlvCiA402.c:958
void EC_SLV_APP_setObdValues(void *ctxt)
Set default values for CiA 402 object dictionary.
Definition ESL_cia402Demo.c:463
uint32_t EC_SLV_APP_cia402ObjectDictionary(void *pContext_p)
Generate CiA402 Objects.
Definition ESL_cia402Obd.c:84
@ EC_API_eERR_INVALID
Definition ecSlvApiDef_error.h:52
@ EC_API_eERR_NONE
Definition ecSlvApiDef_error.h:45
enum EC_API_EError EC_API_EError_t
@ EC_API_SLV_eDT_SERVO_DRIVE
The device supports CiA402 for a servo drive.
Definition ecSlvApi_types.h:85
@ EC_API_SLV_ePHY_IN
Phy index for IN Phy.
Definition ecSlvApi_types.h:120
@ EC_API_SLV_ePHY_OUT
Phy index for OUT Phy.
Definition ecSlvApi_types.h:121
Definition ecSlvApiInternal.h:130
Definition ecSlvApiInternal.h:329
Definition ecSlvApiInternal.h:173
uint16_t realPdoOutLen
Definition ecSlvCiA402.h:207
EC_API_SLV_Pdo_t * ptRxPdo1600
Definition ecSlvCiA402.h:195
EC_API_SLV_Pdo_t * ptRxPdo1601
Definition ecSlvCiA402.h:196
void * gpioHandle
Definition ecSlvCiA402.h:174
EC_API_SLV_Pdo_t * ptTxPdo1A01
Definition ecSlvCiA402.h:199
uint16_t realPdoInLen
Definition ecSlvCiA402.h:208
EC_API_SLV_Pdo_t * ptTxPdo1A02
Definition ecSlvCiA402.h:200
uint32_t selectedPruInstance
Definition ecSlvCiA402.h:159
EC_API_SLV_Pdo_t * ptTxPdo1A00
Definition ecSlvCiA402.h:198
EC_API_SLV_SHandle_t * ptEcSlvApi
Definition ecSlvCiA402.h:211
EC_API_SLV_Pdo_t * ptRxPdo1602
Definition ecSlvCiA402.h:197
EC_SLV_APP_sCIA_axisData_t CiA402_axisData[AXES_NUMBER]
Definition ecSlvCiA402.h:209
Definition ecSlvCiA402.h:158
EC_SLV_APP_sCIA_object_t statusWordIndex
Definition ecSlvCiA402.h:82
EC_SLV_APP_sCIA_object_t targetTorqueIndex
Definition ecSlvCiA402.h:104
EC_SLV_APP_sCIA_object_t targetVelocityIndex
Definition ecSlvCiA402.h:114
EC_SLV_APP_sCIA_object_t modesOfOperationDisplayIndex
Definition ecSlvCiA402.h:89
EC_SLV_APP_sCIA_object_t targetPositionIndex
Definition ecSlvCiA402.h:109
EC_SLV_APP_sCIA_object_t modesOfOperationIndex
Definition ecSlvCiA402.h:88
EC_SLV_APP_sCIA_object_t velocityActualValueIndex
Definition ecSlvCiA402.h:99
EC_SLV_APP_sCIA_object_t controlWordIndex
Definition ecSlvCiA402.h:81
EC_SLV_APP_sCIA_object_t torqueActualValueIndex
Definition ecSlvCiA402.h:107
EC_SLV_APP_sCIA_object_t positionActualValueIndex
Definition ecSlvCiA402.h:92
uint32_t pdoObjectOffset
Definition ecSlvCiA402.h:65
EC_API_SLV_Pdo_t * pdoObject
Definition ecSlvCiA402.h:64
uint16_t objectIndex
Definition ecSlvCiA402.h:61