// Set value of given attribute. int CGXDLMSSpecialDaysTable::SetValue(int index, CGXDLMSVariant& value) { if (index == 1) { if (value.vt != DLMS_DATA_TYPE_OCTET_STRING || value.GetSize() != 6) { return ERROR_CODES_INVALID_PARAMETER; } memcpy(m_LN, &value.byteArr[0], 6); } else if (index == 2) { m_Entries.clear(); if (value.vt == DLMS_DATA_TYPE_ARRAY) { CGXDLMSVariant tmp; for (vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item) { CGXDLMSSpecialDay it; it.SetIndex((*item).Arr[0].ToInteger()); CGXDLMSClient::ChangeType((*item).Arr[1].byteArr, DLMS_DATA_TYPE_DATE, tmp); it.SetDate(tmp.dateTime); it.SetDayId((*item).Arr[2].ToInteger()); m_Entries.push_back(it); } } } else { return ERROR_CODES_INVALID_PARAMETER; } return ERROR_CODES_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; }