// 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;
}
Esempio n. 2
0
/*
* 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);
}