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

◆ EI_API_CIP_setClassAttrFunc()

uint32_t EI_API_CIP_setClassAttrFunc ( T *  pCipNode_p,
uint16_t  classId_p,
EI_API_CIP_SAttr_t pAttr_p 
)

Register a callback function to a specific CIP attribute.

This function may be used to register a callback function for a CIP class attribute. This callback will be executed every time the registered access rules (get or set) are triggered.

Remarks
Registration of a callback is required for each attribute you are interested.
Parameters
[in]pCipNode_pPointer to the CIP node.
[in]classId_pClass 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 exist in CIP node dictionary.
EI_API_CIP_eERR_ATTRIBUTE_INVALIDAttribute is invalid, possibly NULL pointer.
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 = 0x64;
// Initialize structure to zero/null
EI_API_CIP_SAttr_t attr = { 0 };
EI_API_CIP_CBGetAttr ptr_cb = cbCountUpUsint;
attr.id = 0x66;
attr.get_callback = ptr_cb;
attr.set_callback = NULL;
errCode = EI_API_CIP_setClassAttrFunc(pCipNode_p, classId, &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
ETHIP_API uint32_t EI_API_CIP_setClassAttrFunc(T *pCipNode_p, uint16_t classId_p, EI_API_CIP_SAttr_t *pAttr_p)
Register a callback function to a specific CIP attribute.
Definition EI_API_CIP_stub.c:539
@ 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
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_CBSetAttr EI_API_CIP_addClassAttr EI_API_CIP_getClassAttr EI_API_CIP_setClassAttr EI_API_CIP_SAttr EI_API_CIP_EError_t