From f60edbd5653d9f968c88d15a8394863fca8e7d9c Mon Sep 17 00:00:00 2001 From: modehua Date: Thu, 19 Oct 2023 02:38:54 -0700 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81=E5=BD=92?= =?UTF-8?q?=E8=BF=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 78 ----- JsonConfig.cpp | 282 ------------------ services_processer_code/CMakeLists.txt | 42 +++ services_processer_code/test.cpp | 41 +++ sleep_processes_code/CMakeLists.txt | 42 +++ sleep_processes_code/JsonConfig.cpp | 161 ++++++++++ .../JsonConfig.h | 30 +- json.hpp => sleep_processes_code/json.hpp | 0 sleep_processes_code/main.cpp | 101 +++++++ test.cpp | 64 ---- .../BlockingQueue.h | 0 .../CImageMerge.cpp | 0 CImageMerge.h => zynq_7010_code/CImageMerge.h | 0 zynq_7010_code/CMakeLists.txt | 44 ++- CameraParam.h => zynq_7010_code/CameraParam.h | 0 .../CameraParams.h | 0 .../CorrectParam.cpp | 0 .../CorrectParam.h | 0 .../CuoZhiMotor.cpp | 0 CuoZhiMotor.h => zynq_7010_code/CuoZhiMotor.h | 0 DevUtil.cpp => zynq_7010_code/DevUtil.cpp | 0 DevUtil.h => zynq_7010_code/DevUtil.h | 0 FsmState.cpp => zynq_7010_code/FsmState.cpp | 0 FsmState.h => zynq_7010_code/FsmState.h | 0 Gpio.cpp => zynq_7010_code/Gpio.cpp | 0 Gpio.h => zynq_7010_code/Gpio.h | 0 .../HCamDevice.cpp | 0 HCamDevice.h => zynq_7010_code/HCamDevice.h | 0 HGUsb.cpp => zynq_7010_code/HGUsb.cpp | 0 HGUsb.h => zynq_7010_code/HGUsb.h | 0 ICapturer.h => zynq_7010_code/ICapturer.h | 0 IScanner.h => zynq_7010_code/IScanner.h | 0 .../Jpegcompress.cpp | 0 .../Jpegcompress.h | 0 zynq_7010_code/JsonConfig.cpp | 129 +++++++- zynq_7010_code/JsonConfig.h | 30 +- Keyboard.cpp => zynq_7010_code/Keyboard.cpp | 0 Keyboard.h => zynq_7010_code/Keyboard.h | 0 Led.cpp => zynq_7010_code/Led.cpp | 0 Led.h => zynq_7010_code/Led.h | 0 .../MemoryInfo.cpp | 0 MemoryInfo.h => zynq_7010_code/MemoryInfo.h | 0 Motor.cpp => zynq_7010_code/Motor.cpp | 0 Motor.h => zynq_7010_code/Motor.h | 0 .../MotorConfig.cpp | 0 MotorConfig.h => zynq_7010_code/MotorConfig.h | 0 Motordef.h => zynq_7010_code/Motordef.h | 0 .../MultiFrameCapture.cpp | 0 .../MultiFrameCapture.h | 0 PanelLeds.cpp => zynq_7010_code/PanelLeds.cpp | 0 PanelLeds.h => zynq_7010_code/PanelLeds.h | 0 .../Properties.cpp | 0 Properties.h => zynq_7010_code/Properties.h | 0 .../PropertiesException.h | 0 .../PropertiesParser.cpp | 0 .../PropertiesParser.h | 0 .../PropertiesUtils.cpp | 0 .../PropertiesUtils.h | 0 .../PropertyNotFoundException.h | 0 Pwm.cpp => zynq_7010_code/Pwm.cpp | 0 Pwm.h => zynq_7010_code/Pwm.h | 0 .../ScanConfig.cpp | 0 ScanConfig.h => zynq_7010_code/ScanConfig.h | 0 Scanner.cpp => zynq_7010_code/Scanner.cpp | 0 Scanner.h => zynq_7010_code/Scanner.h | 0 Sensor.cpp => zynq_7010_code/Sensor.cpp | 0 Sensor.h => zynq_7010_code/Sensor.h | 0 .../SysInforTool.cpp | 0 .../SysInforTool.h | 0 ThreadPool.h => zynq_7010_code/ThreadPool.h | 0 TypeIO.cpp => zynq_7010_code/TypeIO.cpp | 0 TypeIO.h => zynq_7010_code/TypeIO.h | 0 USBProtocol.h => zynq_7010_code/USBProtocol.h | 0 .../UsbEndpoint.cpp | 0 UsbEndpoint.h => zynq_7010_code/UsbEndpoint.h | 0 .../UsbScanner.cpp | 0 UsbScanner.h => zynq_7010_code/UsbScanner.h | 0 .../UsbmsgHandler.cpp | 0 .../UsbmsgHandler.h | 0 .../ZouZhiMotor.cpp | 0 ZouZhiMotor.h => zynq_7010_code/ZouZhiMotor.h | 0 autoevent.hpp => zynq_7010_code/autoevent.hpp | 0 bmp.cpp => zynq_7010_code/bmp.cpp | 0 bmp.h => zynq_7010_code/bmp.h | 0 buildconf.h => zynq_7010_code/buildconf.h | 0 camtp.h => zynq_7010_code/camtp.h | 0 .../correct_ultis.cpp | 0 .../correct_ultis.h | 0 countdown.sh => zynq_7010_code/countdown.sh | 0 default_cfg.h => zynq_7010_code/default_cfg.h | 0 filetools.h => zynq_7010_code/filetools.h | 0 {fpga => zynq_7010_code/fpga}/CMakeLists.txt | 0 zynq_7010_code/fpga/bin/libfpgaupdate.a | Bin 0 -> 277912 bytes .../fpga}/build/CMakeCache.txt | 0 .../CMakeFiles/3.18.2/CMakeCCompiler.cmake | 0 .../CMakeFiles/3.18.2/CMakeCXXCompiler.cmake | 0 .../3.18.2/CMakeDetermineCompilerABI_C.bin | Bin .../3.18.2/CMakeDetermineCompilerABI_CXX.bin | Bin .../build/CMakeFiles/3.18.2/CMakeSystem.cmake | 0 .../3.18.2/CompilerIdC/CMakeCCompilerId.c | 0 .../build/CMakeFiles/3.18.2/CompilerIdC/a.out | Bin .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 0 .../CMakeFiles/3.18.2/CompilerIdCXX/a.out | Bin .../CMakeDirectoryInformation.cmake | 0 .../fpga}/build/CMakeFiles/CMakeOutput.log | 0 .../fpga}/build/CMakeFiles/Makefile.cmake | 0 .../fpga}/build/CMakeFiles/Makefile2 | 0 .../build/CMakeFiles/TargetDirectories.txt | 0 .../fpga}/build/CMakeFiles/cmake.check_cache | 0 .../CMakeFiles/fpgaupdate.dir/C.includecache | 0 .../fpgaupdate.dir/CXX.includecache | 0 .../fpgaupdate.dir/DependInfo.cmake | 0 .../CMakeFiles/fpgaupdate.dir/build.make | 0 .../fpgaupdate.dir/cmake_clean.cmake | 0 .../fpgaupdate.dir/cmake_clean_target.cmake | 0 .../CMakeFiles/fpgaupdate.dir/depend.internal | 0 .../CMakeFiles/fpgaupdate.dir/depend.make | 0 .../CMakeFiles/fpgaupdate.dir/flags.make | 0 .../CMakeFiles/fpgaupdate.dir/fpgacontrol.o | Bin .../build/CMakeFiles/fpgaupdate.dir/libmtd.o | Bin .../CMakeFiles/fpgaupdate.dir/libmtd_legacy.o | Bin .../build/CMakeFiles/fpgaupdate.dir/link.txt | 0 .../CMakeFiles/fpgaupdate.dir/progress.make | 0 .../fpga}/build/CMakeFiles/progress.marks | 0 {fpga => zynq_7010_code/fpga}/build/Makefile | 0 .../fpga}/build/cmake_install.cmake | 0 {fpga => zynq_7010_code/fpga}/fpgacontrol.cpp | 0 {fpga => zynq_7010_code/fpga}/fpgacontrol.h | 0 {fpga => zynq_7010_code/fpga}/libmtd.c | 0 {fpga => zynq_7010_code/fpga}/libmtd.h | 0 {fpga => zynq_7010_code/fpga}/libmtd_common.h | 0 {fpga => zynq_7010_code/fpga}/libmtd_int.h | 0 {fpga => zynq_7010_code/fpga}/libmtd_legacy.c | 0 {fpga => zynq_7010_code/fpga}/libmtd_xalloc.h | 0 .../fpgacontrol.cpp | 0 fpgacontrol.h => zynq_7010_code/fpgacontrol.h | 0 .../hgkilltimer.sh | 0 .../huagao_gpio.sh | 0 imageipc.h => zynq_7010_code/imageipc.h | 0 logs_out.cpp => zynq_7010_code/logs_out.cpp | 0 logs_out.h => zynq_7010_code/logs_out.h | 0 main.cpp => zynq_7010_code/main.cpp | 0 .../scannersysinfo.h | 0 .../scanservices_utils.h | 0 serialib.cpp => zynq_7010_code/serialib.cpp | 0 serialib.h => zynq_7010_code/serialib.h | 0 zynq_7010_code/test.cpp | 165 ++++------ threadex.h => zynq_7010_code/threadex.h | 0 usb_gadget.h => zynq_7010_code/usb_gadget.h | 0 usbdevice.cpp => zynq_7010_code/usbdevice.cpp | 0 usbdevice.h => zynq_7010_code/usbdevice.h | 0 usbstring.cpp => zynq_7010_code/usbstring.cpp | 0 usbstring.h => zynq_7010_code/usbstring.h | 0 utilsfunc.cpp => zynq_7010_code/utilsfunc.cpp | 0 utilsfunc.h => zynq_7010_code/utilsfunc.h | 0 155 files changed, 646 insertions(+), 563 deletions(-) delete mode 100644 CMakeLists.txt delete mode 100644 JsonConfig.cpp create mode 100644 services_processer_code/CMakeLists.txt create mode 100644 services_processer_code/test.cpp create mode 100644 sleep_processes_code/CMakeLists.txt create mode 100644 sleep_processes_code/JsonConfig.cpp rename JsonConfig.h => sleep_processes_code/JsonConfig.h (59%) rename json.hpp => sleep_processes_code/json.hpp (100%) create mode 100644 sleep_processes_code/main.cpp delete mode 100644 test.cpp rename BlockingQueue.h => zynq_7010_code/BlockingQueue.h (100%) rename CImageMerge.cpp => zynq_7010_code/CImageMerge.cpp (100%) rename CImageMerge.h => zynq_7010_code/CImageMerge.h (100%) rename CameraParam.h => zynq_7010_code/CameraParam.h (100%) rename CameraParams.h => zynq_7010_code/CameraParams.h (100%) rename CorrectParam.cpp => zynq_7010_code/CorrectParam.cpp (100%) rename CorrectParam.h => zynq_7010_code/CorrectParam.h (100%) rename CuoZhiMotor.cpp => zynq_7010_code/CuoZhiMotor.cpp (100%) rename CuoZhiMotor.h => zynq_7010_code/CuoZhiMotor.h (100%) rename DevUtil.cpp => zynq_7010_code/DevUtil.cpp (100%) rename DevUtil.h => zynq_7010_code/DevUtil.h (100%) rename FsmState.cpp => zynq_7010_code/FsmState.cpp (100%) rename FsmState.h => zynq_7010_code/FsmState.h (100%) rename Gpio.cpp => zynq_7010_code/Gpio.cpp (100%) rename Gpio.h => zynq_7010_code/Gpio.h (100%) rename HCamDevice.cpp => zynq_7010_code/HCamDevice.cpp (100%) rename HCamDevice.h => zynq_7010_code/HCamDevice.h (100%) rename HGUsb.cpp => zynq_7010_code/HGUsb.cpp (100%) rename HGUsb.h => zynq_7010_code/HGUsb.h (100%) rename ICapturer.h => zynq_7010_code/ICapturer.h (100%) rename IScanner.h => zynq_7010_code/IScanner.h (100%) rename Jpegcompress.cpp => zynq_7010_code/Jpegcompress.cpp (100%) rename Jpegcompress.h => zynq_7010_code/Jpegcompress.h (100%) rename Keyboard.cpp => zynq_7010_code/Keyboard.cpp (100%) rename Keyboard.h => zynq_7010_code/Keyboard.h (100%) rename Led.cpp => zynq_7010_code/Led.cpp (100%) rename Led.h => zynq_7010_code/Led.h (100%) rename MemoryInfo.cpp => zynq_7010_code/MemoryInfo.cpp (100%) rename MemoryInfo.h => zynq_7010_code/MemoryInfo.h (100%) rename Motor.cpp => zynq_7010_code/Motor.cpp (100%) rename Motor.h => zynq_7010_code/Motor.h (100%) rename MotorConfig.cpp => zynq_7010_code/MotorConfig.cpp (100%) rename MotorConfig.h => zynq_7010_code/MotorConfig.h (100%) rename Motordef.h => zynq_7010_code/Motordef.h (100%) rename MultiFrameCapture.cpp => zynq_7010_code/MultiFrameCapture.cpp (100%) rename MultiFrameCapture.h => zynq_7010_code/MultiFrameCapture.h (100%) rename PanelLeds.cpp => zynq_7010_code/PanelLeds.cpp (100%) rename PanelLeds.h => zynq_7010_code/PanelLeds.h (100%) rename Properties.cpp => zynq_7010_code/Properties.cpp (100%) rename Properties.h => zynq_7010_code/Properties.h (100%) rename PropertiesException.h => zynq_7010_code/PropertiesException.h (100%) rename PropertiesParser.cpp => zynq_7010_code/PropertiesParser.cpp (100%) rename PropertiesParser.h => zynq_7010_code/PropertiesParser.h (100%) rename PropertiesUtils.cpp => zynq_7010_code/PropertiesUtils.cpp (100%) rename PropertiesUtils.h => zynq_7010_code/PropertiesUtils.h (100%) rename PropertyNotFoundException.h => zynq_7010_code/PropertyNotFoundException.h (100%) rename Pwm.cpp => zynq_7010_code/Pwm.cpp (100%) rename Pwm.h => zynq_7010_code/Pwm.h (100%) rename ScanConfig.cpp => zynq_7010_code/ScanConfig.cpp (100%) rename ScanConfig.h => zynq_7010_code/ScanConfig.h (100%) rename Scanner.cpp => zynq_7010_code/Scanner.cpp (100%) rename Scanner.h => zynq_7010_code/Scanner.h (100%) rename Sensor.cpp => zynq_7010_code/Sensor.cpp (100%) rename Sensor.h => zynq_7010_code/Sensor.h (100%) rename SysInforTool.cpp => zynq_7010_code/SysInforTool.cpp (100%) rename SysInforTool.h => zynq_7010_code/SysInforTool.h (100%) rename ThreadPool.h => zynq_7010_code/ThreadPool.h (100%) rename TypeIO.cpp => zynq_7010_code/TypeIO.cpp (100%) rename TypeIO.h => zynq_7010_code/TypeIO.h (100%) rename USBProtocol.h => zynq_7010_code/USBProtocol.h (100%) rename UsbEndpoint.cpp => zynq_7010_code/UsbEndpoint.cpp (100%) rename UsbEndpoint.h => zynq_7010_code/UsbEndpoint.h (100%) rename UsbScanner.cpp => zynq_7010_code/UsbScanner.cpp (100%) rename UsbScanner.h => zynq_7010_code/UsbScanner.h (100%) rename UsbmsgHandler.cpp => zynq_7010_code/UsbmsgHandler.cpp (100%) rename UsbmsgHandler.h => zynq_7010_code/UsbmsgHandler.h (100%) rename ZouZhiMotor.cpp => zynq_7010_code/ZouZhiMotor.cpp (100%) rename ZouZhiMotor.h => zynq_7010_code/ZouZhiMotor.h (100%) rename autoevent.hpp => zynq_7010_code/autoevent.hpp (100%) rename bmp.cpp => zynq_7010_code/bmp.cpp (100%) rename bmp.h => zynq_7010_code/bmp.h (100%) rename buildconf.h => zynq_7010_code/buildconf.h (100%) rename camtp.h => zynq_7010_code/camtp.h (100%) rename correct_ultis.cpp => zynq_7010_code/correct_ultis.cpp (100%) rename correct_ultis.h => zynq_7010_code/correct_ultis.h (100%) rename countdown.sh => zynq_7010_code/countdown.sh (100%) rename default_cfg.h => zynq_7010_code/default_cfg.h (100%) rename filetools.h => zynq_7010_code/filetools.h (100%) rename {fpga => zynq_7010_code/fpga}/CMakeLists.txt (100%) create mode 100644 zynq_7010_code/fpga/bin/libfpgaupdate.a rename {fpga => zynq_7010_code/fpga}/build/CMakeCache.txt (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CMakeCCompiler.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CMakeCXXCompiler.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_C.bin (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_CXX.bin (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CMakeSystem.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CompilerIdC/CMakeCCompilerId.c (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CompilerIdC/a.out (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CompilerIdCXX/CMakeCXXCompilerId.cpp (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/3.18.2/CompilerIdCXX/a.out (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/CMakeOutput.log (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/Makefile.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/Makefile2 (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/TargetDirectories.txt (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/cmake.check_cache (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/C.includecache (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/CXX.includecache (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/DependInfo.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/build.make (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/cmake_clean.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/cmake_clean_target.cmake (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/depend.internal (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/depend.make (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/flags.make (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/fpgacontrol.o (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/libmtd.o (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/libmtd_legacy.o (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/link.txt (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/fpgaupdate.dir/progress.make (100%) rename {fpga => zynq_7010_code/fpga}/build/CMakeFiles/progress.marks (100%) rename {fpga => zynq_7010_code/fpga}/build/Makefile (100%) rename {fpga => zynq_7010_code/fpga}/build/cmake_install.cmake (100%) rename {fpga => zynq_7010_code/fpga}/fpgacontrol.cpp (100%) rename {fpga => zynq_7010_code/fpga}/fpgacontrol.h (100%) rename {fpga => zynq_7010_code/fpga}/libmtd.c (100%) rename {fpga => zynq_7010_code/fpga}/libmtd.h (100%) rename {fpga => zynq_7010_code/fpga}/libmtd_common.h (100%) rename {fpga => zynq_7010_code/fpga}/libmtd_int.h (100%) rename {fpga => zynq_7010_code/fpga}/libmtd_legacy.c (100%) rename {fpga => zynq_7010_code/fpga}/libmtd_xalloc.h (100%) rename fpgacontrol.cpp => zynq_7010_code/fpgacontrol.cpp (100%) rename fpgacontrol.h => zynq_7010_code/fpgacontrol.h (100%) rename hgkilltimer.sh => zynq_7010_code/hgkilltimer.sh (100%) rename huagao_gpio.sh => zynq_7010_code/huagao_gpio.sh (100%) rename imageipc.h => zynq_7010_code/imageipc.h (100%) rename logs_out.cpp => zynq_7010_code/logs_out.cpp (100%) rename logs_out.h => zynq_7010_code/logs_out.h (100%) rename main.cpp => zynq_7010_code/main.cpp (100%) rename scannersysinfo.h => zynq_7010_code/scannersysinfo.h (100%) rename scanservices_utils.h => zynq_7010_code/scanservices_utils.h (100%) rename serialib.cpp => zynq_7010_code/serialib.cpp (100%) rename serialib.h => zynq_7010_code/serialib.h (100%) rename threadex.h => zynq_7010_code/threadex.h (100%) rename usb_gadget.h => zynq_7010_code/usb_gadget.h (100%) rename usbdevice.cpp => zynq_7010_code/usbdevice.cpp (100%) rename usbdevice.h => zynq_7010_code/usbdevice.h (100%) rename usbstring.cpp => zynq_7010_code/usbstring.cpp (100%) rename usbstring.h => zynq_7010_code/usbstring.h (100%) rename utilsfunc.cpp => zynq_7010_code/utilsfunc.cpp (100%) rename utilsfunc.h => zynq_7010_code/utilsfunc.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 1cc394d..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,78 +0,0 @@ -cmake_minimum_required(VERSION 3.0.0) -project(scanservice) -add_compile_options(-std=c++14) -#set (CMAKE_GENERATOR "/home/holdtecs/zzm-linux/rk3288-linux/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++") - - - - -#交叉编译配置 -# set(CMAKE_SYSTEM_NAME Linux) -# set(CMAKE_SYSTEM_PROCESSOR arm) - -#可选,配置roofs和安装路径如果存在 -#set(linux_sdk_path /home/holdtecs/zzm-linux/rk3288-linux) -#set(linux_sdk_path /mnt/disk2/linux-rhx/rk3288-linux) -#set(CMAKE_SYSROOT ${linux_sdk_path}/buildroot/output/rockchip_rk3288/host/arm-buildroot-linux-gnueabihf/sysroot) -# set(CMAKE_STAGING_PREFIX ${PROJECT_SOURCE_DIR}/install) - -#编译工具配置 -#set(tools ${linux_sdk_path}/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf) -# set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) -# set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) -# set(CMAKE_LIBRARY_ARCHITECTURE arm) -add_subdirectory(fpga) -set(-mfloat-abi=hard) - -# set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) -# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fvectorize") -# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fvectorize") - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") - -set(OpenCV_DIR /home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/) -#set(OpenCV_DIR /home/holdtecs/zzm-linux/fs/usr/lib) -#find_package( OpenCV 3 REQUIRED ) -include_directories( ${OpenCV_INCLUDE_DIRS} ) - -FILE(GLOB SRC "*.cpp" "*.h" "*.c") -FILE(GLOB IMAGEPRO "imageprocess/*.h" "imageprocess/*.cpp" ) -FILE(GLOB FPGA "fpga/*.h" "fpga/*.cpp" ) -# message(STATUS "SRC:" ${SRC}) -# message(STATUS "IMAGEPRO:" ${IMAGEPRO}) - #message(STATUS "FPGA:" ${FPGA}) - set(CMAKE_BUILD_TYPE "Release") - - include_directories( - fpga - imageprocess - imageprocess/include - #/home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/ - ) - - -add_executable(${PROJECT_NAME} ${SRC}) - -#优化代码大小 - SET(-CMAKE_BUILD_TYPE "Release") -install(TARGETS ${PROJECT_NAME} DESTINATION bin) - - -add_custom_command(TARGET ${PROJECT_NAME} - POST_BUILD - COMMAND $ENV{STRIP} -s ${PROJECT_NAME}) - - -set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "-s") -target_link_libraries(${PROJECT_NAME} ${PROJECT_BINARY_DIR}/bin/libfpgaupdate.a) -target_link_libraries(${PROJECT_NAME} opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs turbojpeg pthread ) -target_link_libraries(${PROJECT_NAME} pthread ) - -target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/fpga - /home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/ -) \ No newline at end of file diff --git a/JsonConfig.cpp b/JsonConfig.cpp deleted file mode 100644 index b43c775..0000000 --- a/JsonConfig.cpp +++ /dev/null @@ -1,282 +0,0 @@ -#include "JsonConfig.h" -#include -#include -#include -#include -#define SCAN_INFO_TITLE "ScanInfo" -#define SCAN_TOTAL "TotalScanned" -#define SCAN_ROLLERNUM "RollerNum" -#define SCAN_CUONUM "CuoNum" -#define SCAN_JAMINNUM "JamInNum" -#define SCAN_JAMOUTNUM "JamOutNum" -#define SCAN_DOUNUM "DoubleNum" -#define SCAN_ERRORNUM "ErrorNum" -#define SCAN_SERIALNUM "SerialNum" -#define SCAN_FWVERSION "FWVersion" -#define SCAN_HRATIO "HRatio" -#define SCAN_VRATIO "VRatio" -#define SCAN_SLEEPTIME "SleepTime" -#define SCAN_TOKEN "ScannerToken" -#define SCAN_SPEEDMODE "SpeedMode" -#define SCAN_VID "VID" -#define SCAN_PID "PID" - -#define TOKEN_DEFAULT " " -JsonConfig::JsonConfig() -{ - if (access(SCANNER_SCAN_INFO_PATH, F_OK) == -1) //不存在 - { - ScannerScanInfo defaultinfo = CreateDefaultScanInfo(); - SaveScanInfo(defaultinfo); - } -} -JsonConfig::JsonConfig(ConfigType type) : m_cfgType(type) -{ -} - -JsonConfig::~JsonConfig() -{ -} - -// bool JsonConfig::ReadParam(FPGAConfigParam ¶m) -// { -// bool ret = false; -// if (access(cfgPaths[m_cfgType].c_str(), F_OK) == -1) -// { -// return ret; -// } -// std::ifstream i(cfgPaths[m_cfgType]); -// json j; -// i >> j; -// auto &jobject = j[cfgPrefix[m_cfgType]]; -// jobject[cfgPrefix[m_cfgType] + "ExposureF"].get_to(param.ExposureF); -// jobject[cfgPrefix[m_cfgType] + "ExposureB"].get_to(param.ExposureB); -// jobject[cfgPrefix[m_cfgType] + "GainF"].get_to(param.GainF); -// jobject[cfgPrefix[m_cfgType] + "GainB"].get_to(param.GainB); -// jobject[cfgPrefix[m_cfgType] + "OffsetF"].get_to(param.OffsetF); -// jobject[cfgPrefix[m_cfgType] + "OffsetB"].get_to(param.OffsetB); -// return ret; -// } - -// void JsonConfig::WriteParam(FPGAConfigParam &t_param) -// { -// FPGAConfigParam param; -// if (access(cfgPaths[m_cfgType].c_str(), F_OK) == -1) -// { -// LOG("Not found config %s \n", cfgPaths[m_cfgType].c_str()); -// param = CreateDefault(); -// } -// else -// param = t_param; - -// LOG("start save %s \n", cfgPaths[m_cfgType].c_str()); -// json m_json; -// auto &jobject = m_json[cfgPrefix[m_cfgType]]; -// jobject[cfgPrefix[m_cfgType] + "ExposureF"] = {param.ExposureF[0], param.ExposureF[1], param.ExposureF[2]}; -// jobject[cfgPrefix[m_cfgType] + "ExposureB"] = {param.ExposureB[0], param.ExposureB[1], param.ExposureB[2]}; -// jobject[cfgPrefix[m_cfgType] + "GainF"] = {param.GainF[0], param.GainF[1], param.GainF[2], param.GainF[3], param.GainF[4], param.GainF[5]}; -// jobject[cfgPrefix[m_cfgType] + "GainB"] = {param.GainB[0], param.GainB[1], param.GainB[2], param.GainB[3], param.GainB[4], param.GainB[5]}; -// jobject[cfgPrefix[m_cfgType] + "OffsetF"] = {param.OffsetF[0], param.OffsetF[1], param.OffsetF[2], param.OffsetF[3], param.OffsetF[4], param.OffsetF[5]}; -// jobject[cfgPrefix[m_cfgType] + "OffsetB"] = {param.OffsetB[0], param.OffsetB[1], param.OffsetB[2], param.OffsetB[3], param.OffsetB[4], param.OffsetB[5]}; -// std::ofstream o(cfgPaths[m_cfgType]); -// o << std::setw(4) << m_json << std::endl; -// LOG("save config %s down \n", cfgPaths[m_cfgType].c_str()); -// } - -// FPGAConfigParam JsonConfig::CreateDefault() -// { -// std::string savePath = cfgPaths[m_cfgType]; -// FPGAConfigParam param = {0}; -// for (size_t i = 0; i < 3; i++) -// { -// param.ExposureF[i] = 259; -// param.ExposureB[i] = 238; -// } - -// for (size_t i = 0; i < 6; i++) -// { -// param.GainB[i] = 30; -// param.GainF[i] = 30; -// param.OffsetB[i] = param.OffsetF[i] = 119; -// } -// return param; -// } - -ScannerScanInfo JsonConfig::CreateDefaultScanInfo() -{ - ScannerScanInfo info; - info.CuoNum = 0; - info.DoubleNum = 0; - info.ErrorNum = 0; - info.JamInNum = 0; - info.JamOutNum = 0; - info.FWVersion = FWVERSION; - info.SerialNum = SERIALNUM; - info.TotalScanned = 0; - info.RollerNum = 0; - info.HRatio = 1065353216;//(=(float)1.0) - info.VRatio = 1065353216; - info.SleepTime=3600; - info.Token=TOKEN_DEFAULT; - info.SpeedMode = 4; - l_it = mapFradme_SP.find(info.SpeedMode); - info.FWVersion = l_it->second.FWVERSIO; - - info.VID = 0x3072; - info.PID = 0x0300; - - return info; -} - -ScannerScanInfo JsonConfig::GetScanInfo() -{ - ScannerScanInfo info; - if (access(SCANNER_SCAN_INFO_PATH, F_OK) != 0) - { - printf("/mnt/flash-disk/huago/jsonconfig.json do not exist!\n"); - info = CreateDefaultScanInfo(); - SaveScanInfo(info); - return info; - } - std::ifstream i(SCANNER_SCAN_INFO_PATH); - auto pos = i.tellg(); - i.seekg(0, ios::end); - if(i.tellg()<=2) - { - printf("/mnt/flash-disk/huago/jsonconfig.json file size < 2!\n"); - info = CreateDefaultScanInfo(); - SaveScanInfo(info); - return info; - } - json j; - i.seekg(pos); - { - std::lock_guard m_c(m_lock); - i >> j; - i.close(); - } - - auto &jobject = j[SCAN_INFO_TITLE]; - - if (jobject.contains(SCAN_TOTAL)) - jobject[SCAN_TOTAL].get_to(info.TotalScanned); - else - info.TotalScanned = 0; - - if (jobject.contains(SCAN_ROLLERNUM)) - jobject[SCAN_ROLLERNUM].get_to(info.RollerNum); - else - info.RollerNum = 0; - - if (jobject.contains(SCAN_CUONUM)) - jobject[SCAN_CUONUM].get_to(info.CuoNum); - else - info.CuoNum = 0; - - if (jobject.contains(SCAN_JAMINNUM)) - jobject[SCAN_JAMINNUM].get_to(info.JamInNum); - else - info.JamInNum = 0; - - if (jobject.contains(SCAN_JAMOUTNUM)) - jobject[SCAN_JAMOUTNUM].get_to(info.JamOutNum); - else - info.JamOutNum = 0; - - if (jobject.contains(SCAN_DOUNUM)) - jobject[SCAN_DOUNUM].get_to(info.DoubleNum); - else - info.DoubleNum = 0; - - if (jobject.contains(SCAN_ERRORNUM)) - jobject[SCAN_ERRORNUM].get_to(info.ErrorNum); - else - info.ErrorNum = 0; - - if (jobject.contains(SCAN_SERIALNUM)) - jobject[SCAN_SERIALNUM].get_to(info.SerialNum); - else - info.SerialNum = SERIALNUM; - - if (jobject.contains(SCAN_FWVERSION)) - jobject[SCAN_FWVERSION].get_to(info.FWVersion); - else - info.FWVersion = l_it->second.FWVERSIO; - - if (jobject.contains(SCAN_HRATIO)) - jobject[SCAN_HRATIO].get_to(info.HRatio); - else - info.HRatio = 1065353216;//默认 1.0f - - if (jobject.contains(SCAN_VRATIO)) - jobject[SCAN_VRATIO].get_to(info.VRatio); - else - info.VRatio = 1065353216;//默认 1.0f - - if (jobject.contains(SCAN_SLEEPTIME)) - jobject[SCAN_SLEEPTIME].get_to(info.SleepTime); - else - info.SleepTime = 3600;//默认 1.0f - - if(jobject.contains(SCAN_TOKEN)) - jobject[SCAN_TOKEN].get_to(info.Token); - else - { - info.Token=TOKEN_DEFAULT; - } - - if(jobject.contains(SCAN_SPEEDMODE)) - jobject[SCAN_SPEEDMODE].get_to(info.SpeedMode); - else - { - info.SpeedMode = 4; - } - - if(jobject.contains(SCAN_VID)) - jobject[SCAN_VID].get_to(info.VID); - else - { - info.VID = 0x3072; - } - - - if(jobject.contains(SCAN_PID)) - jobject[SCAN_PID].get_to(info.PID); - else - { - #ifdef G400 - info.PID = 0x0400; - #else - info.PID = 0x0300; - #endif - } - return info; -} - -void JsonConfig::SaveScanInfo(const ScannerScanInfo &info) -{ - json m_json; - auto &jobject = m_json[SCAN_INFO_TITLE]; - jobject[SCAN_TOTAL] = info.TotalScanned; - jobject[SCAN_ROLLERNUM] = info.RollerNum; - jobject[SCAN_CUONUM] = info.CuoNum; - jobject[SCAN_JAMINNUM] = info.JamInNum; - jobject[SCAN_JAMOUTNUM] = info.JamOutNum; - jobject[SCAN_DOUNUM] = info.DoubleNum; - jobject[SCAN_ERRORNUM] = info.ErrorNum; - jobject[SCAN_SERIALNUM] = info.SerialNum; - jobject[SCAN_FWVERSION] = info.FWVersion; - jobject[SCAN_HRATIO]= info.HRatio; - jobject[SCAN_VRATIO] = info.VRatio; - jobject[SCAN_SLEEPTIME] = info.SleepTime; - jobject[SCAN_TOKEN] = info.Token; - jobject[SCAN_SPEEDMODE] = info.SpeedMode; - jobject[SCAN_VID] = info.VID; - jobject[SCAN_PID] = info.PID; - std::lock_guard m_c(m_lock); - std::ofstream o(SCANNER_SCAN_INFO_PATH); - //std::cout< +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int fd; + int ret; + + ret = mkfifo("my_fifo", 0666); + if(ret != 0) + { + perror("mkfifo"); + } + + printf("before open\n"); + fd = open("my_fifo", O_WRONLY); //等着只读 + if(fd < 0) + { + perror("open fifo"); + } + + printf("after open\n"); + + + sleep(5); + char send[100] = "100"; + write(fd, send, strlen(send)); + printf("write to my_fifo buf=%s\n", send); + while (1) + { + /* code */ + } + + + + return 0; +} \ No newline at end of file diff --git a/sleep_processes_code/CMakeLists.txt b/sleep_processes_code/CMakeLists.txt new file mode 100644 index 0000000..03d32ec --- /dev/null +++ b/sleep_processes_code/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.0.0) +project(sleep_processes) +add_compile_options(-std=c++14) +#set (CMAKE_GENERATOR "/home/holdtecs/zzm-linux/rk3288-linux/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++") + + + + + + + + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") + + + +FILE(GLOB SRC "*.cpp" "*.h" "*.c") +FILE(GLOB IMAGEPRO "imageprocess/*.h" "imageprocess/*.cpp" ) +FILE(GLOB FPGA "fpga/*.h" "fpga/*.cpp" ) + + set(CMAKE_BUILD_TYPE "Release") + + + +add_executable(${PROJECT_NAME} ${SRC}) + +#优化代码大小 + SET(-CMAKE_BUILD_TYPE "Release") +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + + +add_custom_command(TARGET ${PROJECT_NAME} + POST_BUILD + COMMAND $ENV{STRIP} -s ${PROJECT_NAME}) + + +set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "-s") + +target_link_libraries(${PROJECT_NAME} opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs turbojpeg pthread ) +target_link_libraries(${PROJECT_NAME} pthread ) + diff --git a/sleep_processes_code/JsonConfig.cpp b/sleep_processes_code/JsonConfig.cpp new file mode 100644 index 0000000..9de7589 --- /dev/null +++ b/sleep_processes_code/JsonConfig.cpp @@ -0,0 +1,161 @@ +#include "JsonConfig.h" +#include +#include +#include +#include +#define SCAN_INFO_TITLE "ScanInfo" +#define SCAN_TOTAL "TotalScanned" +#define SCAN_ROLLERNUM "RollerNum" +#define SCAN_CUONUM "CuoNum" +#define SCAN_JAMINNUM "JamInNum" +#define SCAN_JAMOUTNUM "JamOutNum" +#define SCAN_DOUNUM "DoubleNum" +#define SCAN_ERRORNUM "ErrorNum" +#define SCAN_SERIALNUM "SerialNum" +#define SCAN_FWVERSION "FWVersion" +#define SCAN_HRATIO "HRatio" +#define SCAN_VRATIO "VRatio" +#define SCAN_SLEEPTIME "SleepTime" +#define SCAN_TOKEN "ScannerToken" +#define SCAN_SPEEDMODE "SpeedMode" +#define SCAN_VID "VID" +#define SCAN_PID "PID" + +#define TOKEN_DEFAULT " " +#define FWVERSION "G345230918" +#define SERIALNUM "HS6010A38001P1" +JsonConfig::JsonConfig() +{ + if (access(SCANNER_SCAN_INFO_PATH, F_OK) == -1) //不存在 + { + + } +} +JsonConfig::JsonConfig(ConfigType type) : m_cfgType(type) +{ +} + +JsonConfig::~JsonConfig() +{ +} + + + + +ScannerScanInfo JsonConfig::GetScanInfo() +{ + ScannerScanInfo info; + if (access(SCANNER_SCAN_INFO_PATH, F_OK) != 0) + { + return info; + } + std::ifstream i(SCANNER_SCAN_INFO_PATH); + auto pos = i.tellg(); + i.seekg(0, ios::end); + if(i.tellg()<=2) + { + return info; + } + json j; + i.seekg(pos); + { + std::lock_guard m_c(m_lock); + i >> j; + i.close(); + } + + auto &jobject = j[SCAN_INFO_TITLE]; + + if (jobject.contains(SCAN_TOTAL)) + jobject[SCAN_TOTAL].get_to(info.TotalScanned); + else + info.TotalScanned = 0; + + if (jobject.contains(SCAN_ROLLERNUM)) + jobject[SCAN_ROLLERNUM].get_to(info.RollerNum); + else + info.RollerNum = 0; + + if (jobject.contains(SCAN_CUONUM)) + jobject[SCAN_CUONUM].get_to(info.CuoNum); + else + info.CuoNum = 0; + + if (jobject.contains(SCAN_JAMINNUM)) + jobject[SCAN_JAMINNUM].get_to(info.JamInNum); + else + info.JamInNum = 0; + + if (jobject.contains(SCAN_JAMOUTNUM)) + jobject[SCAN_JAMOUTNUM].get_to(info.JamOutNum); + else + info.JamOutNum = 0; + + if (jobject.contains(SCAN_DOUNUM)) + jobject[SCAN_DOUNUM].get_to(info.DoubleNum); + else + info.DoubleNum = 0; + + if (jobject.contains(SCAN_ERRORNUM)) + jobject[SCAN_ERRORNUM].get_to(info.ErrorNum); + else + info.ErrorNum = 0; + + if (jobject.contains(SCAN_SERIALNUM)) + jobject[SCAN_SERIALNUM].get_to(info.SerialNum); + else + info.SerialNum = SERIALNUM; + + if (jobject.contains(SCAN_FWVERSION)) + jobject[SCAN_FWVERSION].get_to(info.FWVersion); + + + if (jobject.contains(SCAN_HRATIO)) + jobject[SCAN_HRATIO].get_to(info.HRatio); + else + info.HRatio = 1065353216;//默认 1.0f + + if (jobject.contains(SCAN_VRATIO)) + jobject[SCAN_VRATIO].get_to(info.VRatio); + else + info.VRatio = 1065353216;//默认 1.0f + + if (jobject.contains(SCAN_SLEEPTIME)) + jobject[SCAN_SLEEPTIME].get_to(info.SleepTime); + else + info.SleepTime = 3600;//默认 1.0f + + if(jobject.contains(SCAN_TOKEN)) + jobject[SCAN_TOKEN].get_to(info.Token); + else + { + info.Token=TOKEN_DEFAULT; + } + + if(jobject.contains(SCAN_SPEEDMODE)) + jobject[SCAN_SPEEDMODE].get_to(info.SpeedMode); + else + { + info.SpeedMode = 4; + } + + if(jobject.contains(SCAN_VID)) + jobject[SCAN_VID].get_to(info.VID); + else + { + info.VID = 0x3072; + } + + + if(jobject.contains(SCAN_PID)) + jobject[SCAN_PID].get_to(info.PID); + else + { + #ifdef G400 + info.PID = 0x0400; + #else + info.PID = 0x0300; + #endif + } + return info; +} diff --git a/JsonConfig.h b/sleep_processes_code/JsonConfig.h similarity index 59% rename from JsonConfig.h rename to sleep_processes_code/JsonConfig.h index 746bf28..f8eca73 100644 --- a/JsonConfig.h +++ b/sleep_processes_code/JsonConfig.h @@ -1,10 +1,28 @@ #pragma once #include #include "json.hpp" -#include "scanservices_utils.h" #include #include #include +struct ScannerScanInfo +{ + unsigned int TotalScanned; //扫描总页数 + unsigned int RollerNum; + unsigned int CuoNum; //搓纸总数 + unsigned int JamInNum; //搓纸失败次数 + unsigned int JamOutNum; //卡纸次数 + unsigned int DoubleNum; //双张次数 + unsigned int ErrorNum; //其他异常次数 + unsigned int HRatio; //横向校正系数 + unsigned int VRatio; //纵向校正系数 + unsigned int SleepTime; //休眠时间 单位s + unsigned int SpeedMode; //速率模式 + unsigned int VID; //vid + unsigned short PID; //pid + std::string SerialNum; //序列号 + std::string FWVersion; //固件版本号 + std::string Token; //token 令牌 +}; #define SCANNER_SCAN_INFO_PATH "/mnt/flash-disk/huago/jsonconfig.json" using namespace std; @@ -38,18 +56,10 @@ public: JsonConfig(); JsonConfig(ConfigType type); ~JsonConfig(); - /* - *若返回false 则表示文件不存在或文件读取失败 - */ - // bool ReadParam(FPGAConfigParam& param); - // void WriteParam(FPGAConfigParam& t_param); ScannerScanInfo GetScanInfo(); - map::iterator l_it; - void SaveScanInfo(const ScannerScanInfo& info); + private: - //FPGAConfigParam CreateDefault(); std::mutex m_lock; - ScannerScanInfo CreateDefaultScanInfo(); }; diff --git a/json.hpp b/sleep_processes_code/json.hpp similarity index 100% rename from json.hpp rename to sleep_processes_code/json.hpp diff --git a/sleep_processes_code/main.cpp b/sleep_processes_code/main.cpp new file mode 100644 index 0000000..aa0b8c6 --- /dev/null +++ b/sleep_processes_code/main.cpp @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include"JsonConfig.h" +#define erroe_status -1 +#define start_sleep 1 +#define close_sleep 0 + +int readfile(int fd, char* buf,int num ) +{ + lseek(fd, 0, SEEK_SET); + int ret = read(fd, buf, num); + if (ret == -1) + { + printf("readfile error:%s\r\n",strerror(ret)); + return erroe_status; + } + if (ret == 0) + { + printf("readfile error:%s\r\n","service connection is lost"); + return erroe_status; + } + printf("sleep processes len :%d\r\n",ret); + return atoi(buf); +} +void start_enter_lowpwoer(int time) +{ + int seconds = time; + + if(time < 0 || time < 180) + seconds = 180; + else + seconds = time; + + std::string str="sh /mnt/flash-disk/countdown.sh start 0 0 "+std::to_string(seconds) + " &"; + printf("start_enter_lowpwoer %s \n",str.c_str()); + + int ret = system(str.c_str()); +} +void stop_countdown() +{ + int ret = system("sh /mnt/flash-disk/killtimer.sh"); + printf("system stop_countdown :%d\r\n",ret); +} + +int main(int argc, char *argv[]) +{ + int fd = -1; + int ret = 0; + pollfd pfd; + ret = mkfifo("/home/root/dev/sleep", 0666); + if(ret != 0) + { + perror("/home/root/dev/sleep"); + } + + printf("before open\n"); + fd = open("/home/root/dev/sleep", O_RDONLY);//等着只写 + if(fd < 0) + { + perror("open fifo"); + } + + printf("after open\n"); + + char buffer[12]; + JsonConfig js; + + + while (true) + { + ret = readfile(fd,buffer,sizeof(buffer)); + printf("while read buf:[%d]\n", ret); + if (ret == -1) + { + system("sh /mnt/flash-disk/leds.sh 1"); + sleep(3); + continue; + } + + if (ret == 1) + { + ScannerScanInfo info = js.GetScanInfo(); + stop_countdown(); + sleep(3); + start_enter_lowpwoer(info.SleepTime); + } + else + stop_countdown(); + + } + close(fd); + return 0; +} + + diff --git a/test.cpp b/test.cpp deleted file mode 100644 index 2d9c60a..0000000 --- a/test.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define VIDPID_PATH "/usr/local/bin/mtpd.sh" - -/* - * FunctionName: main - * Description: - */ -int main01(int argc, char *argv[]) -{ - int ret = 0; - printf("argc = %d \n", argc); - if (argc != 3) - { - return -1; - } - unsigned int i_vid = atoi(argv[1]); - unsigned int i_pid = atoi(argv[2]); - printf("arg0 = %d arg1=%d \n", i_vid, i_pid); - char buf_vid[5] ={0}; - char buf_pid[5] ={0}; - buf_vid[4]='\0'; - buf_pid[4]='\0'; - sprintf(buf_vid,"%04x",i_vid); - sprintf(buf_pid,"%04x",i_pid); - printf("buf_vid = %s buf_pid=%s \n", buf_vid, buf_pid); - if (i_pid > 0 && i_vid > 0) - { - FILE *fd; - - fd = fopen(VIDPID_PATH, "rb+"); - if (!fd) { - printf( "error open /usr/local/bin/mtp.sh...\n"); - return -1; - } - else { - printf( "open %s scuess.fd = %d\n", VIDPID_PATH,fd); - } - - /*set vid*/ - fseek(fd , 0x18e , SEEK_SET); - ret = fwrite(buf_vid, 1, 4, fd); - - /*set pid*/ - fseek(fd , 0x1c8 , SEEK_SET); - ret = fwrite(buf_pid, 1, 4, fd); - - fclose(fd); - return 0; - } - - return -1; -} /* ---------- end of function main ---------- */ diff --git a/BlockingQueue.h b/zynq_7010_code/BlockingQueue.h similarity index 100% rename from BlockingQueue.h rename to zynq_7010_code/BlockingQueue.h diff --git a/CImageMerge.cpp b/zynq_7010_code/CImageMerge.cpp similarity index 100% rename from CImageMerge.cpp rename to zynq_7010_code/CImageMerge.cpp diff --git a/CImageMerge.h b/zynq_7010_code/CImageMerge.h similarity index 100% rename from CImageMerge.h rename to zynq_7010_code/CImageMerge.h diff --git a/zynq_7010_code/CMakeLists.txt b/zynq_7010_code/CMakeLists.txt index 03d32ec..1cc394d 100644 --- a/zynq_7010_code/CMakeLists.txt +++ b/zynq_7010_code/CMakeLists.txt @@ -1,26 +1,58 @@ cmake_minimum_required(VERSION 3.0.0) -project(sleep_processes) +project(scanservice) add_compile_options(-std=c++14) #set (CMAKE_GENERATOR "/home/holdtecs/zzm-linux/rk3288-linux/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++") +#交叉编译配置 +# set(CMAKE_SYSTEM_NAME Linux) +# set(CMAKE_SYSTEM_PROCESSOR arm) +#可选,配置roofs和安装路径如果存在 +#set(linux_sdk_path /home/holdtecs/zzm-linux/rk3288-linux) +#set(linux_sdk_path /mnt/disk2/linux-rhx/rk3288-linux) +#set(CMAKE_SYSROOT ${linux_sdk_path}/buildroot/output/rockchip_rk3288/host/arm-buildroot-linux-gnueabihf/sysroot) +# set(CMAKE_STAGING_PREFIX ${PROJECT_SOURCE_DIR}/install) +#编译工具配置 +#set(tools ${linux_sdk_path}/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf) +# set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) +# set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) +# set(CMAKE_LIBRARY_ARCHITECTURE arm) +add_subdirectory(fpga) +set(-mfloat-abi=hard) +# set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +# set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -fvectorize") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fvectorize") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") - +set(OpenCV_DIR /home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/) +#set(OpenCV_DIR /home/holdtecs/zzm-linux/fs/usr/lib) +#find_package( OpenCV 3 REQUIRED ) +include_directories( ${OpenCV_INCLUDE_DIRS} ) FILE(GLOB SRC "*.cpp" "*.h" "*.c") FILE(GLOB IMAGEPRO "imageprocess/*.h" "imageprocess/*.cpp" ) FILE(GLOB FPGA "fpga/*.h" "fpga/*.cpp" ) - +# message(STATUS "SRC:" ${SRC}) +# message(STATUS "IMAGEPRO:" ${IMAGEPRO}) + #message(STATUS "FPGA:" ${FPGA}) set(CMAKE_BUILD_TYPE "Release") + include_directories( + fpga + imageprocess + imageprocess/include + #/home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/ + ) add_executable(${PROJECT_NAME} ${SRC}) @@ -36,7 +68,11 @@ add_custom_command(TARGET ${PROJECT_NAME} set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "-s") - +target_link_libraries(${PROJECT_NAME} ${PROJECT_BINARY_DIR}/bin/libfpgaupdate.a) target_link_libraries(${PROJECT_NAME} opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs turbojpeg pthread ) target_link_libraries(${PROJECT_NAME} pthread ) +target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/fpga + /home/modehua/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/include/opencv4/ +) \ No newline at end of file diff --git a/CameraParam.h b/zynq_7010_code/CameraParam.h similarity index 100% rename from CameraParam.h rename to zynq_7010_code/CameraParam.h diff --git a/CameraParams.h b/zynq_7010_code/CameraParams.h similarity index 100% rename from CameraParams.h rename to zynq_7010_code/CameraParams.h diff --git a/CorrectParam.cpp b/zynq_7010_code/CorrectParam.cpp similarity index 100% rename from CorrectParam.cpp rename to zynq_7010_code/CorrectParam.cpp diff --git a/CorrectParam.h b/zynq_7010_code/CorrectParam.h similarity index 100% rename from CorrectParam.h rename to zynq_7010_code/CorrectParam.h diff --git a/CuoZhiMotor.cpp b/zynq_7010_code/CuoZhiMotor.cpp similarity index 100% rename from CuoZhiMotor.cpp rename to zynq_7010_code/CuoZhiMotor.cpp diff --git a/CuoZhiMotor.h b/zynq_7010_code/CuoZhiMotor.h similarity index 100% rename from CuoZhiMotor.h rename to zynq_7010_code/CuoZhiMotor.h diff --git a/DevUtil.cpp b/zynq_7010_code/DevUtil.cpp similarity index 100% rename from DevUtil.cpp rename to zynq_7010_code/DevUtil.cpp diff --git a/DevUtil.h b/zynq_7010_code/DevUtil.h similarity index 100% rename from DevUtil.h rename to zynq_7010_code/DevUtil.h diff --git a/FsmState.cpp b/zynq_7010_code/FsmState.cpp similarity index 100% rename from FsmState.cpp rename to zynq_7010_code/FsmState.cpp diff --git a/FsmState.h b/zynq_7010_code/FsmState.h similarity index 100% rename from FsmState.h rename to zynq_7010_code/FsmState.h diff --git a/Gpio.cpp b/zynq_7010_code/Gpio.cpp similarity index 100% rename from Gpio.cpp rename to zynq_7010_code/Gpio.cpp diff --git a/Gpio.h b/zynq_7010_code/Gpio.h similarity index 100% rename from Gpio.h rename to zynq_7010_code/Gpio.h diff --git a/HCamDevice.cpp b/zynq_7010_code/HCamDevice.cpp similarity index 100% rename from HCamDevice.cpp rename to zynq_7010_code/HCamDevice.cpp diff --git a/HCamDevice.h b/zynq_7010_code/HCamDevice.h similarity index 100% rename from HCamDevice.h rename to zynq_7010_code/HCamDevice.h diff --git a/HGUsb.cpp b/zynq_7010_code/HGUsb.cpp similarity index 100% rename from HGUsb.cpp rename to zynq_7010_code/HGUsb.cpp diff --git a/HGUsb.h b/zynq_7010_code/HGUsb.h similarity index 100% rename from HGUsb.h rename to zynq_7010_code/HGUsb.h diff --git a/ICapturer.h b/zynq_7010_code/ICapturer.h similarity index 100% rename from ICapturer.h rename to zynq_7010_code/ICapturer.h diff --git a/IScanner.h b/zynq_7010_code/IScanner.h similarity index 100% rename from IScanner.h rename to zynq_7010_code/IScanner.h diff --git a/Jpegcompress.cpp b/zynq_7010_code/Jpegcompress.cpp similarity index 100% rename from Jpegcompress.cpp rename to zynq_7010_code/Jpegcompress.cpp diff --git a/Jpegcompress.h b/zynq_7010_code/Jpegcompress.h similarity index 100% rename from Jpegcompress.h rename to zynq_7010_code/Jpegcompress.h diff --git a/zynq_7010_code/JsonConfig.cpp b/zynq_7010_code/JsonConfig.cpp index 9de7589..b43c775 100644 --- a/zynq_7010_code/JsonConfig.cpp +++ b/zynq_7010_code/JsonConfig.cpp @@ -22,13 +22,12 @@ #define SCAN_PID "PID" #define TOKEN_DEFAULT " " -#define FWVERSION "G345230918" -#define SERIALNUM "HS6010A38001P1" JsonConfig::JsonConfig() { if (access(SCANNER_SCAN_INFO_PATH, F_OK) == -1) //不存在 { - + ScannerScanInfo defaultinfo = CreateDefaultScanInfo(); + SaveScanInfo(defaultinfo); } } JsonConfig::JsonConfig(ConfigType type) : m_cfgType(type) @@ -39,14 +38,104 @@ JsonConfig::~JsonConfig() { } +// bool JsonConfig::ReadParam(FPGAConfigParam ¶m) +// { +// bool ret = false; +// if (access(cfgPaths[m_cfgType].c_str(), F_OK) == -1) +// { +// return ret; +// } +// std::ifstream i(cfgPaths[m_cfgType]); +// json j; +// i >> j; +// auto &jobject = j[cfgPrefix[m_cfgType]]; +// jobject[cfgPrefix[m_cfgType] + "ExposureF"].get_to(param.ExposureF); +// jobject[cfgPrefix[m_cfgType] + "ExposureB"].get_to(param.ExposureB); +// jobject[cfgPrefix[m_cfgType] + "GainF"].get_to(param.GainF); +// jobject[cfgPrefix[m_cfgType] + "GainB"].get_to(param.GainB); +// jobject[cfgPrefix[m_cfgType] + "OffsetF"].get_to(param.OffsetF); +// jobject[cfgPrefix[m_cfgType] + "OffsetB"].get_to(param.OffsetB); +// return ret; +// } +// void JsonConfig::WriteParam(FPGAConfigParam &t_param) +// { +// FPGAConfigParam param; +// if (access(cfgPaths[m_cfgType].c_str(), F_OK) == -1) +// { +// LOG("Not found config %s \n", cfgPaths[m_cfgType].c_str()); +// param = CreateDefault(); +// } +// else +// param = t_param; +// LOG("start save %s \n", cfgPaths[m_cfgType].c_str()); +// json m_json; +// auto &jobject = m_json[cfgPrefix[m_cfgType]]; +// jobject[cfgPrefix[m_cfgType] + "ExposureF"] = {param.ExposureF[0], param.ExposureF[1], param.ExposureF[2]}; +// jobject[cfgPrefix[m_cfgType] + "ExposureB"] = {param.ExposureB[0], param.ExposureB[1], param.ExposureB[2]}; +// jobject[cfgPrefix[m_cfgType] + "GainF"] = {param.GainF[0], param.GainF[1], param.GainF[2], param.GainF[3], param.GainF[4], param.GainF[5]}; +// jobject[cfgPrefix[m_cfgType] + "GainB"] = {param.GainB[0], param.GainB[1], param.GainB[2], param.GainB[3], param.GainB[4], param.GainB[5]}; +// jobject[cfgPrefix[m_cfgType] + "OffsetF"] = {param.OffsetF[0], param.OffsetF[1], param.OffsetF[2], param.OffsetF[3], param.OffsetF[4], param.OffsetF[5]}; +// jobject[cfgPrefix[m_cfgType] + "OffsetB"] = {param.OffsetB[0], param.OffsetB[1], param.OffsetB[2], param.OffsetB[3], param.OffsetB[4], param.OffsetB[5]}; +// std::ofstream o(cfgPaths[m_cfgType]); +// o << std::setw(4) << m_json << std::endl; +// LOG("save config %s down \n", cfgPaths[m_cfgType].c_str()); +// } + +// FPGAConfigParam JsonConfig::CreateDefault() +// { +// std::string savePath = cfgPaths[m_cfgType]; +// FPGAConfigParam param = {0}; +// for (size_t i = 0; i < 3; i++) +// { +// param.ExposureF[i] = 259; +// param.ExposureB[i] = 238; +// } + +// for (size_t i = 0; i < 6; i++) +// { +// param.GainB[i] = 30; +// param.GainF[i] = 30; +// param.OffsetB[i] = param.OffsetF[i] = 119; +// } +// return param; +// } + +ScannerScanInfo JsonConfig::CreateDefaultScanInfo() +{ + ScannerScanInfo info; + info.CuoNum = 0; + info.DoubleNum = 0; + info.ErrorNum = 0; + info.JamInNum = 0; + info.JamOutNum = 0; + info.FWVersion = FWVERSION; + info.SerialNum = SERIALNUM; + info.TotalScanned = 0; + info.RollerNum = 0; + info.HRatio = 1065353216;//(=(float)1.0) + info.VRatio = 1065353216; + info.SleepTime=3600; + info.Token=TOKEN_DEFAULT; + info.SpeedMode = 4; + l_it = mapFradme_SP.find(info.SpeedMode); + info.FWVersion = l_it->second.FWVERSIO; + + info.VID = 0x3072; + info.PID = 0x0300; + + return info; +} ScannerScanInfo JsonConfig::GetScanInfo() { ScannerScanInfo info; if (access(SCANNER_SCAN_INFO_PATH, F_OK) != 0) { + printf("/mnt/flash-disk/huago/jsonconfig.json do not exist!\n"); + info = CreateDefaultScanInfo(); + SaveScanInfo(info); return info; } std::ifstream i(SCANNER_SCAN_INFO_PATH); @@ -54,6 +143,9 @@ ScannerScanInfo JsonConfig::GetScanInfo() i.seekg(0, ios::end); if(i.tellg()<=2) { + printf("/mnt/flash-disk/huago/jsonconfig.json file size < 2!\n"); + info = CreateDefaultScanInfo(); + SaveScanInfo(info); return info; } json j; @@ -108,7 +200,8 @@ ScannerScanInfo JsonConfig::GetScanInfo() if (jobject.contains(SCAN_FWVERSION)) jobject[SCAN_FWVERSION].get_to(info.FWVersion); - + else + info.FWVersion = l_it->second.FWVERSIO; if (jobject.contains(SCAN_HRATIO)) jobject[SCAN_HRATIO].get_to(info.HRatio); @@ -159,3 +252,31 @@ ScannerScanInfo JsonConfig::GetScanInfo() } return info; } + +void JsonConfig::SaveScanInfo(const ScannerScanInfo &info) +{ + json m_json; + auto &jobject = m_json[SCAN_INFO_TITLE]; + jobject[SCAN_TOTAL] = info.TotalScanned; + jobject[SCAN_ROLLERNUM] = info.RollerNum; + jobject[SCAN_CUONUM] = info.CuoNum; + jobject[SCAN_JAMINNUM] = info.JamInNum; + jobject[SCAN_JAMOUTNUM] = info.JamOutNum; + jobject[SCAN_DOUNUM] = info.DoubleNum; + jobject[SCAN_ERRORNUM] = info.ErrorNum; + jobject[SCAN_SERIALNUM] = info.SerialNum; + jobject[SCAN_FWVERSION] = info.FWVersion; + jobject[SCAN_HRATIO]= info.HRatio; + jobject[SCAN_VRATIO] = info.VRatio; + jobject[SCAN_SLEEPTIME] = info.SleepTime; + jobject[SCAN_TOKEN] = info.Token; + jobject[SCAN_SPEEDMODE] = info.SpeedMode; + jobject[SCAN_VID] = info.VID; + jobject[SCAN_PID] = info.PID; + std::lock_guard m_c(m_lock); + std::ofstream o(SCANNER_SCAN_INFO_PATH); + //std::cout< #include "json.hpp" +#include "scanservices_utils.h" #include #include #include -struct ScannerScanInfo -{ - unsigned int TotalScanned; //扫描总页数 - unsigned int RollerNum; - unsigned int CuoNum; //搓纸总数 - unsigned int JamInNum; //搓纸失败次数 - unsigned int JamOutNum; //卡纸次数 - unsigned int DoubleNum; //双张次数 - unsigned int ErrorNum; //其他异常次数 - unsigned int HRatio; //横向校正系数 - unsigned int VRatio; //纵向校正系数 - unsigned int SleepTime; //休眠时间 单位s - unsigned int SpeedMode; //速率模式 - unsigned int VID; //vid - unsigned short PID; //pid - std::string SerialNum; //序列号 - std::string FWVersion; //固件版本号 - std::string Token; //token 令牌 -}; #define SCANNER_SCAN_INFO_PATH "/mnt/flash-disk/huago/jsonconfig.json" using namespace std; @@ -56,10 +38,18 @@ public: JsonConfig(); JsonConfig(ConfigType type); ~JsonConfig(); + /* + *若返回false 则表示文件不存在或文件读取失败 + */ + // bool ReadParam(FPGAConfigParam& param); + // void WriteParam(FPGAConfigParam& t_param); ScannerScanInfo GetScanInfo(); - + map::iterator l_it; + void SaveScanInfo(const ScannerScanInfo& info); private: + //FPGAConfigParam CreateDefault(); std::mutex m_lock; + ScannerScanInfo CreateDefaultScanInfo(); }; diff --git a/Keyboard.cpp b/zynq_7010_code/Keyboard.cpp similarity index 100% rename from Keyboard.cpp rename to zynq_7010_code/Keyboard.cpp diff --git a/Keyboard.h b/zynq_7010_code/Keyboard.h similarity index 100% rename from Keyboard.h rename to zynq_7010_code/Keyboard.h diff --git a/Led.cpp b/zynq_7010_code/Led.cpp similarity index 100% rename from Led.cpp rename to zynq_7010_code/Led.cpp diff --git a/Led.h b/zynq_7010_code/Led.h similarity index 100% rename from Led.h rename to zynq_7010_code/Led.h diff --git a/MemoryInfo.cpp b/zynq_7010_code/MemoryInfo.cpp similarity index 100% rename from MemoryInfo.cpp rename to zynq_7010_code/MemoryInfo.cpp diff --git a/MemoryInfo.h b/zynq_7010_code/MemoryInfo.h similarity index 100% rename from MemoryInfo.h rename to zynq_7010_code/MemoryInfo.h diff --git a/Motor.cpp b/zynq_7010_code/Motor.cpp similarity index 100% rename from Motor.cpp rename to zynq_7010_code/Motor.cpp diff --git a/Motor.h b/zynq_7010_code/Motor.h similarity index 100% rename from Motor.h rename to zynq_7010_code/Motor.h diff --git a/MotorConfig.cpp b/zynq_7010_code/MotorConfig.cpp similarity index 100% rename from MotorConfig.cpp rename to zynq_7010_code/MotorConfig.cpp diff --git a/MotorConfig.h b/zynq_7010_code/MotorConfig.h similarity index 100% rename from MotorConfig.h rename to zynq_7010_code/MotorConfig.h diff --git a/Motordef.h b/zynq_7010_code/Motordef.h similarity index 100% rename from Motordef.h rename to zynq_7010_code/Motordef.h diff --git a/MultiFrameCapture.cpp b/zynq_7010_code/MultiFrameCapture.cpp similarity index 100% rename from MultiFrameCapture.cpp rename to zynq_7010_code/MultiFrameCapture.cpp diff --git a/MultiFrameCapture.h b/zynq_7010_code/MultiFrameCapture.h similarity index 100% rename from MultiFrameCapture.h rename to zynq_7010_code/MultiFrameCapture.h diff --git a/PanelLeds.cpp b/zynq_7010_code/PanelLeds.cpp similarity index 100% rename from PanelLeds.cpp rename to zynq_7010_code/PanelLeds.cpp diff --git a/PanelLeds.h b/zynq_7010_code/PanelLeds.h similarity index 100% rename from PanelLeds.h rename to zynq_7010_code/PanelLeds.h diff --git a/Properties.cpp b/zynq_7010_code/Properties.cpp similarity index 100% rename from Properties.cpp rename to zynq_7010_code/Properties.cpp diff --git a/Properties.h b/zynq_7010_code/Properties.h similarity index 100% rename from Properties.h rename to zynq_7010_code/Properties.h diff --git a/PropertiesException.h b/zynq_7010_code/PropertiesException.h similarity index 100% rename from PropertiesException.h rename to zynq_7010_code/PropertiesException.h diff --git a/PropertiesParser.cpp b/zynq_7010_code/PropertiesParser.cpp similarity index 100% rename from PropertiesParser.cpp rename to zynq_7010_code/PropertiesParser.cpp diff --git a/PropertiesParser.h b/zynq_7010_code/PropertiesParser.h similarity index 100% rename from PropertiesParser.h rename to zynq_7010_code/PropertiesParser.h diff --git a/PropertiesUtils.cpp b/zynq_7010_code/PropertiesUtils.cpp similarity index 100% rename from PropertiesUtils.cpp rename to zynq_7010_code/PropertiesUtils.cpp diff --git a/PropertiesUtils.h b/zynq_7010_code/PropertiesUtils.h similarity index 100% rename from PropertiesUtils.h rename to zynq_7010_code/PropertiesUtils.h diff --git a/PropertyNotFoundException.h b/zynq_7010_code/PropertyNotFoundException.h similarity index 100% rename from PropertyNotFoundException.h rename to zynq_7010_code/PropertyNotFoundException.h diff --git a/Pwm.cpp b/zynq_7010_code/Pwm.cpp similarity index 100% rename from Pwm.cpp rename to zynq_7010_code/Pwm.cpp diff --git a/Pwm.h b/zynq_7010_code/Pwm.h similarity index 100% rename from Pwm.h rename to zynq_7010_code/Pwm.h diff --git a/ScanConfig.cpp b/zynq_7010_code/ScanConfig.cpp similarity index 100% rename from ScanConfig.cpp rename to zynq_7010_code/ScanConfig.cpp diff --git a/ScanConfig.h b/zynq_7010_code/ScanConfig.h similarity index 100% rename from ScanConfig.h rename to zynq_7010_code/ScanConfig.h diff --git a/Scanner.cpp b/zynq_7010_code/Scanner.cpp similarity index 100% rename from Scanner.cpp rename to zynq_7010_code/Scanner.cpp diff --git a/Scanner.h b/zynq_7010_code/Scanner.h similarity index 100% rename from Scanner.h rename to zynq_7010_code/Scanner.h diff --git a/Sensor.cpp b/zynq_7010_code/Sensor.cpp similarity index 100% rename from Sensor.cpp rename to zynq_7010_code/Sensor.cpp diff --git a/Sensor.h b/zynq_7010_code/Sensor.h similarity index 100% rename from Sensor.h rename to zynq_7010_code/Sensor.h diff --git a/SysInforTool.cpp b/zynq_7010_code/SysInforTool.cpp similarity index 100% rename from SysInforTool.cpp rename to zynq_7010_code/SysInforTool.cpp diff --git a/SysInforTool.h b/zynq_7010_code/SysInforTool.h similarity index 100% rename from SysInforTool.h rename to zynq_7010_code/SysInforTool.h diff --git a/ThreadPool.h b/zynq_7010_code/ThreadPool.h similarity index 100% rename from ThreadPool.h rename to zynq_7010_code/ThreadPool.h diff --git a/TypeIO.cpp b/zynq_7010_code/TypeIO.cpp similarity index 100% rename from TypeIO.cpp rename to zynq_7010_code/TypeIO.cpp diff --git a/TypeIO.h b/zynq_7010_code/TypeIO.h similarity index 100% rename from TypeIO.h rename to zynq_7010_code/TypeIO.h diff --git a/USBProtocol.h b/zynq_7010_code/USBProtocol.h similarity index 100% rename from USBProtocol.h rename to zynq_7010_code/USBProtocol.h diff --git a/UsbEndpoint.cpp b/zynq_7010_code/UsbEndpoint.cpp similarity index 100% rename from UsbEndpoint.cpp rename to zynq_7010_code/UsbEndpoint.cpp diff --git a/UsbEndpoint.h b/zynq_7010_code/UsbEndpoint.h similarity index 100% rename from UsbEndpoint.h rename to zynq_7010_code/UsbEndpoint.h diff --git a/UsbScanner.cpp b/zynq_7010_code/UsbScanner.cpp similarity index 100% rename from UsbScanner.cpp rename to zynq_7010_code/UsbScanner.cpp diff --git a/UsbScanner.h b/zynq_7010_code/UsbScanner.h similarity index 100% rename from UsbScanner.h rename to zynq_7010_code/UsbScanner.h diff --git a/UsbmsgHandler.cpp b/zynq_7010_code/UsbmsgHandler.cpp similarity index 100% rename from UsbmsgHandler.cpp rename to zynq_7010_code/UsbmsgHandler.cpp diff --git a/UsbmsgHandler.h b/zynq_7010_code/UsbmsgHandler.h similarity index 100% rename from UsbmsgHandler.h rename to zynq_7010_code/UsbmsgHandler.h diff --git a/ZouZhiMotor.cpp b/zynq_7010_code/ZouZhiMotor.cpp similarity index 100% rename from ZouZhiMotor.cpp rename to zynq_7010_code/ZouZhiMotor.cpp diff --git a/ZouZhiMotor.h b/zynq_7010_code/ZouZhiMotor.h similarity index 100% rename from ZouZhiMotor.h rename to zynq_7010_code/ZouZhiMotor.h diff --git a/autoevent.hpp b/zynq_7010_code/autoevent.hpp similarity index 100% rename from autoevent.hpp rename to zynq_7010_code/autoevent.hpp diff --git a/bmp.cpp b/zynq_7010_code/bmp.cpp similarity index 100% rename from bmp.cpp rename to zynq_7010_code/bmp.cpp diff --git a/bmp.h b/zynq_7010_code/bmp.h similarity index 100% rename from bmp.h rename to zynq_7010_code/bmp.h diff --git a/buildconf.h b/zynq_7010_code/buildconf.h similarity index 100% rename from buildconf.h rename to zynq_7010_code/buildconf.h diff --git a/camtp.h b/zynq_7010_code/camtp.h similarity index 100% rename from camtp.h rename to zynq_7010_code/camtp.h diff --git a/correct_ultis.cpp b/zynq_7010_code/correct_ultis.cpp similarity index 100% rename from correct_ultis.cpp rename to zynq_7010_code/correct_ultis.cpp diff --git a/correct_ultis.h b/zynq_7010_code/correct_ultis.h similarity index 100% rename from correct_ultis.h rename to zynq_7010_code/correct_ultis.h diff --git a/countdown.sh b/zynq_7010_code/countdown.sh similarity index 100% rename from countdown.sh rename to zynq_7010_code/countdown.sh diff --git a/default_cfg.h b/zynq_7010_code/default_cfg.h similarity index 100% rename from default_cfg.h rename to zynq_7010_code/default_cfg.h diff --git a/filetools.h b/zynq_7010_code/filetools.h similarity index 100% rename from filetools.h rename to zynq_7010_code/filetools.h diff --git a/fpga/CMakeLists.txt b/zynq_7010_code/fpga/CMakeLists.txt similarity index 100% rename from fpga/CMakeLists.txt rename to zynq_7010_code/fpga/CMakeLists.txt diff --git a/zynq_7010_code/fpga/bin/libfpgaupdate.a b/zynq_7010_code/fpga/bin/libfpgaupdate.a new file mode 100644 index 0000000000000000000000000000000000000000..47dcd3617aa2987829f9808c8b2a26c7d7a1bb53 GIT binary patch literal 277912 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 HqH_NQTQSPq literal 0 HcmV?d00001 diff --git a/fpga/build/CMakeCache.txt b/zynq_7010_code/fpga/build/CMakeCache.txt similarity index 100% rename from fpga/build/CMakeCache.txt rename to zynq_7010_code/fpga/build/CMakeCache.txt diff --git a/fpga/build/CMakeFiles/3.18.2/CMakeCCompiler.cmake b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeCCompiler.cmake similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CMakeCCompiler.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeCCompiler.cmake diff --git a/fpga/build/CMakeFiles/3.18.2/CMakeCXXCompiler.cmake b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeCXXCompiler.cmake similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CMakeCXXCompiler.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeCXXCompiler.cmake diff --git a/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_C.bin b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_C.bin similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_C.bin rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_C.bin diff --git a/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_CXX.bin b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_CXX.bin similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_CXX.bin rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeDetermineCompilerABI_CXX.bin diff --git a/fpga/build/CMakeFiles/3.18.2/CMakeSystem.cmake b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeSystem.cmake similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CMakeSystem.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CMakeSystem.cmake diff --git a/fpga/build/CMakeFiles/3.18.2/CompilerIdC/CMakeCCompilerId.c b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdC/CMakeCCompilerId.c similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CompilerIdC/CMakeCCompilerId.c rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdC/CMakeCCompilerId.c diff --git a/fpga/build/CMakeFiles/3.18.2/CompilerIdC/a.out b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdC/a.out similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CompilerIdC/a.out rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdC/a.out diff --git a/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/CMakeCXXCompilerId.cpp similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/CMakeCXXCompilerId.cpp rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/CMakeCXXCompilerId.cpp diff --git a/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/a.out b/zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/a.out similarity index 100% rename from fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/a.out rename to zynq_7010_code/fpga/build/CMakeFiles/3.18.2/CompilerIdCXX/a.out diff --git a/fpga/build/CMakeFiles/CMakeDirectoryInformation.cmake b/zynq_7010_code/fpga/build/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from fpga/build/CMakeFiles/CMakeDirectoryInformation.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/fpga/build/CMakeFiles/CMakeOutput.log b/zynq_7010_code/fpga/build/CMakeFiles/CMakeOutput.log similarity index 100% rename from fpga/build/CMakeFiles/CMakeOutput.log rename to zynq_7010_code/fpga/build/CMakeFiles/CMakeOutput.log diff --git a/fpga/build/CMakeFiles/Makefile.cmake b/zynq_7010_code/fpga/build/CMakeFiles/Makefile.cmake similarity index 100% rename from fpga/build/CMakeFiles/Makefile.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/Makefile.cmake diff --git a/fpga/build/CMakeFiles/Makefile2 b/zynq_7010_code/fpga/build/CMakeFiles/Makefile2 similarity index 100% rename from fpga/build/CMakeFiles/Makefile2 rename to zynq_7010_code/fpga/build/CMakeFiles/Makefile2 diff --git a/fpga/build/CMakeFiles/TargetDirectories.txt b/zynq_7010_code/fpga/build/CMakeFiles/TargetDirectories.txt similarity index 100% rename from fpga/build/CMakeFiles/TargetDirectories.txt rename to zynq_7010_code/fpga/build/CMakeFiles/TargetDirectories.txt diff --git a/fpga/build/CMakeFiles/cmake.check_cache b/zynq_7010_code/fpga/build/CMakeFiles/cmake.check_cache similarity index 100% rename from fpga/build/CMakeFiles/cmake.check_cache rename to zynq_7010_code/fpga/build/CMakeFiles/cmake.check_cache diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/C.includecache b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/C.includecache similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/C.includecache rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/C.includecache diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/CXX.includecache b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/CXX.includecache similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/CXX.includecache rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/CXX.includecache diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/DependInfo.cmake b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/DependInfo.cmake similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/DependInfo.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/DependInfo.cmake diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/build.make b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/build.make similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/build.make rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/build.make diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean.cmake b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean.cmake similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean.cmake diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean_target.cmake b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean_target.cmake similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean_target.cmake rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/cmake_clean_target.cmake diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/depend.internal b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/depend.internal similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/depend.internal rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/depend.internal diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/depend.make b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/depend.make similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/depend.make rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/depend.make diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/flags.make b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/flags.make similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/flags.make rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/flags.make diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/fpgacontrol.o b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/fpgacontrol.o similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/fpgacontrol.o rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/fpgacontrol.o diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd.o b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd.o similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/libmtd.o rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd.o diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd_legacy.o b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd_legacy.o similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/libmtd_legacy.o rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/libmtd_legacy.o diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/link.txt b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/link.txt similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/link.txt rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/link.txt diff --git a/fpga/build/CMakeFiles/fpgaupdate.dir/progress.make b/zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/progress.make similarity index 100% rename from fpga/build/CMakeFiles/fpgaupdate.dir/progress.make rename to zynq_7010_code/fpga/build/CMakeFiles/fpgaupdate.dir/progress.make diff --git a/fpga/build/CMakeFiles/progress.marks b/zynq_7010_code/fpga/build/CMakeFiles/progress.marks similarity index 100% rename from fpga/build/CMakeFiles/progress.marks rename to zynq_7010_code/fpga/build/CMakeFiles/progress.marks diff --git a/fpga/build/Makefile b/zynq_7010_code/fpga/build/Makefile similarity index 100% rename from fpga/build/Makefile rename to zynq_7010_code/fpga/build/Makefile diff --git a/fpga/build/cmake_install.cmake b/zynq_7010_code/fpga/build/cmake_install.cmake similarity index 100% rename from fpga/build/cmake_install.cmake rename to zynq_7010_code/fpga/build/cmake_install.cmake diff --git a/fpga/fpgacontrol.cpp b/zynq_7010_code/fpga/fpgacontrol.cpp similarity index 100% rename from fpga/fpgacontrol.cpp rename to zynq_7010_code/fpga/fpgacontrol.cpp diff --git a/fpga/fpgacontrol.h b/zynq_7010_code/fpga/fpgacontrol.h similarity index 100% rename from fpga/fpgacontrol.h rename to zynq_7010_code/fpga/fpgacontrol.h diff --git a/fpga/libmtd.c b/zynq_7010_code/fpga/libmtd.c similarity index 100% rename from fpga/libmtd.c rename to zynq_7010_code/fpga/libmtd.c diff --git a/fpga/libmtd.h b/zynq_7010_code/fpga/libmtd.h similarity index 100% rename from fpga/libmtd.h rename to zynq_7010_code/fpga/libmtd.h diff --git a/fpga/libmtd_common.h b/zynq_7010_code/fpga/libmtd_common.h similarity index 100% rename from fpga/libmtd_common.h rename to zynq_7010_code/fpga/libmtd_common.h diff --git a/fpga/libmtd_int.h b/zynq_7010_code/fpga/libmtd_int.h similarity index 100% rename from fpga/libmtd_int.h rename to zynq_7010_code/fpga/libmtd_int.h diff --git a/fpga/libmtd_legacy.c b/zynq_7010_code/fpga/libmtd_legacy.c similarity index 100% rename from fpga/libmtd_legacy.c rename to zynq_7010_code/fpga/libmtd_legacy.c diff --git a/fpga/libmtd_xalloc.h b/zynq_7010_code/fpga/libmtd_xalloc.h similarity index 100% rename from fpga/libmtd_xalloc.h rename to zynq_7010_code/fpga/libmtd_xalloc.h diff --git a/fpgacontrol.cpp b/zynq_7010_code/fpgacontrol.cpp similarity index 100% rename from fpgacontrol.cpp rename to zynq_7010_code/fpgacontrol.cpp diff --git a/fpgacontrol.h b/zynq_7010_code/fpgacontrol.h similarity index 100% rename from fpgacontrol.h rename to zynq_7010_code/fpgacontrol.h diff --git a/hgkilltimer.sh b/zynq_7010_code/hgkilltimer.sh similarity index 100% rename from hgkilltimer.sh rename to zynq_7010_code/hgkilltimer.sh diff --git a/huagao_gpio.sh b/zynq_7010_code/huagao_gpio.sh similarity index 100% rename from huagao_gpio.sh rename to zynq_7010_code/huagao_gpio.sh diff --git a/imageipc.h b/zynq_7010_code/imageipc.h similarity index 100% rename from imageipc.h rename to zynq_7010_code/imageipc.h diff --git a/logs_out.cpp b/zynq_7010_code/logs_out.cpp similarity index 100% rename from logs_out.cpp rename to zynq_7010_code/logs_out.cpp diff --git a/logs_out.h b/zynq_7010_code/logs_out.h similarity index 100% rename from logs_out.h rename to zynq_7010_code/logs_out.h diff --git a/main.cpp b/zynq_7010_code/main.cpp similarity index 100% rename from main.cpp rename to zynq_7010_code/main.cpp diff --git a/scannersysinfo.h b/zynq_7010_code/scannersysinfo.h similarity index 100% rename from scannersysinfo.h rename to zynq_7010_code/scannersysinfo.h diff --git a/scanservices_utils.h b/zynq_7010_code/scanservices_utils.h similarity index 100% rename from scanservices_utils.h rename to zynq_7010_code/scanservices_utils.h diff --git a/serialib.cpp b/zynq_7010_code/serialib.cpp similarity index 100% rename from serialib.cpp rename to zynq_7010_code/serialib.cpp diff --git a/serialib.h b/zynq_7010_code/serialib.h similarity index 100% rename from serialib.h rename to zynq_7010_code/serialib.h diff --git a/zynq_7010_code/test.cpp b/zynq_7010_code/test.cpp index aa0b8c6..2d9c60a 100644 --- a/zynq_7010_code/test.cpp +++ b/zynq_7010_code/test.cpp @@ -1,101 +1,64 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include"JsonConfig.h" -#define erroe_status -1 -#define start_sleep 1 -#define close_sleep 0 - -int readfile(int fd, char* buf,int num ) -{ - lseek(fd, 0, SEEK_SET); - int ret = read(fd, buf, num); - if (ret == -1) - { - printf("readfile error:%s\r\n",strerror(ret)); - return erroe_status; - } - if (ret == 0) - { - printf("readfile error:%s\r\n","service connection is lost"); - return erroe_status; - } - printf("sleep processes len :%d\r\n",ret); - return atoi(buf); -} -void start_enter_lowpwoer(int time) -{ - int seconds = time; - - if(time < 0 || time < 180) - seconds = 180; - else - seconds = time; - - std::string str="sh /mnt/flash-disk/countdown.sh start 0 0 "+std::to_string(seconds) + " &"; - printf("start_enter_lowpwoer %s \n",str.c_str()); - - int ret = system(str.c_str()); -} -void stop_countdown() -{ - int ret = system("sh /mnt/flash-disk/killtimer.sh"); - printf("system stop_countdown :%d\r\n",ret); -} - -int main(int argc, char *argv[]) -{ - int fd = -1; - int ret = 0; - pollfd pfd; - ret = mkfifo("/home/root/dev/sleep", 0666); - if(ret != 0) - { - perror("/home/root/dev/sleep"); - } - - printf("before open\n"); - fd = open("/home/root/dev/sleep", O_RDONLY);//等着只写 - if(fd < 0) - { - perror("open fifo"); - } - - printf("after open\n"); - - char buffer[12]; - JsonConfig js; - - - while (true) - { - ret = readfile(fd,buffer,sizeof(buffer)); - printf("while read buf:[%d]\n", ret); - if (ret == -1) - { - system("sh /mnt/flash-disk/leds.sh 1"); - sleep(3); - continue; - } - - if (ret == 1) - { - ScannerScanInfo info = js.GetScanInfo(); - stop_countdown(); - sleep(3); - start_enter_lowpwoer(info.SleepTime); - } - else - stop_countdown(); - - } - close(fd); - return 0; -} - - +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define VIDPID_PATH "/usr/local/bin/mtpd.sh" + +/* + * FunctionName: main + * Description: + */ +int main01(int argc, char *argv[]) +{ + int ret = 0; + printf("argc = %d \n", argc); + if (argc != 3) + { + return -1; + } + unsigned int i_vid = atoi(argv[1]); + unsigned int i_pid = atoi(argv[2]); + printf("arg0 = %d arg1=%d \n", i_vid, i_pid); + char buf_vid[5] ={0}; + char buf_pid[5] ={0}; + buf_vid[4]='\0'; + buf_pid[4]='\0'; + sprintf(buf_vid,"%04x",i_vid); + sprintf(buf_pid,"%04x",i_pid); + printf("buf_vid = %s buf_pid=%s \n", buf_vid, buf_pid); + if (i_pid > 0 && i_vid > 0) + { + FILE *fd; + + fd = fopen(VIDPID_PATH, "rb+"); + if (!fd) { + printf( "error open /usr/local/bin/mtp.sh...\n"); + return -1; + } + else { + printf( "open %s scuess.fd = %d\n", VIDPID_PATH,fd); + } + + /*set vid*/ + fseek(fd , 0x18e , SEEK_SET); + ret = fwrite(buf_vid, 1, 4, fd); + + /*set pid*/ + fseek(fd , 0x1c8 , SEEK_SET); + ret = fwrite(buf_pid, 1, 4, fd); + + fclose(fd); + return 0; + } + + return -1; +} /* ---------- end of function main ---------- */ diff --git a/threadex.h b/zynq_7010_code/threadex.h similarity index 100% rename from threadex.h rename to zynq_7010_code/threadex.h diff --git a/usb_gadget.h b/zynq_7010_code/usb_gadget.h similarity index 100% rename from usb_gadget.h rename to zynq_7010_code/usb_gadget.h diff --git a/usbdevice.cpp b/zynq_7010_code/usbdevice.cpp similarity index 100% rename from usbdevice.cpp rename to zynq_7010_code/usbdevice.cpp diff --git a/usbdevice.h b/zynq_7010_code/usbdevice.h similarity index 100% rename from usbdevice.h rename to zynq_7010_code/usbdevice.h diff --git a/usbstring.cpp b/zynq_7010_code/usbstring.cpp similarity index 100% rename from usbstring.cpp rename to zynq_7010_code/usbstring.cpp diff --git a/usbstring.h b/zynq_7010_code/usbstring.h similarity index 100% rename from usbstring.h rename to zynq_7010_code/usbstring.h diff --git a/utilsfunc.cpp b/zynq_7010_code/utilsfunc.cpp similarity index 100% rename from utilsfunc.cpp rename to zynq_7010_code/utilsfunc.cpp diff --git a/utilsfunc.h b/zynq_7010_code/utilsfunc.h similarity index 100% rename from utilsfunc.h rename to zynq_7010_code/utilsfunc.h