/*
 * Set value of given attribute.
 */
int CGXDLMSAutoAnswer::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;         
    }
    if (index == 2)
    {
        SetMode((AUTO_CONNECT_MODE) value.lVal);
		return ERROR_CODES_OK;
    }
    if (index == 3)
    {
        m_ListeningWindow.clear();
		for (vector<CGXDLMSVariant>::iterator item = value.Arr.begin(); item != value.Arr.end(); ++item)
        {            
            CGXDLMSVariant start, end;
			CGXDLMSClient::ChangeType((*item).Arr[0].byteArr, DLMS_DATA_TYPE_DATETIME, start);
            CGXDLMSClient::ChangeType((*item).Arr[1].byteArr, 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 CGXDLMSAutoAnswer::SetValue(CGXDLMSSettings& settings, CGXDLMSValueEventArg& e)
{
    if (e.GetIndex() == 1)
    {
        return SetLogicalName(this, e.GetValue());
    }
    if (e.GetIndex() == 2)
    {
        SetMode((AUTO_CONNECT_MODE)e.GetValue().lVal);
        return DLMS_ERROR_CODE_OK;
    }
    if (e.GetIndex() == 3)
    {
        m_ListeningWindow.clear();
        for (std::vector<CGXDLMSVariant>::iterator item = e.GetValue().Arr.begin(); item != e.GetValue().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 DLMS_ERROR_CODE_OK;
    }
    if (e.GetIndex() == 4)
    {
        SetStatus((AUTO_ANSWER_STATUS)e.GetValue().lVal);
        return DLMS_ERROR_CODE_OK;
    }
    if (e.GetIndex() == 5)
    {
        SetNumberOfCalls(e.GetValue().lVal);
        return DLMS_ERROR_CODE_OK;
    }
    if (e.GetIndex() == 6)
    {
        m_NumberOfRingsInListeningWindow = m_NumberOfRingsOutListeningWindow = 0;
        if (e.GetValue().vt != DLMS_DATA_TYPE_NONE)
        {
            m_NumberOfRingsInListeningWindow = e.GetValue().Arr[0].ToInteger();
            m_NumberOfRingsOutListeningWindow = e.GetValue().Arr[1].ToInteger();
        }
        return DLMS_ERROR_CODE_OK;
    }
    return DLMS_ERROR_CODE_INVALID_PARAMETER;
}