diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 2ab45ca..41885cd 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -4523,6 +4523,40 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) strcpy((char*)data, str.c_str()); return SCANNER_ERR_OK; } + else if (code == IO_CTRL_CODE_GET_DEVS_CPU) + { + string str; + int ret = get_devs_cpu(str); + if (str.empty()) + { + ret = SCANNER_ERR_NO_DATA; + } + if (*len < str.size()) + { + *len = str.size(); + ret = SCANNER_ERR_INSUFFICIENT_MEMORY; + } + strcpy((char*)data, str.c_str()); + + return ret; + } + else if (code == IO_CTRL_CODE_GET_DEVS_DISK) + { + string str; + int ret = get_devs_disk(str); + if (str.empty()) + { + ret = SCANNER_ERR_NO_DATA; + } + if (*len < str.size()) + { + *len = str.size(); + ret = SCANNER_ERR_INSUFFICIENT_MEMORY; + } + strcpy((char*)data, str.c_str()); + + return ret; + } else if (code == IO_CTRL_CODE_GET_SCAN_WITH_HOLE) { *(SANE_Bool*)data = image_prc_param_.bits.rid_hole || isremove_left_hole || isremove_low_hole || isremove_right_hole || isremove_top_hole ? SANE_TRUE : SANE_FALSE; @@ -4701,6 +4735,14 @@ int hg_scanner::get_devs_time(string& times) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner::get_devs_cpu(string& cpu) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner::get_devs_disk(string& disk) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} int hg_scanner::set_device_model(string sts) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 3c1ee39..0cd1e99 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -549,6 +549,9 @@ public: virtual int set_devs_time(string times); //设置设备时间 //3399设备支持 virtual int get_devs_time(string ×); //获取设备时间 //3399设备支持 + + virtual int get_devs_cpu(string& cpu); //获取设备内存大小 + virtual int get_devs_disk(string& disk); //获取设备硬盘容量大小 }; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 26778e7..738e24f 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -380,6 +380,48 @@ int hg_scanner_239::get_devs_time(string& times) } return ret; } +int hg_scanner_239::get_devs_cpu(string& cpu) +{ + string path = "/usr/local/huago/sysinfo.json"; + long long cpu_size = 0; + std:string str; + int ret = read_control_device_files(path, str); + + json js = json::parse(str); + if (js.contains("MemTotal")) + { + cpu_size = js["MemTotal"]; + } + + float num = (float)cpu_size / 1024 / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + cpu = buf; + + return ret; +} +int hg_scanner_239::get_devs_disk(string& disk) +{ + string path = "/usr/local/huago/sysinfo.json"; + long disk_size = 0; + std:string str; + int ret = read_control_device_files(path, str); + + json js = json::parse(str); + if (js.contains("DiskTotal")) + { + disk_size = js["DiskTotal"]; + } + + float num = (float)disk_size / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + disk = buf; + + return ret; +} int hg_scanner_239::get_status(void) { std::lock_guard lock(io_lock_); diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index cf82650..8301b27 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -142,5 +142,7 @@ public: virtual int set_devs_time(string times); //设置设备时间 //3399设备支持 virtual int get_devs_time(string& times); //获取设备时间 //3399设备支持 + virtual int get_devs_cpu(string& cpu); //获取设备内存大小 + virtual int get_devs_disk(string& disk); //获取设备硬盘容量大小 }; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 1b1958b..e71b906 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -1423,6 +1423,98 @@ int hg_scanner_300::set_updata0303(void) } return 0; } +int hg_scanner_300::get_devs_cpu(string& cpu) +{ + std::string src_name = "/usr/local/huago/sysinfo.json"; + std::string dst_name = "./sys.log"; + + USBCB usbcb = { 0 }; + usbcb.u32_CMD = 0x301; + usbcb.u32_Count = src_name.length(); + int len = src_name.length(); + int size = sizeof(usbcb); + int ret = io_->write_bulk(&usbcb, &size); + ret = io_->write_bulk(&src_name[0], &len); + usbcb.u32_CMD = 0x300; + ret = io_->write_bulk(&usbcb, &size); + ret = io_->read_bulk(&usbcb, &size); + ofstream out(dst_name); + usbcb.u32_CMD = 0x302; + ret = io_->write_bulk(&usbcb, &size); + int touch = 0; + std::string buff; + int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024; + buff.resize(bufsize); + while (touch < usbcb.u32_Count) + { + io_->read_bulk(&buff[0], &bufsize); + out.write(&buff[0], bufsize); + touch += bufsize; + bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize; + } + out.close(); + + long long cpu_size = 0; + json js = json::parse(buff); + if (js.contains("MemTotal")) + { + cpu_size = js["MemTotal"]; + } + + float num = (float)cpu_size / 1024 / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + cpu = buf; + + return ret; +} +int hg_scanner_300::get_devs_disk(string& disk) +{ + std::string src_name = "/usr/local/huago/sysinfo.json"; + std::string dst_name = "./sys.log"; + + USBCB usbcb = { 0 }; + usbcb.u32_CMD = 0x301; + usbcb.u32_Count = src_name.length(); + int len = src_name.length(); + int size = sizeof(usbcb); + int ret = io_->write_bulk(&usbcb, &size); + ret = io_->write_bulk(&src_name[0], &len); + usbcb.u32_CMD = 0x300; + ret = io_->write_bulk(&usbcb, &size); + ret = io_->read_bulk(&usbcb, &size); + ofstream out(dst_name); + usbcb.u32_CMD = 0x302; + ret = io_->write_bulk(&usbcb, &size); + int touch = 0; + std::string buff; + int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024; + buff.resize(bufsize); + while (touch < usbcb.u32_Count) + { + io_->read_bulk(&buff[0], &bufsize); + out.write(&buff[0], bufsize); + touch += bufsize; + bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize; + } + out.close(); + + long disk_size = 0; + json js = json::parse(buff); + if (js.contains("DiskTotal")) + { + disk_size = js["DiskTotal"]; + } + + float num = (float)disk_size / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + disk = buf; + + return ret; +} int hg_scanner_300::set_serial_num(string str) { std::lock_guard lock(io_lock_); diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index f1b0f4f..2af80ec 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once // hg_scanner is the base class of kinds of scanners // @@ -116,4 +116,6 @@ public: virtual int set_auto_flat(int data)override; //设置自动平场校正 // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) virtual int set_updata0303(void)override; + virtual int get_devs_cpu(string& cpu); //获取设备内存大小 + virtual int get_devs_disk(string& disk); //获取设备硬盘容量大小 };