EtherNet/IP™ Adapter  1.04.06
User Reference Manual

◆ 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
void cbCountUpUsint(EI_API_CIP_NODE_T *pCipNode_p, uint16_t classId_p, uint16_t instanceId_p, uint16_t attrId_p, EI_API_CIP_EAr_t accessRule_p)
{
// Elementary data type USINT
EI_API_CIP_eEDT_USINT attrUsintValue;
uint32_t errCode;
// Get current attribute value into attrUsintValue
errCode = EI_API_CIP_getAttr_usint(pCipNode_p, classId_p, instanceId_p, attrId_p, &attrUsintValue);
// Increment value
attrUsintValue++;
errCode = EI_API_CIP_setAttr_usint(pCipNode_p, classId_p, instanceId_p, attrId_p, attrUsintValue);
}
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);
}
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
EI_API_CIP_setClassAttrFunc
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_main.c:667
EI_API_CIP_SAttr::set_callback
EI_API_CIP_CBSetAttr set_callback
Definition: EI_API_CIP.h:202
EI_API_CIP_SAttr
General attribute parameter collection.
Definition: EI_API_CIP.h:192
EI_API_CIP_eEDT_USINT
@ EI_API_CIP_eEDT_USINT
Definition: EI_API_CIP.h:127
EI_API_CIP_getAttr_usint
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_main.c:2923
EI_API_CIP_CBGetAttr
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:301
EI_API_CIP_SAttr::accessRule
EI_API_CIP_EAr_t accessRule
Definition: EI_API_CIP.h:196
EI_API_CIP_SAttr::get_callback
EI_API_CIP_CBGetAttr get_callback
Definition: EI_API_CIP.h:201
EI_API_CIP_SAttr::id
uint16_t id
Definition: EI_API_CIP.h:193
EI_API_CIP_EAr_t
enum EI_API_CIP_EAr EI_API_CIP_EAr_t
These are the available attribute access rules.
EI_API_CIP_setAttr_usint
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_main.c:4331
EI_API_CIP_eAR_GET
@ EI_API_CIP_eAR_GET
Attribute is gettable.
Definition: EI_API_def.h:130