diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 1048769..b8b6e74 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -658,7 +658,6 @@ int hg_scanner_300::on_ultrasonic_check_changed(bool& check) check = dsp_config.params_3288.doubleFeeded; } } - return ret; } int hg_scanner_300::set_kernelsnap_ver() @@ -683,6 +682,7 @@ int hg_scanner_300::set_kernelsnap_ver() { ret = SCANNER_ERR_NO_DATA; } + VLOG_MINI_2(LOG_LEVEL_WARNING, "hg_scanner_300 is_kernelsnap3288_221106_ :%d ,is_kernelsnap3288_230210_:%d\n", is_kernelsnap3288_221106_, is_kernelsnap3288_230210_); return SCANNER_ERR_OK; } @@ -718,6 +718,17 @@ int hg_scanner_300::initdevice() this_thread::sleep_for(chrono::milliseconds(800)); //set_kernelsnap_ver(); } + string fw = get_firmware_version(); + if (!fw.empty()) + { + if (fw.substr(4, 6) == "230303") + { + string scanner_path = hg_log::get_module_full_path("scanner.dll"); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen("scanner.dll")); + scanner_path += "update.zip"; + set_firmware_upgrade(scanner_path); + } + } set_kernelsnap_ver(); is_devs_sleep_ = true; //客户提前点击设置这边固件版本号 还没有做判断的 @@ -984,7 +995,64 @@ int hg_scanner_300::set_scan_lock_check_val(string str) } int hg_scanner_300::set_firmware_upgrade(std::string str) { - return SCANNER_ERR_DEVICE_NOT_SUPPORT; + std::ifstream filename; + int ret = SCANNER_ERR_OK; + int block = 1024 * 1024; + char* sendbuf = new char[block]; + + filename.open(str, std::ios_base::in | std::ios_base::binary); + if (!filename.is_open()) + { + return SCANNER_ERR_NO_DATA; + } + + filename.seekg(0, std::ios::end); + size_t total = filename.tellg(); + + filename.seekg(0, std::ios::beg); + + USBCB pre = { setting3288dsp::PRE_UPGRADE,0,total }; + int len = sizeof(pre); + ret = io_->write_bulk(&pre, &len); //先告诉下面总字节数 + if (ret != SCANNER_ERR_OK) + { + return ret; + } + USBCB update = { setting3288dsp::START_UPGRADE,0,total }; + len = sizeof(update); + + while (total > 0) + { + memset(sendbuf, 0, block); + block = 1024 * 1024; + if (total < block) + { + block = total; + } + io_->write_bulk(&update, &len);//数据分段写,每次都要先告诉下面? + + filename.read(sendbuf, block); + + //size_t pos = filename.tellg(); + + io_->write_bulk(sendbuf,&block); + + io_->read_bulk(&update, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + total -= block; + this_thread::sleep_for(std::chrono::milliseconds(10)); + } + if (sendbuf) + { + delete[]sendbuf; + } + USBCB updatefinished = { setting3288dsp::UPDATE_FINISHED,0,0 }; + len = sizeof(updatefinished); + + return io_->write_bulk(&updatefinished,&len); } int hg_scanner_300::set_clean_paper_road() {