static __inline__ void dah_login(dah_service_t *dah_srv) { char addr[MAX_IP_LEN]; int state, error = 0; int user_id = DAH_LOGOUT; proxy_sdk_t sdk_info; NMP_ASSERT(dah_srv); if (proxy_get_device_private(dah_srv->owner, DEV_PRI_PRX_SDK, &sdk_info)) { BUG(); } memset(addr, 0, sizeof(addr)); if (proxy_resolve_host_immediate((const char*)sdk_info.dev_host, addr, sizeof(addr))) { user_id = CLIENT_Login(addr, sdk_info.dev_port, sdk_info.username, sdk_info.password, &dah_srv->dah_info, &error); } else show_warn("Device host '%s' unsolved.\n", sdk_info.dev_host); if (DAH_LOGOUT != user_id) { CLIENT_StartListen(user_id); state = DAH_LOGIN; error = 0; show_debug("dah_login() successful, user_id: %d\n", user_id); } else { state = DAH_LOGOUT; //error = ; if (strlen(addr)) { show_warn("dah_login(deviceID:%d) failure[%s:%s @ %s:%d]. Error: %d\n", dah_srv->owner->fastenings.dev_id, sdk_info.username, sdk_info.password, addr, sdk_info.dev_port, error); } } dah_set_user_id(dah_srv, user_id); dah_set_state(dah_srv, (DAH_STATE_E)state, error); return ; }
void CLoginDlg::OnButtonLogin() { UpdateData(TRUE); int nErr = 0; //Storage the possible error return value. WORD wDVRPort = (WORD)m_nPort; char *pDevIP = (LPSTR)(LPCSTR)m_strIP; char *pchUserName = (LPSTR)(LPCSTR)m_strUserName; char *pchPassword = (LPSTR)(LPCSTR)m_strPassWord; //Call log in interface long lRet = CLIENT_Login(pDevIP,wDVRPort,pchUserName,pchPassword,&m_stDevInfo,&nErr); if(0 != lRet) { m_lLogHandle = lRet; } else { GetConnectError(nErr); } CDialog::OnOK(); }
/*---------------------------------- 函数功能:获取码流分辨率 调用参数: 返回参数: 函数说明:连接NVR后,获取单个摄像头码流分辨率 -----------------------------------*/ _EXT_C_DEVCAM_API BOOL CAM_GetSize(CommonParam *commonParam,long channel){ if (commonParam == NULL){ return FALSE; } if(commonParam->deviceType == NET_IPC_SERIAL){ return TRUE; } if(commonParam->cameraParam[channel].playHwnd == NULL){ commonParam->cameraParam[channel].playHwnd = CreateWindow("EDIT",NULL,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,NULL,NULL); } NET_DEVICEINFO deviceInfo = {0}; int error; DHDEV_CHANNEL_CFG channelConfig = {0}; LDWORD bytesReturned; commonParam->cameraParam[channel].loginID = CLIENT_Login(commonParam->cameraParam[channel].deviceIP,commonParam->cameraParam[channel].devicePort,commonParam->cameraParam[channel].userName,commonParam->cameraParam[channel].passWord,&deviceInfo,&error); if(error != 0){ return FALSE; } CLIENT_GetDevConfig(commonParam->cameraParam[channel].loginID,DH_DEV_CHANNELCFG,0,&channelConfig,sizeof(channelConfig),&bytesReturned); GetSize(channelConfig.stMainVideoEncOpt->byImageSize,commonParam->cameraParam[channel].frameWidth,commonParam->cameraParam[channel].frameHeight); CLIENT_Logout(commonParam->cameraParam[channel].loginID); return TRUE; }
int main(void) { /* * 程序连接上设备后,用户可以通过拔网线或其他方式使设备断线,然后再恢复网络。 */ NET_DEVICEINFO deviceInfo ={0}; unsigned long lLogin; CLIENT_Init(DisConnectFunc,0);//初始化sdk,设置断线回调函数 CLIENT_SetAutoReconnect(AutoConnectFunc,0);//设置断线重连成功的回调函数。不调用此接口,sdk将不进行断线重连。 lLogin = CLIENT_Login("10.7.4.24",37777,"3","",&deviceInfo);//登陆设备,用户需另选设备。 if(lLogin <= 0) { cout<<"登陆设备失败"<<endl; } else { cout<<"登陆设备成功,按任意键退出程序。"<<endl; cout<<"网络故障1分钟如果没有恢复,sdk会认为断线,请耐心等待"<<endl; _getch(); } CLIENT_Logout(lLogin); CLIENT_Cleanup(); return 0; }
// 连接设备 BOOL CRealPlayXCtrl::SetDeviceInfo(LPCTSTR strDvrIP, long nPort, short nChannel, LPCTSTR strUserId, LPCTSTR strUserPwd) { // TODO: Add your dispatch handler code here BOOL bSuccess = FALSE; // 不相同设备,重新登入 if(strDvrIP != m_strDvrIP) { // 登入之前先注销 if(0 != m_LoginID) { CLIENT_Logout(m_LoginID); m_LoginID = 0; m_strDvrIP = ""; //刷新页面 Invalidate(); } int err = 0; //存储可能的错误返回值 NET_DEVICEINFO deviceInfo; // 调用登入接口 long lRet = CLIENT_Login((LPSTR)strDvrIP,(WORD)nPort,(LPSTR)strUserId,(LPSTR)strUserPwd,&deviceInfo,&err); if(0 != lRet) { m_LoginID = lRet; m_nChannel = nChannel; m_strDvrIP = strDvrIP; bSuccess = TRUE; } else { m_LoginID = 0; m_nChannel = -1; bSuccess = FALSE; ShowLoginErrorReason(err); } } else { // 相同设备,没有登入的话再登入 if(0 == m_LoginID) { int err = 0; //存储可能的错误返回值 NET_DEVICEINFO deviceInfo; // 调用登入接口 long lRet = CLIENT_Login((LPSTR)strDvrIP,(WORD)nPort,(LPSTR)strUserId,(LPSTR)strUserPwd,&deviceInfo,&err); if(0 != lRet) { m_LoginID = lRet; m_nChannel = nChannel; bSuccess = TRUE; } else { m_LoginID = 0; m_nChannel = -1; bSuccess = FALSE; ShowLoginErrorReason(err); } } else { m_nChannel = nChannel; bSuccess = TRUE; } } return bSuccess; }
/*---------------------------------- 函数功能: 调用参数:BASE_PARAM的指针: 调用成功,返回TRUE;调用失败,返回FALSE。其它需要返回的参数,置于结构:BASE_PARAM中。 函数说明: -----------------------------------*/ _EXT_C_DEVCAM_API BOOL CAM_Init(CommonParam *commonParam){ if (commonParam == NULL){ commonParam->devError = InitError; return FALSE; } CLIENT_SetAutoReconnect(AutoConnectFunc,0); NET_DEVICEINFO deviceInfo = {0}; int error; DHDEV_CHANNEL_CFG channelConfig = {0}; DHDEV_SYSTEM_ATTR_CFG systemAttr = {0}; LDWORD bytesReturned; commonParam->loginID=CLIENT_Login(commonParam->deviceIP,commonParam->devicePort,commonParam->userName,commonParam->passWord,&deviceInfo,&error); if(error != 0){ commonParam->devError = InitError; return FALSE; } if(!CLIENT_GetDevConfig(commonParam->loginID, DH_DEV_DEVICECFG,-1,&systemAttr,sizeof(systemAttr),&bytesReturned)){ commonParam->devError = InitError; return FALSE; } if(systemAttr.byDevType == NET_NVR_SERIAL){ commonParam->deviceType = NET_NVR_SERIAL; DEV_ENCODER_CFG_EX encoderConfigEx = {0}; if(!CLIENT_GetDevConfig(commonParam->loginID, DH_DEV_ENCODER_CFG, -1, &encoderConfigEx,sizeof(encoderConfigEx),&bytesReturned)){ commonParam->devError = InitError; return FALSE; } commonParam->totalChannels = encoderConfigEx.nChannels; commonParam->onlineCameras = new int[encoderConfigEx.nChannels]; commonParam->cameraParam = new struct tagCommonParam[encoderConfigEx.nChannels]; for(int i=0;i<encoderConfigEx.nChannels;i++){ commonParam->onlineCameras[i] = encoderConfigEx.stuDevInfo[i].bDevChnEnable; if(encoderConfigEx.stuDevInfo[i].byManuFactory == 22){ commonParam->onlineCameras[i] = 0; } } for(int i = 0;i < encoderConfigEx.nChannels;i++){ commonParam->cameraParam[i].deviceType = NET_IPC_SERIAL; strcpy(commonParam->cameraParam[i].deviceIP,encoderConfigEx.stuDevInfo[i].szDevIp); strcpy(commonParam->cameraParam[i].userName,encoderConfigEx.stuDevInfo[i].szDevUser); strcpy(commonParam->cameraParam[i].passWord,encoderConfigEx.stuDevInfo[i].szDevPwd); commonParam->cameraParam[i].devicePort = encoderConfigEx.stuDevInfo[i].wDevPort; commonParam->cameraParam[i].channelNo = encoderConfigEx.stuDevInfo[i].byDecoderID; } }else if(systemAttr.byDevType == NET_IPC_SERIAL){ if(commonParam->playHwnd == NULL){ commonParam->playHwnd = CreateWindow("EDIT",NULL,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,NULL,NULL); } char *channelName = new char[16*32]; int channelCount ; if(!CLIENT_QueryChannelName(commonParam->loginID,channelName,16*32,&channelCount)){ commonParam->devError = InitError; return FALSE; } strcpy(commonParam->deviceName,channelName); delete []channelName; channelName = NULL; commonParam->deviceType = NET_IPC_SERIAL; CLIENT_GetDevConfig(commonParam->loginID,DH_DEV_CHANNELCFG,0,&channelConfig,sizeof(channelConfig),&bytesReturned); GetSize(channelConfig.stMainVideoEncOpt->byImageSize,commonParam->frameWidth,commonParam->frameHeight); }else{ commonParam->devError = InitError; return FALSE; } return TRUE; }
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); } }