// Set value of given attribute. int CGXDLMSModemConfiguration::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); return ERROR_CODES_OK; } else if (index == 2) { m_CommunicationSpeed = (BAUDRATE) value.bVal; return ERROR_CODES_OK; } else if (index == 3) { m_InitialisationStrings.clear(); int ret; for (vector<CGXDLMSVariant>::iterator it = value.Arr.begin(); it != value.Arr.end(); ++it) { CGXDLMSModemInitialisation item; CGXDLMSVariant tmp; if((ret = CGXDLMSClient::ChangeType(it->Arr[0].byteArr, DLMS_DATA_TYPE_STRING, tmp)) != ERROR_CODES_OK) { return ret; } item.SetRequest(tmp.ToString()); if((ret = CGXDLMSClient::ChangeType(it->Arr[1].byteArr, DLMS_DATA_TYPE_STRING, tmp)) != ERROR_CODES_OK) { return ret; } item.SetResponse(tmp.ToString()); if (it->Arr.size() > 2) { item.SetDelay(it->Arr[2].uiVal); } m_InitialisationStrings.push_back(item); } return ERROR_CODES_OK; } else if (index == 4) { m_ModemProfile.clear(); int ret; for (vector<CGXDLMSVariant>::iterator it = value.Arr.begin(); it != value.Arr.end(); ++it) { CGXDLMSVariant tmp; if((ret = CGXDLMSClient::ChangeType(it->byteArr, DLMS_DATA_TYPE_STRING, tmp)) != ERROR_CODES_OK) { return ret; } m_ModemProfile.push_back(tmp.ToString()); } return ERROR_CODES_OK; } return ERROR_CODES_INVALID_PARAMETER; }
/* * Add Modem Configuration object. */ void AddModemConfiguration(CGXDLMSObjectCollection& items) { CGXDLMSModemConfiguration* pMc = new CGXDLMSModemConfiguration(); pMc->SetCommunicationSpeed(DLMS_BAUD_RATE_38400); CGXDLMSModemInitialisation init; vector<CGXDLMSModemInitialisation> initialisationStrings; init.SetRequest("AT"); init.SetResponse("OK"); init.SetDelay(0); initialisationStrings.push_back(init); pMc->SetInitialisationStrings(initialisationStrings); items.push_back(pMc); }