netdisk/hcnetdisk.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
netdisk/include/hcnetdisk.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
netdisk/include/netdisk.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
netdisk/test | 补丁 | 查看 | 原始文档 | blame | 历史 | |
netdisk/test.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/test_static.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
netdisk/hcnetdisk.c
@@ -1,12 +1,18 @@ #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); } @@ -16,7 +22,102 @@ //设置连接时间与重连时间 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 @@ -150,77 +251,3 @@ } } 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; } netdisk/include/hcnetdisk.h
@@ -6,34 +6,29 @@ #include "HCNetSDK.h" #include "netdisk.h" //海康网络硬盘 class HCNetdisk : public Netdisk{ class HCNetdisk { std::string devicename; long userid; std::string username; std::string password; std::string host; int port; private: int downloadByTime_wrapper(long userid, int channel, struct tm *start, struct tm *end, char *destfile); int saveRecordFile(int userId, char * srcfile, char * destfile); public: HCNetdisk(const std::string &_devicename): devicename(_devicename) {} static bool envInited ; HCNetdisk(const std::string &_devicename = "HC"): Netdisk(_devicename) {} ~HCNetdisk() {} virtual ~HCNetdisk(); static void netdisk_init(HCNetdisk_EnvConfig &config); virtual int login(Netdisk_LoginInfo &loginInfo); int login(Netdisk_LoginInfo &loginInfo); virtual int logout(); int logout(); virtual int downloadByTime(Netdisk_DownloadRequest &request, std::vector<std::string> *files); int downloadByTime(Netdisk_DownloadRequest &request); static void netdisk_init(Netdisk_EnvConfig *config); static void netdisk_deinit(); }; netdisk/include/netdisk.h
@@ -25,30 +25,36 @@ // 网络硬盘 抽象类 class Netdisk { protected: std::string devicename; std::string devicename; //设备名称 int startChannel; //起始通道号 int maxChannels; //最大通道数 long userid; std::string username; std::string password; std::string host; int port; long userid; //用户id std::string username; //用户名 std::string password; //密码 std::string host; //ip int port; //端口 public: HCNetdisk(const std::string &_devicename): devicename(_devicename) {} Netdisk(const std::string &_devicename): devicename(_devicename) {} ~HCNetdisk() {} virtual ~Netdisk() {} static void netdisk_init(HCNetdisk_EnvConfig &config); virtual int login(Netdisk_LoginInfo &loginInfo) = 0; int login(Netdisk_LoginInfo &loginInfo); virtual int logout() = 0; int logout(); virtual int downloadByTime(Netdisk_DownloadRequest &request, std::vector<std::string> *files) = 0; int downloadByTime(Netdisk_DownloadRequest &request); int getStartChannel() {return startChannel;} int getMaxChannels() {return maxChannels;} }; #endif netdisk/testBinary files differ
netdisk/test.c
@@ -2,14 +2,12 @@ #include "netdisk.h" #include "hcnetdisk.h" int main() { HCNetdisk_EnvConfig config; config.libpath = "../hclib/"; HCNetdisk::netdisk_init(config); HCNetdisk *netdisk = new HCNetdisk("海康"); //Netdisk *netdisk = dhnetdisk_new(); void test1() { Netdisk *netdisk = new HCNetdisk("海康"); //登录 Netdisk_LoginInfo loginInfo; @@ -19,6 +17,7 @@ loginInfo.password = "a1234567"; netdisk->login(loginInfo); std::cout << "起始通道:" << netdisk->getStartChannel() << ", 最大通道号:" << netdisk->getMaxChannels() << std::endl; //下载 Netdisk_DownloadRequest request; request.start.tm_year = 2020-1900; // 这个时间类型从1900开始算作第一年 @@ -38,15 +37,46 @@ request.channel = 1; request.destpath = "/home/basic/data/Downloads/test"; if (netdisk->downloadByTime(request) != 0) { std::vector<std::string> files; if (netdisk->downloadByTime(request, &files) != 0) { printf("下载失败\n"); } else { for(auto f : files) { std::cout << f << '\n'; } } netdisk->logout(); } void test2() { HCNetdisk netdisk("海康"); //Netdisk *netdisk = dhnetdisk_new(); //登录 Netdisk_LoginInfo loginInfo; loginInfo.host = "192.168.20.11"; loginInfo.port = 8000; loginInfo.username = "admin"; loginInfo.password = "a1234567"; netdisk.login(loginInfo); std::cout << "起始通道:" << netdisk.getStartChannel() << ", 最大通道号:" << netdisk.getMaxChannels() << std::endl; } int main() { Netdisk_EnvConfig config; config.libpath = "../hclib/"; HCNetdisk::netdisk_init(&config); test1(); // test2(); HCNetdisk::netdisk_deinit(); } test/test_static.c
New file @@ -0,0 +1,40 @@ #include <iostream> using namespace std; class Box { public: static int objectCount; // Constructor definition Box(double l = 2.0, double b = 2.0, double h = 2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; // Increase every time object is created objectCount++; } double Volume() { return length * breadth * height; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; // Initialize static member of class Box int Box::objectCount = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); // Declare box1 Box Box2(8.5, 6.0, 2.0); // Declare box2 // Print total number of objects. cout << "Total objects: " << Box::objectCount << endl; return 0; }