Exemplo n.º 1
0
BOOL CDlgCfgAnalogAlarm::OnInitDialog() 
{
	CDialog::OnInitDialog();
	g_SetWndStaticText(this, DLG_CFG_ANALOGALARM);
	// TODO: Add extra initialization here
	if (!m_hLoginID)
	{
		MessageBox(ConvertString("We haven't login yet!", DLG_CFG_ANALOGALARM), ConvertString("Prompt"));
		return FALSE;
	}

	int nRetLen = 0;

	BOOL bRet = CLIENT_QueryDevState(m_hLoginID,DH_DEVSTATE_GET_SENSORLIST,(char*)&m_stuSensorList, sizeof(m_stuSensorList),&nRetLen,SDK_API_WAIT);
	if (bRet == FALSE)
	{
		CString csErr;
		csErr.Format("%s %08x...",ConvertString("Query state GetSensorList failed:", DLG_CFG_ANALOGALARM), CLIENT_GetLastError());
		MessageBox(csErr, ConvertString("Prompt"));
		//return FALSE;
	} 

	GetConfigFromDevice();
	InitDlg();
	StuToDlg();
		
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
Exemplo n.º 2
0
void CDlgTalk::InitDlg(LLONG hLogHandle, AV_int32 nChannelNum)
{
	m_lLoginID = hLogHandle;
	m_nChannelNum = nChannelNum;

	// 获取语音编码格式
	DHDEV_TALKFORMAT_LIST stuInfo = {0};
	int nRetLen = 0;
	BOOL bRet = CLIENT_QueryDevState(m_lLoginID, DH_DEVSTATE_TALK_ECTYPE, (char*)&stuInfo, sizeof(stuInfo),
		&nRetLen, 5000);
	if (bRet)
	{
		memcpy(&m_stuAudioEncodeFormate, &stuInfo, sizeof(DHDEV_TALKFORMAT_LIST));
	}
}
Exemplo n.º 3
0
BOOL CDlgAlarmState::getCfgFromDevice()
{
	int nRetLen = 0;
	BOOL bRet = CLIENT_QueryDevState(m_lLoginId, DH_DEVSTATE_ALL_ALARM_CHANNELS_STATE, 
		(char*)&m_stuAlarmChannelState, sizeof(NET_CLIENT_ALARM_CHANNELS_STATE), &nRetLen, SDK_API_WAIT);
	if (!bRet)
	{
		CString csErr;
		csErr.Format("%s %08x...", ConvertString("QueryAlarmState failed:", DLG_ALARM_CHANNEL_STATE), CLIENT_GetLastError());
		MessageBox(csErr, ConvertString("Prompt"));
		return FALSE;
	} 
	else
	{
		return TRUE;
	}
}
Exemplo n.º 4
0
static int 
dah_talk_open(struct service *srv, talk_info_t *talk, 
        talk_handle_t *hdl, media_info_t *info)
{
    int ret = -1;
    dah_service_t *dah_srv;

    DH_AUDIO_FORMAT aft;
    DHDEV_TALKDECODE_INFO cur_talk_mode;

    NMP_ASSERT(srv && talk);

    memset(&aft, 0, sizeof(DH_AUDIO_FORMAT));
    memset(&cur_talk_mode, 0, sizeof(DHDEV_TALKDECODE_INFO));

    aft.byFormatTag = 0;
    aft.nChannels = 1;
    aft.nSamplesPerSec = 8000;
    aft.wBitsPerSample = 16;

    dah_srv = (dah_service_t*)srv;
    talk->handle = dah_get_user_id(&dah_srv->parm);
    if(talk->frm)
    {
        nmp_dealloc(talk->frm, sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
        talk->frm = NULL;
    }

    talk->frm = (frame_t *)nmp_alloc0(sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
    if(!talk->frm)
    {
        return -1;
    }
	
    if (DAH_LOGOUT == dah_get_user_id(&dah_srv->parm))
    {
        show_warn("dah device is disconnected.\n");
    }
    else
    {
        ret = CLIENT_InitAudioEncode(aft);
        if(ret != 0)
        {
            show_error("CLIENT_InitAudioEncode error ret = %d\n", ret);
            if(talk->frm)
            {
                nmp_dealloc(talk->frm, sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
                talk->frm = NULL;
            }
            return -1;
        }

        //查询设备支持的语音对讲列表
        DHDEV_TALKFORMAT_LIST lstTalkEncode = {0};
        int nRetlen = 0;
        BOOL bSuccess = CLIENT_QueryDevState(dah_get_user_id(&dah_srv->parm), DH_DEVSTATE_TALK_ECTYPE, 
                (char*)&lstTalkEncode, sizeof(DHDEV_TALKFORMAT_LIST), &nRetlen, 2000);
        if (!(bSuccess&&nRetlen == sizeof(DHDEV_TALKFORMAT_LIST)))
        {
            show_error("query talk format failed, error = 0x%x\n", CLIENT_GetLastError());
            if(talk->frm)
            {
                nmp_dealloc(talk->frm, sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
                talk->frm = NULL;
            }
            return -1;
        }

        ret = set_audio_attr(info, &cur_talk_mode);
        if(ret != 0)
        {
            if(talk->frm)
            {
                nmp_dealloc(talk->frm, sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
                talk->frm = NULL;
            }
            return -1;
        }
        // 设置服务器模式语音对讲模式
        bSuccess = CLIENT_SetDeviceMode(dah_get_user_id(&dah_srv->parm), DH_TALK_ENCODE_TYPE, &cur_talk_mode);
        bSuccess = CLIENT_SetDeviceMode(dah_get_user_id(&dah_srv->parm), DH_TALK_SERVER_MODE, NULL);

        //  开始对讲
        talk->talk_handle = CLIENT_StartTalkEx(dah_get_user_id(&dah_srv->parm), 
            				(pfAudioDataCallBack)dah_audio_data_callback, (LDWORD)talk);
        if(0 != talk->talk_handle)
        {
            show_info("Start talk success! talk_handle = %d\n", (int)talk->talk_handle);
        }
        else
        {
            show_error("Start talk failed!, error = 0x%x, user_id = %d\n", 
                CLIENT_GetLastError(), dah_get_user_id(&dah_srv->parm));
            if(talk->frm)
            {
                nmp_dealloc(talk->frm, sizeof(frame_t) + MAX_ENCODE_BUFFER_LEN);
                talk->frm = NULL;
            }
            return -1;
        }
    }

    return 0; 
}
Exemplo n.º 5
0
BOOL CDeviceWorkState::OnInitDialog() 
{
	CDialog::OnInitDialog();

	g_SetWndStaticText(this);
	
	CString nStr, subStr;
	
	if(!m_dev)
	{
		return TRUE;
	}

	int retlen = 0;
/*
	//test 
	int talkcap = 0;
	BOOL bbb = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_TALK_ECTYPE,
		(char*)&talkcap, sizeof(int), &retlen, 1000);
	if(!bbb || retlen != sizeof(int))
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		return FALSE;
	}
	int prover = 0;
	bbb = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_PROTOCAL_VER,
		(char*)&prover, sizeof(int), &retlen, 1000);
	if(!bbb || retlen != sizeof(int))
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		return FALSE;
	}
*/	
	//get common alarm state
	BOOL bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_COMM_ALARM,
										(char*)&m_almState, sizeof(NET_CLIENT_STATE), &retlen, 1000);
	if(!bRet || retlen != sizeof(NET_CLIENT_STATE))
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		return FALSE;
	}
	
	CString strDev;
	CString strTmp;
	CString strAlarm = ConvertString(MSG_CLIENTSTATE_ALARM);
	int i = 0;
    for (i=0; i<m_almState.alarminputcount; i++)
    {
        if (m_almState.alarm[i])
        {
			strTmp.Format(" %d", i+1);
			strAlarm += strTmp;
        }
    }

    CString strMD = ConvertString(MSG_CLIENTSTATE_MOTION);
    CString strVideoLost = ConvertString(MSG_CLIENTSTATE_VIDEOLOST);
    for (i=0; i<m_almState.channelcount; i++)
    {
        if (m_almState.motiondection[i])
        {
			strTmp.Format(" %d", i+1);
            strMD += strTmp;
        }
        if (m_almState.videolost[i])
        {
			strTmp.Format(" %d", i+1);
            strVideoLost += strTmp;
        }
    }


	//get shelter alarm state
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_SHELTER_ALARM,
		(char*)&m_shltAlarm, 16, &retlen, 1000);
	if(!bRet || retlen != 16)
	{
	//	((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
	//	return FALSE;
	}
	CString strShelter = ConvertString(MSG_WORKSTATE_SHELTER);
	for (i=0; i<16; i++)
    {
        if (m_shltAlarm[i])
        {
			strTmp.Format(" %d", i+1);
            strShelter += strTmp;
        }
    }

	//record state
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_RECORDING,
		(char*)&m_recording, 16, &retlen, 1000);
	if(!bRet || retlen != 16)
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		return FALSE;
	}
	CString strRecord = ConvertString(MSG_WORKSTATE_RECORDING);
	for (i=0; i<16; i++)
    {
        if (m_recording[i])
        {
			strTmp.Format(" %d", i+1);
            strRecord += strTmp;
        }
    }

	//×ÊԴ״̬²éѯ
	DWORD dwResource[3] = {0};
	CString strResource = ConvertString("Resources: ");
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_RESOURCE, (char *)dwResource, 3*sizeof(DWORD), &retlen);
	if (!bRet || retlen != 3*sizeof(DWORD))
	{
		strTmp.Format(ConvertString("query error"));
		strResource += strTmp;
		((CNetSDKDemoDlg *)GetParent())->LastError();
	}
	else
	{
		strResource += ConvertString("System:");
		if (0 == dwResource[0])
		{
			strResource += ConvertString("natural");
		}
		else
		{
			strResource += ConvertString("CPU occupy too high");
		}
		strResource += ",Local show";
		if (0 == dwResource[1])
		{
			strResource += ConvertString("TV natural");
		}
		else
		{
			strResource += ConvertString("TV abnormality");
		}
		if (0 == dwResource[2])
		{
			strResource += ConvertString("VGA natural");
		}
		else
		{
			strResource += ConvertString("VGA abnormality");
		}
	}

	//»ñÈ¡ÂëÁ÷
	const int channum = 3;
	DWORD dwBitRate[channum] = {0};
	CString strBitRate = ConvertString("BitRate : ");
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_BITRATE, (char *)dwBitRate, channum*sizeof(DWORD), &retlen);
	if (!bRet || retlen != channum*sizeof(DWORD))
	{
		strBitRate += ConvertString("query error");
		((CNetSDKDemoDlg*)GetParent())->LastError();
	}
	else
	{
		for (int i = 0; i < channum; i++)
		{
			strTmp.Format("%d( %d ) ", i+1, dwBitRate[i]);
			strBitRate += strTmp;
		}
	}
	DWORD dwNetConn[11] = {0};
	CString strNetConn = ConvertString("NetConn :");
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_CONN, (char *)dwNetConn, 11*sizeof(DWORD), &retlen);
	if (!bRet || retlen < sizeof(DWORD) || retlen > 11*sizeof(DWORD))
	{
		strNetConn += ConvertString("query error");
		((CNetSDKDemoDlg*)GetParent())->LastError();
	}
	else
	{
		strTmp.Format("Num( %d ) ", dwNetConn[0]);
		strNetConn += strTmp;
		for (int i = 1; i <= dwNetConn[0]; i++)
		{
			strTmp.Format("Ip_%d( 0x%0x ) ", i, dwNetConn[i]);
			strNetConn += strTmp;
		}
	}
	bRet = CLIENT_QueryDevState(m_dev->LoginID, DH_DEVSTATE_DISK,
								(char*)&m_diskState, sizeof(DH_HARDDISK_STATE), &retlen, 1000);
	if(!bRet || retlen != sizeof(DH_HARDDISK_STATE))
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		return FALSE;
	}

	CString strDsk;
#ifdef LANG_ENG
	strDsk.Format(ConvertString("Disk num: %d"), m_diskState.dwDiskNum);
#else
	strDsk.Format("Ó²ÅÌÊýÁ¿: %d\n", m_diskState.dwDiskNum);
#endif
	strDev = strAlarm + "\n" + strShelter + "\n" + 
		strMD + "\n" + strVideoLost + "\n" + 
		strRecord + "\n" + strResource + "\n" + 
		strBitRate + "\n" + strNetConn + "\n" + strDsk + "\n";
	
	GetDlgItem(IDC_DEV_STATUS)->SetWindowText(strDev);

	m_disksel.Clear();
	CString strItem;
	for (int k=0; k<m_diskState.dwDiskNum; k++)
	{
		strItem.Format(ConvertString("Disk %d"), k);
		m_disksel.InsertString(k, strItem);
	}
		
	if (m_disksel.GetCount() > 0)
	{
		m_disksel.SetCurSel(0);
		OnSelchangeDiskselCombo();
	}

	return TRUE;
}
Exemplo n.º 6
0
void CClientDlg::OnBtnLogin() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	CString strIp = "";
	CString strUser = "";
	CString strPwd = "";
	int nPort = 0;
	int nError = 0;
	NET_DEVICEINFO deviceInfo = {0};

	GetDlgItemText(IDC_IPADDRESS_IP, strIp);
	GetDlgItemText(IDC_EDIT_USER, strUser);
	GetDlgItemText(IDC_EDIT_PWD, strPwd);
	nPort = GetDlgItemInt(IDC_EDIT_PORT);

	LONG lLoginHandle = CLIENT_Login((LPSTR)(LPCSTR)strIp, nPort, (LPSTR)(LPCSTR)strUser, (LPSTR)(LPCSTR)strPwd, &deviceInfo, &nError);
	if (lLoginHandle != 0)
	{
		m_lLoginHandle = lLoginHandle;

		GetDlgItem(IDC_BTN_LOGIN)->EnableWindow(FALSE);
		GetDlgItem(IDC_BTN_LOGOUT)->EnableWindow(TRUE);
		GetDlgItem(IDC_BTN_STARTTALK)->EnableWindow(TRUE);

		m_ctlEncodeType.ResetContent();
		//Search the audio talk encode formats then device supported 
		int retlen = 0;
		BOOL bSuccess = CLIENT_QueryDevState(m_lLoginHandle, DH_DEVSTATE_TALK_ECTYPE, (char*)&m_lstTalkEncode, sizeof(DHDEV_TALKFORMAT_LIST), &retlen, DEMO_SDK_WAITTIME);
		if (bSuccess && retlen == sizeof(DHDEV_TALKFORMAT_LIST))
		{
			int nIndex = 0;
			CString str;
			for (int i = 0; i < m_lstTalkEncode.nSupportNum; i++)
			{
				switch(m_lstTalkEncode.type[i].encodeType)
				{
				case DH_TALK_DEFAULT:
				case DH_TALK_PCM:
					str = ConvertString("PCM");
					break;
				case DH_TALK_G711a:
					str = ConvertString("G711a");
					break;
				case DH_TALK_AMR:
					str = ConvertString("AMR");
					break;
				case DH_TALK_G711u:
					str = ConvertString("G711u");
					break;
				case DH_TALK_G726:
					str = ConvertString("G726");
					break;
				case DH_TALK_AAC:
					str = ConvertString("AAC");
					break;
				case  DH_TALK_MP3:
					str = ConvertString("MP3");
					break;
				default:
					str = ConvertString("Unknow");
					break;
				}
                if (0 != str.Compare("Unknow"))
                {
                    CString s;
                    s.Format("_%d%s_%d%s", m_lstTalkEncode.type[i].nAudioBit, ConvertString("Bit"), m_lstTalkEncode.type[i].dwSampleRate, ConvertString("SampleRate"));
                    str += s;
                }
				nIndex = m_ctlEncodeType.AddString(str);
				m_ctlEncodeType.SetItemData(nIndex, i);
			}
			
			if (m_ctlEncodeType.GetCount() > 0)
			{
				m_ctlEncodeType.SetCurSel(0);
			}
		}

		DWORD dwRetBytes = 0;
		DHDEV_SYSTEM_ATTR_CFG stuAttr = { sizeof(DHDEV_SYSTEM_ATTR_CFG) };
		if (!CLIENT_GetDevConfig(lLoginHandle, DH_DEV_DEVICECFG, -1, &stuAttr, stuAttr.dwSize, &dwRetBytes, DEMO_SDK_WAITTIME))
		{
			MessageBox(ConvertString("Get device info failed!"), ConvertString("Prompt"));
		}
        m_ctlSpeakerChl.EnableWindow(bSuccess);
        GetDlgItem(IDC_CHECK_SPEAK)->EnableWindow(bSuccess);

		for(int i=0; i<stuAttr.byTalkOutChanNum; i++)
		{
			char szTmp[MAX_PATH] = {0};
			sprintf(szTmp,"speaker_%d", i);
			int nIndex = m_ctlSpeakerChl.AddString(szTmp);
			m_ctlSpeakerChl.SetItemData(nIndex, i);
			m_ctlSpeakerChl.SetCurSel(0);
		}
	}
	else
	{
		m_lLoginHandle = 0;
		ShowLoginErrorReason(nError);
	}
}
Exemplo n.º 7
0
static int 
dah_get_device_config(struct service *srv, int parm_id, void *parm)
{
    int user_id, ret = FALSE, err = 0;

    JDevCap *dev_cap;

    dah_service_t *dah_srv;
    dah_config_t  *dah_cfg;
    dah_new_config_t *dah_new_cfg;
    dah_query_t *query;

    NMP_ASSERT(srv && parm);

    dah_srv = (dah_service_t*)srv;
    user_id = dah_get_user_id(&dah_srv->parm);

    if (DAH_LOGOUT == user_id)
    {
        show_debug("Proxy device logout!!!!!!!!!!!!!!\n");
        return -1;
    }

    switch (parm_id)
    {
        case GET_DEVICE_CONFIG:
            goto GET_CFG;
        case GET_SERIAL_CONFIG:
            goto GET_CFG;
        case GET_DEVICE_TIME:
            goto GET_CFG;
        case GET_NTP_CONFIG:
            goto GET_CFG;
        case GET_NETWORK_CONFIG:
            goto GET_CFG;
        case GET_PPPOE_CONFIG:
            goto GET_CFG;
        case GET_FTP_CONFIG:
            goto GET_CFG;
        case GET_SMTP_CONFIG:
            goto GET_CFG;
        case GET_DDNS_CONFIG:
            goto GET_CFG;
        case GET_UPNP_CONFIG:
            goto GET_CFG;
        case GET_DISK_LIST:
            goto GET_DEV_STATE;
        case GET_ENCODE_CONFIG:
            goto GET_CFG;
        case GET_DISPLAY_CONFIG:
            goto GET_CFG;
        case GET_OSD_CONFIG:
            goto GET_CFG;
        case GET_PTZ_CONFIG:
            goto GET_NEW_CFG;
        case GET_RECORD_CONFIG:
            goto GET_CFG;
        case GET_HIDE_CONFIG:
            goto GET_CFG;
        case GET_MOTION_CONFIG:
            goto GET_CFG;
        case GET_VIDEO_LOST_CONFIG:
            goto GET_CFG;
        case GET_HIDE_ALARM_CONFIG:
            goto GET_CFG;
        case GET_IO_ALARM_CONFIG:
            goto GET_CFG;

        case GET_STORE_LOG:
            query = (dah_query_t*)parm;

            printf("user_id : %d\n", user_id);
            printf("channel  : %d\n", query->channel);
            printf("file_type: %d\n", query->file_type);
            if (CLIENT_QueryRecordFile((LLONG)user_id, 
                    query->channel,
                    query->file_type, 
                    &query->start, 
                    &query->end, 
                    query->card_id, 
                    (NET_RECORDFILE_INFO*)query->buffer, 
                    query->buf_size, 
                    &query->filecount,
                    query->waittime, FALSE))
            {
                show_info("count: %d<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n", query->filecount);
                ret = TRUE;
            }
            else
            {
                ret = FALSE;
                show_debug("ERROR: 0x%x<-------------------------------\n", 
                    CLIENT_GetLastError());
            }
            show_debug("CLIENT_QueryRecordFile: %s<-----------------\n", 
                (ret == TRUE) ? "Success" : "Failure");
            break;

        case GET_CRUISE_CONFIG:
            /*cruise = (dah_cruise_t*)parm;
            show_debug("crz_no: %d<--------------------\n", cruise->crz_no);
            ret = NET_DVR_GetPTZCruise(user_id, 
                    (LONG)cruise->channel, 
                    (LONG)cruise->crz_no, 
                    (NET_DVR_CRUISE_RET*)cruise->input);
            show_debug("NET_DVR_GetDVRConfig: %s<-------------------------------\n", 
                (ret == TRUE) ? "Success" : "Failure");
            if (FALSE == ret)
                show_debug("ERROR: 0x%x<-------------------------------\n", CLIENT_GetLastError());*/
            break;

        case GET_CAPABILITY_SET:
            dev_cap = (JDevCap*)parm;
            dev_cap->cap0 = DEV_CAP_VIDEO_IN | DEV_CAP_AUDIO | DEV_CAP_IRIS | DEV_CAP_PTZ | 
                DEV_CAP_ALARM_IN | DEV_CAP_ALARM_OUT | DEV_CAP_STORAGE | DEV_CAP_WEB | DEV_CAP_PLATFORM | 
                DEV_CAP_INTELLIGENT_ANALYSIS | DEV_CAP_UPDATE | DEV_CAP_VIDEO_OUT;// | DEV_CAP_IR;
            dev_cap->ftp_enable = 1;
            dev_cap->upnp_enable = 0;
            dev_cap->chn_cap.size = sizeof(JChnCap);
            dev_cap->chn_cap.encode = VIDEO_ENCODE_H264_E | VIDEO_ENCODE_MJPEG_E | 
                VIDEO_ENCODE_JPEG_E | VIDEO_ENCODE_MPEG4_E;
            dev_cap->chn_cap.supp_mask = 1;
            dev_cap->chn_cap.mask_count = 4;
            dev_cap->chn_cap.supp_hide_alarm = 1;
            dev_cap->chn_cap.hide_alarm_count = 1;
            dev_cap->chn_cap.supp_move_alarm = 1;
            dev_cap->chn_cap.move_alarm_count = 1;
            dev_cap->chn_cap.supp_video_lost_alarm = 1;
            dev_cap->chn_cap.osd_count = 1;
            dev_cap->chn_cap.stream_count = 2;
            dev_cap->chn_cap.stream_supp_resolution[0] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_HD1 | 
                CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_SVGA | 
                CAP_VIDEO_UXGA | CAP_VIDEO_720P | CAP_VIDEO_960 | CAP_VIDEO_1080P;
            dev_cap->chn_cap.stream_supp_resolution[1] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_HD1 | 
                CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_SVGA | 
                CAP_VIDEO_UXGA | CAP_VIDEO_720P | CAP_VIDEO_960 | CAP_VIDEO_1080P;
            dev_cap->chn_cap.stream_supp_resolution[2] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_HD1 | 
                CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_SVGA | 
                CAP_VIDEO_UXGA | CAP_VIDEO_720P | CAP_VIDEO_960 | CAP_VIDEO_1080P;
            dev_cap->chn_cap.stream_supp_resolution[3] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_HD1 | 
                CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_SVGA | 
                CAP_VIDEO_UXGA | CAP_VIDEO_720P | CAP_VIDEO_960 | CAP_VIDEO_1080P;
            dev_cap->chn_cap.stream_max_frate_rate[0] = 25;
            dev_cap->chn_cap.img_cap = IMA_BRIGHTNESS | IMA_CONTRAST | IMA_SATURATION | IMA_HUE | IMA_SHARPNESS;
            ret = TRUE;
            break;

        default:
            ret = FALSE;
            show_warn("parm_id Invalid!!!!!\n");
            break;
    }

    if (TRUE == ret)
        return 0;
    else
        return -1;

GET_CFG:
    dah_cfg = (dah_config_t*)parm;
    ret = CLIENT_GetDevConfig((LLONG)user_id, 
            (DWORD  ) dah_cfg->command, 
            (LONG   ) dah_cfg->channel, 
            (LPVOID ) dah_cfg->buffer, 
            (DWORD  ) dah_cfg->b_size, 
            (LPDWORD)&dah_cfg->returns, 
            (int    ) dah_cfg->waittime);
    show_debug("CLIENT_GetDevConfig: %s<-------------------------------\n", 
        (ret == TRUE) ? "Success" : "Failure");
    if (TRUE == ret)
        return 0;
    else
    {
        show_debug("ERROR: 0x%x<-------------------------------\n", CLIENT_GetLastError());
        return -1;
    }

GET_NEW_CFG:
    dah_new_cfg = (dah_new_config_t*)parm;
    ret = CLIENT_GetNewDevConfig((LLONG)user_id, 
            dah_new_cfg->command, 
            dah_new_cfg->channel, 
            dah_new_cfg->out_json, 
            DEF_OUT_JSON_SIZE, &err, 
            dah_new_cfg->waittime);

    show_debug("CLIENT_GetNewDevConfig: %s<-------------------------------\n", 
        (ret == TRUE) ? "Success" : "Failure");

    if (TRUE == ret)
    {
        CLIENT_ParseData(
            dah_new_cfg->command, 
            dah_new_cfg->out_json, 
            dah_new_cfg->buffer, 
            dah_new_cfg->b_size, NULL);
        return 0;
    }
    else
    {
        show_debug("ERROR: 0x%x, err: 0x%x<-------------------------------\n", 
            CLIENT_GetLastError(), err);
        return -1;
    }

GET_DEV_STATE:
    dah_cfg = (dah_config_t*)parm;
    ret = CLIENT_QueryDevState(user_id, 
            (DWORD) dah_cfg->command, 
            (char*) dah_cfg->buffer, 
            (DWORD) dah_cfg->b_size, 
            (int* )&dah_cfg->returns, 
            (int  ) dah_cfg->waittime);

    show_debug("CLIENT_QueryDevState: %s<-------------------------------\n", 
        (ret == TRUE) ? "Success" : "Failure");

    if (TRUE == ret)
        return 0;
    else
    {
        show_debug("ERROR: 0x%x, err: %d<-------------------------------\n", 
            CLIENT_GetLastError(), err);
        return -1;
    }
}