// 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;
}
Пример #2
0
// 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(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)
    {            
        if (value.vt == DLMS_DATA_TYPE_STRING)            
        {
            m_APN = value.ToString();
        }
        else
        {         
			CGXDLMSVariant tmp;
			int ret;
			if ((ret = CGXDLMSClient::ChangeType(value.byteArr, DLMS_DATA_TYPE_STRING, tmp)) != 0)
			{
				return ret;
			}
			m_APN = tmp.strVal;			
        }
		value = m_APN;
    }
    else if (index == 3)
    {            
		m_PINCode = value.uiVal;
    }
    else if (index == 4)
    {            			
		m_DefaultQualityOfService.SetPrecedence(value.Arr[0].Arr[0].iVal);
        m_DefaultQualityOfService.SetDelay(value.Arr[0].Arr[1].iVal);
        m_DefaultQualityOfService.SetReliability(value.Arr[0].Arr[2].iVal);
        m_DefaultQualityOfService.SetPeakThroughput(value.Arr[0].Arr[3].iVal);
        m_DefaultQualityOfService.SetMeanThroughput(value.Arr[0].Arr[4].iVal);

        m_RequestedQualityOfService.SetPrecedence(value.Arr[1].Arr[0].iVal);
        m_RequestedQualityOfService.SetDelay(value.Arr[1].Arr[1].iVal);
        m_RequestedQualityOfService.SetReliability(value.Arr[1].Arr[2].iVal);
        m_RequestedQualityOfService.SetPeakThroughput(value.Arr[1].Arr[3].iVal);
        m_RequestedQualityOfService.SetMeanThroughput(value.Arr[1].Arr[4].iVal);
    }	
	else
	{
		return ERROR_CODES_INVALID_PARAMETER;
	}
	return ERROR_CODES_OK;
}
int CGXDLMSAssociationLogicalName::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_ObjectList.clear();
        if (value.vt != DLMS_DATA_TYPE_NONE)
        {
			for (std::vector<CGXDLMSVariant >::iterator it = value.Arr.begin(); it != value.Arr.end(); ++it)                
            {                    
                OBJECT_TYPE type = (OBJECT_TYPE) (*it).Arr[0].ToInteger();
                int version = (*it).Arr[1].ToInteger();
                string ln;
				CGXOBISTemplate::GetLogicalName(&(*it).Arr[2].byteArr[0], ln);
				CGXDLMSObject* pObj = GetParent()->FindByLN(type, ln);
				if (pObj == NULL)
				{
					pObj = CGXDLMSObjectFactory::CreateObject(type);
                    pObj->SetLogicalName(ln);
					pObj->SetVersion(version);
				}                    
                UpdateAccessRights(pObj, (*it).Arr[3]);                    
                m_ObjectList.push_back(pObj);
            }               
        }
    }
    else if (index == 3)
    {            
         m_AssociatedPartnersId = value;            
    }
    else if (index == 4)
    {
        m_ApplicationContextName = value;
    }
    else if (index == 5)
    {
        m_XDLMSContextInfo = value;
    }
    else if (index == 6)
    {
        m_AuthenticationMechanismMame = value;                                    
    }
    else if (index == 7)
    {
        m_Secret = value;
    }
    else if (index == 8)
    {
		m_AssociationStatus = (GX_ASSOCIATION_STATUS) value.ToInteger();
    }
    else if (index == 9)
    {
        m_SecuritySetupReference = value.ToString();
    }
    else
    {
		return ERROR_CODES_INVALID_PARAMETER;
    }
	return ERROR_CODES_OK;
}
Пример #5
0
int CGXCommunication::GetProfileGenerics()
{
    char buff[200];
    int ret = 0;
    std::string str;
    std::string value;
    //Find profile generics and read them.
    CGXDLMSObjectCollection pgs;
    m_Parser->GetObjects().GetObjects(DLMS_OBJECT_TYPE_PROFILE_GENERIC, pgs);
    for (std::vector<CGXDLMSObject*>::iterator it = pgs.begin(); it != pgs.end(); ++it)
    {
#if _MSC_VER > 1000
        sprintf_s(buff, 200, "-------- Reading %s %s %s\r\n", CGXDLMSClient::ObjectTypeToString((*it)->GetObjectType()).c_str(), (*it)->GetName().ToString().c_str(), (*it)->GetDescription().c_str());
#else
        sprintf(buff, "-------- Reading %s %s %s\r\n", CGXDLMSClient::ObjectTypeToString((*it)->GetObjectType()).c_str(), (*it)->GetName().ToString().c_str(), (*it)->GetDescription().c_str());
#endif

        WriteValue(m_Trace, buff);

        if ((ret = Read(*it, 7, value)) != DLMS_ERROR_CODE_OK)
        {
#if _MSC_VER > 1000
            sprintf_s(buff, 100, "Error! Index: %d: %s\r\n", 7, CGXDLMSConverter::GetErrorMessage(ret));
#else
            sprintf(buff, "Error! Index: %d: %s\r\n", 7, CGXDLMSConverter::GetErrorMessage(ret));
#endif
            WriteValue(GX_TRACE_LEVEL_ERROR, buff);
            //Continue reading.
        }

        std::string entriesInUse = value;
        if ((ret = Read(*it, 8, value)) != DLMS_ERROR_CODE_OK)
        {
#if _MSC_VER > 1000
            sprintf_s(buff, 100, "Error! Index: %d: %s\r\n", 8, CGXDLMSConverter::GetErrorMessage(ret));
#else
            sprintf(buff, "Error! Index: %d: %s\r\n", 8, CGXDLMSConverter::GetErrorMessage(ret));
#endif
            WriteValue(GX_TRACE_LEVEL_ERROR, buff);
            //Continue reading.
        }
        std::string entries = value;
        str = "Entries: ";
        str += entriesInUse;
        str += "/";
        str += entries;
        str += "\r\n";
        WriteValue(m_Trace, str);
        //If there are no columns or rows.
        if (((CGXDLMSProfileGeneric*)*it)->GetEntriesInUse() == 0 || ((CGXDLMSProfileGeneric*)*it)->GetCaptureObjects().size() == 0)
        {
            continue;
        }
        //All meters are not supporting parameterized read.
        CGXDLMSVariant rows;
        if ((m_Parser->GetNegotiatedConformance() & (DLMS_CONFORMANCE_PARAMETERIZED_ACCESS | DLMS_CONFORMANCE_SELECTIVE_ACCESS)) != 0)
        {
            //Read first row from Profile Generic.
            if ((ret = ReadRowsByEntry((CGXDLMSProfileGeneric*)*it, 1, 1, rows)) != 0)
            {
                str = "Error! Failed to read first row:";
                str += CGXDLMSConverter::GetErrorMessage(ret);
                str += "\r\n";
                WriteValue(GX_TRACE_LEVEL_ERROR, str);
                //Continue reading.
            }
            else
            {
                //////////////////////////////////////////////////////////////////////////////
                //Show rows.
                WriteValue(m_Trace, rows.ToString());
            }
        }

        //All meters are not supporting parameterized read.
        if ((m_Parser->GetNegotiatedConformance() & (DLMS_CONFORMANCE_PARAMETERIZED_ACCESS | DLMS_CONFORMANCE_SELECTIVE_ACCESS)) != 0)
        {
            CGXDateTime start = CGXDateTime::Now();
            start.ResetTime();
            CGXDateTime end = CGXDateTime::Now();
            if ((ret = ReadRowsByRange((CGXDLMSProfileGeneric*)(*it), start, end, rows)) != 0)
            {
                str = "Error! Failed to read last day:";
                str += CGXDLMSConverter::GetErrorMessage(ret);
                str += "\r\n";
                WriteValue(GX_TRACE_LEVEL_ERROR, str);
                //Continue reading.
            }
            else
            {
                //////////////////////////////////////////////////////////////////////////////
                //Show rows.
                WriteValue(m_Trace, rows.ToString());
            }
        }
    }
    return ret;
}
// Set value of given attribute.
int CGXDLMSPppSetup::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)
    {
		if (value.vt == DLMS_DATA_TYPE_STRING)
        {
            m_PHYReference = value.ToString();
        }
        else
        {
			CGXDLMSVariant tmp;
			CGXDLMSClient::ChangeType(value.byteArr, DLMS_DATA_TYPE_OCTET_STRING, tmp);
			m_PHYReference = tmp.ToString();
        }
    }
    else if (index == 3)
    {
        m_LCPOptions.clear();
        if (value.vt == DLMS_DATA_TYPE_ARRAY)
        {
			for(vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item)                
            {
                CGXDLMSPppSetupLcpOption it;
				it.SetType((*item).Arr[0].ToInteger());
                it.SetLength((*item).Arr[1].ToInteger());
                it.SetData((*item).Arr[2]);
                m_LCPOptions.push_back(it);
            }
        }            
    }
    else if (index == 4)
    {
		m_IPCPOptions.clear();            
        if (value.vt == DLMS_DATA_TYPE_ARRAY)
        {
			for(vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.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 (index == 5)
    {
		m_UserName = value.Arr[0].byteArr;
        m_Password = value.Arr[1].byteArr;
    }
	else
	{
		return ERROR_CODES_INVALID_PARAMETER;
	}
	return ERROR_CODES_OK;
}
Пример #7
0
// 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 CGXDLMSTcpUdpSetup::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)
	{
		SetPort(value.ToInteger());
		return ERROR_CODES_OK;			
	}
	else if (index == 3)
    {
        if (value.vt == DLMS_DATA_TYPE_NONE)
        {
            SetIPReference("");
        }
        else
        {
            if (value.vt == DLMS_DATA_TYPE_OCTET_STRING)
            {
				SetIPReference(value.ToString());				
            }
            else
            {
                SetIPReference(value.ToString());
            }
        }			
    }
    else if (index == 4)
    {
        if (value.vt == DLMS_DATA_TYPE_NONE)
        {
            SetMaximumSegmentSize(576);
        }
        else
        {
            SetMaximumSegmentSize(value.ToInteger());
        }
    }
    else if (index == 5)
    {
        if (value.vt == DLMS_DATA_TYPE_NONE)
        {
            SetMaximumSimultaneousConnections(1);
        }
        else
        {
            SetMaximumSimultaneousConnections(value.ToInteger());
        }
    }
    else if (index == 6)
    {
        if (value.vt == DLMS_DATA_TYPE_NONE)
        {
            SetInactivityTimeout(180);
        }
        else
        {
            SetInactivityTimeout(value.ToInteger());
        }
    }
	else
	{
		return ERROR_CODES_INVALID_PARAMETER;
	}
	return ERROR_CODES_OK;
}
// Set value of given attribute.
int CGXDLMSMBusClient::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)
    {
		CGXDLMSVariant tmp;
		CGXDLMSClient::ChangeType(value.byteArr, DLMS_DATA_TYPE_OCTET_STRING, tmp);
		m_MBusPortReference = tmp.ToString();
    }
    else if (index == 3)
    {
        m_CaptureDefinition.clear();            
		CGXDLMSVariant tmp1, tmp2;
		for(vector<CGXDLMSVariant>::iterator it = value.Arr.begin(); it != value.Arr.end(); ++it)
        {
			CGXDLMSClient::ChangeType((*it).Arr[0].byteArr, DLMS_DATA_TYPE_OCTET_STRING, tmp1);
			CGXDLMSClient::ChangeType((*it).Arr[1].byteArr, DLMS_DATA_TYPE_OCTET_STRING, tmp2);
			m_CaptureDefinition.push_back(std::pair<string, string>(tmp1.ToString(), tmp2.ToString()));                    
        }            
    }
    else if (index == 4)
    {
        m_CapturePeriod = value.ToInteger();
    }
    else if (index == 5)
    {
        m_PrimaryAddress = value.ToInteger();
    }
    else if (index == 6)
    {
        m_IdentificationNumber = value.ToInteger();
    }
    else if (index == 7)
    {
        m_ManufacturerID = value.ToInteger();
    }
    else if (index == 8)
    {
        m_DataHeaderVersion = value.ToInteger();
    }
    else if (index == 9)
    {
        m_DeviceType = value.ToInteger();
    }
    else if (index == 10)
    {
        m_AccessNumber = value.ToInteger();
    }
    else if (index == 11)
    {
        m_Status = value.ToInteger();
    }
    else if (index == 12)
    {
		m_Alarm = value.ToInteger();
    }	
	else
	{
		return ERROR_CODES_INVALID_PARAMETER;
	}
	return ERROR_CODES_OK;
}
Пример #10
0
// 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;
}