int CGXDLMSRegister::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArgs& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { if (m_Scaler != 0) { double val = GetScaler(); val *= e.GetValue().ToDouble(); CGXDLMSVariant tmp(val); SetValue(tmp); } else { SetValue(e.GetValue()); } } else if (e.GetIndex() == 3 && e.GetValue().vt == DLMS_DATA_TYPE_STRUCTURE) { m_Scaler = e.GetValue().Arr[0].ToInteger(); m_Unit = e.GetValue().Arr[1].ToInteger(); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
int CGXDLMSRegister::SetValue(CGXDLMSSettings* settings, int index, CGXDLMSVariant& value) { if (index == 1) { return SetLogicalName(this, value); } else if (index == 2) { if (m_Scaler != 0) { double val = GetScaler(); val *= value.ToDouble(); CGXDLMSVariant tmp(val); SetValue(tmp); } else { SetValue(value); } } else if (index == 3 && value.vt == DLMS_DATA_TYPE_STRUCTURE) { m_Scaler = value.Arr[0].ToInteger(); m_Unit = value.Arr[1].ToInteger(); } else { return ERROR_CODES_INVALID_PARAMETER; } return ERROR_CODES_OK; }
// 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 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 CGXDLMSImageTransfer::SetValue(CGXDLMSSettings* settings, int index, CGXDLMSVariant& value) { if (index == 1) { return SetLogicalName(this, value); } else if (index == 2) { m_ImageBlockSize = value.ToInteger(); } else if (index == 3) { m_ImageTransferredBlocksStatus = value.ToString(); } else if (index == 4) { m_ImageFirstNotTransferredBlockNumber = value.ToInteger(); } else if (index == 5) { m_ImageTransferEnabled = value.boolVal; } else if (index == 6) { m_ImageTransferStatus = (IMAGE_TRANSFER_STATUS) value.ToInteger(); } else if (index == 7) { m_ImageActivateInfo.clear(); if (value.vt == DLMS_DATA_TYPE_ARRAY) { CGXDLMSVariant tmp; for (std::vector<CGXDLMSVariant>::iterator it = value.Arr.begin(); it != value.Arr.end(); ++it) { CGXDLMSImageActivateInfo item; item.SetSize((*it).Arr[0].ToInteger()); CGXDLMSClient::ChangeType((*it).Arr[1], DLMS_DATA_TYPE_STRING, tmp); item.SetIdentification(tmp.ToString()); CGXDLMSClient::ChangeType((*it).Arr[2], DLMS_DATA_TYPE_STRING, tmp); item.SetSignature(tmp.ToString()); m_ImageActivateInfo.push_back(item); } } } else { return ERROR_CODES_INVALID_PARAMETER; } return ERROR_CODES_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 CGXDLMSMBusMasterPortSetup::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArgs& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { m_CommSpeed = (DLMS_BAUD_RATE) e.GetValue().ToInteger(); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
// Set value of given attribute. int CGXDLMSData::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArgs& e) { if (e.GetIndex() == 1) { return SetLogicalName(this, e.GetValue()); } else if (e.GetIndex() == 2) { SetValue(e.GetValue()); } else { return DLMS_ERROR_CODE_INVALID_PARAMETER; } return DLMS_ERROR_CODE_OK; }
/* * Set value of given attribute. */ int CGXDLMSAutoAnswer::SetValue(CGXDLMSSettings* settings, int index, CGXDLMSVariant& value) { if (index == 1) { return SetLogicalName(this, value); } if (index == 2) { SetMode((AUTO_CONNECT_MODE) value.lVal); return ERROR_CODES_OK; } if (index == 3) { m_ListeningWindow.clear(); for (std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.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 ERROR_CODES_OK; } if (index == 4) { SetStatus((AUTO_ANSWER_STATUS) value.lVal); return ERROR_CODES_OK; } if (index == 5) { SetNumberOfCalls(value.lVal); return ERROR_CODES_OK; } if (index == 6) { m_NumberOfRingsInListeningWindow = m_NumberOfRingsOutListeningWindow = 0; if (value.vt != DLMS_DATA_TYPE_NONE) { m_NumberOfRingsInListeningWindow = value.Arr[0].ToInteger(); m_NumberOfRingsOutListeningWindow = value.Arr[1].ToInteger(); } return ERROR_CODES_OK; } return ERROR_CODES_INVALID_PARAMETER; }
// Set value of given attribute. int CGXDLMSIecHdlcSetup::SetValue(CGXDLMSSettings* settings, int index, CGXDLMSVariant& value) { if (index == 1) { return SetLogicalName(this, value); } else if (index == 2) { m_CommunicationSpeed = (BAUDRATE) value.ToInteger(); } else if (index == 3) { m_WindowSizeTransmit = value.ToInteger(); } else if (index == 4) { m_WindowSizeReceive = value.ToInteger(); } else if (index == 5) { m_MaximumInfoLengthTransmit = value.ToInteger(); } else if (index == 6) { m_MaximumInfoLengthReceive = value.ToInteger(); } else if (index == 7) { m_InterCharachterTimeout = value.ToInteger(); } else if (index == 8) { m_InactivityTimeout = value.ToInteger(); } else if (index == 9) { m_DeviceAddress = value.ToInteger(); } else { return ERROR_CODES_INVALID_PARAMETER; } return ERROR_CODES_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; }
//Constructor. CGXDLMSAssociationShortName::CGXDLMSAssociationShortName() : CGXDLMSObject(OBJECT_TYPE_ASSOCIATION_SHORT_NAME) { SetLogicalName("0.0.40.0.0.255"); m_SN = 0xFA00; }
// 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 CGXDLMSActivityCalendar::SetValue(CGXDLMSSettings* settings, int index, CGXDLMSVariant& value) { if (index == 1) { return SetLogicalName(this, value); } else if (index == 2) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(value, DLMS_DATA_TYPE_STRING, tmp); SetCalendarNameActive(tmp.strVal); } else if (index == 3) { m_SeasonProfileActive.clear(); for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSSeasonProfile it; CGXDLMSVariant tmp; CGXDLMSClient::ChangeType((*item).Arr[0], DLMS_DATA_TYPE_STRING, tmp); it.SetName(tmp.strVal); CGXDLMSClient::ChangeType((*item).Arr[1], DLMS_DATA_TYPE_DATETIME, tmp); it.SetStart(tmp.dateTime); CGXDLMSClient::ChangeType((*item).Arr[2], DLMS_DATA_TYPE_STRING, tmp); it.SetWeekName(tmp.strVal); m_SeasonProfileActive.push_back(it); } } else if (index == 4) { m_WeekProfileTableActive.clear(); for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSVariant tmp; CGXDLMSWeekProfile it; CGXDLMSClient::ChangeType((*item).Arr[0], DLMS_DATA_TYPE_STRING, tmp); it.SetName(tmp.strVal); it.SetMonday((*item).Arr[1].lVal); it.SetTuesday((*item).Arr[1].lVal); it.SetWednesday((*item).Arr[1].lVal); it.SetThursday((*item).Arr[1].lVal); it.SetFriday((*item).Arr[1].lVal); it.SetSaturday((*item).Arr[1].lVal); it.SetSunday((*item).Arr[1].lVal); m_WeekProfileTableActive.push_back(it); } } else if (index == 5) { m_DayProfileTableActive.clear(); for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSDayProfile it; it.SetDayId(item->Arr[0].ToInteger()); for(std::vector<CGXDLMSVariant>::iterator it2 = (*item).Arr[1].Arr.begin(); it2 != (*item).Arr[1].Arr.end(); ++it2) { CGXDLMSDayProfileAction ac; CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(it2->Arr[0], DLMS_DATA_TYPE_TIME, tmp); ac.SetStartTime(tmp.dateTime); CGXDLMSClient::ChangeType(it2->Arr[1], DLMS_DATA_TYPE_STRING, tmp); ac.SetScriptLogicalName(tmp.strVal); ac.SetScriptSelector(it2->Arr[2].ToInteger()); it.GetDaySchedules().push_back(ac); } m_DayProfileTableActive.push_back(it); } } else if (index == 6) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(value, DLMS_DATA_TYPE_STRING, tmp); SetCalendarNamePassive(tmp.strVal); } else if (index == 7) { for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSSeasonProfile it; CGXDLMSVariant tmp; CGXDLMSClient::ChangeType((*item).Arr[0], DLMS_DATA_TYPE_STRING, tmp); it.SetName(tmp.strVal); CGXDLMSClient::ChangeType((*item).Arr[1], DLMS_DATA_TYPE_DATETIME, tmp); it.SetStart(tmp.dateTime); CGXDLMSClient::ChangeType((*item).Arr[2], DLMS_DATA_TYPE_STRING, tmp); it.SetWeekName(tmp.strVal); m_SeasonProfilePassive.push_back(it); } } else if (index == 8) { for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSWeekProfile it; CGXDLMSVariant tmp; CGXDLMSClient::ChangeType((*item).Arr[0], DLMS_DATA_TYPE_STRING, tmp); it.SetName(tmp.strVal); it.SetMonday((*item).Arr[1].lVal); it.SetTuesday((*item).Arr[2].lVal); it.SetWednesday((*item).Arr[3].lVal); it.SetThursday((*item).Arr[4].lVal); it.SetFriday((*item).Arr[5].lVal); it.SetSaturday((*item).Arr[6].lVal); it.SetSunday((*item).Arr[7].lVal); m_WeekProfileTablePassive.push_back(it); } } else if (index == 9) { for(std::vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSDayProfile it; it.SetDayId((*item).Arr[0].iVal); for(std::vector<CGXDLMSVariant>::iterator it2 = (*item).Arr[1].Arr.begin(); it2 != (*item).Arr[1].Arr.end(); ++it2) { CGXDLMSDayProfileAction ac; CGXDLMSVariant tmp; CGXDLMSClient::ChangeType((*it2).Arr[0], DLMS_DATA_TYPE_TIME, tmp); ac.SetStartTime(tmp.dateTime); CGXDLMSClient::ChangeType((*it2).Arr[1], DLMS_DATA_TYPE_STRING, tmp); ac.SetScriptLogicalName(tmp.strVal); ac.SetScriptSelector((*it2).Arr[2].lVal); it.GetDaySchedules().push_back(ac); } m_DayProfileTablePassive.push_back(it); } } else if (index == 10) { CGXDLMSVariant tmp; CGXDLMSClient::ChangeType(value, DLMS_DATA_TYPE_DATETIME, tmp); SetTime(tmp.dateTime); } else { return ERROR_CODES_INVALID_PARAMETER; } return ERROR_CODES_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; }
// 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 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; }