| | |
| | | #include "netdisk.h" |
| | | #include "hcnetdisk.h" |
| | | |
| | | bool HCNetdisk::envInited = false; |
| | | |
| | | void HCNetdisk::netdisk_init(HCNetdisk_EnvConfig &config){ |
| | | |
| | | if (&config != NULL && config.libpath.length() != 0) { |
| | | /** |
| | | * 设备初始化 |
| | | */ |
| | | void HCNetdisk::netdisk_init(Netdisk_EnvConfig *config){ |
| | | if (envInited) { |
| | | return; |
| | | } |
| | | if (config != NULL && config->libpath.length() != 0) { |
| | | NET_DVR_LOCAL_SDK_PATH struComPath = {0}; |
| | | sprintf(struComPath.sPath, "%s", config.libpath.c_str()); //HCNetSDKCom文件夹所在的路径 |
| | | sprintf(struComPath.sPath, "%s", config->libpath.c_str()); //HCNetSDKCom文件夹所在的路径 |
| | | NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &struComPath); |
| | | } |
| | | |
| | |
| | | //设置连接时间与重连时间 |
| | | NET_DVR_SetConnectTime(2000, 1); |
| | | NET_DVR_SetReconnect(10000, true); |
| | | envInited = true; |
| | | } |
| | | |
| | | void HCNetdisk::netdisk_deinit() { |
| | | if (!envInited) { |
| | | return; |
| | | } |
| | | NET_DVR_Cleanup(); |
| | | envInited = false; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | int HCNetdisk::login(Netdisk_LoginInfo &loginInfo) { |
| | | |
| | | //登录参数,包括设备地址、登录用户、密码等 |
| | | NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; |
| | | struLoginInfo.bUseAsynLogin = 0; //同步登录方式 |
| | | strcpy(struLoginInfo.sDeviceAddress, loginInfo.host.c_str()); //设备IP地址 |
| | | struLoginInfo.wPort = loginInfo.port; //设备服务端口 |
| | | strcpy(struLoginInfo.sUserName, loginInfo.username.c_str()); //设备登录用户名 |
| | | strcpy(struLoginInfo.sPassword, loginInfo.password.c_str()); //设备登录密码 |
| | | |
| | | // 注册设备 |
| | | LONG lUserID; |
| | | NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0}; |
| | | //lUserID = 0; |
| | | lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo); |
| | | if (lUserID < 0) |
| | | { |
| | | printf("Login error, %d\n", NET_DVR_GetLastError()); |
| | | NET_DVR_Cleanup(); |
| | | return -1; |
| | | } |
| | | |
| | | printf("lUserID = %ld\n", lUserID); |
| | | userid = lUserID; |
| | | username = loginInfo.username; |
| | | password = loginInfo.password; |
| | | host = loginInfo.host; |
| | | port = loginInfo.port; |
| | | |
| | | |
| | | startChannel = struDeviceInfo.struDeviceV30.byStartDChan; |
| | | maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256; |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int HCNetdisk::logout() { |
| | | //注销用户 |
| | | NET_DVR_Logout(userid); |
| | | userid = -1; |
| | | return 0; |
| | | } |
| | | |
| | | int HCNetdisk::downloadByTime(Netdisk_DownloadRequest &request, std::vector<std::string> *files) { |
| | | struct tm start, end; |
| | | char destfile[1024]; |
| | | int i = 0; |
| | | start = request.start; |
| | | |
| | | while(mktime(&start) < mktime(&(request.end))) { |
| | | if (difftime(mktime(&(request.end)), mktime(&start)) > 10 * 60) { |
| | | end = start; |
| | | end.tm_min += 10; |
| | | mktime(&end); |
| | | } else { |
| | | end = request.end; |
| | | } |
| | | |
| | | // printf("start = %s", asctime(&start)); |
| | | // printf("end = %s", asctime(&end)); |
| | | sprintf(destfile, "%s/%s-%d-%ld-%d", |
| | | request.destpath.c_str(), |
| | | devicename.c_str(), |
| | | request.channel, |
| | | mktime(&start), |
| | | i); |
| | | // printf("%s\n", destfile); |
| | | downloadByTime_wrapper(userid, request.channel, &start, &end, destfile); |
| | | if(files != NULL) { |
| | | files->push_back(destfile); |
| | | } |
| | | start = end; |
| | | i++; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | HCNetdisk::~HCNetdisk() { } |
| | | |
| | | /** |
| | | * @return success: 0, failture : -1 |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | int HCNetdisk::login(Netdisk_LoginInfo &loginInfo) { |
| | | |
| | | //登录参数,包括设备地址、登录用户、密码等 |
| | | NET_DVR_USER_LOGIN_INFO struLoginInfo = {0}; |
| | | struLoginInfo.bUseAsynLogin = 0; //同步登录方式 |
| | | strcpy(struLoginInfo.sDeviceAddress, loginInfo.host.c_str()); //设备IP地址 |
| | | struLoginInfo.wPort = loginInfo.port; //设备服务端口 |
| | | strcpy(struLoginInfo.sUserName, loginInfo.username.c_str()); //设备登录用户名 |
| | | strcpy(struLoginInfo.sPassword, loginInfo.password.c_str()); //设备登录密码 |
| | | |
| | | // 注册设备 |
| | | LONG lUserID; |
| | | NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0}; |
| | | //lUserID = 0; |
| | | lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo); |
| | | if (lUserID < 0) |
| | | { |
| | | printf("Login error, %d\n", NET_DVR_GetLastError()); |
| | | NET_DVR_Cleanup(); |
| | | return -1; |
| | | } |
| | | // printf("lUserID = %ld\n", lUserID); |
| | | userid = lUserID; |
| | | username = loginInfo.username; |
| | | password = loginInfo.password; |
| | | host = loginInfo.host; |
| | | port = loginInfo.port; |
| | | return 0; |
| | | |
| | | } |
| | | |
| | | int HCNetdisk::logout() { |
| | | //注销用户 |
| | | NET_DVR_Logout(userid); |
| | | //释放 SDK 资源 |
| | | NET_DVR_Cleanup(); |
| | | userid = -1; |
| | | return 0; |
| | | } |
| | | |
| | | int HCNetdisk::downloadByTime(Netdisk_DownloadRequest &request) { |
| | | struct tm start, end; |
| | | char destfile[1024]; |
| | | int i = 0; |
| | | start = request.start; |
| | | |
| | | while(mktime(&start) < mktime(&(request.end))) { |
| | | if (difftime(mktime(&(request.end)), mktime(&start)) > 10 * 60) { |
| | | end = start; |
| | | end.tm_min += 10; |
| | | mktime(&end); |
| | | } else { |
| | | end = request.end; |
| | | } |
| | | |
| | | // printf("start = %s", asctime(&start)); |
| | | // printf("end = %s", asctime(&end)); |
| | | sprintf(destfile, "%s/%s-%d-%ld-%d", |
| | | request.destpath.c_str(), |
| | | devicename.c_str(), |
| | | request.channel, |
| | | mktime(&start), |
| | | i); |
| | | // printf("%s\n", destfile); |
| | | downloadByTime_wrapper(userid, request.channel, &start, &end, destfile); |
| | | start = end; |
| | | i++; |
| | | } |
| | | |
| | | return 0; |
| | | } |