void ClientReportControlBlock_setResvTms(ClientReportControlBlock self, int16_t resvTms) { if (self->resvTms == NULL) self->resvTms = MmsValue_newIntegerFromInt16(resvTms); else MmsValue_setInt32(self->resvTms, (int32_t) resvTms); }
void ControlObject_sendLastApplError(ControlObject* self, MmsServerConnection connection, char* ctlVariable, int error, ControlAddCause addCause, MmsValue* ctlNum, MmsValue* origin, bool handlerMode) { MmsValue lastApplErrorMemory; MmsValue* lastApplError = &lastApplErrorMemory; lastApplError->type = MMS_STRUCTURE; lastApplError->value.structure.size = 5; MmsValue* componentContainer[5]; lastApplError->value.structure.components =componentContainer; char ctlObj[130]; StringUtils_createStringInBuffer(ctlObj, 3, self->ctlObjectName, "$", ctlVariable); if (DEBUG_IED_SERVER) { printf("IED_SERVER: sendLastApplError:\n"); printf("IED_SERVER: control object: %s\n", ctlObj); printf("IED_SERVER: ctlNum: %u\n", MmsValue_toUint32(ctlNum)); } MmsValue ctlObjValueMemory; MmsValue* ctlObjValue = &ctlObjValueMemory; ctlObjValue->type = MMS_VISIBLE_STRING; ctlObjValue->value.visibleString.buf = ctlObj; ctlObjValue->value.visibleString.size = sizeof(ctlObj); MmsValue_setElement(lastApplError, 0, ctlObjValue); MmsValue_setInt32(self->error, error); MmsValue_setInt32(self->addCause, addCause); MmsValue_setElement(lastApplError, 1, self->error); MmsValue_setElement(lastApplError, 2, origin); MmsValue_setElement(lastApplError, 3, ctlNum); MmsValue_setElement(lastApplError, 4, self->addCause); MmsServerConnection_sendInformationReportSingleVariableVMDSpecific(connection, "LastApplError", lastApplError, handlerMode); }
void IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute, int32_t value) { assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_INTEGER); assert(dataAttribute != NULL); assert(self != NULL); int32_t currentValue = MmsValue_toInt32(dataAttribute->mmsValue); if (currentValue == value) { checkForUpdateTrigger(self, dataAttribute); } else { MmsValue_setInt32(dataAttribute->mmsValue, value); checkForChangedTriggers(self, dataAttribute); } }
void IedConnection_writeInt32Value(IedConnection self, IedClientError* error, char* objectReference, FunctionalConstraint fc, int32_t value) { uint8_t valueBuffer[4]; Asn1PrimitiveValue pVal; pVal.maxSize = 4; pVal.size = 4; pVal.octets = valueBuffer; MmsValue mmsValue; mmsValue.type = MMS_INTEGER; mmsValue.deleteValue = 0; mmsValue.value.integer = &pVal; MmsValue_setInt32(&mmsValue, value); IedConnection_writeObject(self, error, objectReference, fc, &mmsValue); }
void ControlObject_sendCommandTerminationNegative(ControlObject* self) { /* create LastApplError */ MmsValue lastApplErrorMemory; MmsValue* lastApplError = &lastApplErrorMemory; lastApplError->type = MMS_STRUCTURE; lastApplError->value.structure.size = 5; MmsValue* componentContainer[5]; lastApplError->value.structure.components = componentContainer; char ctlObj[130]; StringUtils_createStringInBuffer(ctlObj, 2, self->ctlObjectName, "$Oper"); MmsValue ctlObjValueMemory; MmsValue* ctlObjValue = &ctlObjValueMemory; ctlObjValue->type = MMS_VISIBLE_STRING; ctlObjValue->value.visibleString.buf = ctlObj; ctlObjValue->value.visibleString.size = sizeof(ctlObj); MmsValue_setElement(lastApplError, 0, ctlObjValue); MmsValue_setInt32(self->error, CONTROL_ERROR_UNKOWN); MmsValue_setInt32(self->addCause, ADD_CAUSE_UNKNOWN); MmsValue_setElement(lastApplError, 1, self->error); MmsValue_setElement(lastApplError, 2, self->origin); MmsValue_setElement(lastApplError, 3, self->ctlNum); MmsValue_setElement(lastApplError, 4, self->addCause); MmsVariableAccessSpecification lastApplErrorVarSpec; lastApplErrorVarSpec.itemId = "LastApplError"; lastApplErrorVarSpec.domainId = NULL; /* create oper variable */ char itemId[130]; StringUtils_createStringInBuffer(itemId, 4, self->lnName, "$CO$", self->name, "$Oper"); char* domainId = MmsDomain_getName(self->mmsDomain); MmsVariableAccessSpecification operVarSpec; operVarSpec.itemId = itemId; operVarSpec.domainId = domainId; /* create response */ if (DEBUG_IED_SERVER) printf("IED_SERVER: send CommandTermination-: %s\n", itemId); LinkedList varSpecList = LinkedList_create(); LinkedList values = LinkedList_create(); LinkedList_add(varSpecList, &lastApplErrorVarSpec); LinkedList_add(varSpecList, &operVarSpec); LinkedList_add(values, lastApplError); LinkedList_add(values, self->oper); MmsServerConnection_sendInformationReportListOfVariables(self->mmsConnection, varSpecList, values, false); LinkedList_destroyStatic(varSpecList); LinkedList_destroyStatic(values); } /* ControlObject_sendCommandTerminationNegative() */