// Set value of given attribute. int CGXDLMSMessageHandler::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { m_ListeningWindow.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for (std::vector<CGXDLMSVariant>::iterator it = e.GetValue().Arr.begin(); it != e.GetValue().Arr.end(); ++it) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(it->Arr[0], DLMS_DATA_TYPE_DATETIME, tmp); CGXDateTime start = tmp.dateTime; CGXDLMSClient::ChangeType(it->Arr[1], DLMS_DATA_TYPE_DATETIME, tmp); CGXDateTime end = tmp.dateTime; m_ListeningWindow.push_back(std::pair<CGXDateTime, CGXDateTime>(start, end)); } } } else if (e.GetIndex() == 3) { m_AllowedSenders.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for (std::vector<CGXDLMSVariant>::iterator it = e.GetValue().Arr.begin(); it != e.GetValue().Arr.end(); ++it) { std::string str; str.append(reinterpret_cast<char const*>(it->byteArr), it->size); m_AllowedSenders.push_back(str); } } } else if (e.GetIndex() == 4) { m_SendersAndActions.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for (std::vector<CGXDLMSVariant>::iterator it = e.GetValue().Arr.begin(); it != e.GetValue().Arr.end(); ++it) { //std::string id = it->Arr[0].byteArr.ToString(); //Object[] tmp2 = (Object[]) tmp[1]; /*TODO: KeyValuePair<int, GXDLMSScriptAction> executed_script = new KeyValuePair<int, GXDLMSScriptAction>(Convert.ToInt32(tmp2[1], tmp2[2])); m_SendersAndActions.Add(new KeyValuePair<std::string, KeyValuePair<int, GXDLMSScriptAction>>(id, tmp[1] as GXDateTime)); * */ } } } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSSpecialDaysTable::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { int ret; CGXDLMSVariant tmp; if ((ret = GetLogicalName(this, tmp)) != 0) { return ret; } e.SetValue(tmp); return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 2) { for (std::vector<CGXDLMSSpecialDay*>::iterator it = m_Entries.begin(); it != m_Entries.end(); ++it) { delete *it; } m_Entries.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { CGXDLMSVariant tmp; for (std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSSpecialDay *it = new CGXDLMSSpecialDay(); it->SetIndex((*item).Arr[0].ToInteger()); CGXDLMSClient::ChangeType((*item).Arr[1], DLMS_DATA_TYPE_DATE, tmp); it->SetDate(tmp.dateTime); it->SetDayId((*item).Arr[2].ToInteger()); m_Entries.push_back(it); } } } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSIecHdlcSetup::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { m_CommunicationSpeed = (DLMS_BAUD_RATE) e.GetValue().ToInteger(); } else if (e.GetIndex() == 3) { m_WindowSizeTransmit = e.GetValue().ToInteger(); } else if (e.GetIndex() == 4) { m_WindowSizeReceive = e.GetValue().ToInteger(); } else if (e.GetIndex() == 5) { m_MaximumInfoLengthTransmit = e.GetValue().ToInteger(); } else if (e.GetIndex() == 6) { m_MaximumInfoLengthReceive = e.GetValue().ToInteger(); } else if (e.GetIndex() == 7) { m_InterCharachterTimeout = e.GetValue().ToInteger(); } else if (e.GetIndex() == 8) { m_InactivityTimeout = e.GetValue().ToInteger(); } else if (e.GetIndex() == 9) { m_DeviceAddress = e.GetValue().ToInteger(); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSDisconnectControl::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { m_OutputState = e.GetValue().boolVal; } else if (e.GetIndex() == 3) { m_ControlState = (DLMS_CONTROL_STATE) e.GetValue().ToInteger(); } else if (e.GetIndex() == 4) { m_ControlMode = (DLMS_CONTROL_MODE) e.GetValue().ToInteger(); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSAutoConnect::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { SetMode((AUTO_CONNECT_MODE) e.GetValue().ToInteger()); return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 3) { SetRepetitions(e.GetValue().lVal); return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 4) { SetRepetitionDelay(e.GetValue().lVal); return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 5) { m_CallingWindow.clear(); for (std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(item->Arr[0], DLMS_DATA_TYPE_DATETIME, tmp); CGXDateTime start = tmp.dateTime; CGXDLMSClient::ChangeType(item->Arr[1], DLMS_DATA_TYPE_DATETIME, tmp); CGXDateTime end = tmp.dateTime; m_CallingWindow.push_back(std::make_pair(start, end)); } return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 6) { m_Destinations.clear(); std::vector< std::string > items; for (std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSVariant value; CGXDLMSClient::ChangeType(*item, DLMS_DATA_TYPE_STRING, value); items.push_back(e.GetValue().ToString()); } SetDestinations(items); return DLMS_ERROR_CODE_OK; } return DLMS_ERROR_CODE_INVALID_PARAMETER; }
/* * Set value of given attribute. */ int CGXDLMSAutoAnswer::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } if (e.GetIndex() == 2) { SetMode((AUTO_CONNECT_MODE)e.GetValue().lVal); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 3) { m_ListeningWindow.clear(); for (std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSVariant start, end; CGXDLMSClient::ChangeType((*item).Arr[0], DLMS_DATA_TYPE_DATETIME, start); CGXDLMSClient::ChangeType((*item).Arr[1], DLMS_DATA_TYPE_DATETIME, end); m_ListeningWindow.push_back(std::pair< CGXDateTime, CGXDateTime>(start.dateTime, end.dateTime)); } return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 4) { SetStatus((AUTO_ANSWER_STATUS)e.GetValue().lVal); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 5) { SetNumberOfCalls(e.GetValue().lVal); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 6) { m_NumberOfRingsInListeningWindow = m_NumberOfRingsOutListeningWindow = 0; if (e.GetValue().vt != DLMS_DATA_TYPE_NONE) { m_NumberOfRingsInListeningWindow = e.GetValue().Arr[0].ToInteger(); m_NumberOfRingsOutListeningWindow = e.GetValue().Arr[1].ToInteger(); } return DLMS_ERROR_CODE_OK; } return DLMS_ERROR_CODE_INVALID_PARAMETER; }
// Returns value of given attribute. int CGXDLMSAutoConnect::GetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { int ret; CGXDLMSVariant tmp; if ((ret = GetLogicalName(this, tmp)) != 0) { return ret; } e.SetValue(tmp); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 2) { e.SetValue((unsigned char) GetMode()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 3) { e.SetValue(GetRepetitions()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 4) { e.SetValue(GetRepetitionDelay()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 5) { int cnt = m_CallingWindow.size(); CGXByteBuffer data; data.SetUInt8(DLMS_DATA_TYPE_ARRAY); int ret; //Add count GXHelpers::SetObjectCount(cnt, data); if (cnt != 0) { CGXDLMSVariant s, e; for (std::vector<std::pair< CGXDateTime, CGXDateTime> >::iterator it = m_CallingWindow.begin(); it != m_CallingWindow.end(); ++it) { data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE); data.SetUInt8(2); //Count s = it->first; e = it->second; if ((ret = GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, s)) != 0 || //start_time (ret = GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, e)) != 0) //end_time { return ret; } } } e.SetValue(data); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 6) { CGXByteBuffer data; data.SetUInt8(DLMS_DATA_TYPE_ARRAY); int ret; int cnt = m_Destinations.size(); //Add count GXHelpers::SetObjectCount(cnt, data); for (std::vector< std::string >::iterator it = m_Destinations.begin(); it != m_Destinations.end(); ++it) { CGXDLMSVariant value; e.GetValue().Add(&(*it)[0], it->size()); if ((ret = GXHelpers::SetData(data, DLMS_DATA_TYPE_OCTET_STRING, value)) != 0) //destination { return ret; } } e.SetValue(data); return DLMS_ERROR_CODE_OK; } return DLMS_ERROR_CODE_INVALID_PARAMETER; }
// Set value of given attribute. int CGXDLMSTcpUdpSetup::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { SetPort(e.GetValue().ToInteger()); return DLMS_ERROR_CODE_OK; } else if (e.GetIndex() == 3) { if (e.GetValue().vt == DLMS_DATA_TYPE_NONE) { SetIPReference(""); } else { if (e.GetValue().vt == DLMS_DATA_TYPE_OCTET_STRING) { GXHelpers::GetLogicalName(e.GetValue().byteArr, m_IPReference); } else { SetIPReference(e.GetValue().ToString()); } } } else if (e.GetIndex() == 4) { if (e.GetValue().vt == DLMS_DATA_TYPE_NONE) { SetMaximumSegmentSize(576); } else { SetMaximumSegmentSize(e.GetValue().ToInteger()); } } else if (e.GetIndex() == 5) { if (e.GetValue().vt == DLMS_DATA_TYPE_NONE) { SetMaximumSimultaneousConnections(1); } else { SetMaximumSimultaneousConnections(e.GetValue().ToInteger()); } } else if (e.GetIndex() == 6) { if (e.GetValue().vt == DLMS_DATA_TYPE_NONE) { SetInactivityTimeout(180); } else { SetInactivityTimeout(e.GetValue().ToInteger()); } } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSGPRSSetup::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { if (e.GetValue().vt == DLMS_DATA_TYPE_STRING) { m_APN = e.GetValue().ToString(); } else { CGXDLMSVariant tmp; int ret; if ((ret = CGXDLMSClient::ChangeType(e.GetValue(), DLMS_DATA_TYPE_STRING, tmp)) != 0) { return ret; } m_APN = tmp.strVal; } e.SetValue(m_APN); } else if (e.GetIndex() == 3) { m_PINCode = e.GetValue().uiVal; } else if (e.GetIndex() == 4) { m_DefaultQualityOfService.SetPrecedence(e.GetValue().Arr[0].Arr[0].iVal); m_DefaultQualityOfService.SetDelay(e.GetValue().Arr[0].Arr[1].iVal); m_DefaultQualityOfService.SetReliability(e.GetValue().Arr[0].Arr[2].iVal); m_DefaultQualityOfService.SetPeakThroughput(e.GetValue().Arr[0].Arr[3].iVal); m_DefaultQualityOfService.SetMeanThroughput(e.GetValue().Arr[0].Arr[4].iVal); m_RequestedQualityOfService.SetPrecedence(e.GetValue().Arr[1].Arr[0].iVal); m_RequestedQualityOfService.SetDelay(e.GetValue().Arr[1].Arr[1].iVal); m_RequestedQualityOfService.SetReliability(e.GetValue().Arr[1].Arr[2].iVal); m_RequestedQualityOfService.SetPeakThroughput(e.GetValue().Arr[1].Arr[3].iVal); m_RequestedQualityOfService.SetMeanThroughput(e.GetValue().Arr[1].Arr[4].iVal); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSPppSetup::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { if (e.GetValue().vt == DLMS_DATA_TYPE_STRING) { m_PHYReference = e.GetValue().ToString(); } else { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(e.GetValue(), DLMS_DATA_TYPE_OCTET_STRING, tmp); m_PHYReference = tmp.ToString(); } } else if (e.GetIndex() == 3) { m_LCPOptions.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for(std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSPppSetupLcpOption it; it.SetType((PPP_SETUP_LCP_OPTION_TYPE) (*item).Arr[0].ToInteger()); it.SetLength((*item).Arr[1].ToInteger()); it.SetData((*item).Arr[2]); m_LCPOptions.push_back(it); } } } else if (e.GetIndex() == 4) { m_IPCPOptions.clear(); if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for(std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().Arr.end(); ++item) { CGXDLMSPppSetupIPCPOption it; it.SetType((PPP_SETUP_IPCP_OPTION_TYPE)(*item).Arr[0].ToInteger()); it.SetLength((*item).Arr[1].ToInteger()); it.SetData((*item).Arr[2]); m_IPCPOptions.push_back(it); } } } else if (e.GetIndex() == 5) { m_UserName.Clear(); m_Password.Clear(); m_UserName.Set(e.GetValue().Arr[0].byteArr, e.GetValue().Arr[0].size); m_Password.Set(e.GetValue().Arr[1].byteArr, e.GetValue().Arr[1].size); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSLimiter::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { DLMS_OBJECT_TYPE ot = (DLMS_OBJECT_TYPE) e.GetValue().Arr[0].ToInteger(); CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(e.GetValue().Arr[1], DLMS_DATA_TYPE_OCTET_STRING, tmp); std::string ln = tmp.ToString(); m_SetSelectedAttributeIndex = e.GetValue().Arr[2].ToInteger(); m_MonitoredValue = settings.GetObjects().FindByLN(ot, ln); } else if (e.GetIndex() == 3) { m_ThresholdActive = e.GetValue(); } else if (e.GetIndex() == 4) { m_ThresholdNormal = e.GetValue(); } else if (e.GetIndex() == 5) { m_ThresholdEmergency = e.GetValue(); } else if (e.GetIndex() == 6) { m_MinOverThresholdDuration = e.GetValue().ToInteger(); } else if (e.GetIndex() == 7) { m_MinUnderThresholdDuration = e.GetValue().ToInteger(); } else if (e.GetIndex() == 8) { m_EmergencyProfile.SetID(e.GetValue().Arr[0].ToInteger()); CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(e.GetValue().Arr[1], DLMS_DATA_TYPE_DATETIME, tmp); m_EmergencyProfile.SetActivationTime(tmp.dateTime); m_EmergencyProfile.SetDuration(e.GetValue().Arr[2].ToInteger()); } else if (e.GetIndex() == 9) { m_EmergencyProfileGroupIDs.clear(); for (std::vector<CGXDLMSVariant>::iterator it = e.GetValue().Arr.begin(); it != e.GetValue().Arr.end(); ++it) { m_EmergencyProfileGroupIDs.push_back((*it).ToInteger()); } } else if (e.GetIndex() == 10) { m_EmergencyProfileActive = e.GetValue().boolVal; } else if (e.GetIndex() == 11) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(e.GetValue().Arr[0].Arr[0], DLMS_DATA_TYPE_OCTET_STRING, tmp); m_ActionOverThreshold.SetLogicalName(tmp.ToString()); m_ActionOverThreshold.SetScriptSelector(e.GetValue().Arr[0].Arr[1].ToInteger()); CGXDLMSClient::ChangeType(e.GetValue().Arr[1].Arr[0], DLMS_DATA_TYPE_OCTET_STRING, tmp); m_ActionUnderThreshold.SetLogicalName(tmp.ToString()); m_ActionUnderThreshold.SetScriptSelector(e.GetValue().Arr[1].Arr[1].ToInteger()); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
/* * Set value of given attribute. */ int CGXDLMSProfileGeneric::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { int ret; if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { if (m_CaptureObjects.size() == 0) { //Read capture objects first. return DLMS_ERROR_CODE_INVALID_PARAMETER; } m_Buffer.clear(); if (e.GetValue().vt != DLMS_DATA_TYPE_NONE) { std::vector<DLMS_DATA_TYPE> types; DLMS_DATA_TYPE type; for (std::vector<std::pair<CGXDLMSObject*, CGXDLMSCaptureObject*> >::iterator it = m_CaptureObjects.begin(); it != m_CaptureObjects.end(); ++it) { if ((ret = (*it).first->GetUIDataType((*it).second->GetAttributeIndex(), type)) != 0) { return ret; } types.push_back(type); } for (std::vector<CGXDLMSVariant >::iterator row = e.GetValue().Arr.begin(); row != e.GetValue().Arr.end(); ++row) { if ((*row).Arr.size() != m_CaptureObjects.size()) { //Number of columns do not match. return DLMS_ERROR_CODE_INVALID_PARAMETER; } CGXDLMSVariant data; for(unsigned int pos = 0; pos < (*row).Arr.size(); ++pos) { DLMS_DATA_TYPE type = types[pos]; if (type != DLMS_DATA_TYPE_NONE && row->Arr[pos].vt == DLMS_DATA_TYPE_OCTET_STRING) { if ((ret = CGXDLMSClient::ChangeType(row->Arr[pos], type, data)) != 0) { return ret; } row->Arr[pos] = data; } std::pair<CGXDLMSObject*, CGXDLMSCaptureObject*> item = m_CaptureObjects[pos]; if (item.first->GetObjectType() == DLMS_OBJECT_TYPE_REGISTER && item.second->GetAttributeIndex() == 2) { double scaler = ((CGXDLMSRegister*) item.first)->GetScaler(); if (scaler != 1) { row->Arr[pos] = row->Arr[pos].ToDouble() * scaler; } } } m_Buffer.push_back(row->Arr); } } m_EntriesInUse = m_Buffer.size(); } else if (e.GetIndex() == 3) { m_CaptureObjects.clear(); m_Buffer.clear(); m_EntriesInUse = 0; if (e.GetValue().vt == DLMS_DATA_TYPE_ARRAY) { for (std::vector<CGXDLMSVariant >::iterator it = e.GetValue().Arr.begin(); it != e.GetValue().Arr.end(); ++it) { if ((*it).Arr.size() != 4) { //Invalid structure format. return DLMS_ERROR_CODE_INVALID_PARAMETER; } DLMS_OBJECT_TYPE type = (DLMS_OBJECT_TYPE) (*it).Arr[0].ToInteger(); std::string ln; GXHelpers::GetLogicalName((*it).Arr[1].byteArr, ln); CGXDLMSObject* pObj = settings.GetObjects().FindByLN(type, ln); if(pObj == NULL) { pObj = CGXDLMSObjectFactory::CreateObject(type, ln); } AddCaptureObject(pObj, (*it).Arr[2].ToInteger(), (*it).Arr[3].ToInteger()); } } } else if (e.GetIndex() == 4) { m_CapturePeriod = e.GetValue().ToInteger(); } else if (e.GetIndex() == 5) { m_SortMethod = (GX_SORT_METHOD) e.GetValue().ToInteger(); } else if (e.GetIndex() == 6) { if (e.GetValue().vt == DLMS_DATA_TYPE_NONE) { m_SortObject = NULL; } else { if (e.GetValue().Arr.size() != 4) { //Invalid structure format. return DLMS_ERROR_CODE_INVALID_PARAMETER; } DLMS_OBJECT_TYPE type = (DLMS_OBJECT_TYPE) e.GetValue().Arr[0].ToInteger(); std::string ln; GXHelpers::GetLogicalName(e.GetValue().Arr[1].byteArr, ln); m_SortObjectAttributeIndex = e.GetValue().Arr[2].ToInteger(); m_SortObjectDataIndex = e.GetValue().Arr[3].ToInteger(); m_SortObject = settings.GetObjects().FindByLN(type, ln); if(m_SortObject == NULL) { m_SortObject = CGXDLMSObjectFactory::CreateObject(type, ln); } } } else if (e.GetIndex() == 7) { m_EntriesInUse = e.GetValue().ToInteger(); } else if (e.GetIndex() == 8) { m_ProfileEntries = e.GetValue().ToInteger(); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
/* * Returns value of given attribute. */ int CGXDLMSProfileGeneric::GetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e) { if (e.GetIndex() == 1) { int ret; CGXDLMSVariant tmp; if ((ret = GetLogicalName(this, tmp)) != 0) { return ret; } e.SetValue(tmp); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 2) { CGXByteBuffer tmp; tmp.Set(e.GetValue().byteArr, e.GetValue().size); int ret = GetProfileGenericData(e.GetSelector(), e.GetParameters(), tmp); e.SetValue(tmp); return ret; } if (e.GetIndex() == 3) { CGXByteBuffer data; int ret = GetColumns(data); e.SetValue(data); return ret; } if (e.GetIndex() == 4) { e.SetValue(GetCapturePeriod()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 5) { e.SetValue(GetSortMethod()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 6) { char empty[6] = {0}; CGXByteBuffer data; data.SetUInt8(DLMS_DATA_TYPE_STRUCTURE); data.SetUInt8(4); if (m_SortObject == NULL) { //ClassID data.SetUInt8(DLMS_DATA_TYPE_UINT16); data.SetUInt16(0); //LN data.SetUInt8(DLMS_DATA_TYPE_OCTET_STRING); data.SetUInt8(6); data.Set(empty, 6); //Selected Attribute Index data.SetUInt8(DLMS_DATA_TYPE_INT8); data.SetUInt8(0); //Selected Data Index data.SetUInt8(DLMS_DATA_TYPE_UINT16); data.SetUInt16(0); } else { int ret; CGXDLMSVariant ln; //ClassID data.SetUInt8(DLMS_DATA_TYPE_UINT16); data.SetUInt16(m_SortObject->GetObjectType()); //LN data.SetUInt8(DLMS_DATA_TYPE_OCTET_STRING); data.SetUInt8(6); if ((ret = GetLogicalName(m_SortObject, ln)) != 0) { return ret; } data.Set(&ln.byteArr, 6); //Selected Attribute Index data.SetUInt8(DLMS_DATA_TYPE_INT8); data.SetUInt8(m_SortObjectAttributeIndex); //Selected Data Index data.SetUInt8(DLMS_DATA_TYPE_UINT16); data.SetUInt16(m_SortObjectDataIndex); } e.SetValue(data); } if (e.GetIndex() == 7) { e.SetValue(GetEntriesInUse()); return DLMS_ERROR_CODE_OK; } if (e.GetIndex() == 8) { e.SetValue(GetProfileEntries()); return DLMS_ERROR_CODE_OK; } return DLMS_ERROR_CODE_INVALID_PARAMETER; }