EtherNet/IP™ Adapter3.09.00
 
Loading...
Searching...
No Matches

◆ EI_API_CIP_setInstanceAttrFunc()

uint32_t EI_API_CIP_setInstanceAttrFunc ( T *  pCipNode_p,
uint16_t  classId_p,
uint16_t  instanceId_p,
EI_API_CIP_SAttr_t pAttr_p 
)

Register a callback function to a specific CIP attribute.

This function can be used to register a callback function to a CIP attribute. The callback will be executed if the registers access rule (get or set) are triggered.

Remarks
You have to register the callback for every attribute you are interested.
Parameters
[in]pCipNode_pPointer to the CIP node.
[in]classId_pClass identifier.
[in]instanceId_pInstance identifier.
[in]pAttr_pPointer to struct of attribute parameters.
Returns
EI_API_CIP_EError_t as uint32_t value.
Return values
EI_API_CIP_eERR_OKSuccess.
EI_API_CIP_eERR_NODE_INVALIDCIP node is invalid, possibly EI_API_CIP_NODE_new() was not called.
EI_API_CIP_eERR_CLASS_DOES_NOT_EXISTClass does not exists in CIP node dictionary.
EI_API_CIP_eERR_INSTANCE_DOES_NOT_EXISTInstance does not exist in CIP node dictionary.
EI_API_CIP_eERR_ATTRIBUTE_DOES_NOT_EXISTAttribute does not exist in class or instance.
EI_API_CIP_eERR_ATTRIBUTE_INVALID_CALLBACKCallback can not be registered (invalid function pointer).
EI_API_CIP_eERR_ATTRIBUTE_UNKNOWN_STATEUnknown state during attribute operation reached.
Example
uint32_t cbCountUpUsint(EI_API_CIP_NODE_T* pCipNode, uint16_t classId, uint16_t instanceId, uint16_t attrId, uint16_t* len, void* pvValue)
{
uint32_t retVal = EI_API_eERR_CB_INVALID_VALUE;
// Elementary data type USINT
ei_api_cip_edt_usint attrUsintValue;
uint32_t errCode;
// Get current attribute value into attrUsintValue
errCode = EI_API_CIP_getAttr_usint(pCipNode, classId, instanceId, attrId, &attrUsintValue);
if(EI_API_CIP_eERR_OK == errCode)
{
// Increment value
++attrUsintValue;
// set the value back into the attribute
errCode = EI_API_CIP_setAttr_usint(pCipNode, classId, instanceId, attrId, attrUsintValue);
if(EI_API_CIP_eERR_OK == errCode)
{
// prepare the return values for the callback
*(ei_api_cip_edt_usint *)pvValue = attrUsintValue;
*len = sizeof(ei_api_cip_edt_usint);
}
}
return retVal;
}
uint32_t registerCallback(EI_API_CIP_NODE_T *pCipNode_p)
{
uint32_t errCode;
uint16_t classId = 0x0064;
uint16_t instanceId = 0x0066;
// Initialize structure to zero/null
EI_API_CIP_SAttr_t attr = { 0 };
EI_API_CIP_CBGetAttr ptr_cb = cbCountUpUsint;
attr.id = 0x68;
attr.get_callback = ptr_cb;
attr.set_callback = NULL;
errCode = EI_API_CIP_setInstanceAttrFunc(pCipNode_p, classId, instanceId, &attr);
return(errCode);
}
ETHIP_API uint32_t EI_API_CIP_getAttr_usint(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint16_t attrId_p, ei_api_cip_edt_usint *pValue_p)
Get attribute of type USINT.
Definition EI_API_CIP_stub.c:2079
ETHIP_API uint32_t EI_API_CIP_setAttr_usint(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint16_t attrId_p, ei_api_cip_edt_usint value_p)
Set attribute of type USINT.
Definition EI_API_CIP_stub.c:3412
uint32_t(* EI_API_CIP_CBGetAttr)(EI_API_CIP_NODE_T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint16_t attrId_p, uint16_t *len_p, void *pvValue_p)
Function prototype for CIP get attribute callback function.
Definition EI_API_def.h:410
@ EI_API_CIP_eAR_GET
Attribute is gettable.
Definition EI_API_def.h:123
@ EI_API_eERR_CB_NO_ERROR
Definition EI_API_def.h:147
@ EI_API_eERR_CB_INVALID_VALUE
Definition EI_API_def.h:150
@ EI_API_CIP_eERR_OK
Definition EI_API_CIP_define.h:26
ETHIP_API uint32_t EI_API_CIP_setInstanceAttrFunc(T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, EI_API_CIP_SAttr_t *pAttr_p)
Register a callback function to a specific CIP attribute.
Definition EI_API_CIP_stub.c:1273
EI_API_CIP_CBSetAttr set_callback
Definition EI_API_CIP_define.h:195
EI_API_CIP_EAr_t accessRule
Definition EI_API_CIP_define.h:188
uint16_t id
Definition EI_API_CIP_define.h:185
EI_API_CIP_CBGetAttr get_callback
Definition EI_API_CIP_define.h:193
General attribute parameter collection.
Definition EI_API_CIP_define.h:184
See also
EI_API_CIP_CBGetAttr EI_API_CIP_addInstanceAttr EI_API_CIP_getInstanceAttr EI_API_CIP_setInstanceAttr EI_API_CIP_SAttr EI_API_CIP_EError_t