| #ifndef OPEN62541_MT_COMMON |
| #define OPEN62541_MT_COMMON |
| |
| #include "mt_testing.h" |
| |
| UA_NodeId pumpTypeId = {1, UA_NODEIDTYPE_NUMERIC, {1001}}; |
| |
| static void |
| defineObjectTypes(void) { |
| UA_NodeId deviceTypeId; |
| UA_ObjectTypeAttributes dtAttr = UA_ObjectTypeAttributes_default; |
| dtAttr.displayName = UA_LOCALIZEDTEXT("en-US", "DeviceType"); |
| UA_Server_addObjectTypeNode(tc.server, UA_NODEID_NULL, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE), |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE), |
| UA_QUALIFIEDNAME(1, "DeviceType"), dtAttr, |
| NULL, &deviceTypeId); |
| |
| UA_VariableAttributes mnAttr = UA_VariableAttributes_default; |
| mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ManufacturerName"); |
| UA_NodeId manufacturerNameId; |
| UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, deviceTypeId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), |
| UA_QUALIFIEDNAME(1, "ManufacturerName"), |
| UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), mnAttr, NULL, &manufacturerNameId); |
| |
| UA_Server_addReference(tc.server, manufacturerNameId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE), |
| UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true); |
| |
| |
| UA_VariableAttributes modelAttr = UA_VariableAttributes_default; |
| modelAttr.displayName = UA_LOCALIZEDTEXT("en-US", "ModelName"); |
| UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, deviceTypeId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), |
| UA_QUALIFIEDNAME(1, "ModelName"), |
| UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), modelAttr, NULL, NULL); |
| |
| UA_ObjectTypeAttributes ptAttr = UA_ObjectTypeAttributes_default; |
| ptAttr.displayName = UA_LOCALIZEDTEXT("en-US", "PumpType"); |
| UA_Server_addObjectTypeNode(tc.server, pumpTypeId, |
| deviceTypeId, UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE), |
| UA_QUALIFIEDNAME(1, "PumpType"), ptAttr, |
| NULL, NULL); |
| |
| UA_VariableAttributes statusAttr = UA_VariableAttributes_default; |
| statusAttr.displayName = UA_LOCALIZEDTEXT("en-US", "Status"); |
| statusAttr.valueRank = UA_VALUERANK_SCALAR; |
| UA_NodeId statusId; |
| UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, pumpTypeId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), |
| UA_QUALIFIEDNAME(1, "Status"), |
| UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), statusAttr, NULL, &statusId); |
| |
| UA_Server_addReference(tc.server, statusId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE), |
| UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), true); |
| |
| UA_VariableAttributes rpmAttr = UA_VariableAttributes_default; |
| rpmAttr.displayName = UA_LOCALIZEDTEXT("en-US", "MotorRPM"); |
| rpmAttr.valueRank = UA_VALUERANK_SCALAR; |
| UA_Server_addVariableNode(tc.server, UA_NODEID_NULL, pumpTypeId, |
| UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), |
| UA_QUALIFIEDNAME(1, "MotorRPMs"), |
| UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), rpmAttr, NULL, NULL); |
| } |
| |
| static UA_StatusCode |
| pumpTypeConstructor(UA_Server *servertmp, |
| const UA_NodeId *sessionId, void *sessionContext, |
| const UA_NodeId *typeId, void *typeContext, |
| const UA_NodeId *nodeId, void **nodeContext) { |
| UA_RelativePathElement rpe; |
| UA_RelativePathElement_init(&rpe); |
| rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT); |
| rpe.isInverse = false; |
| rpe.includeSubtypes = false; |
| rpe.targetName = UA_QUALIFIEDNAME(1, "Status"); |
| |
| UA_BrowsePath bp; |
| UA_BrowsePath_init(&bp); |
| bp.startingNode = *nodeId; |
| bp.relativePath.elementsSize = 1; |
| bp.relativePath.elements = &rpe; |
| |
| UA_BrowsePathResult bpr = |
| UA_Server_translateBrowsePathToNodeIds(tc.server, &bp); |
| if(bpr.statusCode != UA_STATUSCODE_GOOD || |
| bpr.targetsSize < 1) |
| return bpr.statusCode; |
| |
| /* Set the status value */ |
| UA_Boolean status = true; |
| UA_Variant value; |
| UA_Variant_setScalar(&value, &status, &UA_TYPES[UA_TYPES_BOOLEAN]); |
| UA_Server_writeValue(tc.server, bpr.targets[0].targetId.nodeId, value); |
| UA_BrowsePathResult_clear(&bpr); |
| |
| return UA_STATUSCODE_GOOD; |
| } |
| |
| static void |
| addPumpTypeConstructor(UA_Server *servertmp) { |
| UA_NodeTypeLifecycle lifecycle; |
| lifecycle.constructor = pumpTypeConstructor; |
| lifecycle.destructor = NULL; |
| UA_Server_setNodeTypeLifecycle(tc.server, pumpTypeId, lifecycle); |
| } |
| |
| #endif //OPEN62541_MT_COMMON |