EIP_STATUS CIP_Identity_Init() { S_CIP_Class *pClass; S_CIP_Instance *pInstance; pClass = createCIPClass(CIP_IDENTITY_CLASS_CODE, 0, /* # of non-default class attributes*/ MASK4(1, 2, 6, 7), /* class getAttributeAll mask CIP spec 5-2.3.2*/ 0, /* # of class services*/ 7, /* # of instance attributes*/ MASK7(1, 2, 3, 4, 5, 6, 7), /* instance getAttributeAll mask CIP spec 5-2.3.2*/ 1, /* # of instance services*/ 1, /* # of instances*/ "identity", /* class name (for debug)*/ 1); /* class revision*/ if (pClass == 0) return EIP_ERROR; pInstance = getCIPInstance(pClass, 1); insertAttribute(pInstance, 1, CIP_UINT, &VendorID, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 2, CIP_UINT, &DeviceType, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 3, CIP_UINT, &ProductCode, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 4, CIP_USINT_USINT, &Revison, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 5, CIP_WORD, &ID_Status, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 6, CIP_UDINT, &SerialNumber, CIP_ATTRIB_GETABLE); insertAttribute(pInstance, 7, CIP_SHORT_STRING, &ProductName, CIP_ATTRIB_GETABLE); insertService(pClass, CIP_RESET, &Reset, "Reset"); return EIP_OK; }
S_CIP_Class * createAssemblyClass() { S_CIP_Class * pstAssemblyClass; /* create the CIP Assembly object with zero instances */ pstAssemblyClass = createCIPClass(CIP_ASSEMBLY_CLASS_CODE, 0, /* # class attributes*/ 0, /* 0 as the assembly object should not have a get_attribute_all service*/ 0, /* # class services*/ 1, /* # instance attributes*/ 0, /* 0 as the assembly object should not have a get_attribute_all service*/ 1, /* # instance services*/ 0, /* # instances*/ "assembly", 2 /* Revision, according to the CIP spec currently this has to be 2 */ ); if(NULL != pstAssemblyClass) { insertService(pstAssemblyClass, CIP_SET_ATTRIBUTE_SINGLE, &setAssemblyAttributeSingle, "SetAssemblyAttributeSingle"); } return pstAssemblyClass; }