From d85e4ed790d1ca4e03ecd728bb90b1c05ecb0979 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Tue, 4 Jun 2024 17:28:58 +0800 Subject: [PATCH] Delete test tool. --- doc/clang-tidy_user_guide.md | 42 - doc/cmake_exploitReport.md | 54 - doc/design.md | 1103 ----------------- doc/develop_standard.md | 111 -- doc/doxygen_user_guide.md | 21 - doc/gdb_coredump_guide.md | 209 ---- doc/git/git-commit-standardize.md | 67 - doc/git/git-rebase.md | 41 - doc/git/git.md | 299 ----- doc/git/pic/p1.jpg | Bin 120425 -> 0 bytes doc/git/pic/p2.jpg | Bin 88538 -> 0 bytes doc/git/pic/p3.jpg | Bin 268865 -> 0 bytes doc/git/pic/p4.jpg | Bin 210010 -> 0 bytes doc/git/pic/p5.jpg | Bin 187500 -> 0 bytes doc/git_guide.md | 179 --- doc/huntting_project_report.md | 20 - doc/markdown_user_guide.md | 101 -- doc/sdk_build_guide.md | 9 - doc/vscode_ssh_guide.md | 89 -- .../MissionManager/tool/CMakeLists.txt | 71 -- .../tool/src/MissionManagerMakePtrTest.cpp | 78 -- .../tool/src/MissionManagerMakePtrTest.h | 33 - .../tool/src/MissionManagerMock.cpp | 40 - .../tool/src/MissionManagerMock.h | 36 - .../tool/src/MissionManagerTestTool.cpp | 45 - .../tool/src/OnMissionStateMock.cpp | 16 - .../tool/src/OnMissionStateMock.h | 33 - .../tool/src/PirTriggeredMissionStateMock.cpp | 16 - .../tool/src/PirTriggeredMissionStateMock.h | 33 - .../tool/src/SdCardHandleStateMock.cpp | 34 - .../tool/src/SdCardHandleStateMock.h | 36 - .../tool/src/TestMissionStateMock.cpp | 176 --- .../tool/src/TestMissionStateMock.h | 51 - .../MissionManager/tool/src/TopStateMock.cpp | 15 - .../MissionManager/tool/src/TopStateMock.h | 34 - test/hal/tool/CMakeLists.txt | 55 - test/hal/tool/src/CameraHalMock.cpp | 60 - test/hal/tool/src/CameraHalMock.h | 45 - test/hal/tool/src/HalCppMock.cpp | 72 -- test/hal/tool/src/HalCppMock.h | 45 - test/hal/tool/src/HalMakePtrTest.cpp | 72 -- test/hal/tool/src/HalMakePtrTest.h | 38 - test/hal/tool/src/HalTestTool.cpp | 369 ------ test/hal/tool/src/KeyControlMock.cpp | 122 -- test/hal/tool/src/KeyControlMock.h | 59 - test/hal/tool/src/LedControlMock.cpp | 69 -- test/hal/tool/src/LedControlMock.h | 44 - test/hal/tool/src/SdCardHalMock.cpp | 44 - test/hal/tool/src/SdCardHalMock.h | 33 - test/hal/tool/src/WifiHalMock.cpp | 16 - test/hal/tool/src/WifiHalMock.h | 32 - .../middleware/AppManager/tool/CMakeLists.txt | 57 - .../tool/src/AppManagerMakePtrTest.cpp | 57 - .../tool/src/AppManagerMakePtrTest.h | 32 - .../AppManager/tool/src/AppManagerMock.cpp | 30 - .../AppManager/tool/src/AppManagerMock.h | 36 - .../tool/src/AppManagerTestTool.cpp | 372 ------ .../AppManager/tool/src/AppMonitorMock.cpp | 274 ---- .../AppManager/tool/src/AppMonitorMock.h | 93 -- .../AppManager/tool/src/ServersMock.cpp | 200 --- .../AppManager/tool/src/ServersMock.h | 51 - .../DeviceManager/tool/CMakeLists.txt | 53 - .../tool/src/DeviceManagerMakePtrTest.cpp | 57 - .../tool/src/DeviceManagerMakePtrTest.h | 31 - .../tool/src/DeviceManagerTestTool.cpp | 93 -- .../tool/src/SingleControlMock.cpp | 32 - .../tool/src/SingleControlMock.h | 45 - .../HuntingUpgrade/tool/CMakeLists.txt | 56 - .../tool/src/HuntingUpgradeTestTool.cpp | 82 -- test/middleware/IpcConfig/tool/CMakeLists.txt | 54 - .../IpcConfig/tool/src/IpcConfigTestTool.cpp | 68 - .../middleware/McuAskBase/tool/CMakeLists.txt | 60 - .../tool/src/McuAskBaseTestTool.cpp | 71 -- .../middleware/McuManager/tool/CMakeLists.txt | 54 - .../tool/src/McuManagerImplTest.cpp | 20 - .../tool/src/McuManagerMakePtrTest.cpp | 58 - .../tool/src/McuManagerMakePtrTest.h | 32 - .../tool/src/McuManagerTestTool.cpp | 85 -- .../MediaManager/tool/CMakeLists.txt | 56 - .../MediaManager/tool/src/MediaHandleMock.cpp | 15 - .../MediaManager/tool/src/MediaHandleMock.h | 18 - .../tool/src/MediaManagerMakePtrTest.cpp | 55 - .../tool/src/MediaManagerMakePtrTest.h | 32 - .../tool/src/MediaManagerMock.cpp | 30 - .../MediaManager/tool/src/MediaManagerMock.h | 37 - .../tool/src/MediaManagerTestTool.cpp | 102 -- .../tool/src/MediaMonitorMock.cpp | 274 ---- .../MediaManager/tool/src/MediaMonitorMock.h | 93 -- test/utils/McuProtocol/tool/CMakeLists.txt | 57 - .../tool/src/McuProtocolTestTool.cpp | 1099 ---------------- .../McuProtocol/tool/src/ProtocolMonitor.cpp | 76 -- .../McuProtocol/tool/src/ProtocolMonitor.h | 51 - test/utils/UartDevice/tool/CMakeLists.txt | 51 - .../tool/src/UartDeviceTestTool.cpp | 130 -- 94 files changed, 8596 deletions(-) delete mode 100644 doc/clang-tidy_user_guide.md delete mode 100644 doc/cmake_exploitReport.md delete mode 100644 doc/design.md delete mode 100644 doc/develop_standard.md delete mode 100644 doc/doxygen_user_guide.md delete mode 100644 doc/gdb_coredump_guide.md delete mode 100644 doc/git/git-commit-standardize.md delete mode 100644 doc/git/git-rebase.md delete mode 100644 doc/git/git.md delete mode 100644 doc/git/pic/p1.jpg delete mode 100644 doc/git/pic/p2.jpg delete mode 100644 doc/git/pic/p3.jpg delete mode 100644 doc/git/pic/p4.jpg delete mode 100644 doc/git/pic/p5.jpg delete mode 100644 doc/git_guide.md delete mode 100644 doc/huntting_project_report.md delete mode 100644 doc/markdown_user_guide.md delete mode 100644 doc/sdk_build_guide.md delete mode 100644 doc/vscode_ssh_guide.md delete mode 100644 test/application/MissionManager/tool/CMakeLists.txt delete mode 100644 test/application/MissionManager/tool/src/MissionManagerMakePtrTest.cpp delete mode 100644 test/application/MissionManager/tool/src/MissionManagerMakePtrTest.h delete mode 100644 test/application/MissionManager/tool/src/MissionManagerMock.cpp delete mode 100644 test/application/MissionManager/tool/src/MissionManagerMock.h delete mode 100644 test/application/MissionManager/tool/src/MissionManagerTestTool.cpp delete mode 100644 test/application/MissionManager/tool/src/OnMissionStateMock.cpp delete mode 100644 test/application/MissionManager/tool/src/OnMissionStateMock.h delete mode 100644 test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.cpp delete mode 100644 test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.h delete mode 100644 test/application/MissionManager/tool/src/SdCardHandleStateMock.cpp delete mode 100644 test/application/MissionManager/tool/src/SdCardHandleStateMock.h delete mode 100644 test/application/MissionManager/tool/src/TestMissionStateMock.cpp delete mode 100644 test/application/MissionManager/tool/src/TestMissionStateMock.h delete mode 100644 test/application/MissionManager/tool/src/TopStateMock.cpp delete mode 100644 test/application/MissionManager/tool/src/TopStateMock.h delete mode 100644 test/hal/tool/CMakeLists.txt delete mode 100644 test/hal/tool/src/CameraHalMock.cpp delete mode 100644 test/hal/tool/src/CameraHalMock.h delete mode 100644 test/hal/tool/src/HalCppMock.cpp delete mode 100644 test/hal/tool/src/HalCppMock.h delete mode 100644 test/hal/tool/src/HalMakePtrTest.cpp delete mode 100644 test/hal/tool/src/HalMakePtrTest.h delete mode 100644 test/hal/tool/src/HalTestTool.cpp delete mode 100644 test/hal/tool/src/KeyControlMock.cpp delete mode 100644 test/hal/tool/src/KeyControlMock.h delete mode 100644 test/hal/tool/src/LedControlMock.cpp delete mode 100644 test/hal/tool/src/LedControlMock.h delete mode 100644 test/hal/tool/src/SdCardHalMock.cpp delete mode 100644 test/hal/tool/src/SdCardHalMock.h delete mode 100644 test/hal/tool/src/WifiHalMock.cpp delete mode 100644 test/hal/tool/src/WifiHalMock.h delete mode 100644 test/middleware/AppManager/tool/CMakeLists.txt delete mode 100644 test/middleware/AppManager/tool/src/AppManagerMakePtrTest.cpp delete mode 100644 test/middleware/AppManager/tool/src/AppManagerMakePtrTest.h delete mode 100644 test/middleware/AppManager/tool/src/AppManagerMock.cpp delete mode 100644 test/middleware/AppManager/tool/src/AppManagerMock.h delete mode 100644 test/middleware/AppManager/tool/src/AppManagerTestTool.cpp delete mode 100644 test/middleware/AppManager/tool/src/AppMonitorMock.cpp delete mode 100644 test/middleware/AppManager/tool/src/AppMonitorMock.h delete mode 100644 test/middleware/AppManager/tool/src/ServersMock.cpp delete mode 100644 test/middleware/AppManager/tool/src/ServersMock.h delete mode 100644 test/middleware/DeviceManager/tool/CMakeLists.txt delete mode 100644 test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.cpp delete mode 100644 test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.h delete mode 100644 test/middleware/DeviceManager/tool/src/DeviceManagerTestTool.cpp delete mode 100644 test/middleware/DeviceManager/tool/src/SingleControlMock.cpp delete mode 100644 test/middleware/DeviceManager/tool/src/SingleControlMock.h delete mode 100644 test/middleware/HuntingUpgrade/tool/CMakeLists.txt delete mode 100644 test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp delete mode 100644 test/middleware/IpcConfig/tool/CMakeLists.txt delete mode 100644 test/middleware/IpcConfig/tool/src/IpcConfigTestTool.cpp delete mode 100644 test/middleware/McuAskBase/tool/CMakeLists.txt delete mode 100644 test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp delete mode 100644 test/middleware/McuManager/tool/CMakeLists.txt delete mode 100644 test/middleware/McuManager/tool/src/McuManagerImplTest.cpp delete mode 100644 test/middleware/McuManager/tool/src/McuManagerMakePtrTest.cpp delete mode 100644 test/middleware/McuManager/tool/src/McuManagerMakePtrTest.h delete mode 100644 test/middleware/McuManager/tool/src/McuManagerTestTool.cpp delete mode 100644 test/middleware/MediaManager/tool/CMakeLists.txt delete mode 100644 test/middleware/MediaManager/tool/src/MediaHandleMock.cpp delete mode 100644 test/middleware/MediaManager/tool/src/MediaHandleMock.h delete mode 100644 test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.cpp delete mode 100644 test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.h delete mode 100644 test/middleware/MediaManager/tool/src/MediaManagerMock.cpp delete mode 100644 test/middleware/MediaManager/tool/src/MediaManagerMock.h delete mode 100644 test/middleware/MediaManager/tool/src/MediaManagerTestTool.cpp delete mode 100644 test/middleware/MediaManager/tool/src/MediaMonitorMock.cpp delete mode 100644 test/middleware/MediaManager/tool/src/MediaMonitorMock.h delete mode 100644 test/utils/McuProtocol/tool/CMakeLists.txt delete mode 100644 test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp delete mode 100644 test/utils/McuProtocol/tool/src/ProtocolMonitor.cpp delete mode 100644 test/utils/McuProtocol/tool/src/ProtocolMonitor.h delete mode 100644 test/utils/UartDevice/tool/CMakeLists.txt delete mode 100644 test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp diff --git a/doc/clang-tidy_user_guide.md b/doc/clang-tidy_user_guide.md deleted file mode 100644 index 07d0c7c7..00000000 --- a/doc/clang-tidy_user_guide.md +++ /dev/null @@ -1,42 +0,0 @@ -# 1. clang-tidy使用指南 - -   使用clang-tidy工具进行代码规范管理。 -1. 编译时实时报错; -2. 指定自研源码检测; - -## 1.1. 环境搭建 - -1. llvm使用cmake编译,cmake版本要求 3.20以上,此处使用cmake-3.27.4 -``` -// cmake源码目录://tools/cmake/cmake-3.27.4.tar.gz -// cmake源码安装: -tar zxvf cmake-3.27.4.tar.gz -cd cmake-3.27.4/ -sudo apt-get install openssl // 如果执行./bootstrap提示缺少ssl相关资源,执行此安装命令 -./bootstrap -make -sudo make install -``` -2. 安装llvm -``` -// 下载源码 -git clone https://github.com/llvm/llvm-project.git -cd llvm-project/ -mkdir build -cd build -cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm -make -j8 -find ./ -name clang-tidy // 确认编译完成 -``` - -## 1.2. clang-tidy使用 -修改配置:< IPC-SDK >/build/global_config.cmake -``` -# ------------ build clang-tools ------------ # -if(${LINUX_TEST} MATCHES "true") - set(CLANG_TIDY_SUPPORT "true") // 使能工具 - set(CLANG_FORMAT_SUPPORT "true") - set(LLVM_PATH "/home/xiaojiazhu/project/tmp/llvm-project") // llvm安装目录 -endif() -# ------------ build clang-tools end ------------ # -``` \ No newline at end of file diff --git a/doc/cmake_exploitReport.md b/doc/cmake_exploitReport.md deleted file mode 100644 index 61a54da6..00000000 --- a/doc/cmake_exploitReport.md +++ /dev/null @@ -1,54 +0,0 @@ -# 1.cmake开发报告 - -## 1.1 前言 -该篇md用于ipc项目下log功能的cmakelist的开发报告,以阐述其功能和组成。 - -## 1.2 功能介绍 -* 设置库文件输出路径:`set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH})`. -该语句用于设置该功能的静态库的生成路径,其中`${LIBS_OUTPUT_PATH}`在/build/cmake/global_config.cmake被定义在项目根目录的/output_files/libs/。 - -* 添加实现功能的文件目录:`include_directories(./)`. -该语句旨在向编译器告知该功能的实现文件和头文件的所在位置。 - -* 添加功能目录到搜索路径:`set(CMAKE_AUTOMOC ON);set(CMAKE_INCLUDE_CURRENT_DIR ON)` -这些 CMake 命令支持自动处理 Qt moc(元对象编译器),并将当前目录设置为包含在包含文件的搜索路径中;在构建过程中自动运行Qt moc编译器,用于包含Q_OBJECT宏的任何源文件。这对于为信号和插槽生成必要的C++代码是必需的;该选项将当前源目录添加到包含文件的搜索路径中。这允许构建系统查找与正在编译的源文件位于同一目录中的头文件。 - -* 收集、生成头文件列表:`file(GLOB_RECURSE HEADER_FILES "*.h")` -该语句的功能是搜索当前目录及其子目录中扩展名为 .h 的所有文件。生成的文件列表存储在 HEADER_FILES 变量中。 - -* 收集源文件列表:`aux_source_directory(. SRC_FILES)` -在本语句中,aux_source_directory(.SRC_FILES) 从当前目录(由 .) 及其子目录中收集所有源文件(例如,.cpp 个文件),生成的文件列表存储在 SRC_FILES 变量中。 - -* 添加编译器标志和定义到当前目录及其子目录:`add_definitions("-fexceptions")` -添加编译器标志`-fexceptions`以在代码中启用异常处理。此标志告诉编译器生成支持捕获和引发异常的代码。通过使用 add_definitions(),可以将特定的编译器标志或定义全局应用于项目或特定源文件。 - -* 创建静态库目标:`add_library(xlog STATIC ${SRC_FILES} ${HEADER_FILES})` -在这种情况下,本语句使用提供的源文件和头文件列表创建一个名为“xlog”的静态库目标;`STATIC`关键字指定库将构建为静态库,这意味着库代码将在编译时直接链接到最终可执行文件中;`${SRC_FILES}`变量包含应编译并链接到库中的源文件(通常.cpp文件)的列表。${HEADER_FILES} 变量包含头文件(通常为 .h 文件)的列表,这些文件定义库使用的接口和声明。 - -## 1.3 总结 -该篇cmakelists.txt的主要用途是对ipc项目下xlog功能的显现文件的编译和汇总。 - -## 2.1 返回码管理库概述 -提供整个应用程序的返回码管理功能,例如:打印返回码的字符串含义。提供C语言接口,内部实现不限于C或者C++,形成项目内部唯一返回码标准。 - -## 2.2 功能介绍 -* 设置可执行文件的输出路径:`set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH})`;`set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH})` - -* 引入头文件目录:`include_directories`。`include_directories`表示引入头文件搜索路径,当工程要用到某个头文件的时候,就会去该路径下搜索。 - -* 开启自动编译:`set(CMAKE_AUTOMOC ON)` `set(CMAKE_INCLUDE_CURRENT_DIR ON)`. 这段代码开启了 CMake 的元对象编译器、界面编译器和资源编译器自动编译,这样当项目使用了包含元对象的文件、界面文件和资源文件时 CMake 可以自动检测并编译。 - -* 查找在./src路径下的所有源文件:`aux_source_directory(./src SRC_FILES)` 。 - -* 设置ReturnCode地址:`set(TARGET_NAME ReturnCode)`。根据提供的源文件创建一个叫ReturnCode的静态库。然后将目标文件与库文件进行链接:`target_link_libraries(${TARGET_NAME} Log)`。 - -## 2.3 返回码test -* 添加test文件到目录,本目录为测试代码目录,目录结构保持与源码目录结构一致。 - -* 在test各个文件夹里添加相对应的CMakeLists.txt文件,通过`add_subdirectory(utils)`添加与源码目录结构相对应的子文件夹。 - -* 在src文件夹下创建ReturnCodeTest.cpp,调用返回码管理接口。在根目录添加第三方库文件,存放需要用到的第三方库。 - -## 2.4 总结 -Cmake的语句都在CMakeLists.txt的文件中,Cmake运行之后就会产生想要的makefile文件,然后再直接make就可以编译出可执行程序。 - diff --git a/doc/design.md b/doc/design.md deleted file mode 100644 index b9e60e30..00000000 --- a/doc/design.md +++ /dev/null @@ -1,1103 +0,0 @@ -# 1. 设计文档 - -## 1.1. 产品概述 - -  一款低功耗的IPC产品设计方案。 - -### 1.1.1. 名词说明: -MCU:外接的单片机; -小核:rk1106内置的单片机 -大核:rk1106 linux部分业务 - -## 1.2. 结构设计 -1. 迷彩外观; -2. 抽屉式电池箱组; -3. 捆绑/相机支架安装方式; -4. 可拓展4G模块; -5. 户外防水等级? - -### 1.2.1. 结构 - -| 物料 | 备注 | -|----|----| -| 喇叭 | - | -| 麦克风 | - | -| 按键 | 恢复出厂
SD卡格式化
TEST拨键
硬件电源开关 | -| 指示灯 | RGB三色灯 | -| 红外灯 | 940nm | -| usb | TYPEC,充电 | -| 太阳能板 | - | -| 电池仓 | - | -| TF卡卡槽 | - | -| PIR | - | - -### 1.2.2. 配件 - -| 物料 | 备注 | -|----|----| -| 捆绑轧带 | - | -| 快充电池 | - | -| 快充适配器 | - | - -## 1.3. 硬件设计 - -### 1.3.1. 关键外设 -1. 双摄像头; -2. PIR sensor; -3. IR leds; -4. 电池(箱体); -5. 电源开关; -6. 复位按键:同步/复位/格式化; -7. 功能按键:拍摄/cpu通电启动/ -8. tf card; -9. usb接口; -10. 光感传感器:白天/黑夜; -11. 单色指示灯:设备状态(工作/WiFi连接/异常); - -## 1.4. 软件设计 - -### 1.4.1. 多态单例设计模式 - -  多态单例模式包含两部分:抽象接口 + 抽象接口实例,代码基于抽象接口存在,业务基于抽象接口实例存在。 - -#### 1.4.1.1. 多态单例图示 - -  下述图示分别为:类图 / 依赖关系图 / 编译链接关系图 -```mermaid -classDiagram - APP --> AbstractInterface:使用 - AbstractInterface <|.. Instance:实现 - 应用 --> 抽象接口库:依赖 - 抽象接口库 ..> 实例库:依赖 - main线程 --> 抽象接口代码库:链接 - main线程 --> 实例代码库:链接 -``` -#### 1.4.1.2. 多态单例模块使用时序图 - -  在使用多态单例设计模式开发功能模块时,使用统一的命名规则: -* 抽象接口命名:xxx + Abstract,例如:libLogAbstract.a; -* 实例库命名:xxx + 具体实例名称,例如:libLogEasylogging.a; - -**调用关系如下图** -```mermaid -sequenceDiagram -User ->> +libLogAbstract.a:调用抽象接口 -libLogAbstract.a --> +libLogEasylogging.a:实际调用实例接口 -libLogEasylogging.a --> -libLogAbstract.a:return -libLogAbstract.a -->> -User:return -``` -**只有main函数实际调用实例库的实例化接口时,log功能才会生效。** - -#### 1.4.1.3. 多态单例目录结构规范 - -  根据多态单例设计模式,指定使用多态单例模式开发的模块的源码目录结构,耦合思路清晰。 -``` -└── Log // 多态单例模式模块的目录 - ├── include // 多态单例模块对外暴露的头文件目录,抽象接口定义 - │   └── ILogAbstract.h - ├── abstract // 多态单例模式抽象接口声明 - │   └── ILogAbstract.cpp - └── src // 多态单例接口实例代码,目录名称可根据实际功能定义 - ├── LogAstract.cpp - └── LogAstract.h -``` -  构建时把abstract目录和src目录的源码分别编译成库,main线程根据实际需要链接并实例化即可。 - -#### 1.4.1.4. 混合多态单例 - -  多态单例的分类有C++版本多态单例,C语言版本多态单例,混合(C/C++)多态单例。混合多态单例的提出是由于纯C语言多态单例开发难度较高,纯C++语言的多态单例不适合底层(特指本文的分层结构中的适配层)接口为C++时,很多C语言代码调用困难。 - -  混合多态单例,内部多态实现使用C++,保留C++开发便捷性和易维护性(智能指针),对外同时提供C语言多态抽象接口和C++多态抽象接口,满足C/C++混编时易用性。最大特点是include文件夹里面会包含两个头文件。 - -##### 1.4.1.4.1. 多态单例目录结构 -``` -hal -├── abstract // 抽象接口库的基础代码 -│   ├── IHal.cpp -│   └── IHalCpp.cpp -├── include -│   ├── IHalCpp.h // C++抽象接口头文件 -│   └── IHal.h // C语言抽象接口头文件 -└── src // 抽象接口实例库代码 - ├── Hal.c // C语言接口实例 - ├── HalCpp.cpp // C++接口实例 - ├── HalCpp.h - ├── Hal.h - ├── HalMakePtr.cpp // 负责创建内部实例 - └── HalMakePtr.h -``` - -#### 1.4.1.5. 多态单例总结: - -1. 应用代码只使用抽象接口,禁止直接依赖实例代码; -2. 应用代码只有在main线程初始化时实例化实例模块即可; -3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态; - -### 1.4.2. 产品业务功能设计 - -  基于芯片大小核架构的启动设计。 - -#### 1.4.2.1. 白/黑切换状态启动 - -  由外置单片机检测光敏adc,判断由白天切换到黑夜或者黑夜切换到白天时,主动给主控上电,主控上电后会校验并保存新的环境参数,以下次正常PIR启动时,可以避免ircut耗时快速收敛第一帧,最大程度实现快启功能。 - -**启动时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -loop 光敏检测 - MCU ->> MCU:定时唤醒(定时时间待定) - opt 光敏>>>黑夜状态 - note over MCU:由外置单片机点亮红外补光灯 - MCU ->> MCU:点亮红外灯 - end - opt 光敏>>>黑/白切换 - MCU ->> 小核:上电 - activate 小核 - note over 小核:根据上次启动的ircut切换条件初始化ircut IO
本次启动上次的切换条件是异常的 - 小核 ->> 小核:ircut切换-消耗0ms - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms - deactivate 小核 - activate 大核 - 大核 ->> 大核:内核快启抓拍(1P/3P)-200ms - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - 大核 ->> +MCU:获取启动模式 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复启动模式 - opt 黑/白切换状态 - 大核 ->> +MCU:获取黑/白状态 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复黑或者白 - opt 黑/白状态不符合抓拍的初始化参数 - 大核 ->> 大核:ircut重新切换 - 大核 ->> 大核:重新初始化sensor参数 - end - 大核 ->> MCU:关机 - MCU ->> 大核:断电 - end - deactivate 大核 - end -end -``` - -#### 1.4.2.2. 红外触发状态启动(正常工作快启) - -  红外触发启动作为产品正常工作时最经常最重要的启动状态。启动后快速抓拍/录像,快速关机。 - -1. 为保证快启速度,IRCUT需要业务设计进行提前切换; -2. 每次启动抓拍/录像完,需要校验IRCUT状态,保证sensor初始化参数和环境相匹配; -3. 如果发生sensor初始化参数和光照环境不匹配,需要重新初始化sesor并补拍; - -**启动时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -MCU ->> MCU:PIR中断唤醒 -opt 光敏>>>黑夜状态 -note over MCU:由外置单片机点亮红外补光灯 - MCU ->> MCU:点亮红外灯 -end -opt PIR信号触发 - alt 主控未开机 - MCU ->> 小核:上电 - activate 小核 - note over 小核:根据上次启动的ircut切换条件初始化ircut IO
消耗0ms是由于ircut IO会提前切换好 - 小核 ->> 小核:ircut切换-消耗0ms - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms - deactivate 小核 - activate 大核 - 大核 ->> 大核:内核快启抓拍(1P/3P)-200ms - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - 大核 ->> +MCU:获取启动模式 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复启动模式 - opt PIR触发状态 - 大核 ->> +MCU:获取黑/白状态 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复黑或者白 - alt sensor初始化参数和环境参数匹配 - note over 大核:环境参数未发生变化时,可直接保存快启的抓拍 - 大核 ->> 大核:保存到sd卡-?ms - else sensor初始化参数和环境参数不匹配 - note over 大核:环境参数发生变化时,需要重新初始化sensor并补拍 - 大核 ->> 大核:ircut重新切换 - 大核 ->> 大核:重新初始化sensor参数 - 大核 ->> 大核:重新抓拍/录像 - 大核 ->> 大核:保存到sd卡-?ms - end - end - alt TEST拨键-OFF - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - else TEST拨键-ON - opt 超时关机 - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - end - end - deactivate 大核 - else 主控已经开机 - MCU ->> +大核:发送抓拍指令 - 大核 ->> 大核:抓拍 - 大核 ->> MCU:回复抓拍 - 大核 ->> 大核:保存抓拍 - 大核 ->> -MCU:关机指令 - MCU ->> 大核:断电 - end -end -``` - -#### 1.4.2.3. 定时触发状态启动 - -**定时触发状态启动时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -MCU ->> MCU:定时中断唤醒 -opt 光敏>>>黑夜状态 -note over MCU:由外置单片机点亮红外补光灯 - MCU ->> MCU:点亮红外灯 -end -opt 根据定时参数上电 - MCU ->> 小核:上电 - activate 小核 - note over 小核:根据上次启动的ircut切换条件初始化ircut IO
消耗0ms是由于ircut IO会提前切换好 - 小核 ->> 小核:ircut切换-消耗0ms - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms - deactivate 小核 - activate 大核 - 大核 ->> 大核:内核快启抓拍(1P/3P)-200ms - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - 大核 ->> +MCU:获取启动模式 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复启动模式 - opt 定时启动状态 - 大核 ->> +MCU:获取黑/白状态 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复黑或者白 - alt sensor初始化参数和环境参数匹配 - note over 大核:环境参数未发生变化时,可直接保存快启的抓拍 - 大核 ->> 大核:保存到sd卡-?ms - else sensor初始化参数和环境参数不匹配 - note over 大核:环境参数发生变化时,需要重新初始化sensor并补拍 - 大核 ->> 大核:ircut重新切换 - 大核 ->> 大核:重新初始化sensor参数 - 大核 ->> 大核:重新抓拍/录像 - 大核 ->> 大核:保存到sd卡-?ms - end - end - note over 大核:定时状态启动抓拍完直接关机 - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - deactivate 大核 -end -``` - -#### 1.4.2.4. 设置/调试状态启动 - -  特殊的启动状态,可以较长时间通电完成其它功能,期间可供用户完成相关调试和参数设置,此时功耗较高。超时进入工作模式。 - -1. 设置状态按键触发CPU上电,首先进入设置状态启动,5分钟后自动切换到工作状态。 - -**设置状态启动时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -MCU ->> MCU:待机 -opt 光敏>>>黑夜状态 -note over MCU:由外置单片机点亮红外补光灯 - MCU ->> MCU:点亮红外灯 -end -opt TEST拨键-ON - MCU ->> 小核:上电 - activate 小核 - MCU ->> 大核:上电 - activate 大核 - note over 小核:根据上次启动的ircut切换条件初始化ircut IO
消耗0ms是由于ircut IO会提前切换好 - 小核 ->> 小核:ircut切换-消耗0ms - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms - deactivate 小核 - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - 大核 ->> +MCU:获取启动模式 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复启动模式 - opt TEST状态 - 大核 ->> +MCU:获取黑/白状态 - note over 大核:大核启动后,需要通过串口获取启动模式,
来执行后续的任务 - MCU -->> -大核:回复黑或者白 - opt sensor初始化参数和环境参数不匹配 - note over 大核:环境参数发生变化时,需要重新初始化sensor并补拍 - 大核 ->> 大核:ircut重新切换 - 大核 ->> 大核:重新初始化sensor参数 - end - alt WiFi链接 - 大核 ->> 大核:常通电待机 - else 无WiFi连接/无操作 - opt 超时 - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - end - end - end - deactivate 大核 -end -``` - -#### 1.4.2.5. 厂测状态启动 - -  生产测试状态触发:使用tf card配置文件触发生产测试状态; - -**厂测状态启动时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -MCU ->> MCU:物理上电 -MCU ->> 小核:上电 - activate 小核 - MCU ->> 大核:上电 - activate 大核 - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms - deactivate 小核 - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - alt TEST拨键-ON - alt tf card厂测配置文件存在 - 大核 ->> 大核:常通电待机 - else tf card厂测配置文件不存在 - opt 超时 - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - end - end - else TEST拨键-OFF - alt tf card厂测配置文件存在 - 大核 ->> 大核:常通电待机 - else tf card厂测配置文件不存在 - 大核 ->> MCU:关机 - MCU ->> 小核:断电 - MCU ->> 大核:断电 - end - end - deactivate 大核 -``` - -#### 1.4.2.6. 快启时序时间消耗 - -```mermaid -sequenceDiagram -participant MCU -participant 小核 -participant 大核 -MCU ->> MCU:PIR中断唤醒 -note right of MCU:设此时为时间轴0ms -MCU ->> 小核:上电 -MCU ->> 大核:上电 -activate MCU -activate 小核 -activate 大核 -note right of 大核:竞品时间12ms - opt 光敏>>>黑夜状态 - note over MCU:由外置单片机点亮红外补光灯 - MCU ->> MCU:点亮红外灯 - end -deactivate MCU - opt PIR信号触发 - alt 主控未开机 - note over 小核:根据上次启动的ircut切换条件初始化ircut IO
消耗0ms是由于ircut IO会提前切换好 - note right of 大核:竞品在CPU启动后,获取MCU的光敏值
再切ircut和打开红外灯-时间168ms - 小核 ->> 小核:ircut切换-消耗0ms - 小核 ->> 小核:Sensor初始化 - 小核 --> 大核:Sensor初始化完成-100ms -deactivate 小核 - activate 大核 - 大核 ->> 大核:内核快启抓拍(1P/3P)-200ms - note right of 大核:竞品第一帧时间350ms - 大核 ->> 大核:内核启动(文件系统/挂载sd卡)-?ms - 大核 ->> 大核:启动脚本启动APP-?ms - deactivate 大核 - end - end -deactivate 大核 -``` - -### 1.4.3. 根据软件模块作用域分层 - -#### 1.4.3.1. 应用层(application) - -##### 1.4.3.1.1. 应用层概述 - -  应用层负责处理产品级的复杂业务关系,是产品功能的直接体现,应用层模块全部使用C++接口的多态单例模式设计,各模块之间可以互相调用接口,应用层各库可以随意任意调用中间件或者工具类接口。 - -##### 1.4.3.1.2. 网络服务模块 - -###### 1.4.3.1.2.1. 网络服务概述 - -  根据产品联网属性,网络服务模块分为不联网 / 联网(B端)/ 联网(自研)三个多态属性。联网时,IPC的图片 / 视频资源通过网络服务器进行管理。 - -1. 不联网版本:网络服务模块不实例化即可; -2. 联网(B端):媒体资源由三方服务器管理; -3. 联网(自研):媒体资源由自研服务器管理; - -###### 1.4.3.1.2.2. 网络服务多态设计模式 - -  通过构建配置文件选择需要实例化的网络服务模块代码。 - -##### 1.4.3.1.3. 相机任务管理 - -  相机主业务逻辑使用状态机机制进行管理。 - -###### 1.4.3.1.3.1. 任务状态 - -  任务状态是指相机启动需要执行的任务,可能是拍照 / 视频,可能是其它任务。 - -**例如:** -1. 移动物体侦测启动; -2. 定时启动拍照 / 录像; -3. 测试启动; - -###### 1.4.3.1.3.2. 状态机设计 - -```mermaid -stateDiagram-v2 -[*] --> TopState -TopState --> PowerOff -TopState --> MSDCState -TopState --> DeviceAbnormal -TopState --> MissionState -MissionState --> 存储管理 -存储管理 --> EMMC -存储管理 --> SD卡 -SD卡 --> 插卡 -SD卡 --> 拔卡 -SD卡 --> 卡异常 -MissionState --> 网络管理 -网络管理 --> 联网 -联网 --> 上传文件 -网络管理 --> 未联网 -MissionState --> 直播 -MissionState --> 4G管理 -4G管理 --> Sim卡初始化 -4G管理 --> 注网状态 -MissionState --> Upgrade -``` - -###### 1.4.3.1.3.3. 任务状态获取启动 - -  应用程序运行后,首先需要知道主控是由于何种任务被唤醒,然后根据任务来执行相应的功能代码; - -**时序图** - -```mermaid -sequenceDiagram -participant MCU -participant 大核 -MCU ->> MCU:待机 -opt MCU上电 - MCU ->> 大核:上电 - activate 大核 - 大核 ->> 大核:系统初始化 - 大核 ->> 大核:启动脚本拉起APP - 大核 ->> +MCU:读取启动任务 - MCU -->> -大核:return - alt PIR触发 - 大核 ->> 大核:APP初始化 - 大核 ->> 大核:抓拍并保存 - else 定时 - 大核 ->> 大核:APP初始化 - 大核 ->> 大核:抓拍并保存 - else TEST - 大核 ->> 大核:APP初始化 - 大核 ->> 大核:待机 - end - deactivate 大核 -end -``` - -#### 1.4.3.2. 中间件(middleware) - -##### 1.4.3.2.1. 中间件概述 - -  一些相对中性的业务功能库,这些库可以提供给不同的产品需求使用,在应用层不同的调用方式可实现不同的产品功能。中间件只能被应用层调用或者向下调用适配层或者调用工具库,中间件各模块之间不能互相调用。中间件库接口可以使用C或者C++接口。 - -##### 1.4.3.2.2. 设备管理模块 - -  设备,统指Linux的设备节点,应用层唯一的硬件设备接口库。包含灯 / 按键 / GPIO / SD卡 / 串口 / USB等。 - -##### 1.4.3.2.3. 相机管理模块 - -  应用层唯一的摄像头接口库。 - -##### 1.4.3.2.4. MCU管理模块 - -  MCU通信接口库,一般使用串口进行通信,需要考虑多态其它接口(例如I2C),考虑多态协议数据结构。MCU负责管理外设的电源控制 / 充当硬狗等。 - -###### 1.4.3.2.4.1. MCU管理模块设计模式 - -  使用C++接口的多态单例模式。 - -基本功能: - -1. 使用utils当中的串口功能模块,支持多态切换到其它串口功能模块; -2. 设置MCU管理的监视器monitor,用于回调处理MCU接受到的业务事件; -3. 通信协议不暴露,内部处理基于协议的数据解析 / 组包; -4. 通信协议支持多态拓展,通信协议独立成库; - -##### 1.4.3.2.5. MCU协议模块 - -  负责对MCU协议进行封包/解包,负责协议的多态替换。协议数据统一使用网络字节序(大端字节序)。 - -###### 1.4.3.2.5.1. 协议格式 - -| 协议头 | 流水号 | 命令字 | 长度 | 数据段 | 校验码 | -|----|----|----|----|----|----| -| 2字节
0xFAC1 | 4字节 | 2字节 | 2字节 | - | 2字节 | - -**流水号** - -  流水号用于强绑定问答型协议的发送数据和回复数据,回复者原数据回传即可。例如: - -``` -unsigned char ASK_IPC_MISSION[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x81, 0x01, 0x00, 0x0C, 0x71, 0x88}; -unsigned char REPLY_IPC_MISSION[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x0D, 0x01, 0xAA, 0x89}; -``` - -  流水号管理发送方和接收方互相独立,各自往外发的协议中流水号存在重复的可能,接收方直接复制回传即可。 - -  流水号必须大于等于1,0用于代码初始化值,代码意义上表示无效的流水号。 - -**协议收发匹配逻辑** -  协议发送时,附带自管理的流水号,对端回复时,根据流水号绑定发送的协议,为了避免对端回复时,流水号错误导致的业务逻辑错乱,本端除了匹配流水号,还需要根据协议匹配回复的命令字,保证回复内容的有效匹配。如果流水号和命令字无法同时匹配,该回复的数据包被丢弃。 - -**校验码算法** - -  校验码算法使用ModBus CRC16方法计算。 - -**参考代码(查表法)** - -``` -/* Table of CRC values for high–order byte */ -unsigned char chCRCHi[] ={ - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 -}; - -/* Table of CRC values for low–order byte */ -unsigned char chCRCLo[] ={ - 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, - 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, - 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, - 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, - 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, - 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, - 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, - 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, - 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, - 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, - 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, - 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, - 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, - 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, - 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, - 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, - 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, - 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, - 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, - 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, - 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, - 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, - 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, - 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, - 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, - 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 -}; -/** - * @brief 计算校验和 - * - * @param pData 数据指针 - * @param length 数据长度 - * @return unsigned short - */ -unsigned short calculate_check_sum(const unsigned char* pData, unsigned short length) -{ - unsigned char CRCHi = 0xFF; - unsigned char CRCLo = 0xFF; - int uIndex; - while (length--) - { - uIndex = CRCHi ^ *pData++; - CRCHi = CRCLo ^ chCRCHi[uIndex]; - CRCLo = chCRCLo[uIndex]; - } - return (CRCHi << 8 | CRCLo); -} -``` - -###### 1.4.3.2.5.2. 协议内容 - -**基本描述** -1. 大于等于0x8000的命令字由CPU发给MCU; -2. 小于0x8000的命令字由MCU发给CPU; -3. 大于0x0801而小于0xC101的命令由CPU主动发送给MCU,大于等于0xC101的命令由CPU回复发送给MCU; -4. 问答型协议只有按位最高位相反,其它位相等,例如:0x8101与0x0101是一问一答的协议; - -| 命令字 | CPU | MCU | 数据段 | 协议解析 | 备注 | -|----|----|----|----|----|----| -| 0x8101 | ask | - | - | 获取启动模式 | - | -| 0x0101 | - | reply | Data[0]:启动模式
0x01:PIR启动
0x02:TEST启动
0x03:连拍启动
0x04:PIR延时启动
0x05:定时(间隔一定时间)启动
0x06:关机
0x07:低电关机 | 回复启动模式 | - | -| 0x8102 | ask | - | - | 断电关机 | - | -| 0x8103 | ask | - | - | 喂狗 | - | -| 0x8104 | ask | - | Data[0]:Hour
0-23
Data[1]:Min
0-59
Data[2]:Sec
0-59 | 开启狗/设置喂狗周期 | - | -| 0x0104 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 开启狗/设置喂狗周期回复 | - | -| 0x8105 | ask | - | - | 关闭狗 | - | -| 0x0105 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 关闭狗回复 | - | -| 0x8106 | ask | - | Data[0]:Hour
0-23
Data[1]:Min
0-59
Data[2]:Sec
0-59 | 设置间隔启动时间 | - | -| 0x0106 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 设置间隔启动时间回复 | - | -| 0x8107 | ask | - | Data[0]:Year
Data[1]:Mon
1-12
Data[2]:Day
0-31
Data[3]:Hour
0-23
Data[4]:Min
0-59
Data[5]:Sec
0-59 | 设置日期和时间 | - | -| 0x0107 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 设置日期和时间回复 | - | -| 0x8108 | ask | - | Data[0]:灵敏度
0-9 | 设置PIR灵敏度 | - | -| 0x0108 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 设置PIR灵敏度回复 | - | -| 0x8109 | ask | - | Data[0]:Hour
0-23
Data[1]:Min
0-59
Data[2]:Sec
0-59 | 设置连拍间隔 | - | -| 0x0109 | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 设置连拍间隔回复 | - | -| 0x810A | ask | - | Data[0]:控制模式
0-关闭红外灯
1-开启红外灯 | 红外灯控制 | - | -| 0x010A | - | reply | Data[0]:结果
0x01:成功
0x02:失败 | 红外灯控制回复 | - | -| 0x810B | ask | - | - | 获取光敏值 | - | -| 0x010B | - | reply | Data[0]:结果
0-100 | 获取光敏值回复 | - | -| ====== | === | ====== | ============================ | ==================== | ======= | -| 0xC101 | reply | - | Data[0]:结果
0x01:成功
0x02:失败 | 发送启动模式回复 | - | -| 0x4101 | - | ask | Data[0]:启动模式
0x01:PIR启动
0x02:TEST启动
0x03:连拍启动
0x04:PIR延时启动
0x05:定时(间隔一定时间)启动
0x06:关机
0x07:低电关机 | 发送启动模式 | - | - -##### 1.4.3.2.6. IPC配置库 - -  负责管理IPC产品相关的配置数据。 - -###### 1.4.3.2.6.1. IPC配置库设计模式 - -  使用多态单例设计模式,对外提供C语言接口,内部不局限使用C或者C++。 - -**基本功能** - -1. 敏感数据(例如:账号 / 密码)需要加密处理; -2. 读到内存使用二进制数据,缓存到数据结构体; -3. 调用utils工具里面的配置库,对配置文件进行读 / 写; -4. 使用二进制结构体 + 明文配置文件结合的模式,既可减少内存消耗,又可以规避二进制数据升级迭代数据匹配困难问题; -5. 使用枚举方式管理IPC配置数据定义,当使用纯16进制保存数据时,可不链接utils工具里面的配置库,直接保存16进制数据到文件系统即可; -6. 应用程序全局唯一可以操作IPC配置文件的库,保证配置文件正确读写; - -###### 1.4.3.2.6.2. IPC配置库类图 -```mermaid -classDiagram - i_ipc_config <.. ipc_config:实现 - ipc_config --> i_config_manager:依赖 - ipc_config --> IHal:依赖 - i_config_manager <.. config_manager:实现 - config_manager --> libconfig开源库:依赖 -``` - -###### 1.4.3.2.6.3. 关键业务时序图 - -  **时序图会忽略抽象接口直接使用实例接口表示。** - -* IPC配置库初始化 / 解初始化 -```mermaid -sequenceDiagram -participant User -participant ipc_config -participant i_config -participant IHal -User ->> +ipc_config:初始化 - ipc_config ->> +IHal:获取文件系统路径 - IHal -->> -ipc_config:return - ipc_config ->> +i_config:打开配置文件 - i_config -->> -ipc_config:return - alt 打开成功 - rect rgba(255,220,200,1) - loop 读取所有数据到IPC数据结构体 - ipc_config ->> +i_config:读取一个数据到IPC数据结构体 - i_config -->> -ipc_config:return - rect rgba(255,255,200,1) - opt 读取失败 - ipc_config ->> ipc_config:生成默认数据 - ipc_config ->> +i_config:设置默认数据 - i_config ->> -ipc_config:return - end - end - end - ipc_config ->> +i_config:关闭配置文件 - i_config -->> -ipc_config:return - end - else 打开失败 - rect rgba(255,200,200,1) - ipc_config ->> ipc_config:生产默认数据 - ipc_config ->> +i_config:创建配置文件 - i_config -->> -ipc_config:return - ipc_config ->> +i_config:设置默认数据 - i_config -->> -ipc_config:return - ipc_config ->> +i_config:关闭配置文件 - i_config -->> -ipc_config:return - end - end -ipc_config -->> -User:return -User ->> +ipc_config:解初始化 - ipc_config ->> ipc_config:释放内存中的数据 -ipc_config -->> -User:return -``` - -* 读 / 写(修改)数据 - -```mermaid -sequenceDiagram -participant User -participant ipc_config -User ->> +ipc_config:读取数据 - ipc_config ->> ipc_config:返回内存保存的数据 -ipc_config -->> -User:return -User ->> +ipc_config:修改数据 - ipc_config ->> ipc_config:修改内存保存的数据 -ipc_config -->> -User:return -``` - -* 保存数据 - - -```mermaid -sequenceDiagram -participant User -participant ipc_config -participant i_config -User ->> +ipc_config:保存 - ipc_config ->> +i_config:打开配置文件 - i_config -->> -ipc_config:return - ipc_config ->> +i_config:同步数据 - i_config -->> -ipc_config:return - ipc_config ->> +i_config:保存配置文件 - i_config -->> -ipc_config:return - ipc_config ->> +i_config:关闭配置文件 - i_config -->> -ipc_config:return -ipc_config -->> -User:return -``` - - -##### 1.4.3.2.7. 高级配置库 - -  对配置库的二级封装,提供更便捷的功能服务,例如:可以监控文件的修改事件 / 可以直接捕获某个配置文件或者数据的操作对象。 - -###### 1.4.3.2.7.1. 高级配置库设计 - -  对外暴露C++接口,使用多态单例设计模式。 - -##### 1.4.3.2.8. 状态机管理 - -  提供实现状态机管理机制C++接口,使用鸿蒙状态机开源源码进行改造封装。 - -###### 1.4.3.2.8.1. 状态机管理设计模式 - -  使用多态单例设计模式,暂定使用鸿蒙状态机开源代码改造实现,后续可替换其它源码或者自研代码。 - -##### 1.4.3.2.9. 文件数据库 - -  文件数据库负责管理设备的媒体资源(图片 / 视频等)。 - -###### 1.4.3.2.9.1. 文件数据设计模式 - -  使用混合多态单例模式开发。 - -###### 1.4.3.2.9.2. 开源库选型 - -  sqlite3开源库,编译成工具类库提供给文件数据库使用。 - -###### 1.4.3.2.9.3. 基本功能和业务需求 - -1. 对媒体资源文件的增删改查处理; -2. 记录媒体资源文件的生成时间,任务(是否发送); -3. 业务根据需要,通过数据库判断哪些文件已经发送完成,哪些文件发送失败,哪些文件待发送; - -#### 1.4.3.3. 硬件适配层(hal) - -  负责适配不同的硬件平台。 - -##### 1.4.3.3.1. 硬件适配层设计模式 - -  基于C语言接口的多态单例模式,编译时静态多态链接对应的芯片平台适配代码,实现芯片接口的标准功能定义。 - -##### 1.4.3.3.2. 媒体适配方案: - -  IPC应用在适配芯片平台的多媒体接口时,使用多进程的方式实现。满足IPC应用可以快起(无需等待媒体相关的初始化)的需求。 - -**媒体基本需求** - -1. 图片抓拍; -2. 视频抓拍; - -**多进程通信方案** - -  使用本地socket的方式进行多进程通信,媒体进程为客户端,IPC应用为服务端(IPC先启动)。 - -1. 客户端可自动重连; -2. 服务端可多次关闭和开启,满足gtest资源回收需求; - -##### 1.4.3.3.3. 适配层多进程类图 - -```mermaid -classDiagram - i_hal <.. hal:实现 - hal --> v_media_handle:依赖 - v_media_handle --> local_socket:依赖 - local_socket .. media进程:跨进程 - media进程 --> 芯片媒体API:依赖 -``` - -##### 1.4.3.3.4. 跨进程业务时序图 - -* 本地socket链接 - -```mermaid -sequenceDiagram -participant hal -participant v_media_handle -participant local_socket_s -participant local_socket_c -participant media进程 -participant 芯片媒体API -hal ->> +v_media_handle:初始化 - v_media_handle ->> +local_socket_s:本地socket服务端启动 - par 本地socket初始化 - local_socket_s -->> -v_media_handle:return -v_media_handle -->> -hal:return - and - media进程 ->> media进程:启动 - media进程 ->> +local_socket_c:初始化服务端 - local_socket_c -->> local_socket_s:链接 - local_socket_c -->> -media进程:return - local_socket_s -->> local_socket_c:初始化媒体 - local_socket_c ->> media进程:回调回传协议事件 - media进程 ->> +芯片媒体API:初始化媒体 - 芯片媒体API -->> -media进程:return - end -``` - -* 存在问题: -使用C语言开发时如何解决智能指针问题? - -#### 1.4.3.4. 工具库(utils) - -##### 1.4.3.4.1. 工具库概述 -  工具库是功能单一的不依赖任何三方库的独立库(日志库和返回码管理库除外),必须提供C语言接口,内部实现不限于C或者C++。工具类库可以被任意的其它模块调用,特别指hal/component/application三大层级。 - -##### 1.4.3.4.2. 日志库 - -###### 1.4.3.4.2.1. 日志库概述 -  提供程序的日志管理功能,含日志的实时打印/保存/跟踪(实时上传云端)。 - -###### 1.4.3.4.2.2. 日志库设计模式 -  C语言接口的多态单例模式,可动态/静态加载多态实例。 - -###### 1.4.3.4.2.3. 日志库启动 -  日志库是否启用一般来讲是dubug版本启用日志功能,release版本禁用日志功能,考虑到release版本的维护问题,标准启动时,main线程在启动时使用dlopen系列函数去加载日志库(多态),特殊版本仍可在main线程加载日志库后,二次实例化日志库(多态)来实现不同的日志功能。 - -1. 标准流程:main线程加载sd卡动态库,如有即可动态实现日志功能,正常出货sd卡不带日志库,此时没有日志功能; -2. 可以通过配置参数决定是否启用日志; -3. sd卡的日志动态,根据实际售后维护,可以是实时打印log/保存本地log/云log的多态实例库; -4. 多态日志功能,可以忽略debug和release版本的区别,只发布一个版本即可; - -##### 1.4.3.4.3. 状态码管理库 - -  提供整个应用程序的返回码管理功能,例如:打印返回码的字符串含义。提供C语言接口,纯C语言开发的模块,形成项目内部唯一返回码标准。 - -###### 1.4.3.4.3.1. 状态码功能 - -1. 创建返回码操作“句柄”; -2. 打印返回码/获取返回码(字符串); -3. 不同模块可继承实现各自的返回码处理接口; -4. 不同模块之间可透传状态码,避免错误码的转换麻烦; -5. 状态码的定义是跟着模块走的,独立模块的状态码定义在模块内部,不链接时不占用程序空间; - -###### 1.4.3.4.3.2. 基础状态码定义 - -  基础状态码是全局的基础状态码,枚举值全局唯一,其它独立模块必须继承基础状态码累加枚举值,但是,独立模块之间的枚举值可重复,状态码在使用时,日志只关注状态码的字符串,不关心状态码枚举值,代码逻辑使用枚举值。 - -``` -enum STATUS_CODE -{ - STATUS_CODE_OK = 0, - STATUS_CODE_NOT_OK, - STATUS_CODE_VIRTUAL_FUNCTION, - STATUS_CODE_INVALID_PARAMENTER, - STATUS_CODE_END -}; -``` -| 枚举名 | 字符串 | 描述 | -| ------ | :------------------------------- | --------- | -| STATUS_CODE_OK | STATUS_CODE_OK | 成功 | -| STATUS_CODE_NOT_OK | STATUS_CODE_NOT_OK | 失败 | -| STATUS_CODE_VIRTUAL_FUNCTION | STATUS_CODE_VIRTUAL_FUNCTION | 抽象接口,提示抽象接口未实例化 | -| STATUS_CODE_INVALID_PARAMENTER | STATUS_CODE_INVALID_PARAMENTER | 无效的参数 | -| STATUS_CODE_END | STATUS_CODE_END | 结束,无意义 | -| 其它 | ? | 其它状态码在各自模块定义 | - -###### 1.4.3.4.3.3. 已知漏洞 - -  状态码在代码层面是存在重复的可能性的,代码逻辑在使用状态码枚举值时,可能会出现逻辑错误。 - -* 解决方案 -在使用状态码进行逻辑判断时,使用状态码枚举值的字符串。 -Example: -``` -static inline bool StatusCodeEqual(const StatusCode code, const char *value) -``` - -##### 1.4.3.4.4. 系统标准接口库 - -  对系统标准接口的套壳封装,主要是为了对系统标准打桩满足测试需求。 - -  使用普通的C语言接口封装即可,通过使用gcc编译参数在Linux x86系统中满足打桩需求,在交叉编译(担心工具链兼容问题)测试程序中无法对系统标准接口进行打桩。 - -##### 1.4.3.4.5. 通用配置库 - -###### 1.4.3.4.5.1. 通用配置库概述 - -  配置库负责管理软件配置参数,对配置数据进行设置 / 获取 / 存储 / 备份 / 升级等功能;通用配置库不限制使用场景,是一个通用的配置文件管理库。 - -###### 1.4.3.4.5.2. 配置库设计模式 - -  对外提供C语言接口,内部不局限使用C或者C++。整个软件唯一可以直接操作文件系统配置文件的库。配置库可以理解为简单的三方库的接口直接封装,使用多态单例设计模式实现静态或者动态切换三方库的使用。 - -**基本功能** - -1. 使用**三方库**保存明文格式的配置文件到文件系统; -2. 可注册回调函数,监听文件的操作事件; -3. 使用字符串名字key + 值的方式管理配置文件,作为通用的配置文件管理库; - -###### 1.4.3.4.5.3. 开源库 - -两种方案: -1. 使用libconfig作为文件操作的开源库,实现文件和数据的读 / 写。 -2. 使用sqlite3作为文件操作的开源库,作为数据库文件处理。 - -###### 1.4.3.4.5.4. 通用配置库类图 -  多态单例设计模式,main线程静态链接多态库。 -```mermaid -classDiagram - i_config_manager <.. config_manager:实现 - config_manager --> libconfig开源库:依赖 - i_config_manager <.. sqlite_manager:实现 - sqlite_manager --> sqlite3数据库:依赖 -``` - -###### 1.4.3.4.5.5. 备份机制 - -  备份数据用于数据异常时可还原旧数据。 - -方案选择: -1. 出厂默认配置文件为只读文件,在数据破坏时还原; - -###### 1.4.3.4.5.6. 升级机制 - -  程序升级后配置数据发生增 / 删时如何兼容和还原。 - -##### 1.4.3.4.6. 串口功能模块 - -  串口的打开 / 关闭 / 数据读 / 数据写 功能。 - -###### 1.4.3.4.6.1. 串口开源库 -使用下述开源库对串口数据进行收发。 -``` -https://gitee.com/RT-Thread-Mirror/TinyFrame -``` - -##### 1.4.3.4.7. MCU协议库 - -  负责MCU通信协议的组包 / 拆包 / 事件转换。 - -###### 1.4.3.4.7.1. MCU协议库设计模式 - -  基于C语言的多态单例设计模式。 - -###### 1.4.3.4.7.2. 协议数据结构 - -##### 1.4.3.4.8. 多进程通讯库 - -  负责多进程之间的数据交换。使用local socket方式实现。 - -##### 1.4.3.4.9. 多进程协议库 - -  负责IPC应用和媒体进程之间的协议组包 / 拆包,在协议和业务之间进行转换接口的封装。 - -## 1.5. 生产测试/研发调试 - -  基于公版代码派生出来的特定的定制版本,用于辅助生产和测试。 - -## 1.6. 自动化测试 - -### 1.6.1. 自动化测试概述 - -  自动化测试是该产品设计的一大特点,需要严格执行。自动化测试指使用纯代码对业务设计进行测试用例设计,实现业务集成测试的能力。 - - -### 1.6.2. 自动化测试规范 - -1. 每个源码文件在开发时,均要写调试的example,用于验证该文件的接口功能;测试文件的命名规则为:文件名 + “_Test.c(pp)”; -例如: -* C语言:log_impl.c对应的测试文件为log_impl_Test.cpp; -* C++:LogImpl.cpp对应的测试文件为LogImpl_Test.cpp; - -## 1.7. 编码规范 - -1. 文件命名统一使用大驼峰命名规则; -2. 混合多态单例的C++抽象接口头文件需要有Cpp关键字标识; -3. 多单单例的头文件 / 类名 统一使用“I”前缀,interface的单词首字母; -4. 抽象对象接口类统一使用“V”前缀, virtual的单词首字母; -5. 所有函数统一使用大驼峰命名规则; -6. 其它遵循华为的编码规范要求; \ No newline at end of file diff --git a/doc/develop_standard.md b/doc/develop_standard.md deleted file mode 100644 index c218327d..00000000 --- a/doc/develop_standard.md +++ /dev/null @@ -1,111 +0,0 @@ -# 1. SDK开发规范 - -## 1.1. 编码规范 - -### 1.1.1. 指针/智能指针 - -* C++编码只能使用智能指针; -* 指针遵循谁使用谁进行“非空”判断,且无比使用前进行“非空”判断; -* 智能指针经过转换后务必进行“非空”判断; - -理论上,**明显不可能为空的指针,可以不进行“非空”判断**,可以不进行“非空”判断的场景: - -``` -void McuManagerImpl::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission) -{ - class McuRecvIpcMission : public McuRecvImpl, public McuRecv - { - public: - McuRecvIpcMission(std::shared_ptr &mcuManager, const unsigned int &serialNumber, - const OtherSideSendType &sendType, const unsigned char &mission) - : McuRecvImpl(serialNumber, sendType) - { - McuRecv::mDataRecvReply = mission; - McuRecvImpl::mMcuManager = mcuManager; - } - ~McuRecvIpcMission() = default; - void ReplyFinished(const bool result) override - { - // 此处可以不进行“非空”判断,该值在有限范围内(OtherSideSendIpcMission函数内部)就能看出是否为空 - McuRecvImpl::mMcuManager->ReplyOtherSideSendIpcMission(ASK_RESULT::SUCCEED, McuRecvImpl::mSerialNumber); - } - }; - std::shared_ptr monitor = GetMcuMonitor(); - std::shared_ptr manager = std::dynamic_pointer_cast(SharedFromThis()); - std::shared_ptr recv = - std::make_shared(manager, serialNumber, OtherSideSendType::SEND_IPC_MISSION, mission); - if (monitor) { - monitor->RecvIpcMissionEvent(recv, static_cast(mission)); - } - else { - LogWarning("mMonitor is nullptr, AddMcuRecv.\n"); - AddMcuRecv(recv); - } -} -``` - -**没有进行“非空”判断的代码,应该开发测试用例,保证“空指针”的报错。** - -### 1.1.2. 注释 - -* 注释必须使用英文,且使用翻译器翻译; -  避免编码问题导致的乱码,且需要保证阅读困难时可使用翻译器翻译成可读的中文; - -**注:** 注释翻译工具使用[百度翻译](https://fanyi.baidu.com/);翻译的注释在使用doxygen工具生成接口文档时,在网页上方便翻译成中文。 - -### 1.1.3. C++继承 - -* 子类使用父类的函数时,函数前必须加父类名,降低阅读难度,没有父类名的一律为本类函数(有可能是虚函数); - -### 1.1.4. 变量命名 - -#### 1.1.4.1. 结构体/类成员 - -* 结构体和类成员必须要使用驼峰命名法,且首字母必须为m表示成员变量; - -``` -typedef struct app_get_product_info -{ - app_get_product_info(); - std::string mModel; - std::string mCompany; - std::string mSoc; - std::string mSp; -} AppGetProductInfo; -``` - -### 1.1.5. 文件命名 - -* 文件名必须使用驼峰命名法,且首字母大写; - -### 1.1.6. 代码排版 - -* 使用统一标准的代码排版风格,保持多人开发时代码的整洁,避免因为排版(特别是编辑工具的自动排版功能)导致每次提交时都产生大量的排版修改,影响后续代码异常排查; - -  请使用仓库跟目录下.clang-format配置文件进行排版,如果使用vscode编辑器开发代码,可直接使用快捷键ctrl+alt+f进行排版;也可以使用构建脚本对代码进行排版。 - -**对发生修改的代码进行格式化:** - -```code -$ make cmake // 在仓库根目录执行,对发生修改的文件创建格式化命令 -$ cd cmake-shell/ -$ make improve_modified_code // 文件格式化命令,统一排版,此命名只对发生修改的文件进行格式化 -``` - -**对全部文件进行格式化:** - -```code -详见配置文件://build/global_config.cmake -把 COMPILE_IMPROVE_SUPPORT 设置为 true 时,将会在每次编译代码时进行格式化。 -if(${LINUX_TEST} MATCHES "true") - set(CLANG_TIDY_SUPPORT "true") - set(CLANG_FORMAT_SUPPORT "true") - set(COMPILE_IMPROVE_SUPPORT "false") # 开启后每次编译可能会很慢 - set(LLVM_PATH "$ENV{HOME}/llvm-project") -endif() -``` - -### 1.1.7. 函数 - -* 单个函数代码行控制在50行内,阅读时无需上下滚动去理解代码逻辑;极少数初始化数据的无逻辑推理的代码除外; -* 函数参数不能超过10个; diff --git a/doc/doxygen_user_guide.md b/doc/doxygen_user_guide.md deleted file mode 100644 index 33907f60..00000000 --- a/doc/doxygen_user_guide.md +++ /dev/null @@ -1,21 +0,0 @@ -# 1. Linux嵌入式项目使用Doxygen生成API文档 - -## 1.1. Doxygen简介 - -  Doxygen是一个开源的文档生成工具,可以用来生成项目源代码的API文档。 - -## 1.2. Doxygen安装 - -  Doxygen安装非常简单,直接在官网下载最新版本即可。 - -``` - $ sudo apt-get install doxygen -``` - -## 1.3. 安装Graphviz - -  Doxygen本身不直接支持画图功能,但它可以生成DOT格式的图形描述文件,然后使用Graphviz工具进行渲染。 - -``` -$ sudo apt-get install graphviz -``` \ No newline at end of file diff --git a/doc/gdb_coredump_guide.md b/doc/gdb_coredump_guide.md deleted file mode 100644 index b7de2ad7..00000000 --- a/doc/gdb_coredump_guide.md +++ /dev/null @@ -1,209 +0,0 @@ -# 1. gdb coredump分析 - -  本文介绍ubuntu系统环境下coredump文件的分析方法。 - -**一个coredump示例:** - -``` -$ ../output_files/test/bin/McuManagerTest --gtest_filter=McuManagerTest.RH_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission -Note: Google Test filter = McuManagerTest.RH_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission -[==========] Running 1 test from 1 test suite. -[----------] Global test environment set-up. -[----------] 1 test from McuManagerTest -NewLog succeed. -LogImplInit -[ RUN ] McuManagerTest.RH_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission -2024-05-15 17:43:04,782 INFO [default] [McuManagerMakePtr.cpp:23]:CreateMcuManager is ok. - -2024-05-15 17:43:04,783 INFO [default] [IMcuManager.cpp:72]:Instance changed succeed. - -2024-05-15 17:43:04,783 INFO [default] [UartDeviceImpl.cpp:277]:Create the uart device object. - -Can't Open Serial Port: No such file or directory -2024-05-15 17:43:04,784 ERROR [default] [McuDevice.cpp:51]:IUartOpen failed. - -2024-05-15 17:43:04,787 INFO [default] [UartDeviceImpl.cpp:277]:Create the uart device object. - -Can't Open Serial Port: No such file or directory -2024-05-15 17:43:04,787 ERROR [default] [McuDevice.cpp:51]:IUartOpen failed. - -terminate called without an active exception -Aborted (core dumped) -``` - -## 1.1. coredump文件生成路径查询 - -``` -$ cat /proc/sys/kernel/core_pattern -|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E -``` - -修改coredump文件生成路径: - -``` -$ sudo sh -c 'echo /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/cmake-shell/core.%e.%p > /proc/sys/kernel/core_pattern' -$ cat /proc/sys/kernel/core_pattern -/home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/cmake-shell/core.%e.%p -``` -命令: -sudo sh -c 'echo /path/core.%e.%p > /proc/sys/kernel/core_pattern' - -例如: -``` -sudo sh -c 'echo /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/cmake-shell/core.%e.%p > /proc/sys/kernel/core_pattern' -``` - -**发现路径下并未生成coredump文件** - -``` -$ ulimit -a -core file size (blocks, -c) 0 // 0表示终端未开启core dump -data seg size (kbytes, -d) unlimited -scheduling priority (-e) 0 -file size (blocks, -f) unlimited -pending signals (-i) 63499 -max locked memory (kbytes, -l) 65536 -max memory size (kbytes, -m) unlimited -open files (-n) 1024 -pipe size (512 bytes, -p) 8 -POSIX message queues (bytes, -q) 819200 -real-time priority (-r) 0 -stack size (kbytes, -s) 8192 -cpu time (seconds, -t) unlimited -max user processes (-u) 63499 -virtual memory (kbytes, -v) unlimited -file locks (-x) unlimited -``` - -解决: -``` -$ ulimit -c unlimited -``` - -sudo echo /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/cmake-shell/core.%e.%p > /proc/sys/kernel/core_pattern - -## 1.2. gdb查看堆栈信息 - -**Ubuntu系统需要加sudo执行程序才会生成coredump文件。** - -### 1.2.1. 无法识别coredump文件 - -  在gdb中无法识别coredump文件,如下所示: - -``` -$ sudo gdb ../output_files/test/bin/McuManagerTest core.smbd.3390383 -[sudo] password for xiaojiazhu: -Sorry, try again. -[sudo] password for xiaojiazhu: -GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2 -Copyright (C) 2020 Free Software Foundation, Inc. -License GPLv3+: GNU GPL version 3 or later -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. -Type "show copying" and "show warranty" for details. -This GDB was configured as "x86_64-linux-gnu". -Type "show configuration" for configuration details. -For bug reporting instructions, please see: -. -Find the GDB manual and other documentation resources online at: - . - -For help, type "help". -Type "apropos word" to search for commands related to "word"... -Reading symbols from ../output_files/test/bin/McuManagerTest... - -warning: core file may not match specified executable file. // 表示coredump文件与可执行文件不匹配 -[New LWP 3390383] -Core was generated by `/usr/sbin/smbd --foreground --no-process-group'. -Program terminated with signal SIGABRT, Aborted. -#0 0x00007fd59718600b in ?? () -(gdb) bt -#0 0x00007fd59718600b in ?? () -#1 0x0000000000001c80 in ?? () -#2 0x0000000000000000 in ?? () -``` - -由于gdb和asan同时启用会冲突,导致无法识别coredump文件。解决办法如下: - -修改://build/sdk_config.cmake - -``` -# Gdb debug -if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) - message("---------------------------Debug mode.-----------------------") - SET(CMAKE_BUILD_TYPE "Debug") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -Wall -g -ggdb") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -Wall -g -ggdb") - SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") - SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") - # asan - # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined") - # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined") -else() - message("---------------------------Release mode.-----------------------") - SET(CMAKE_BUILD_TYPE "Release") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os") -endif() -``` - -解决后: - -``` -$ sudo gdb ../output_files/test/bin/McuManagerTest core.McuManagerTest.3406751 -GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2 -Copyright (C) 2020 Free Software Foundation, Inc. -License GPLv3+: GNU GPL version 3 or later -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. -Type "show copying" and "show warranty" for details. -This GDB was configured as "x86_64-linux-gnu". -Type "show configuration" for configuration details. -For bug reporting instructions, please see: -. -Find the GDB manual and other documentation resources online at: - . - -For help, type "help". -Type "apropos word" to search for commands related to "word"... -Reading symbols from ../output_files/test/bin/McuManagerTest... -[New LWP 3406751] -[New LWP 3406753] -[New LWP 3406752] -[Thread debugging using libthread_db enabled] -Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". -Core was generated by `../output_files/test/bin/McuManagerTest --gtest_filter=McuManagerTest.RH_INTEGR'. -Program terminated with signal SIGABRT, Aborted. -#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 -50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. -[Current thread is 1 (Thread 0x7fd355968740 (LWP 3406751))] -(gdb) bt -#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 -#1 0x00007fd35598f859 in __GI_abort () at abort.c:79 -#2 0x00007fd355d678d1 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 -#3 0x00007fd355d7337c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 -#4 0x00007fd355d733e7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6 -#5 0x000055c247b3ae41 in std::thread::operator= (__t=..., this=0x55c248d19748) at /usr/include/c++/9/thread:152 -#6 McuProtocol::Init (this=this@entry=0x55c248d196f8) at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/src/McuProtocol.cpp:58 -#7 0x000055c247b03e57 in McuManagerImpl::Init (this=0x55c248d19680) - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/middleware/McuManager/src/McuManagerImpl.cpp:46 -#8 0x000055c247acd3d4 in McuManagerTest::McuManagerTest_RH_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission_Test::TestBody (this=) - at /usr/include/c++/9/bits/shared_ptr_base.h:1020 -#9 0x000055c247b303fd in void testing::internal::HandleExceptionsInMethodIfSupported(testing::Test*, void (testing::Test::*)(), char const*) () at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#10 0x000055c247b23343 in testing::Test::Run() () at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#11 0x000055c247b2342b in testing::TestInfo::Run() () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#12 0x000055c247b2376e in testing::TestSuite::Run() () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#13 0x000055c247b2a0fa in testing::internal::UnitTestImpl::RunAllTests() () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#14 0x000055c247b3085e in bool testing::internal::HandleExceptionsInMethodIfSupported(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#15 0x000055c247b23529 in testing::UnitTest::Run() () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/utils/McuProtocol/./include/McuProtocol.h:121 -#16 0x000055c247ac9287 in RUN_ALL_TESTS () - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/external/gtest/googletest-release-1.11.0/googletest/include/gtest/gtest.h:2490 -#17 main (argc=, argv=) - at /home/xiaojiazhu/project/rkipc/battery/ipc-rk1106/ipc-sdk/test/middleware/McuManager/mainTest.cpp:22 -(gdb) -``` \ No newline at end of file diff --git a/doc/git/git-commit-standardize.md b/doc/git/git-commit-standardize.md deleted file mode 100644 index 80151ac3..00000000 --- a/doc/git/git-commit-standardize.md +++ /dev/null @@ -1,67 +0,0 @@ -### 背景 - -Git每次提交代码都需要写commit message,否则就不允许提交。一般来说,commit message应该清晰明了,说明本次提交的目的,具体做了什么操作……但是在日常开发中,大家的commit message千奇百怪,中英文混合使用、fix bug等各种笼统的message司空见怪,这就导致后续代码维护成本特别大,有时自己都不知道自己的fix bug修改的是什么问题。基于以上这些问题,我们希望通过某种方式来监控用户的git commit message,让规范更好的服务于质量,提高大家的研发效率。 - -### 规范建设 - -#### 规范梳理 - -初期我们在互联网上搜索了大量有关git commit规范的资料,但只有Angular规范是目前使用最广的写法,比较合理和系统化,并且有配套的工具(IDEA就有插件支持这种写法)。最后综合阿里巴巴高德地图相关部门已有的规范总结出了一套git commit规范。 - -## **commit message格式** - -```plain -(scope): -``` -## type (必须) - -用于说明git commit的类别,只允许使用下面的标识。 - -feat:新功能(feature)。 - -fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。 - -* fix:产生diff并自动修复此问题。适合于一次提交直接修复问题 -* to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix -docs:文档(documentation)。 - -style:格式(不影响代码运行的变动)。 - -refactor:重构(即不是新增功能,也不是修改bug的代码变动)。 - -perf:优化相关,比如提升性能、体验。 - -test:增加测试。 - -chore:构建过程或辅助工具的变动。 - -revert:回滚到上一个版本。 - -merge:代码合并。 - -sync:同步主线或分支的Bug。 - -## scope (可选) - -scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。 - -例如在Angular,可以是location,browser,compile,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影响了不止一个scope,你可以使用*代替。 - -## subject (必须) - -ubject是commit目的的简短描述,不超过50个字符。 - -建议使用中文(感觉中国人用中文描述问题能更清楚一些)。 - -* 结尾不加句号或其他标点符号。 -* 根据以上规范git commit message将是如下的格式: -```plain -fix(DAO):用户查询缺少username属性 -feat(Controller):用户查询接口开发 -``` -以上就是我们梳理的git commit规范,那么我们这样规范git commit到底有哪些好处呢? -* 便于程序员对提交历史进行追溯,了解发生了什么情况。 -* 一旦约束了commit message,意味着我们将慎重的进行每一次提交,不能再一股脑的把各种各样的改动都放在一个git commit里面,这样一来整个代码改动的历史也将更加清晰。 -* 格式化的commit message才可以用于自动化输出Change log。 - - diff --git a/doc/git/git-rebase.md b/doc/git/git-rebase.md deleted file mode 100644 index 976b5618..00000000 --- a/doc/git/git-rebase.md +++ /dev/null @@ -1,41 +0,0 @@ - -## git rebase 合并多条 commit 记录 - -### PS:gedit 不太好用,可以执行如下命令将编辑器修改为熟悉的 vim -```shell -git config --global core.editor "vim" -``` - -如图,我们有一些 commit 是比较凌乱的,现在希望将其整理为一条合适的 commit 提交到 远程仓库。 - -![git log](pic/p1.jpg) -我们需要将 day1 day2 add file 这三条记录合并为一条,执行 - -```shell -git rebase -i [commit] -``` - **commit** 为你要合并的最后一条提交的下一个 commit, - - 这里为 640f9a20c7bb7e9e3dfc76b089745d5c95818fed - -指令如下 -```shell -git rebase -i 640f9a20c7bb7e9e3dfc76b089745d5c95818fed -``` -![git rebase](pic/p2.jpg) - -这里将弹出 vim 编辑窗口,可以看到有此次 rebase 涉及到三个 commit id,我们选取需要 pick 的 commit id,其余的参考下面注释,添加 s 前缀,表示 commit 用于提交但是归并到 pick 的 commit 中。 - -:wq 保存,将进入下一个 vim 编辑界面 -![:wq 保存](pic/p3.jpg) - -将所有的 commit msg 编辑一个合适的归并 commit msg。 -再次执行 :wq 保存即可。 -![再次执行 :wq保存](pic/p4.jpg) -可以看到,我们将两条不希望留存的 commit 记录归并到了 -![rebase后效果](pic/p5.jpg) - - -640f9a20c7bb7e9e3dfc76b089745d5c95818fed 提交之中,并且,这样的操作并不会改变原本这个 commit id 的值。 - -PS: 具体 rebase 指令细节参考 ```git rebase --help``` \ No newline at end of file diff --git a/doc/git/git.md b/doc/git/git.md deleted file mode 100644 index 4d28abd2..00000000 --- a/doc/git/git.md +++ /dev/null @@ -1,299 +0,0 @@ -# git初步使用 - -``` -git init - -//设置仓库的公共信息,这个user信息会体现在commit信息中 -git config --global user.name "yourname" -git config --global user.email "your email" - -//在远程仓库方面,有两种模式,一种ssh一种https -//https 简单方便,但每次push都要输入密码 - -git remote add origin https://github.com/yourgit/your warehouse.git - -git add --all -git commit -m "you commit info" -git push -u origin master //第一次,以后可以用git push简化 - -//ssh模式 需要先在github中添加自己的sshkey - -//首先看自己的本地目录下是否有 .ssh目录 -//没有的话 -ssh-keygen -t rsa -C "youremail@example.com" -//并将 .ssh/id_rsa.pub中的key添加到github.com中 - -git remote add origin git@github.com:yourgit/your warehouse.git - -``` - -## git alias - ~/.gitconfig配置文件可以配置当前用户全局git属性,当然每个字母了git仓库下也可以有一个.gitconfig配置当前仓库属性,属性中有一个alias属性来给git一些命令提供别名,方便使用 - -配置方法参考 ```git config --help``` - -下面给出我的配置仅供参考 - - ```shell -[user] - email = liaojia138797@163.com - name = ljx -[alias] - st = status - co = checkout - br = branch - hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short - type = cat-file -t - dump = cat-file -p - cm = commit -m - df = diff - -[core] - editor = vim - ``` - -## gitignore - -``` - 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。 - 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。 - - 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 -``` -## git命令 - -* git rm / git rm --cached -``` -//当我们要删除文件filename, 并且工作区也不需要这个文件了 -git rm filename - -//当我们需要删除暂存区或者分支的文件,但是本地需要保留这个文件,只是不希望此文件被版本控制时 -git rm --cached filename -``` -* git branch -``` -查看本地分支:$ git branch -查看远程分支:$ git branch -r -创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支 -切换分支:$ git checkout [name] -创建新分支并立即切换到新分支:$ git checkout -b [name] -删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项 -合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并 -创建远程分支(本地分支push到远程):$ git push origin [name] -删除远程分支:$ git push origin :heads/[name]  -或 $ git push origin :[name]  -``` -* git remote -```c++ -查看远程仓库:$ git remote -v -添加远程仓库:$ git remote add [name] [url] -删除远程仓库:$ git remote rm [name] -修改远程仓库:$ git remote set-url --push [name] [newUrl] -拉取远程仓库:$ git pull [remoteName] [localBranchName] -推送远程仓库:$ git push [remoteName] [localBranchName] -  -*如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下: -$git push origin test:master   // 提交本地test分支作为远程的master分支 -$git push origin test:test     // 提交本地test分支作为远程的test分支 -``` -* git merge -``` -//合并a分支到master -git checkout master -git merge a - -``` -* git tag -``` -//标签 -git tag v1.0 -``` -* git reset -``` -当将不想staging的文件add进了index,可以 -git reset HEAD -git reset --hard xxx -xxx可以是connid,可以退回到此id的版本 -hard (修改版本库,修改暂存区,修改工作区) ---hard HEAD~1 (或是commid)意为将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本 -这个操作非常危险,需要谨慎执行,如果不小心丢失掉了一些commit的话,执行 -git reflog找到丢失掉的commit再次git reset --hard 回去 - -git reset --soft xxx -soft (修改版本库,保留暂存区,保留工作区) ---soft HEAD~1 意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。 -意思是当你commit后,又执行 git reset --soft HEAD^1,你本次commit直接从repository退回到index,未commit状态,如果是退回多个版本,则多次commit回退 - -不加参数(--mixed)  -意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作 -这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。 - - - -git revert xxx -revert --- git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动。 - -https://www.jianshu.com/p/c2ec5f06cf1a - -git reset --hard : -1.替换引用的指向.引用指向新的提交ID; -2.替换暂存区.替换后,暂存区的内容和引用指向的目录树一致; -3.替换工作区.替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同. - -git reset --soft : -1.替换引用的指向.引用指向新的提交ID. -即只更改引用的指向,不该编暂存区和工作区. - -git reset --mixed 或git reset : -1.替换引用的指向.引用指向新的提交ID; -2.替换暂存区.替换后,暂存区的内容和引用指向的目录树一致; -即更改引用的指向及重置暂存区,但是工作区不变. - -实例: -git reset -仅用HEAD指向的目录树重置暂存区,工作区不受影响,相当于将之前用git add命令更新到暂存区的内容撤出暂存区.引用也未改变,因为引用重置到HEAD相当于没有重置. - -git reset HEAD -同上 - -git reset -- filename -仅将文件filename的改动撤出暂存区,暂存区中其他文件不该变.相当于git add filename的反向操作. - -git reset HEAD filename -同上 - -git reset --soft  HEAD^ -工作区和暂存区不改变,但是引用向前回退一次.当对最新提交的提交说明或提交不满意更改时,撤销最新的提交一遍重新提交. - -git reset HEAD^ -工作区不变,但是暂存区会回退到上一次提交之前,引用也会回退一次. - -git reset --mixed HEAD^ -同上 - -git reset --hard HEAD^ -彻底撤销最近的提交.引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态.自上一次以来的提交全部丢失. -``` -* git checkout -``` -git  checkout  -git checkout [--] -1.是可选项,如果省略则相当于从暂存区进行检出.和reset命令大不相同:重置的默认值是HEAD,而检出的默认值是暂存区. -2.因此重置一般用于重置暂存区(除非使用--hard,否则不重置工作区),而检出命令主要是覆盖工作区(如果不省略,也会替换暂存区中相应的文件). -3.该命令不会改变HEAD的头指针,主要用于指定版本文件覆盖工作区中对应的文件.如果省略,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中的对应文件. - -git checkout   - -1.会改变HEAD头指针.之所以后面的参数写作,是因为只有HEAD切换到一个分支才可以对提交进行跟踪,否则仍然会进入"分离头指针"的状态.在"分离头指针"的状态下的提交并不能被引用关联到,从而可能丢失.所以该命令主要作用是切换分支. -2.如果省略则相当于对工作区进行状态检查. - -实例: -git checkout branch -检出branch分支,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区. - -git checkout -汇总显示工作区,暂存区与HEAD的差异 - -git checkout HEAD -同上 - -git checkout -- filename -用暂存区中的filename文件来覆盖工作区中的filename文件.相当于取消自上次执行git add filename以来(如果执行过)的本地修改 -//放弃修改回到以前的状态 -//这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改 - -git checkout branch -- filename -维持HEAD的指向不变.用branch所指向的提交中的filename替换暂存区和工作区中相应的文件.会将暂存区和工作区中的filename直接覆盖 - -git checkout -- .或者git checkout . -会取消本地所有修改,相当于用暂存区的所有文件直接覆盖本地文件. -``` -* git stash -``` -当你做某个工作时遇到紧急情况需要切换branch,又不想commit当前未完成工作来造成不必要的繁琐log时,执行 -git stash -或者执行 -git stash save "something" -当你完成紧急工作后想要继续当时停下来的开发 -在原分支 git stash save -a "messeag",网上很多很多资料都没有加 -a 这个option选项,我想他们的代码开发可能都是在原代码上进行修改吧。而对于在项目里加入了代码新文件的开发来说,-a选项才会将新加入的代码文件同时放入暂存区。 - -git stash pop可以弹回到最后一次的stash -也可以 -git stash list查看有几个stash -git stash apply stash@{}来回到你想要的stash -git stash clear清除所有缓存的stash -git stash show stash@{}来查看diff - -stash信息不回被删除,除非你弹回去了,但如果你不想要那时候的stash了。比如认为当时的改动是错误的,你可以 -git stash drop  如果不加stash编号,默认的就是删除最新的,也就是编号为0的那个,加编号就是删除指定编号的stash。git  stash clear 是清除所有stash,整个世界一下子清净了! -git stash pop  与 git stash apply  的区别。 -当我使用git stash pop 和 git stash apply 几次以后,我发现stash  list 好像比我预计的多了几个stash。于是我便上网去了解了一下这两个命令的区别。原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。对于有点强迫症的我来说,是容不下越来越多的陈旧stash id 仍然存在的,所以我更习惯于用git stash pop 命令。 -``` -* git log -``` -$ git log -p -2 -//我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新 -$ git log -U1 --word-diff -//上下文行数1行,以单词来看差异,单词前后以+wold+ - - 表示出来 -``` -* git commit -``` -$ git commit amend -//有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交 -``` -* git clone -``` -git clone git@github.com:ljx791863565/xxx.git -git clone https://github.com/ljx791863565/xxx.git -``` -* git diff -``` -//比较暂存区与版本库的改动 -git diff --staged - -git diff commid1 commid2 -git diff branch1 branch2 - -git diff : 对比工作区(未 git add)和暂存区(git add 之后) -git diff --cached: 对比暂存区(git add 之后)和版本库(git commit 之后) -git diff HEAD: 对比工作区(未 git add)和版本库(git commit 之后) - -``` -* git config -Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方: - - * /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system选项,读写的就是这个文件。 - * ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global选项,读写的就是这个文件。 -当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。 - -供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方: - - * /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system选项,读写的就是这个文件。 - * ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global选项,读写的就是这个文件。 -当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。 - -``` -第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: -$ git config --global user.name "John Doe" -$ git config --global user.email johndoe@example.com -如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。 - -还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话: -$ git config --global merge.tool vimdiff -Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。当然,你也可以指定使用自己开发的工具 - -``` -## git问题解决 - -* fatal: object 906d1543778b940af481c0ca7f5ce9d3d9771140 is corrupted -``` -rm -rf .git -git init -git remote add origin git@github.com:yourgit/yourwarehouse.git -git fetch -git reset --hard origin/master -``` -[https://blog.csdn.net/dengjianqiang2011/article/details/9260435](https://blog.csdn.net/dengjianqiang2011/article/details/9260435) diff --git a/doc/git/pic/p1.jpg b/doc/git/pic/p1.jpg deleted file mode 100644 index 4fc952a5e866ad3af12a8609276d5442b9ffb659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120425 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

}o9Vw5PH_Wh*6qmn$h+Qk3}Z7VBgcnzr`|I;%%N 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�vTe{sOn(iD&BTyj7WQP!2Prq>RgW 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ǥ_cvRL?S0W`Wy-L}^IG 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 VQ}6$Rzw+;SO8*PqqyB5|{{X+1T?GID diff --git a/doc/git/pic/p2.jpg b/doc/git/pic/p2.jpg deleted file mode 100644 index c16753c83d7eb87221471020330ebedc5bc40563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88538 zcmeEtcT^Nj*JlqylALptCRO05*sLz`-Dl2p|n&{DT!iya4z&9}55?oB-^Z(`)Z`&<{hd5X8JHa&i`rwKWx09x42GgqY6C&Fu*m82~_Cygam(9sMU2QSA7K3>)GHw{W zjKSj8|7OSG->{XH^&gv7Rt|sgU%p^8F$K#zdAdEZ^8bDE|MCER;*Dvq-^7hM5;=M( zYh!YZub{6GSG7Ob#acu2AHEaDyMM5wx3bi3OfH_4_EC!W!Zbk$^OH)^1z_K?RZ1<{_q{`RQ}ixaMU&UN5;oV z|JR84U9KlY=TChC9OeG-J-oI5)ZflU>ES=}_8y9Ve202sxPRMmbW-`F>*c8X>)!vi zZ)5eZ`rEn4{>!GP;h(zM+Q}>YBX8%T_s3s1uZMria(nW7Z2Y!q_eALr-_u9ukFFP{ zL;hpO&Fk@>HgvX9{nhV(>jFA}7vK%p0#1M{zy`=;a!*%AN<;Q!+BngIaW1_1On+IV~T{5JP{`oYX(1OO>O1<(U5m|1}r5CHA~qQHIN z0iXb=0-As>U<8;0Hh?1l1v~&>AP9H{gac8SnJo!O1G0e+KoL*|Q~)(VBhUtP0|USp zU=o-EmVq^38$bd_z!?Yx!UGY5C_(ffRuC76A9M#K4w42bfF6OgK}H};kORmCQif@VM~piR&Z&?y!eiwKJfiy4a>O9)FGOBPEFOBc%w z%K^(BD*)>yRxH*#tX!;8tZJ+_tO2Y^tYxfitV1vWCIr)f*}(!}aj+a%6Ko8&2YY}+ zz>(l&a4xtUTo3L6kAs)NJKz&+Tx?2gHf#ax``F6Zde}DD?${yN(b#F&McCEYo!H~p zE7(ZvOB`YxCLDeo2^b;5guT7*u7PYK@Imq9EcUk|Q!D@+OKUDkN$p znj!j0Oiav8{D9b)*o!!pxR|(uc##-QLP;V>qC#Rz5=xRzQcW^OvPXK2l#5iB)SNVc zG?}!LbcA$=>>3$2nH-rFSqND=SsmFl*&#V4`E7DdawvH;`A70T^6wOQ6x1*g07_b@m7_=CC8L}9<7amPWM*MjVs>Lr zW$s|!VWDApz~apEmZh0xla-QHn$?N*Eo%$w78^C2EZY;dcWj+(NOmT6Wp;1&9QI-M zv+F$9^{zj^4!gdm8OPtG*D}}3v>zJE|+kiWQ zyN3Ha4;_yRPXJE|&pabMxL!mz%jarv-=vWCeT#N(5E}X#^h$J{PPJ+!NvyG8T##>JhrUC35S@t-M=v zw<&I`-hO_&{`QYMe0OZ_q~DpiOMF-HZs^_GyC`9PVLRb0;jbc;BI+U$BJCmJKi>Z?$s=he znJ2j_bzRCzDo1KrnoZhL`n~kB47-e#Os)*#0mlQ|2L%r{WN*ki%a+RSJ-qeM<01Uv zv7Cfluw1J=SYAm!Qhr#0LP1Xy*ie)N-qgS2~eD0M7!KI$ClKGcoVozvsh^VVzEC)GFAFV;UckT*y$ST+d;!nI>Q=iBWIIhvu*pp_O0!vos?aI-G;rCeS-aW2Pua{hfPNr$7IJHCpo7y zCzP|YbGGv_L=#d7xq4#o1O~;2T0-kwC|n>eovtjdey*c#{BGfH%kC2HN$yAwHID*M zkf)hvtrrz0KpOPs^$zo1@sajP_d)yW`&Rmq`?>fH`t$j}_TLCl49E|}4zvku4`L5` z7PJy98=MmY3b77p59J7b8M^jV>1ok3f@hFtL(gwLPk4Ut!r(>yOXinPU#^BJg_VSp zgnNWfN8FFdeue$Y>DBP-yRTDUUq;$S_D9`{N{%{@wu$bKxgGN^<|@`cb~sKnF6#~M z8<#gz@iOs63FHX@39E_fiPdk}-bTJXNU})kOBPPfP9aF~PFa5U=v{3pXX=~O^EAh_ z$@GWmuneY**BQr|wwYsD53*;k>?$V7V*s|zy(~A7cAVLQ*w`#Mx{mt{+ z`P$2M;`QVW){WxtcfL1nDsFz+GTB<&cH2JN3Ew5(&Di7JtJ;6CKZrC$uAw|oS3jbE z(*Ge0;cg1U))CjzrU=i%!H(dQJ^aH_m*|@y_2}+_Fw(u8=sh*n*KU7yMkE#wzj_UeRB)-J7?>xh&dKjPcx$PRqU2P<_wZ|v{4X5x57wVU5 zzdifkbL{#5m1ln(`qvFb-$e3@ zNdM3k#s~;w0~;F~5A#n(c#V+k|Cp{8FcGxO)hs{+24OlAm>iG+E{0J{k!6k4D^hBm z$I3r?tY|LcS3Q}Y0wZ9~*g%89mTOml^AIf};*~{5{B@JzF-fh)yLp@I-PdkQ1AJ(v zfax(-@^iuFyGZ?#m4aH)f>VL#j~l8#S+>S^D=JA&_q1SN0k#)+SCk?-Q9S8SYO~am z!YApj2{KXtG_4bF z8WwmUU4$}-S?Zv1A7OXOPmSz;0T!p{%{&BW9OOyt;rKFd)+>YPmwl1*Kb97UD@~QN4Ds=GO~3sJNPK2N z8x8A(yviZave2%EY0O>$foW$ZYAnnI{*ZzE8!bx~BP|OMrll@e+^3*hb?~u-8MuJz zn&gs@n|!R~8$!`*eQe91IgyDVA#@!CB_p4r`^liHw#uEklSq!r`cB?0rV^3}a0~T% z3xhQ707~dFe7Y+ApkhJ*K_=0k{~;bsqZ8jBUwd?qdMbz&ZA9C?K(XGp7q+{59>w|N zGbE)Vyc4nFV7 zxHMb=S%p7XSCr<;uYir>^9Zz_D*xtQNSO7~ACA`1cFW0DDElR~cBCMUz(xK3Wk7as zXc+4sZ9U%HmH#OGrKQ4hMNWDC5Ks%7?K3O8vb-ChJ{@04INMF z&yO}f<8e({NizoYD8e><8S)_75W&he& z0W`{`m?Y!q`1r^Tf67RH$tpp-AIsWw_)*kZ{=9}q9ewE%dC0hgeH6^pv0DGm(nW#} zI8peq+RdUlPBll1R3nQUKdFe8b7|P737yV_&9-Mf#bUe*D;lHBCcL+K4_52%n+z1k zucQY)we^b^U4B{^=ss5Cojub%V1P0`9h^;MmOfhDrIe48s`|cryVg};#Vs0pXH2O{ z<>3y9gHDh}^vMF)r-phaeIg*$q;8YUxNJhH%6fOCOWXWQ1F?I=?r>bXAHCXYy#d&a}fTAVM2b!r!27``tY_cOhQTrLo|xKeUF9 zuQcQd6QD^{_j7=C#-T$$K)NKaxgpT~0+zqvz(*}$Bh!oGZgveJ|+ zuNpGd>#_HS>eS#GQ2U#AKG$)=?v*i9E^CD4`gyi4GRA4wrLkg}nwpyQ&dJS-bb2bb zKWq|DeZ@aduzpT?cFRw!-5?OoIMXO=MUyRMG-UeGu`9!*V+}8AxHC&FA`5e zsj4)?C7@NOFPwY3P0;;Ofkx89(<+o$*Bl&E+`){p+5wU4=T>K8XwA+PvKW%1P{Pgq z!cdzfBPUe%Cv&Go_v~Kwh`mc6*UWnz1XJY3vEaGF0{sr*8Z2v-wp`u1Dvq7sg ze`|8v57LvZ;Js(HKp}q@Eg{QXK6*oGvI?R}VeI@l)NYZQ+*G-pGkE9|U`yEN0&Hoj z9t5CvW!kE>zccteL-bfsGSX96NFUKfNsiXpzR4|m(3geJWFrOniX)!L?wA{y`!JIC zJ=Wie^yG=J9qT6|(5ZXZK10;kR zgw_Jy`Llb~Zz9SG8JN$)ars9IeOO){+jmF%)U^gY%c zzY*gLLQXPwi})pmr=d~JeEJ?AcA>4}m((SL?#*qAqYa4_Qwyi(uUoBxE0fl2la5;K zPP3hY*ipkRh>?i;mZ-)DoXvIP~+FJx=Bm#4a~_E2Cc54%tW9)OJ_(m zUwL4qMoly=ac*r~%`DsK3a~CbKbQH|vSN7Jn5GfNM6s2!i#0#^Mj?sF+=ztwfgTUf z6#yG+U>|FCL?^tmistC`JnF=Om|oSPao$Y=2^W*qPxGkPv7vwQ{R@ zDyZc2G8JXC=km!*s$?%E#phB*#=vgkFqFbMjr8U2^`>cWni`d*f!7aR{h5Bk$*C%t zJX=d7xQ1UN1O!AfS+&JP6I?oqz&L)Etxsj~iXN1qXzAV`2hE`0JLbN+Gq znkY)aXOrbbwT2UCUYE2{LO>ar`UwRaAFgNJ2g32i+H8D3 zSM~8`5@I7)7q-9!;sm8EfBWZTD31Xe<;OBJ^gUSF@14!rk<}lThxjik=z?SmA?_F1 zeX&%UeBwFt37rP(U$LJ0dXB(=EP|x`?fWO#|PgL{%aN~eOHHhF9kenA< z`t{x95meE*tV&&c*jRLSkwHqR{M9Mp8MEej~u zpXz_^r5KLq*VQSzguR$oXLxTq(8hGzAF{MYZ&E$Be`--7afkH8@7JXC z#u4)*`)kT{jXRvPAo3G3K@snER)2Du@*MopnzI&towAPl8BTO9AULD^3L&1bQRX9Xd|~ z7K~N=)az^~CPN0RU+!vh>5}Qm5!ogX`&>%KlG19T3UyF2kua}@xNALJ<(W>@D>cs< zJuNHn{6K_aSv##M#91$JYh~bzWlFga3+}@cfw=cqfUaeR^_CRpL{%^s{`V%k7MGMS zXRHrRNXfoeOB`i-a?Cp4QgXk>_wkWOkvAuKTN{(^X;@iuij8~G(juKenT?ZO{85FMt9u^b-kF1oMr4OeV!jmrIeYpy@d-b{MzJh+fm+7K(2ruVZ zvFHfK?O93Apt%CHZKs6;+3%%j)wJMkBSI6%&x%peH@;+IVpL9h1zNTuz{DiN(~21sZqb#d+vT zHa$A>ti75;yJDgWO|z~HE1jKqXEx}(xz0PE|MsaufcxkdRy6uo-)vNDM|=$#PaEJY zjzcRvd2kY8Q9aTXbhtWXfWUhl1VwSH@kbRoAoE7M3Wn?FjqR#4o-c5zG*6-hhT0$Nzf^P+_HNH;|yJgRW3L#;l`UiS)6d;VBgjmg1{ zu$Dv?W`?#|EyD_Zk>(mxeh4WRE-_IthYV>t*6P*x7!h^fhDSmA<|br-m!g5WZ{qUzQ2gQh2^D^p7M}=syok6J0IKx~PAv z9P1x-OaNy1pK|`wZvW{An2F^7_wi#R82hoU@mQSgz3ikL zqS{3^i~V?w@1xb|Gy7%;yb>iAF6q9ae*0YAzjQk-YCsV7WTbu+Dk^Gc`1$M&3~sX_ zU@i!i(0a>kY&x4CEZm@`b~s%qKcXWTrgGz>_dTyUvnT1Bo6~g%t)_zfE3j9gm8>yA zW~-Ty&MAZX02601T*EPgw-Uub(AVf_)Yr7LBo&UdAFSj-vM4iHwBR}OiUlcmnY)t% z@oFDe?=!6a;hd1|pibBTdV{*z9=Sz++UWwztqhnsP&uf}GTS}L-(k*#`>Lsx!-ji! zkR8jxh2iInViD48CPvPA<|^JaVRA3Ym2OeV^6k2A*X zYrJewM>@2Z-S4cfCV?i5eK9dAN%5Fwq~NWo(MbkApH4G$Surc=BpJ!2r_KJjm@^sa z?~&_3_)|+e`0^WHgk0>eZFrVp9vaVs1Xh$c;yUVW83N{4hkm3u1$ki~viZ=r?rIml zIKPv83e5}f;wOnlsEH89RklbL++$YvY-UBtM8OFghA;~*R*6UPCa)1$^dX}zD-{H; zv$gS>TARHvVf0-T&9>2~q|{2LsOaQgSs8X3d_DmMX-Xf^=iyol3SR6;aE!fwjb0}= z$Buu-V@`J}8Gh_Lm)~wE`RId0xxpHIVZT0L@gk|&M>Vc;3hID1WmM&-E4lVgJvd|N>!6d#c-6E8jI z^n}%|z0%UmGT7#6HfyH+r*>_fw3fT@s+}bZ&I_{?oyEgY0(7A17-IA=5Z|SAd2X$H z_2t)F4VsT1tg;=H)Z0hpIZ0SMF+lTtrj+yLwW7JFwtHGajZaRG5wT6)$fXXI!XC~n zF4Rp$p##73o>%g!BNFeo3|M)WZ4X<^LdpFW?}f0)ibZ%6HW=>immORvZh6T(sf=@@ zRJmU5hVB{a-4K~TiX>>cD(+qZc>8A~ERqV(8cQBZ|9BqAIqQ7h!Z{vH;k;36>{K5d z^U_#7;~I4yFNgBe6KbG)KEV1@l_m%+(@~S)%)pZ9YUjzu*2iG=JWJVP@5T39{C(%_ zh$t!6u7JHv2L!$MKB?2J^^%(8Skw#XEt|KLq>c2ryG=1F$km>oTc?!^==9wwT4_$} zQ)pA?qvR-Txi#f?$gw-;JIeICt@$^Z4U2^j&iBigUh8_!QyYy&FV~fi&HR{|Q-PLL z=r3%JW?@2OQb}rV*hTZHKyk~`x_<*m+VWB|cwuSRM*3jEWaSEYAu=#MA(F{5yNA%u z&yt@Xd~D?r_*A?{b=BK7GA%ZuEWhAGo)SsM@#mRq#1o;;(hwY@mtdX&PR!<>_y*NJ zBRbdbTn$<T}+LRbumF$>F|^ z#+ZR=_2l8CV2bZf>eALFHFB@XjwYql3Ar$5vfRbU+i9nWJ80vA$7B=BucY37A_n;x*f{TxaSlMJ7u15e`^<;M5lfH zR>z}8DUfsb<9Pj#=0b-+2WXM;fSo^uCiYezrwf?l0}-{QA6qOwOa?j9ZV@3()S|A_ ze#u-pF1Tu-kW6<}t8%+e&bw_^{QG_DnnrKL94iQ|q>qX%Dm_Y*s!F-TN7R5#Kim9m zncyT%i1A!yTKdkpC>-VTGUzTe6jGw`SuXJC-G&afowg-4kRVvw#)R|}L0EsL$`Sv` zKcJCrHW!k1skCTk6v7AR%jysMR0S)84bbu%pKgBJ4c7EbTyAOagTHQkcu74zobP^T zUh-0T(O#c~^MJS(%g{1$S_IN5gMZ10uGD8ZejOxcQ|!zxSt&V+>+|3im=)3OH|#z~ zy)Kr`eAvX=t#8cTu+n?8s^mh?t0+$*S}3$x@dneb!T_@(&`0P#@TYgv>!DxmImg*SHmK+hnJ28}WTL5wU}87n)hP>f|g}%CBjnb1Ziq-p_vnw8do^iL*Htyf zMA1D+27N2PsA;p@L|2|c@GeLYm`EIt`xq6>rS2DT^Udpy#RxR zdG(O1#KVEH{Io}blW;T7<^6CGGmjr;4^IPa*5@D1<;5o}nGFVJ5FEr&ZcPWUMtG~+ zchBu6ZXQ+6E8*@oL*&ES9q<@mb-O_roHLabE92B)9OaGfbODpM+|$t+X6Y(byRdW0 zXD^n;+8Ln=B9Kr5!ybR8=X!4y<`i$ zU);m@$Z2WDvz)I684;@jHJm zil;}Ddh@uMrw%#tQl{EV2D@*~xkho<>TMsBwb9h<^_X?K_-FU*`j!nCx-56bRA5}& zYu`rf*8E$lqVsRuFj3rqGFLSO`zL3bNcnbI5C@U2zACduxx9vaB$Pbiwmr$kD^jGh zBy}Sp#_Z~}3#@!YZX(}}L%X9bMZ1S=wD1xX37&vm#_n4;Iv_~9n|#}E`xzK~krbDd z%R^VS5r0r{Uo(Yw4MI7UuiNrhJ-xFQKA$Cyx#@Ay=T-%1v33?V)VEt`RWFoAMvarJ zpZ!at2I^HwqP|4Ev@#4aFLFBHiY4R;<5I6zV@NK?xi-H-`kbNAi}DxM5;9 z;J;Y{Uyc10b22`=9oAKc^@uq?{J|6VH}~xuS=*$s(5Wk#*1n*WsSb0r+&_UX=##nk{XohTaf0+Gg>a7afnLLWJ_m{fp{ z)DLf8ccKgw*Y~D;DD7ACF`;gx$*(T0m z$jI+wtS*C}mS=MeUjZv1ltvQrh!u?XxSY%~EazyfZHyUt=kkJ{MI<^VuOR`{i|k>iJdI@;H;BPYP=Qjt$LIHLBa^9=4I@)$42pUXsK&b{84B3 z3AQ8xHW`ig<{L~7_a`<_FWKd?H6zdXf4T-YTRa=|gUF%2`PKwPM8o|AgL<*aW@kD_ z=ZgCT_+7c8YBXxW`R>xBXes~Y#Fc>s+#igA19WL~diXDuLJ4oXbrP}Ordu;Sed7l+ z8#~u|4>=m2|IQHBoSS??0$nr0s=oW8DnlRdMUbx*LWbyj!0u0l!jW=rs~RU+`=E@E z4mhvCJXqNiNROoZ4RBvtpG8!2bG6BdH|^ACzPl9_KI%q-v9keYmpnmrJtC_t9Oz&K zEy{Z-T9Vb*0TNg|E0DMAO{hE?)@#IW#}+>8CcC_BPz8>UH+SdhRA<#hVLqkW^*|7d z3P{{HP$^7(tU3*f{lduV>skyeZ12y7j+@DlZuRs!2)n`A@e!FRqOrS1GlwQlo*C&Y z$vGcP{9HnD7nMkIR_6Q#s1|bk%CD#6s;}T%su8!w<$HxtAwzOzivrw7 zDT47T@IrwTy{dzSZd*T?%|kX)nu&#-yZe`Hi#0P&d%YHp(H`dA zBeK^`WuaGj+`sv(4Vz5CE1884c~s&rm|5VgKkfVY0*y#zo@Qbyx`!z6-tHPmpKjhR zgc7@*gqUdyFGx|0^20+60)-EuYG&R|XO$feXrXcy50t>#vl@x_6Cq!Y23_+mkSYEC z9wAy^Y^w28cN(3LQL-puh_7Q&uamF$r;{~0w;A&8DDn-bq6p2WVB8Fv z;oP;K!uL$%ypP_!r6dX$3yxTCWlQso4dLC)qH3-f6;Ovy75eQI+$&F5VAE4STl2wl z@=-(UVy@!&ZR6Nl{pHUosbkg>G!9IX-fl%o zdbwMGyXvjVUCF$QEWP+}!{iM-ddXn^i3f9=O!_{-=C0) z%{8>@7Ep8(XvHic{KUH4(KRZ8S3re|ja1{0IaApiI3LnzW(Sg%;~q*xu9grq)+A4d z#+~2Zw{$m@f$n^7@z1OFsW4E3nB9Oj=UI@QvqDy{033)kVRQWZ7lzdd3wfH2={-bJ zZEY}G%+j&_3W%&g@3&_Op^jg9ZGUgP;pz)z64f7Tw>#5SV@=!H>F}Su0}$NzhUFKe ziE}vFSr)xdP-z9cc|=wz&K;4HS3vB!*a|7(qA|oBlI=pN3Gqm{NG<(f1lXz1EHyC2 zk2m>!{is`BsD+8#4#!c_+x%TN)c3|ZN=j6kC@b89rl3xK<)>d!>7+9yUHWO|Swlse z#5M(xfignarm!Kf^ zoCW7Sfna8V$OVML6`*9<(3_b3W|zILhiO{o2#SY?-y{etJKDSqQ3^nqI+vDA7$iig zsRbE(Ld)x6_e~&-PR9Y(wV{m0en0lw#e?uX3uhN-r6JC@)o$8fCndOU$6gt$(#>B! z4%<0YqZ474wylNN$#QCUx5bZ!>m@~CllO{ro-3d>k%FlX0tHF#Wn0Gi6FxrrK3|D% zj@h2?E!}i{Pcb+T+BT2zSCFlfl8no0(<$0kycOxuJUn%>q}hnLB=loMD0K{xOt**d zPE-xaDUZLuJ;x|+9~-i33*#IE0Vo=vAQQ_%$~z|ss|<8XX>J3kh2r*#n~AK6}$N7x!0pB zZ%YDroM{8N#UE94LbmqT3Uvy_yw@V%e!h02$*jyF*rlwXrfF)UCyjQeL^=^K{Cc{9 z%5X%vdZ?R^*r`Iejp$M16)+-noux6Tpnin>oDm(ywG>sggy$DNqKQ0?U31!Bt*iET zDa+5|3STM9G-Urt9vU4~m>;;acn1lu*W^5f=Q%;JeYKM_f!IZhLyu}rd`x%lc`;kE z6(WT+k196#KHJ@3V^?Ih+E=hAxO-H1RXW#_n!?@^$`rUII}s z^D3Jd*39V_*kP>E!u6rAz}bf(><8UU*&a?YxAG(-4`d@|X0^;WEhXlhD|hR*6T{SJ zhr%UI`ebpQ+Sq#xB7HZhUvVjtXnrnd?aZb<;Fl8WIPD2rubJL~H#v_h-8IoDV}iPM z8NJ}ORJGZ=gy*XYUoXfzUa+W%4`-!~P0!oxF9|l@>75ehH<_$O zPSkL(s#f1`oTExvPhN6g?qub@ea;p?PQ5KBPG4Fg;HokqxOZ^ISX(amgkBpVzF?H& z!}z=wdzaJm#W25d1Fuf>^$*1Ht2Vc(`6j&i&NV}_1@8p5cwj5FF4s2+p|}0BA0FZ8n=~laK@^f6ZRPZ1iQ!0MDVYXNC#J6LlP%ZnBx<@8 z7nJUmULJl6FeGx$%{y_Kt-fHWtgkNFJLHPCG#F&zn>eTb5aci=6a=w$DI1P*jIXPP zBt0BctHalOLdyh>b&sB&@D9U^sG18UGxJO1?QLm%&hNzP-WE$^|A6*=o6Sgoe>s-- zDt=oTSFqmHNTJzTlt5Q^RC-!KiQ~?(nfLD3lkVYF734^s+!)iH+Qp= z4mE&H1-C1}^1g@XSz|^zr24pJ#g*f;!|j&)5ltf_&FQ-kiw)0?AjXeqT5}XhPO;xz zrDRIx=W-(7pOwA0s!e)fgERmA9*-+H`Uu8~zE`*vLe+#UFGJKCU(T6To^faM%eQWN zlvMh2g}!{$n9|A>PD%%>D*Bi#HzeWBB@;j!z%O7N7*xO1wD-!W>w|WNO6&YRh$_S>^-2pqjnLp^I#&DpulCB(0e zpbIW#P4$JRtgPv4any9YeLS?m26tx4^rk~LMi}g_fLD#|NQm4xv@Gv(sX6B6uC=8~ zq*^#M>;hZa!*iUjI4E?b=v)k0qlxU!BudzPqX}g`|E#pGQGIr-E=Z^lL$RKZ+f82qSYwwetT+6ehXmo8)UwO`QA4Wj$4a)4 zfrVY(W}sB7NBEgp_?QYa)j`=(#PlM5eRlh-ed_xmmdgA&>NHt!+mR@F*xN^)yurH} zr0G0qr!rW{<>fM|!qcm3(7=qZ8nj+^*KU*vc@Gp+Xdk;Q2{yMRH48OWA=j#OX8i02 zbSh9|&bF-y!sY$u!8>!U4O83D6_C-*)`|et`1imb zT~hCgQ@x|o9b|OMUxInN)|QG9Dw4hB;<8^ph*XPBDY}?NptEYeG_>Q za5nEG%~D;H`Jv&Heyn^wm#+MnJmGb!zSdSAnCfN-;fFc2%iiJw*X4lP=FrO;e4DI5 zANIyR5RhP6Gx*@*Oy+Z+ZEk6T*qd2lG2+>%W^AxxBP{A zph6~7&18NxD#%&Mw9KhYi3jl+_dlEKX_gQ@JA}PEzfpQFi4y8|4Li0V5x)0?W87<3 zm2gJkWwI0bnPiA5$zUY?M7R`cdnkD8fs}tf3{3s>D2Zx+F8|1Pye9RO#w6>){AE#X zO$Y?y8Y@}8HGH%HbqLwOY?+qU*SxOc4SQ>B{~0fOHF-n5YBWDqP4CQvUsLMLwk9o) zLUwlUb2PyrX-qOhOGF5}xu2(O%z0dl=+vxkY$jVnwRfz)X2Fxpxd7D_OC7&3R)VKdW@kumGprKX$prL!BaMd%ZbjT@7v0`&r4(>mup^wON~ zrnPmx8^-hlvgEycea>Q3gqUK-o>*}a;t%=;O(kIcGSx**7eGKYDF!?IDcZBzRL(vf zGYx5&U3@JdVZ<*$+BZbmz9=+h`GsquRFL}Iz#FL(0ClOfdshKP_^q3=)ZA z6h*bChb%r=lsHUHuBPf1<@5Qdl!L* zKWFPBf9;yl+%=xs`&q2>c$3vw^(?cD^ zMX3n<=W*Qd9Old_M8FVl~Gz;|StVFGPIUSuS3( z=^S*=HiYr*8Vwk1Pp<{1D7@EFp#I!RrKJG;cT1sH6MsLm4|f=X^QLRmD;T|;n473^ z5upJ88fioemE@fuO;-ft*?_@>q^IYt;PLV^LN(j2jGK+ieG}1fsSVRp`wYtYoR9lE zuvujBrfSbxz-aqplW~!{n;%SKIQzfs=;;miecF30{e&d-yFWEz{hg$O>f5cy38pan z#>u5iu=h`?M=jJ3Gk6F-yQX@DXe`BK_wL9JNxZRv3n~OEB~xiB{%YFze>-B%wQaS( zVS*%X1;O7ZTJaAE6}Xkk=&69J-*+PZZ}v8ZPfwNliyf~L|JNBt?{C&G!z#a3F&v;u z+cseAUsnIRLjOA!OJ%9TSokeUPi6b7U?o*!fHybt|BG}r`PY4fueHz4s=M`IaXQE# z$<%`ukSz#B*eYQr*P#&YriZC{w|(NH$S-+c+wRlou;ZjW|B4;wd@A<1Ca~n*E`pCm z*A8de<9Yvs-aRR$fRn|J_DiYB4P^7{QnXKxVhwTh9#%abWH1hlL9k|M9(MRKpxtOua84=&I>WNczZ=U%%#)WiD+P^itn@WS_AqB&vPFO{dF*Wh^Y~Vlis3 z>C!;bFzW=V);(L;DHEQ?8YME|1ob9FV<+Y%?>`Y^@pyH@h0g(TAi75tWIGL)A@vi5 zEKnd$iB;Aj`R&HbXpRt0rYqKl^G`shwANU$D&+%hm-IDA-|(s{fXLX))V!^r{Zo&? ze7I4n!Lz#IyU$t==%}MmcOQQ#mE;O&<{E>Elu7RhG*(xO{xBWkeX|V2TYb(dWFuLx z{UD*!^HVEqc_S|fvsXUux{0TQP^w4oG_z%Q8n6g9RZo;1Hi>lzI78VSahi6tO#Arx z;&=zB5~wJO=Bg}F7Dhod(?Kewj!+7NN}|#ga7|cL+b;9^%b{NBDbfzirgyOdr{_@FpH4sO`g86jtKTVm4$jAO-XJK{>k80!14ov=KX?XBb+!{$rL0cbJ02eDNA3PUTB^?C9lhi9a{G zWL^ej7>`7GyON@vw;xZJCnNCXS?J&w>Z7SlT0W*;g)cg z8()H~R<_fj0Y(R9*ZU3cJzu<2Tz`iRq)Smwn|#*6>@V_NHHmg)pY!s}DbUQRIby&H zmHJ%QqVjESX8O#4$qf;n!KCt8->C)i{;g2jAh|;0p4A)sP>yjI5n6c7xMZ$F^4N`_ zV(y<{+gofk94_Kpkk9D2)!jgK6mH@Q6nE-~wOTSpV36kdN+yNWvPrmQsbWY_ERLJj zIS-1uGywLZ%&W+F&Y)@Wv}2e)p>>e^R;kiD5s4yRzskZ?Q%9#UZei%E5P|bie2KA> z;?EJTPrB-4@~!(rUiyB1!=fttbJf{#!J2o$L}U2`@x?b3YBZbnhn!{_oFFp33u+3% zM*U`fQC%qkSw($tmV%>e}IplQy2w8{X4*NFi_SAL-Co-GbW6QSr)BgeVIoQmz4>H>%=6qvI+tA6TQ2tJN=@x;<9_$s&o)p*nzG z0UZq&y@&iA%nva?p!yMQJ-e_Z|JL89-l=-rwRyw9VbumfETkWdr6hXmZ0_f6;k~ zI>8{|zQrQ#dn)+aEz@&D85;Yltp3&@85)97Q#{w2;2N1bNt>0(&0)_jnI16<8a9;X z%UmRLQrPedk@52SV~qh}{jZG1012V@;RcxQ9@93~{09=ht-59|yZoIc6|b6L(uU9J zh!*BWKL|n~Io7haxw3woGZhMD|7q_(WhqAT4s z#mBF`{k^JHP?j~m{sn)L2t=k>H%&HKX`|W7f}oW4BC)8NinY@e?adz%jA~fo-TupQ z0kB+07SS(~;8L!tTbNg1N+k=X3pbswfclyQ%;zV~A;-y$2j8Og=ie@fs~DepoBP(E z#YO3%_{q&P6?ilk1GqC2V(M&b8tNk(d;e>pD^OE zSrb|6uFuIzgN|LP$3dCtN9<)z2{d`Z}j#F0wN$)iqe$;N(bp(r6ax9 zsB{8EdgzGsDj-36?b2)X+=lJ)uTGzLVd~ymYUnm!;!p4V&9#hJC71Hhv6lu)uR|feaHJ3^^`%rbWLVvPbzr!kZGm&Yx zh{JZvMNikJowB|)rbFvz4L_$Z0xU8FE=g)ox0d3oUK#)wAw^RhgKFDgP%Nz)+uP^Q z9exqh-`6zlEFIdIdu!BWnozCPatiqt@r<1(#eG6-4wOqXQ}U;Szj(fR(L%N3r=L}p zljCtD%in_lRMnj(daj{*tiV~?F5AD6QENoYy=)jI)}kL_xcx={x1Vk=UCy&9XKE+6 zlmGDeajnS2j-Eu3%PJN9#aEm`0{;#zOx$V&+{U-^$OH8%v0rcPr|wVI45Qw+nSSVM z(n=mL6*>}zGJVSyHi$jF+%IVUb9y4+09|}}yzKxb;^%q!R+Ak+=7W^p*9n`cjziqi zBbFdxfE4R|r=6tKJj=>Kkw+W%V!*~yv|5*t{JCtz1x$0cmIkTO-u6vngjQfnv83d= zVd{4IR`a#uuGmPl-qq^PVu)4OyS3jez{=hwV3yTsfYnlvPt(m(kj|LGL!2EjKC?Ei z%31yeCgCK@z52K@2Pb;ZMF|y;14znBE0oq)lxV7$d zl3&@7iHrG|^a?*i%pqKjgV^nq|Ltxq@8}%^&hLaX(D$sjVyvTzAZOQVZAtHA1jJ;v z>sPkaU!@=O%8+nI(EUPD8F={h zeVkx&?;wAKMQ7mL+H> zyky}yjg@D|LJtS>&~f|Xi#ZW+c*7XS(mdb!Fbc>g66NA2dCzB?If(Y{O`=&)-}pyy zs~Xv}^sb$u**`Q}i>pBNSsdWX z$WLwH={P( zjyy82^DR{rTsL$vSf<5)8Cd8SAiR!};6{0pv0NsJ{k zZ?&dDiw+J#j2|u;rINK(^ZUuN+;XoV`)_-bBrY^M}&HH8K1`G*Ip+HsX z9G>!jD0JMqKff}JkQ@kXa=vkfO#`u?ezs(5nPYv8v_+iHrYt*+YCu*ef1A`TJdtA% z%3mx7dYGWy_zu7FWp#i_+w5GP4TpckjD! zk9_h!0wg7_LyCzaLe18Ki|Loj(?r}CATp5N%{dUf|9lJA6_@O1`$}c zT$GI++N6w?r*D~qw*#pibE(i*$@ZK-UEd0O3RHNMTbuqqry7WhP^6{*v~WSZdPiM- zVEqE^69YRGSJmp8amjDVo!=E2;(2JhoA*82)0zyU^B$XC;e6AS&f3=BfR3ztYw9mZ9+lw^0W{OGqg@`2n9r^Ph!_#rm^Z}e(rjTZyUvD zixgr-9RTS?!=uUjiDIOn-2GVXY}?XmTfq5c@JUR<5qBRjy3MzDg^OwE2rLF#+E?yO zONi$ey?*`8^u@aCn^1L!=ZY+#ogcLb5i{&Km^!Fq6|%}CdCAm8QXTGOqmrqTC8)jXKST?f7ueMpTvN&9N0f@S9-zzncott3@VTGBiw~bLe)nPB zP~FV_ba`hcIIU^5c{ZSFuYGB?v-%I0Z!i(&Bo9N}3#)N5PWRF8IMNE_gh6gM)f%x$c5=f`*U(_D=~TD80I~l54oa5hJZAN62Ksw50W$`f zIK0loi`Wgi<85QWLt{c1dA!e{|6NxdHVDvc-UeaY_%~Naw-y`H7@pZd1DM{I4yu;- z;tKc!3_O3$_isOv}n)!4#jrF01v6H!a{*LVA>?VTH1_7FsmkoS}F$pdG38sJ~_RO8?FMu72 zHSMml+S?-o=}pczO;Nfk*B{}EfLuiw)4%jP@j&4k3)NbP&*A%-Vu^cwt&QF00NWHN zfYwd!l?kgJDFdDdEvwXZQrvYL*@QymU?^DDq2{p7b0L|iC6U^Rmr5UW-Sf7+exC5B zB)bD$lPf9p_*6V?e!64vR9jc)$&zMsS?YmA>!v@V4CA>Teq)@9Vq;lAq@u{GDzpoH z%fx!-wM1i4uU>oakOfV^foVw*pYRETJgfI4thvxy$SBz9f*bf~k+{8)pMb@WquurT zm?<64WPY(M`Y2FpodmbQJ4h_>@oDuLSCEm!7W*Y~#xZ?mr4T%0IlpkXQcoFkcngLyCKJcGTcHF^(g_Vu!O^ zZ1{H^II_it@z;XGO}FyNAzw%l)=khZAj9DP!4%ycFY<7wA<6EtZMAoOC#?ovdkp4v zc}M!Puw#RWR!{N&%MaUsbN{ElhEJ)nQ+;Pt1cbz%_spe;A{V`!IJ=EFU(o#Pci3-9 z^tl`qE2&;yG28b|Hx~Yjq<+USkhkisZx{@~2eJjq&78_A*lfsw)i5SkwH2tbHx`D| zrb_*b>%tj7i8B)(O7VTh8+_2gH!T72Z(N5ane2Nt&RVV1z{=hsN6z}Kvv*djln<+r zs&=-wAf)HP1tNDT)SR;bInB{}^B8OG=>|?Ew(9bpwm5J^evG|( zlFrlMI~`!=Hg{aId{$6#!?XdW*_Rjklaq>a6xNG2LO>mQ960g#Wj~ zQ`$uxEu)JiofiG&_xSx>vxl+XbR!=h;W1OZ>>hX5{2!H88IK*$E5BS$nV%MKrBa&I zlGOYqKIvB#;*$S45rd?4wcMpWc!@7WtYJxji{50JNDYd9(4SN!Y4q230cv>TP8oX9 zy0Y}+zW>3in4Pt;QTKr>E!Cr6`?w28I48~&DB_NI@${)E^)!`*o;VgcUX&DuGQoph z&Ep=xhp)t8|8uP@)sm+yPLBBxvg%adXcvY){-2PKflsYxtT(MG0m0MKBOTo7IJ_^4 z>!d=j91FX-h)cNo2ZZ~jWBLAfY3dXIhy1@DXbRp3BRvSlY4|JeEEa*q)%(D|sl_kr zoBX#!hbH`yZOs<#ey+s;K;^IoE*LHJS(W`Z_HSv(L#LmC+J8F4HY~;zu*4aQnOgOxO@I(=*f!9*ojS+?xhq=uF|B4i)9o98{l z<;W>XvBU;AzrrP%>#J%yyWEo<;#R7queSq7MhRPfIUJ3s)>2RcvjtR}doCfCPc6C@?*Q(|at$Aj&M(tR!*j zm_K*e??pts*3}QD7gFKTzrt8LZ1JZ$JFX+{%an~1wCw_92J~i+X6GiXjxIXeC7vL~ z$W?kZ8q;-WPB8Q=rZ3np?IrPyerzWi(y08J4P{S!L;UT{DG)Ev1PRZhJ~U}s zqZX{L>8cZ;u~O*Ou?q<((`imi*KKJIk74g^U{ANPD!fNlY>o$MZIo4uQ z2 z&xgVMxPIY4{}7JNq-Uosb)>YSJ}`ZXe%wSaibvrmC3jet zYug;DzBN8SQ`bGz6Q9fbOI86B(kETK$~ued9WwlVkt$F_G`FJ><{V#XL2k8s$xw1;i2klJ6~>BV2R;=&^Uu2**pTok7CDQXxhSz3ZHf0HR5PaHmicXRM7f)QJ#h_0;* zaiSZjJ{OzF`CP}O=~&=LSp7(9b(s3ifcjy7klQ;GCdU8p(0RcD5~Wwx=XZzzZ%Lcr zsGp8E^6B|bf1DWki^b`2DA?dT&**0?(cQ3IqA2FKUZ6*m`|KYtd&`SzXrOkDWIUjYIXA_Bcd%BLX(uuy)$%m+F zrdnX+3nsLyVhuKv5OvasNp%M~Veb)oE#nkFW~ULnzC9e#CN%?7S03OWg71Jv7B?!IlhC zX3J7Eq47#~P?STi%6xGIQ}(*;x^Edo0R`^;507ogn=i!V5J+CVNErjCBs&l%T6}ht zE$U+Gl}r3k$|Nz0(1$~8^o{~e-?=VGZnb|eK!2Ti+`m=7;{3UNNT66}x#h=i3Etzs zfgNdzc-E3I7nmSM6=(SfCYiCH3ba7QvGCk1t4zI-EwDBEP7`lZPWZrcdakY@w%;fp zZCEs#+s4}|JJ-~{uwp&o&IJn8KtroG^9Tu5;W#l*3TAWE)gY5E>MCq zn7#jV>J2huQb!=TEW|$-K;JdUe0xA5AK4BGeCJe%m8Yb}HWgEfF{jvFUVe37j~>EVawL@p6)G{R;>p)BhBwe z5>|~O&h)|ZffvXzY7T=B_{oa6^+Rs4w3;4L4a zY0FmQ-jiK?O!v8NO3#Q7R(;9j)$ub|Cd*Gs{l$m9-Wib;%5~7Fyx5&891BFB8)5*d zgDkgY3toH6Uv`1ZfzUnt!}D)Cg<+sTE}9bm$pS5FeIL!Sh$OQy{@_5!;Z+pw-u`JS zqw`xQ1x{VOK^Ek19T)d=JwDibXVAS10~IJjYYk zefoRend3mGB2(NCBX$3$lYvvcrf`@HyqQL{N0EX$K5F|o_6iujM%STvbq{~9i+})=ej34*>y0*^&2E;xV=*6s=aM$ zf~&nWzj({Ou^4SibCpp0`22fxZxu64&)V1`#kgO2I4f3D z%NE*6Uwd=ZW~t5wnzXh+Hw>)4z?{V41R#ovvU&6UYn~(r{>Xx>iwrfH7z<)nK?CoyXS$JB7lp;gu0|J!Yo)pIXD^OCyC^z@eb*<59PjB7Es-ZdA`ASBj_mZ9 zE~t1I2T@)3v#qW3)ef7h4$@%KRpQ3`Kfq%-Ht}BE424Ci;L}`rw`|N<5KF0Zrca$6 zeNpjpzn_yNm()jhfE)fVo{?{UPuJ(bF@b^w*mkY^K@54}s@dP46Wguqeobe5bJkaT3SCK!g5+y^=3MC;15>q}h(-{7 zOM5^`+6&VqqP|Bp&;fiG0_%x&wis&2xg{nz-Kk97)pbMb{eFm(!{cTHfb-dRJn{lE zA}MaJPF{ki6JiPZSdbEWR6_iQF55@X+EU9`WIz~!+Grl(@NbX+O!x12)ls|YHt5CM z)Eqlhfvfh<&)%iBwgbryS#i5C$E|9h2978u7=(Iy(rCrFVm|PD^(S8{+w<8sJPkfJ zXImeV`-3Jex6>m<`4#%4(_?G+jpYnX5+Bu;5uT*+e|_|2XmI%HCPAlc*6Xs!tJNt1 z%gOD@rDGL~o9D{&*n3TWi*AK_<2>|vA0umlH;P>KZ6`c(ZhYKgny|jAUYSFwnqv`Q zIMluVWeR@hE?T7WU#9BlbCfWgCZxcV=i0%(c zc|;5|*ZF>)Y&8v&{cxn)W;aN<2omVtBxBNaQOX9 zCtTcfwZ-gFv*|OX_@BF{xgzs)>md!QVRv?DoElzp9mgkd86D_Qv}FFT(!!oWn)WJI zV?nKmOU8+IOPu%=eZDK0B>v%_}*lWDHK)E*4|v- z1U=jC``lf9GFVvoz%(zPZpY5A#D!B;n$ox$uqXw_g9PvPtkO(hFpYr7)Lp5nluO^b z9?hI^Q!9BG`RyNOp6M(G^e(bip>g3W^O+ismd?q=XZ)P*sbnLvdJTdf`XLi~i=CTF zbBzbm@#DfG5B*U)DswZ$KHe%h*lwr0(F^lLDgv#qfv$T}U-c_gL&`rO7E-JBqn^hKT>vl10!+c+7hiF#6D z;k5Q4W+?L1Bxxvp47~a=a=|^`CNZ+JVPiC%|5n4=+zNtFc&bx|n_j`4!s}RbKlrLk zXZiQ@->aXsnR0m-F8^oSCJR)kJ+OX)ywr5%vSK^h=di3-cC*cSTt(}mO;(6Enjcv3 z{kpP?LS8)ZIX3Fb1f2+T_*YQr7vB_7q&aXF_fU{A#s3w!l-wU%y~|=iZZz@uFWYOK zG{@2+5CUiRm*||mIg-g`yH)Kin!uQBtYZY@xZqPYwQg=@)BIZ&e(bTU!#k=S=Qe%o zECtdL1F8l<{yqPCYe={onGy5Om9cC3nR4UD5l--OiByINKQh46+RyV={q9+NLkps_ zdB(0`dJE!^X+?wX2fv`IO_6yACru%E$iZ^h%rRc)-eV9U3)rP&!fgv9MvgdH&Z3#F zcF&;%QmH`b-1V3Dg@a&{I!=(69_;*Yx}g0_?T8YI;~WP&m$neY*Ia32T5PXL-=~tNZ{5rt|LuF3 zw+jx@Odfif{MZ9B%F|*KyfDR(W{u3C_bMMkt$TMHH1G}2a5npK@lB~sy8YQ*ln~qz zVgA!S*aR%3(#YoMSa@c% zkSU1EwF1Xf>Y@Frs@6TEXXm{IY&#-3^8e(tcVx#u#7En z%ys+;p85~(VQQa$S;VRA8@iI!RBx8l#xETiZUBOWS6Q@NV z*vBfeb~znGEf#>0V~>E%*l$EPoY zc#UJqreM!I5-8>zZO!oHK5L|Ywf3zEv_+dl<@NJcj);QRFY7@&rt#Up|L`iP!$+jJ z@j@lJ3L`0M%sdR@z*_vZHJsN?-%Kyfd4~dDWAc98^I!nhH1$!sjWZ|gP?Y4UivxU( znMf((eP#YJU+WFh3fJ4f^7iQWf>Aa8y{ga+O{Mg7J;m|-^)wox-^5e3wN}v)${L1i zujl6Ge%at&x!x)ME0QNayk>;gL&|jOQ`Oo*>hiO`gm3lpg`o5TO36YByaWf22tReY zO_)uK$qC4T)LW8t>oXO^U%CExpHlkzyX|k6t3h+qY9fD%+5F9eOftsrCMiy9j2+aK z3y%J2;SF-N?SYG*TBBhL;57AHxy2^NXJi81PlHgz?zy;|l9>$roY}ZYmApPBxHFw= zVpTUHh9HdOni!Amt38qbpz7>he{+G_)+gueMCNn}HOOf24qbv1*2ujS7;p{-;tJtue2+MrCK17vgQ#JOeh+3Bz2Bd~ZnE*cPgc z3(EzHJjg#ev=Tj&bt#%)6oJD6Oe~dLp6!yL}Y?Z`1&Rpjkuae|YaZ z>YBd);_nkt!M&Y2=ofT7@B}`0Tnw(Fhpj6_x^8@*x~zF%+u7C?v*~>+il4UiI4b1k zjpTDoijMiM0tel=lQqL+V}gYql5gY1e|W~WpcqrAJ$3Dju8y+aq$7CFQ?sEFuN zRr^S3?4-ix4Zf?W1A*|5s|wPx=bGew9_r(uMr^W8P{?|XwVZ@u+hpyh<`l=1>IGw4 zN5dApwx7K=zulyXU&a8pEMy($KEV<_znOGWf?ZRsF$!Xs~}}> zUQyxhE95nO4^=Pd=^VFi2{Muc$^w#&V$r0GzDjG_PQe<&-JKjSCKv7^=plLiWdGr@ zU|GR3$s3kCl84G-@L1^SB?mu%rbNkAQEXpuKD930Sy?A6%fUp`n98Kdj42fQr{ z6=$Yi>-0c8#*(0s-TuqcIO6<~{jE_pnEXdeTP8~8W$`U$2~a&k)BLW{Yg4kOj#)K* z%y7GC#Op#YuHD_=`Z_j#+iUhDYPhi<-a znVD0hYMNweeH;~kBI|Q#U9pizv2RU-zR%f6px}6zSMr7h-eC*nrPZKQ(c#83UKo&K z;oUi~7hRP$Eo15*)*fFHzpW7bl^mq=13?m~K6ht_k~vn;$K>QiZ$=_VsVw%={cWDF zGWeyer+pk3PYgg#nf!<6dW(aBEo>9b4V-n19-RyMoD52izfPRB@epJW{*Lyd{d4BHLxL-#Ty)CX>Wx@qgO)VB!J@C)Rwp$Wr8p#Y zYJH9pT$ozxy9sXHsCm~XAq)xV%Y@HWm76OQ%G*wSo~$2ekZw?^*#5VTpXeWNVzdqn zUmWZm$>Jp^9$<_ZjC3&^WK9cTeiFS&@F;ni(ClrQ3smyyKCocN(k!YftV)F@Np{V2 zc&-r&oz7aF)&$_Bv-Ce_utm0sEL2i&9OxB1x=b_3Sw;GhF@j{f8>a{{k+4f_0H3eD zD^H3Dp;>{++S^z;=r1?$0YBR8s^&F+^!1CnH($RT;JqZir?Qela5VSD#l_eov_zf0 zz3uZ8QnC~I{aZL^ilrb%juzkA9VHklZhjI~1+k~3K9KfFLy>Er>d$-(e;YgnW&uE& zrD@7ZKe+A^ZXpGf`{!Ncq(!+JllWKKwe^FTrmn1m!ZYUYbmFwLHfoC~Dhe$jvBb^q z7tG^Fc-+$G*_CfLRbl^A}uM^T3hi#&(l89Vyl4gh$5aS~81W9HNI~AA-*v1|( zkZ@gU8}_yCKK^{6ox%onQwLw4lVz_${x^L>WhWgks1C(+t-1eUG1Cm3^Vseocvt9pFzFe?h#cMyAyTyY$8Bu*o4x9 zduGf^b3a?OIZGIXQW=r*>P3BmZN{fuk*|hbGOu}fSxTSZSF;J7a3mFXkgxx<=+RsL zRSr5obRTIRq4@>Ii*xh*@_d!*yE{SqWxfM z48VM?cMPnH9{W16Yvn|LlCqz=drA~$1O_yFQUgo8fOPk)xZ-edvayEgSi#1EUw=Z^ zNd@yFPF;3XweGu{i|dG;B49n+gw;K^7gZhqK3IY(Efi&Zu;iS=1|YTnr+iwm zQrlNk7CB8oI-u{#rw0a7+^d}e)9VAUQgd~ie8{2Ew|$(uRQt=oO70GBLNxP$k~)<7*kysz08s2acx4aXqIdSbUY^+IJ!mtUZc7r zfMJ;oLgMmhPA`&ZAtCQ(ZD%e!c~<{4IyPfCt0uO!&zO4|IbLL^ruPSRVhFm;1^ewo$<8h>W%4(Bgf!zRw`WZ ztw)ZA?PyPQX-tbrw@ppY;5xlt^q|`C@sG(_;(SXA-i-8q^v^-S#LW-AP#2xjH(O^`o)J1wSJwZb;GW&`s2)gP|p zNvIP#Ampdpm&QyGdvk3n`6Oq5LpDIqZ>_!PKU-F@zn79ycsm29@6II<+en z@wz&jJyki+OCOh_zFgGi(ZLIR+=BHEVa`;DyJTu-gKPPUGPs+M046?bsenv!36|rzJmG~! zbheABn!!1jlg{m(eb@5u0=g&zty<7)kqGiVj1wyWT}-1>*||)%z2Bget1-VeFcb&P zRp#;gt!wv~;`LQfQ%3axf~a{KpOt1-fM3tj)K5R|l^RjF%(sDG+KR)QEL9`8D1!Y& z6g}E(Vjb25kumvcYzpV+v0<4$kpee9lc*W6NZpCtZGpM|sTRCgVH_VZ=nB$5d6Z_` zmP{{^5oKbhNc&{(A#YT)r;D89^i6RdpT(5(*-Fz=dt8#;G)Td(ZvO6M)^<)z?)9&G z0EYF)sz`H`-mGZ*JbOoyR_>;5OBekd15L4t&}q|?^g-N&QC+f5E22BW zjU2~ruO;G620QbG(%1t<0`al4%S+koTG+4u@EUZ&WLY*P@2u=R{oJ=E#Lku`*da^0 z*+XsHaFeJ!jj*aKG)Tqb5rvk{%rhria}QLqLAV@73ObB zaf_{?AQ<9w<;l@R(+V;7LxOQGtir-cw~vYr z5)J!^C&oRxj!pK6qY;k+<&l?Go_(jKJqV6D8zn1kHGRKhKqLpPzC{M@Uzcp5K@1)U z_X4~gE+HNAwL`+DX4w=1{&i;hJ~Pl=Y0WWRCkP`m+zS~Z_-qYFhHc97IZhW}H1nTy zL7CgkWSXwPyS5DPuZLfWyppJO2SS&Bd*iauS^d2EEXop}i#`|b@kz(JVX_S>LjM<5 z_5aGP{(t)z|9?0#)s!?7FpK>sIH{nZZ6=W(kTdH3pzpz`A~&g2_tqv|mucJG;wYm_ z3M6=yw;hut@M=p~WjX%jbG7QTV>1&hZiD5&x3>QtEOv8zE(_b3h`Cc*WyXl@#tTgA zw*T>F!ZNBAQ9swTBahJg<2|4*U)oXCyGARkN5OvHXq5Um^^rc@b!(TTTb+l$mm6pvXp+hKj@Xw^9_~<*eofG4JpbTiG6Ev z4Yup@n!WTl|K}1E$Vwwpy*mN}na>4)9fIR5mP#fnXt(SU7T5($QJ*|MW-!W&pF?S; z_9%ty*g!93?vbr}^)b7Yp%Xw~Tw`yFRY*8Yy+24T|I36qc6w9i2pNRo?hod`@W+qQ zB5#y%yl_}8hfzz)2LZDpgGTOel@IXYOQ(;|fpwoNe+7Z=Y1vvGrfxc)thff;B_+n3 z00}zuPzp~2h5pFCL5*m}X&Ilb*k&CI7r);gSl_FIGCiek%%+iIXFTW#+Dv$|F%coy z0YnizZ>W1j`nG*LMcv9KQ4-nS{!>>@%LowBK z7xLuT5(hPnG6B-bGdkyz|IB>pcEY#{A@8;i9|4KHuXqW}viZI^zf1h0Wq*XsLP)!; zUBzH-<;9xT)tedc7kL5hxQ=&z>&IZlPF!=$$(04&*eNUp9XAoKuImsu_`C_KePb}! z8HsSf%AvbV(akZZ9hwzb&9~_K&df!XHkSsg6}A5B-xIQ5=srm@*^p}c@h`Tsg(LVe z;COExW+13Cd7qwf`Nk(D>^0L5emZ?K=G1fW_onGR-ZJrSy{k0t2v7=-#N16MA3W{$ zfv#{nF4J`?iQXA6ET13ll!-AH#dk)?$4V2y+ipc?Vv(HClSn8J>f z;i>v+=d4gE1qiAIN4{jEm9;|g6Aa!zm)0(-(Xl~UWXWg=$BSS4%pEebwf)=Vp?sAQ zGs5->QVvEuf!y|7D^PZrtTSn`x*GIky3VEhm44+GHPAk8HN?IiM$r; zf{_R=EU!`sDP-yW^zku{c7MPdCo|aMn{slXekJNkLqrPT@Y&4v+Q~z&_2kjW5}|4W zR8yvPaG0gKD(i!~)tbH-KZYgBAD=*;&x{xE+$bb>>BbUG!A|j-P_6a>Z7YE*TpC%d z^xmAH?t=dFYimvvWzsz%dK~VXfAHCP%-iE3iR5ddf z6OSQDIvBSo5Q?1NUels~Dln@WFo}P9kgQA&T(albC zHKg>nl367DBgsA0FPB<5_(OS@I)n>w8=XX<`Cb>eZRUQsJ$O1mFvp!6u%j*{!RkI; z;&(cj!=#Ty(1ZM~6CAJ88{*uV^=fxrES1JW;!gky;_3psW zf%uq*HK>rN!)lN((&XCy>WmoF;AX1=&&anWcd1}{Y0Ig`{B;hYh4IBHo{$FA3_`pC z>n+f_p~<3pjQn;Ww77U6VItgfwQ5x1^Y0k8l1_6x#P;e1;t$p}q_`_Q7820on@ihR zpJJpXy|cg%{QP&mkVAy358b_Y^-fmw;0)cIXSFg6*8QXC(=z=I>3KQqD93QjIIw8xy9g`>`(cw>$P3u^OFT7sQ6ZjLFCCa$XB6d_E82EK)w&?A+>beV-u}4y#?X}!j{&k=A!zM2{6Mhdez5i~zB> zPVcB}p0TsFiRY9N1T*%1tXSW->Q`3=4`(%&9=C%FgRJJDT8aE@fq`#kYmPd|%MW8v zj(5VYk2MvpD%5rppPo^y!_I`<&yp>3C|0pi6WEz2#;I9K2} zG}inJwSm7v%80Xq88xyO-v*z(K+Md-AvgjEL4tV*#mWH>6y1DfsjGCYl+%(l%*U}D z^$h=~keaN?Z)-lR6vh*!6C)`9!rZCJn!d3;K*}vp!q=0dw#g;W%Rv|Nn)W>&X@SHR z9suyzWcYKAv*Cv1?Dr2ajQU$E7?ar8DR0$Uns>cxg=%~71cGNK&?ev7d9f^3K&-tl z`D05%dqd>-rgn~rr_v!M#Zw`>khYOXgRj6h$c#Wa4358uUoPLieh4Eu@HvT5$lDrX z`9&7`XN-(ZnD#OGFSVynD}&iE4sn-)vAJC6nw9W(y_s4y#ZY8j3_(`L7m;^dXsT~Q zy&okB-J~R8IiuynwJ#bs>FDSJxS2Q$>)q=E_T6%QX`AKj5g-4R-i3JPW9qMolD3f-&FEr&ywz+Xw0{$sLDw+yqWb+_!gF?!!b>Swc`&`X zK-M}7lS-0W=bw#fb_=x{Z{k?Zv{=eyvPQn&n)tbtGZbkT9h&CxKmRy!SNphk^*X?> zgR3fB^RjN%;=GSTdj4Qz56x#Twy`lm)gzUroWteyVb5gaAo0%`6*ahehKC7W$$|F4 z3jzI%r_tUC{!8W<@~aYxELv)_es5`!5vG@dFXKkc@DoC{`lF>TYvsY=>5LA&oj3<> zDaaktaLm|QEq>!Aqy?z!yqvj;RIAmSQDM~T|6akfyk&!{h|wYIm(Af_4IQpE%PUsc z!d>;qxh+dSQs|CW%CbrvnAV2X`O>xT1D<>K?Xq&_2fHs-+Bwb6;u<$H``aUq=Rl*W zO;__lht0KTYgnKa+BnUDRFf^n8+`OPV`$X2;P&$TU9weun#$JFHwago0Kd9>Bg?NBHDOzGRTO75XxW??A#76=3f>I2gTgU zRr~;2&XNwg5;iUQOg5dkPk?WLwznyMNJz zIgN1XcvAr~|1xs|4+XR$X6HC>DSzmh%cO3-7kZGko&M}&3**hmrZ~LBu?-m^aB`Vr z(tG_G_-@TY zs;YFi>4O2Yg}3Yje?xNlgC!4@KE%GaPC&LGb*ihjEvNE%MR~!J0$`F$b|x9Z=eH zHhC+=Hs~GzZQ@q4cGr!kqE!=7H*=Xi+acoSUx{q|O`(4*;x@9_FzW@6%q&8Rp z7UfRL3koGrN3<&I7weRniz-bAW>{pt zaY?_XE@;B}7<4lUV{t^hn8a0~(OW|sC*0u4R5bVt;(z8$(yi8^fDhM{=|z9I7n|*; zH~A*mP^R*YasD#fpb?@x3ti4W!-tiRfIb$5)_?cw%$#f~#VO~j)17y)GL?+Wq=5-4 ziHHtnF&I{33tbRttBYP#4U(H~;er0?{twSz)y0);f;B_z%tiOkWcrR0*D1y)PTanq zM&g9!0K(Y*-k#KYm1MU6gSq#9XZ!u%|0$)dReKgCMysf;W>xK?_7<%g5u<7avG-m@ z?Y8y^HDgANm_^N0%*0-mpc*xvpS+Ia`#-$DKji1+$nm%y*L9uu^SqsZ^dV%~za%<{ zq>8QxpeN)QSTfM*)N@@D+n{9R?_w6YI?4xPctHzr&dYFoElIVLOca_~)^6X3gKnP0 zVLvLE7YGz8B0N5^twu+Fv`arHf->b}aGW`QFQ1>_=Wu%DbI$GiY-dOCcjnDtDyn}b0$>O0GH z6bRmS!o&t06A;p6G+ke>q%4$FeBM7d>f#gV=i*TgYk40J`?9I$eO{T~$n!{~II{P- z5@p?J!>(bKA*Qy0%HUL2pt)N+(?syYi8G7u`_1dCs}=C(1Q6rjazx}Cu&nN(d|L90 zo4r7e%+>9|Reu;A9E(i#Xm{s7KfCzO|4g1zh{*6BV2p>vi?qRTUEtQtt)Ru#g;}sH zz-O%qo^WNqDwZ^W5a?bwyH*%BwBgj3JcC^^*uDI+ol%d8G3Vz?0oH{xrmOtCvCQ$JINU=Xe#IKH_pRPmKgh@0KvvF6itt2~dSf4-H{N4+U>;C@Mu%yf+9x*BZm;@AyUg!2Bpa;YVF+2^X=pu4jy zXJB4b)!8Pmbl!nt`*puQSWFMUyCD=|_vuII-JR)L$cc@;X}*_DL$H2O7kmfZ(vjwa zx9R`qG9*svhF*Yk>~#`%Ok(58M}aG{GmCDlqBce^JlbK<%_QQPW5ROgAZGp5+24% zWHLyTnyD$_ZbM`Jo=BPY#2kBx)*rP^qGcLFWTi4niAjTK?f)NWi=_W!UDl=e*v~-a zDh%rmaz#Kc?p0exON$N_hFA=9Ox$E(Mg`h$rc$518j?&O%ajs!&1-CT(jH+uli60itK_oYwb*S_ z5e8nI5Z#7X+m_kCZOmDY5qz%r<#pg*Vl`%p=Sn4QgSJ^Fr^BHwK*7Ao!`(5D+>38q z{P!#ugQPt7SA=~|pb)jvma%M>n|+XS>#Ud5Zq4SNK{xZW;A)wznl=4^lVAUW+K(9^ z8yYwS?8|O`Li!3M67&Urrz`wYNmMCyhyPwxoX}i^9fTMg|1pJb(CwKI6#xgd6tm3w z33ork40}t%n*n9}45F>gpXQ$eQeR`GDXH%Ybl$sGkNMyRxw2@i7PDOJ+Cz-{BWCRk z^AlBHD)C@pibJdHv)vYDPm&yKUJAuc*ws6Fb!zXhbEP@jaVk^^wBPEkU9XH79$1U* zr}mh4!mTH!p{-w9k{0Zu3yGOFe6XwQ9Tx zSYe_3%c>zowByYXUZ}*2Y7pQoxrfp@fsKbO++&X$A1Tjp(qoS|<;tJ#Vg8R~{Mdsx zvEwfcxzbvu39dG08#ed9M~Q`$UHVl}1=fc5NwqtA?<)K`Z-|6CRY4SO=2fWeu1s6A z^l&t*2|kb7=C>TlgEA87nui1V9i-y_9!WZSj~*ZcSF?ODD{>gQ#MU(G@kh9!B)sI< zp0mKRMy0yU7fFUiuSZOqjMGnpEPi6zMdza5ZO?j$$E_@QvTXMv%a3;2FARxx5*6{M z1KsQ-D{!Ta3U4ARF&M0rsZL$XKlpyX?ykx1^F0Czc}`q*P$?`AF+75oi>@yiWZ?it z@;#efhL->W7`p%rVrrpD9X_!eRSm2Jo~m6Pd@iP&h=fsx>jU-X5K9zEGCxiozGs#N zC7((#Ov19pV#y`;6322W%zSH13-i4ri3I;)MP<(xYsIiWCc|0B5NEMa(pF-_kiSJI5#s6h15GT z1I#J`LjtiQqj4d~w8TS~%$I6h{3QxA4^K&BG}DxWP?h^@)K~NyQ;8*9;!1Xvg5`oG zj^!};r-?QS59ME@Y~;7I9zR{td`f4%@*Z~2+o$2#hjzjI)aujOq^1x0dtz$xgd zp6_I6f=6yhfh+qZNHE#A-rB2iYT9+WH3+a&!+}yr%(e#VPjP zh!QpG1o8Sm*K~s%wvyI|Rx(};L^IHfiS7s0v<5@Nir4bTKz*Qf>sH};wbW9}$Os@g ze6O9pLuZP=>Th}8`j;2*rs%nx{Myh|Jv^hoY{t9$;JRbKs%u9gXb>onoCC8<*DPmxrI%U(GtK z(>h)b&r%?aJ8<=R>t46^8DG+$@!TdHn}Q2cbWxYafY5ARoYiJdQWVqmJap9hvl; ztA6M;$penpz3s)tkCZpY!)Om~9<}3?W)`!uU~6i43OBSdT%$ z_rZb7>=|z)-e)z?I+uH_PD<|P2FosYhG4b!0{Ti4{_-#@DOQ04tUv5!?x9nL3a4wk z6NgCRAd*^)$-j3;?$iT^*SN&H#d7mClQ5#zJGR*sQF@FvHB0s@n#ucBs}9cQ_Y9to zaAAus6(Rn|1H~-8ZN-zP`l(oa#eMt5@o+7-w7k67EuzG>3amnG+n=~I=@B}d3M-UCk#IK0o6(*5{o2!Bc6-5SCO zF8}MXC~`1oZlUbhxAwphZ?>r*0x`61o5Mgn{*a&WyB>N1%-%Ljj_5`dZl-F<9Q)zr z`i`5fjPS|5tek_7z7nOJsRu&|6obVyVluyStfQ%!SAiF9?|2U#qZPpiJWPbC0q(oa zt#e8yRmh5^)fIIo#xZS+_I8iP&;O&+QWJ-tF-p1vKckG>8ZAQqnl^MEE*u>D0Q{Ju z*PSCKoWN*faHqgclEC0XQW$wUJ8bRUbOKYg>rzpjRC+MS#Yh>ts|j#{FhsLjbfBDP zuOu*04d_*{$!@0!((ge>XJ-FmMR#_-JMT+B*Pl_R%rd(wq=W((q!Ni>dtT=O}>L8>uOE3AZQa!};2sq^=L zW%0~;TL}r&7XF+<3bV+2!xmYQ4eRY-sl2{#wnph>8q&?;F+{ z-mYV{;7I8yqw;>wRh2<|5g8txvzQvrvExUF7O|f>Y+W(CVwSnd#uT(4ivOXqIq>2& z7{BYoplxpP+}ZZQ=L~dr!FfJTta>9YUWMgSCB?DA#^!*-FLOV@|Mjw7mF=>IRGm8) z!@{@Q1H{1Rr*-IO6i*GIdBC2BV1al1t}wq^R1Qh>y8n_c{`0&?2Z7RujVT`Xim)9whR(?XcHaR{9lSY!@gi%Dj7tJgcsB8*1`5t;b&ni@x! z<_-<1Twb&MwQ8B9lhPe|!UM=NiMvO%nzxz$rHry$1%D57Nrj4FAO1&Tq7|=thS2Si z>o4Kdlg_L}()bJbJKt%v#Hc;HC*^5CX`l~XkRsK1TQhT>NT1ZyvvRXJ+SKuzy*?O8 zY{NK?Y*B1rfK>cbRy1g~JJEmiojaVijtFZe&-%{X=L)3x9}ShIlZb;ERCY9n!$YP( z-VZ({zKN9WNWJYIfQi%H?N-Ol{x8lVmW`dFw+eH$-%VU|)F~=neROv!|Dn*hWNO6N zCT;e}Hv+_5*YDXERJP*3;01Vn+u=D4oe&N_9Q+sMafA?X?Zw6K+4Fm>@^rL^{W-{r z_dG@R4Ad_&$ST!3Dn>9L7xT`CHTn_}HuM*34sH1%c|*sKs5X=~p!ELUqA3AzqBQ z1vU!LDvL=xe_6+7OUCloi5qeyNKW`?g>a6y)_$rhIlN zyng*vHKSHCeO6cMpFZf*>ly?*WM_aw;Lpuh(bklg03Yi(ElX}LRvL^@j>1XQ zIXtC@uw;5h@byGB_i6;UiJ6Av5~oBImAKgfBS`9iewwLyN8(~>rc3m;Pou1RqPf4z z!xu5fg{a8o&;_~*hz)SzO6#je+3Mcd+oo1Y+X+$RulPwv$V7`FNBp0qJc$!!601tH%vqr2lJIE=&z!@u$j6jn7GX}#m3ZpKab-8hYLoT7Tlw5&V3VL0@3} zBBNqkG)5?@So6*SP-^8$6&HOYg;$NaQv6EL(rCi<%*o#KQ#?2T*A^|{m)U`%?ay~4 z)9oT0Qw^CnoEBvn584y`#O4(jtq+2O(a4^KMAYh@>(0kZ3k+)Thz!g8v41Kgr?C>A zU9}g$@3fMU63!>L=h^Mqq)MtE26uiJF_*7&IbPbP zEXloRtADQCoIhFXCR!dQcB7#t1So))IKB{}c`Ua^)AD$L|8XK+`??9M;dIoIo-0|U z{GAS-O6CpK+by#dyEl)gVV(j`EhxV`d^s+XBexDoljHz9`5V5+lpt%?K|`9|V#b`{ z6(3!fPE;#}zv9uBCaKV7b*2UH*RVV6>lP8$RoB^%i${YeCxE8M9@41Vy|2o|{=cKg zCg*7@7CoKT{|+iOQ05_~66jhzuoJ(OKD9fLG)Y(>vM}5SMVVnzsY{?c&mmOTxbiSb z>pc(}w5BPuXKkF534nLEXEZ;mkM~*5whepShqH)~HYC%ktw??6zwn2%$artt zVe&8QE2MVa8`_Z%vnC0j=KN$*6064wZ zEetPhQ?OY2yxn#BLv9W)^Zw)hDd2Dw1?nA*&W@?;(VWs~H!U!aTr~^-ZC+#)$@AK# z+|2?BY)OsTSYsp#^O)nqDZ?HZQk4KBAT(RP0gFVF72AtP4 zW*dk-M(@7m)rs+GNZ$DzuX~Sd@(9_aAH>~N3mF>5JZS61osUiYu?gk`w;z@pf74+Y zY5>q5z4`WWY)FTf>m9wFIHmBkZi=D5kN4`hp7nLt`L`+K)>+>r0V*djb7#%bEooCy zpThT)>_@NKW_$}|*FY}hG?|Oq^9I}Ng%NXq8$Llr@u)$21wzOMFlqHcbL>+8Kl76J z|C9oRhxW1ilPrO&9t|-G@3^h21|F0*kusy~u8dHaPJ)hS`qB}8J9H)6efTEav)Av` z`!pH4xUrUR_JP`6=&_Hv+g|PA2DfubzD@ly2v-*k^a?H82N%KrA{1{9X-H2sg?fYJ-s?9+Zmc`Z~ZT!_AZl=8VB;; z6W8$DW^5$1;iQJxZbPiaU>FNT(Gos;_CQXfJJOZB4xQ7=T_Ef+_{I^k+_WBY_-EwE zj&4Al^Knax?DQ(sU22zXWt*SitS&xKGLE~k{fM{V{d8V5&_?T~8ZXB;-j|PD zGW2nK*p|^f{)jJj>%9V!7=Y@uIHbBlv|fbOLevN2kT)zH-w0_Gv1r)uNmk1CR$F_V;2`5GINW1SP~ycu)#m=T=wkfAb7F+BpC zx26heFUj+n(qs@yif^7wU?(iFJcCrnEa>t&h0v6W;nEjuib#-HT>=1>N@lC1_U+jn zChk8gQQysB$+girg0>mvgjP3wK<46=MaYwq4D-3m3amIKh+7;!_nT#v?ml=rB=HgF zt>E}0^@*)V`!5}uH}=6Pc=*6tWVLgCLz?f37?rk{Jx&i|E{s5ZFzsr5%Ut{-(ZDBD zWJG#`%y=3hPcZ3gfWps%)Cp1cEu48}ZB0FvM;oy(R&Ec<@^RV(3 zYpv*9gaoWw{2cRjbMh>__&{6|CZ$zGs9ZEMdQ{P?ZAkG%l? z`1=$qQ9R+oQzo7T!xZo@##zs!LG8ELXh!+IZPG@Y{`2Y=kK$;E&7U&Bo#$1#=6|(8 zkb{&YVJ&Zk*)4xxW+Xo{8CD)`$ZttnW1ve774Rb%Qa8)Sl*cw+YUJ=4DNhP4YYud8 zI((2lMI$C~e%s{%Uu;Hec1v)nlU-SdeA-*|j|;^(#B<4gB4#>$pijO%O&pj5saQe1 zi9-2wKQO)1Kd)dD&531&OeJKN8JCSUvfC~$I;~v@8sf7RV`t$C3I)v46B3z z{b`uv!XHYIV7JrSGx0f*4gsc&zZPWZu2Uj4)`}p9ryJtA??;4z2W<0jo5IC71}#Ph5G(%h!;UeVHN?2Fc*&b3eHZSdE27urka7I2T< zrhs?Lq#{Gw>>G)=v}~B zs}yZIp%d?OlNj0A?fxbw$lG33CKp#O|1WK{0A%wuB++6LGMsC%InvbPz4&Sa`keBj z%|C`uy)dn z3B^3Ph0 z%vz7OQ5Eeuk2PnUIJr75hMkCSifotMhYybSg2d^quVk}cwRU(>gEIA1s+uMkVmdm} z30zO2n;FMhNT2WOAi*Kc$dVSKYD13ZtJmxj3eUaJ~K8cOp01-g3CA-c%Dg&$+W`v+HO zbtWlanVDkdS$Ga|||w!9&p|mh(vLTy=F=jN=i%yr)m!1Da4ERAyfMYyv#E z$~z+_)cOr2F8ce4m;>%*7Bb*YTXJA}%{O{6HBQrX?=B_Oo<>{q=Ytz6I}0;)+U#Jr zm*Z70JtP=u>I745+4^=K5=Z1%+k|yD^&I1@Sv$|7?95JU7(Ceb7l+d9P$&`DTMH>( zGs347=LOUfA~xC*>Uq42U|Bybzpuba`A2O@zB_F9Na^BwBiHfF!%5OMdZzQ9q8ly6 z!69FY@1#0fpx^tS16;UVm@g_TAi#kPLe_BezJgZ7W_ye2FPaNtDY+D5H{Xm*Omx=K z?J{U4kSd&n`H$COIYoxcdc(sn(_yV;sjT1$feh=LpF=R})BdM;ZMlzr4k`}X2lmAw z8RK-(=SlR>K2+5z!vMv_r%gHno^ARf?r4>)9@N<#8JQy6M+T?t?t2?};A5c)L^0d2hY=EcRpBWezo}%H&tX9Ohb^ zQF)+n0~4)?s22TGo|xcqm=yS2bAKcc&Ku`v;k*LRnCULSBy%hyL~-Ut0;#p$JW=9L zggWjrZ*IKHnM^Mcd)_$o00?m}6qbj*FJ!&zaNV*m1F2qe3JXFRPL8S`gW82lsuhSK zl#rkhl?~HyL&02Cv`3Tn$=0vw-)#J%-BHvKSTsd1K!x zB$#CX_0GRROu)En?NY#xBk4J_;yrLp&nFGn&@>3RUxgj#2b)NXIop-)0$1l_wP8O2 z&gP_gx4Ece$Vf<$fu7}5R;Mp(mjson$A%D08b-t@I4n)o=fJp(TvmY7vzG<0pEGXj`sIjz{>y15!fGrY1>A7}u06 zysHVh1D$}3zPkOKHU?eEByY)=mcAp@nt^8x$tol(T5`y1^PT>H8@_qplow-K3qlKr zIm=>SNZ@*w^9#Z_jV=bp3R>@pH=*;g7ILAoD2}BUtqa5q(j2#Dho8E0euvr*P5Y08Z!7LPSp7ee&-b>lVqCHJvL7Mg6KhuzL9V?8rNN$h z3FD*qV2r7;k|be3M~DAyUB&r*b+X7iD{~x&Eh%6v{O#zV`j}waFHU0q`s7IfkCt`J z$MpA*hIkbs(KWlb|A>!Gg>ke&vuPE30W`c7b~cJ|5PW~L_VmaedHE!hXzCx3Y50}o z_HXp*gWgWT8~5Rpt6p&f`He)WNuKhU7>m1h{m@<}yBksWBGdq?UB2YS8qfyR=CjY5 zc?Sk71v&YvKIWtOG5m`(KS_7~i406~)@o+kCP`#B6C$9Vo%x7KQnKX59X=u_d1ak= zgRmzwSkJaxGa7Wy$v`$uq*r;nBKS>=k8!vv+iF<4~*`p2Bu&C4DwDaAMjNv|C4KWYJJ|~-yC*&a;*r| z`g~#7yIb-3J5mAh?0$cuaK-->#h&tiH4Jrz_d$Qr#RUR6MPY(@N}raz8A=r#BHwc{ zZ+efwI*F=Po$apmOLTTciAuFnu(=}mJ$0sH`e*8O(yUQs3VkQL;fzy{(`%W_lt;k4 z569O5KTnVEUP;e)3k3%F(IqyBVG+f_dDu+hTRnptG=gTN_VqE)PGE-CXV}Dfp2tcv|B4ecizvKG48^u=;5F4|pO>Kb6=WrPtfp3=R&E z3>$7Yrr4P8=;J3-7RjDP@Is#xr{c;WY>(s+dTlUE=@E!J6}3=cRA&B>u{D-;=R2oP zLtfk*|2;E?>`t(<*bK_P9kEHm+Z#g}nBjfOw@L$O&L9 zZ6$0!s0GH=xmw~?(Ws3T6#h~;c^LDtXa<+8gLytAviy3}Vyc80p+X48Ws1TRMt`)$$slomB#o=nfBKTiu+!X)Xlfxr- z;)dBABZ`Ul(B61mQ~Hzid*!mmjyk}OtQz>^ZTH&x@gON)6|F+JnN41I>vs2oTm+f%votv&Pil6KsvjuRT--QH&7N~UzqJaQ#~ zTT7OP5gk|mktA2-PNG^nwwvIASG()87_-D>zRemhk`AL(LnV~on~g9Uw_;)%FQ+I7 zZk=6TCzl0KD{_oo&!7j92veUL84!fc2CA&ku*7WS>c(m4Et)*_Tw5u{f zSjLgW7pWD3f($ic4x;uydg_DJhCiz4mj_VmpuD*?;XqfJG^}i2Z3N5Bdl>! zZ5Nz)g=$(rdG0Tr!PRODC!=tx{i~crS7?deG+GZxL#X+s=3OQ@?Li$Y&ZqN5emMmI zp(X9(_m|4wypp+8(*FuBreBar<8aI045bw7v}L98%+Mn1cldQ<>t+|Zu_NTqL}&Z2 zBnt7Ez&UILL_}4Ep6cF1yOwtHFnIjpGqGNkYMBG26OfUAE>ZFHf+-d5L^ql zkt<`P0&N7RSjCp4^(oP{Ob1=LK8w7fcvc0T+S4cdo-u|q*Av*#?P4eiJhQ^75X8aHB1h^ ziQ_F3fkeNDa}01Tv( zYaj6@r_OKwN5Xw0Y<=~F5D-!;Fs4zv&$FvwEGMXUke100uQnA5E*_)tc~gyTWPTW# zTmM>JF{HP|%w^|K{5t<6{MKZS1iXDG?41|Y z!PjGJ{H3)a_E~h8V}Wi{>=5degoNLv5}Q-jlTaU(>y1bfYsr4Ay)+ON^E$N$ei=^O|iSJD&gE9NtVS6Sdf_K zLyDQzU^C#uAFtAwM(oez8t{@%w`F(#z1g|-lUj4>NUs<^0RC*;9xhiK4qE0)_OT9v&KE$0YjSXEvJNAkft4XjOC9H(uf#TcK z?}(C_ILp|iob~{-i%X_CI^!$vlixcrX5?8vEk-w_xXe|`LTa~j#`XR7w!6gTmUE_L zajcQufgn8PAkTehplrUFj18x#3RQ^okC66zc8G=*8QQWxbmqC8ipTpU}KSr#9!3pd6tY%??6_5@d24oh+( z8|NW^G3Rh>!KJ>%0OAP(H~)iP$LsO;^ko}Erf9}(H3bD0AjW%SZv@+(M;r`?(JeuE z`imKG+pyr$HHaAI_t}a8Kj*TR($dwoub)Kc`1aFxOUYc+4yJ1lx-IaW-#O^61Xr1Q zzS+r+*=W~$h{5cwoaN+xNh(zga;XRhj4yQL=;~+DQ8ub^AEupo2)+vzSg`oyfyZj?})^M zi{5THHk5J&6ed8hilPn+@lE#7e-Yet?sKV$m?SU{yBZZ8w||C+WC ztq|orv8^3%b56A%kvB@Dd787o)6BUYQuknVz#ce zHY2b~&4W5XDk9>^ShzOfs3Sr(1*(skO6=uqDRQ2&nUhxb8pOL@mKe{ZrV;I3{y(k4 zns+`5zfU^p{IOK#XLfZaqlQz(s5_lM@dhX8pBZ`pB!-K&Ete_mx(q%j z4|6R9)*Ht6o1{GYFe>M}QQI}M!lN(Uydp~@?MIk^E@D-qZzSjZra0C>Yrg{gLmzj| zmdpO@X@PsQ)xloAly-ehc}m14^K-|x^RPo5@N4n)?tW?al!qg)9zTdFuC4;jjI&hw z-Z`1UkgR~;U3|~(Z;6iVdcL!Q;Jz{fve@fmyy*8>RXFi>(V6hvH{83~5SVY#dSRd0{L{L0O6e{xZpfYBU9i4% z=k>>8eJS01^kM(Nw&kYeeW~Hs8Ubq@P|gj*cy8LTyAXBL)|s3eQ@!&J9iGXi|44Ga zJxZ<>&--f`Ra6$Pw%rrkt%_}k_nX68L?Czwo_lqk#KKY~lu3nLMM=f*&SY)+bIGC% z7cL63inVr`(vSoH2iSwAu?z1&bN4ii*ZB^|{z!o8YyU7u9~GhLUJaUN5_Pm3N{) z>1P_DVHP~@+eGUx7tTL(w%jp}(dpsn>>|33bws)ZrbR_p`y6Ws8Ms`mYMPQwjhlH;MN!!v zT;Wyz6WU1g&P$m?T+c@PWBPaWrB5sYP7(6R_h|9Mm5mY_$YQq@^Gym?=dJ7`kazWP z!0q`KA{xnv+Ioa9qu=q#_$hrMEfFN^g?|n%mWa~mA{3Ppvdhhl-ndjMw`{-Y%7*6w zNk|OtY?`T}4Y8F;p*&$ORs@9;5%BnKJ-bm^>nR}PeiJFvPO$K=!H?XFqs;plw{718 zttS=OkEI@Ou`oovk?~%Grm~mgnvw@=TIEb8UED0_937o`JFt~0M|&fQ(ueP*S^y=R z@pta+Zn_)xujit!SK6)kY%EmwP258A{ZD{2R~{GelfY0-5-uL8>t=iXbsjVsGMAg( zCj^R4ZLZS&X5iA%n!ec4*irb&p-n@A1TRM3l|cCmHDAnv@0lp+E1@GC57HBXCQ`2F zasgBzGDB~rS#?g?ky5T^DPI!OLy42Beyf{afQX56 zseg$N<(+urT~pe0(dnkcMaOoTY;J62OQbcCNBqja*cj|>Zb;}>-{=Xm_F`5d_EGuG zs8mKE77I5wM zTtzagcQC*^8*QXx3V%B$iAO=X7Ruia3qXZ$YKPWfGPu@YNSaHPCW~^SDhJ27_ zfcL77dCt%N?7-9=WNo)%{ZCQ4H3}r-jIwYno<^`=y_iM_tQ@f9Ba7hC z$1)%pkSLZRY1Ha4bKZk^w$HIQ?z}7cZ2caJ5QXC(;9*oUE+(>mwsxaIA3%m6@Q3rp z38tnC*mlcHDYC!1S*h3Ho#SL4F6bMKYP`axf>*M%vg}mfc`a0W@2jLv6>R2{Mi;$8 zmb7vBiwJhkkA?O6iaLa9yrVrHkymaF$(+&Z!PB%Ax*s0B&741c`z`U`zjvRSd&juG zV&X@+@()vu@>;3gA8XQO`S~7Z2DLu0%lA05^JVTVT0!-NC9w3~ZSB3~3eSIqh9`^3 zu=@pfl`0H#tkPs$f8xs=5{~4hOFo(e?+1%Wfh%l&c`m<6;GcSR_*&|p#a+BO78rNK zN`Shd`#`_z*^o|7baJe@Y$J&h|C+fT*IUKk>W(wQdkuP!VTO{hI)5e>f8p#zW zVQT&Oo;AdO39BS~A3gehl$^tqm42vc@+4d!7YwHv<@FiXJtOX9+~g>g2M~5*h=uc) zAMpa*wzk|e_}B<|6d?JEc7|eM;DnL{cb5zG2E)S!2_9bMg5$+wej`wC{O_0#@Yhxk z4DJ7V=liDhV{#NS@VGA|%%1ofiEi#g2zP<6wfYsh+rU18N~1@DFFV=-zLULA)sGIB zw2)z2_LO2Y=xy85*U{C>kqGFr=+xQWaxPf;?2d(M;lu~Wu^RZ}Xun_`sK#}#;I}oj zk?JCvqFL5xi3jj|(5NIk&ZO{9jS44$4C_2!=aaXgkZhZ~?SO^+c9912dglKMJO8gf zVgGBltg{O<$<>;5ntRw-Vhm}F7Yzs50O&qSkR@-P&a~CAZ^hop4_wyba%h&~BB3tUYmp}X5@GVkw{F{Br2(5Yjwo0 z6oVgJcYo*>1!z46yz*o}PEOTge!FHf<0+Gra*H!2_|h^H^oIS1_h@=d7tJqu_6g|R zhj`s=c?DEr0Fbu+@AOj0A8YhZm(q-Pt+8%)*?bAIA_ryHHoX_jdG|Y#h`l()lpxob zAyb12YcYN{(_pX91&Vk0TiV`%WS-@4R?+|R`kpGm-=X-C>(MR5E(vXRTn!;kV_NL& zQq&kP`dbE+Pi5-9ZN<#-qBiZNv7!6D%c~?=SY*Rdm71>ke%5S2>4|x$elhhcVz)2B zbEEHuVWwN$r%I*jpIxU-Qf>;Li{;S#1wW}K6X|fJ(y3K1vNOXX7TQC) z=fl9pa@oIUXKnUdS`p^(^yBIiufuuVDUyeRxY9zoA+bN!%815M+E$Jdu@CqTH-cC_G383il!SoJ-OL)L4l5KWM)_XVX^Cdcw>pHzhhPNK&wXJ*HIf7U3f*Vvs ze}-Yih^vliIc#v}Q2q6Ze+l7S^5WrNN1m``7a3TEE80AX>)RenhSjiAlOf;W7qan3 z%fEl^{|E$}=m!NByFAg?ZBMpSUDX#Xt_~bq1qHbs=0s&l*J9}sR;lowx%f1Dd?AYp z05PMaRc?hITII}Hd1rN`gme`%_LEN;h_&Dm-XWqI{>28qg-7aa%clxF8U86eTK55p zhA3nf@|8$78@A3~%?Lk6 z-RbK2b0M=8vgFy3mUtyZeCRFkdW2)+n@PMt4ACO}clrwgFZzQ5#G&@^&bQ~`H7_S_ z8Vd^3OMCpnsAPa_c47UD>qm~5LbMvLH9hjwsP}2S$Gce4JC|e+eZ&j303M`4r^pbK z7NZtN=7~h?vxQ`g0;m!U77tk2nzi%YJv(WgeHJ}r!QFZqm!v{RAQnpr+%#5z^J#iu za|Iiz2Lsb~uWG}eo=Vr);^!jv(1>(0u6x!eCs#xD90tBHe^`y->8p>2A6BWRWq4=_ zZo^u{(eUqjSbANiwGEXv+h$?e;~)2Ze)0sJc%e-+XB%#q_dAo%LEeFmn+2eIl$rdZ zgSuOEudN{RM?f`;k}ECzLLBbzz(GBDAy*DJ;eESC4Rk*rBv91$HQM=g;2)Vbn}pgw zXus;AlWl`>y@TLD;G4?oi;a!a(tRL@PIRaONXwM(2u5}fM{7L5dj z1v~M5du?s=D4#Mcm!En(qu84m0ZWi*uf|kQ!!+N&HnJYq>M5}8`rYC-UKyN$%W1{^ zMOvf2r+|lkf;%TNAtiP<^Kse<59#lS%ebxzy>or_rMsu85KdV&q!IKV$pFNt*Y#TM z$(2qu0Vdr*Hw6mtuF|X#^`tqWzel|GGrY*z2ry``|2t69QaJz%X=TZz(b8<5_5C}~ zef%1J-=^oQuEQE9rN>g4an(~Q`f!nU0tjz1(93WnR`M$H;8ky<6Dx<`Rj9`1BVIbD zG!~t^kMEDHJoTQtuOM+zp=<=>AOwpC+X#$Ljn!Q*bqTDv&HocDnlhr~>(<+tjE1VM zN4Ij^K8`16ZG&^$=Y0_MI!YFAx3lhgKQkEWP=cK4oMM4${p{w!^3XzjOv2967*=}9 z01CnhIjjZHh-!>Lp83I*@HZNMO8sHfP#e5zA6;S)MXe*TUU2_~{F%V~ zn@Hui*!$JnR2j6)-v;j3Y(J)jAcH;O7}2-D}R%pU$ao;c?@cY zmec-J7Fi^=3focjTfhAGH~#m`fMM&>w!WZ${q{Yna6>?ZJ!{~l8I(AA5QvSIX~{vK zvzLQ6sXf*q{@7=sc70{kx?K0)YgL4}v0V+YPdpLhK3F5XJ?!}W^?c^s;*Xa>6tS3$ zwZDM{^bG>WtR{`QTD-11Vf)`3q;UYFW z2lV|Lstm3rs&%V$d~E-Zy7vldvVG$}QB+W*N$)CEdhbP4ng}SpBhm?>mjD3-1f)xs zF1?1(Lq~cOkQN}+gkA!Pv{2v8Z+3QOkM{IGdyvUtW-{|U_kCU8@)cNK8<3u5c7K+^yg2ZIrE`bB6_`j zPb*4BmpWH&54g9c9yff$rJ)3vdb>#Q&CR|mN9ck$-X3O4aEc}$F)E&Yhks&}$R#KF zA(*Hb)NX~@%)9ru>C*d{TAH?iM9@U(@l47e9 zv@|y8<&rrfI!y&KbX*u$-RJ&q#BqMxElocKQ7?aQ{Xpqy@Kl$qwZyB=5%!mHuliesILm0q;Sl=e3=1(61MN%rwX0hL5j1w7jA4b{Acs*x}z{_`dOSMgV9E@YWh2~Kzk0teI{SE1uCNN{~WKrkQ3c6{= z6@G_K+0RX(`q6YUG*BlPiseH>`x)2;$`&mxoahoBz0;@~tn1?o;K>u$4RnPT?7#XI ziG1o+I2^@b$iU2;K;G&9^Ql8^)g+)w{FWofYP~=61cp{Fj}3{KcKU&^ShL)xYXgOm zXgaytdOchg8ieKGBs=K^i4A>3sKX zJ8BZBTH2#@)-~JH?GXKaA(=G9b{zA8rpt*WLYjfF#2+7je!Pc|nWkW6S2eR^hnx2@ zGK@0*F_fgMg&8HQd5VNC@Z5X-o90ZCSE!+{Sje?;T!F^brWFzr59G5~@Rv4WzIcbr`I+5^d7xe7}J?-)S2xB>w+15*p^>H)pW0SKgDSWX%0!UA=16r>W3Vg2lve~ z9UdAIZxEzAi6r#RhT@ALx=3(JhnfL_g zy{kKA&u~YV#0)L(f&R*T`^s>WF@^*rP-G0;FfRJ^wNm(30D&~k#@|6{-HHcIxoI~k z-Kgp7j*(Ug>QCnX$GKuk|6|x!vr+DvszrOZiU;}L^RkoCck> z9pv|B`bMpEtQhc-BwGf%t=j)}N!@z%M?j+KXot+N4cnW%$$78$x{WEF9q^qW;8%fK zbRVzRT_aXd+v))Ua|8`)RZ--v)NI$=h3!i0G@%;EFWr*JnwBmIlQ5M+Anz&Qu zzCC;S_V*oAc&}BH#A+I!L`d~|)1Cd&4+%Ep~E$95y`$<>%PmNu$t zZJ*IHGl+CSo3kmI8+L@DQDo`%9)OZZ@FA|)V zHw!i|8!`U)=SV;0@)@;k$MfKD%o+L@a5Cg;h~ zgvbI|KUdoiG$>-EAtTZ5B$=KETwU6ik;^NxV#LMm=AX65GSQW>I5h z2hko@SIDY~YuN)fiMOOb-BJkx=NApOEroD0n8~56&aO_>F*#yCAfnRWNj%1nzGs>8 z{0EEjCf_Fc`>kQ@Y3&&&Z^eFfmPX@I?zFFI@kZC=CQk$EQs=w)e*_CBNa*()Zpg|W z<9MZ$Bu2ySm9ZH*!=r!DIO^F`)_WIFD_l~+ff8{STMr(2-))e*Gr)M1R<`O4ySVQU zeA$+&CSH5Q^m196o=HC^)N-a8Oo=mt;sP}=rBEc!RXqN&@1mJon$1`DV2hf^n@=62 z(H8e`e(Qr656pu$eLWm_@Qb9EYr1Fz?DJ*B&zqs=JI_xgPNi#j3S?BxAyB7RBho|0 zBc*9a$759uhV3@niUxB&LX=?n`8!S=l`4KJuPQSJiCVa>K)J6~Ch~(aZSL8#`*J+t zFmPFqOW+ghqw9K!DJ{cT^&19D&dR@)>L>l-+iI<7vzDus7EE>kXmMe~<6r~8odWu$XOGb}E&KUn#_GUTGC$O3+h^TC|%A(}G^ z5vAQub~M!)<#7x#gB9#A8)y>$unRQa_nPpBSW$cqikr($nL);HU3Zy{T?V1O+uORX z%Kik3Tt~5{VM7u-02^9LgQlGc`5Q`k&p7& zLjPtpLB|DNK$&jKXYg%)mUK;++pW%${?!+?glLM!o=nZQA2c%&ye6G$%s$YvulQ|o z;vMr|H^rBkfm`%=9Kt+B3&`2P^Gdw7A(6gH_fI{keaad-GHY zs|x!1AHnPZ^gn{VUej?*_u(8e%mv(ZEVTV6=dZqOr!#D&(@p zOO&+Vvh>#L_8 znTP#Z>m?23KCCMZaRv=4nDsZiFN2aNbdBNX{+2^flngn&id@2^WC?;caa!||U#GB8-3(U;+Emc;FA-@B-O0!^LJ_=^NUXa?RrBd_C zcQ#C(;8vTow=y3m^hw7@HnaTMXpubDPE(a@;x=}GMY)mvrJy+oYrId(?4;FvVw~U& ziwI_Dp%DA@d~b^>_t-u~Qi`gP$j&^uh)|kfgR6^o4s3!KLA%!aLkPhRBp|#HE}r3= z;ln>pZQ9d)pUeM!%k^{EXZ=DNCK_-@oy7S>1riXi*6YwmagcGY`_m@s`VF0O;6EFo z&L1`BgekDr-!#AX)*9w}vlVFnBT((0nm3hgCPl9nkNX9Bj*T`fYh*kOiE{ebS!X5m zW82tV-nQ;li|DY@$oGGFqnW_ zt-V}aoS5pO0XTUqY)w+*%=Dx?3h%Rq1he$`S(hG|mX_Ga@x6Uif*3!w-hdUNom7MlRI@h`yz@42Qs>MHyBVj?O1 z+q>QkdM1t6emu=cgm{K^Y&4yeRG zoguf_JUNU`B3P*y=k_k|M614WRw8yMW`C8^1L$9yOZrL>xc7 zqSG>$*|+n~%*rh(dLOT|NaWK2@DJ0CLM3h$VHRY$y~vR|&hOb#_?pG`518lkvXB8Y zD`0_-yf2t#TAsVm6y*21nKmmZ#^1fa_(zPKZ8E^K!zBo00M#v#MhG;g!?n)aVXM7n z_znv5u>Vh(@GCLR*Z)sb#Q)#F+5Sf2=EEe=M16?rNZ zdBW5BLx4(^?Lsj=*$Vkb3+hDl(vu9^rP$8@2x7(8$ShWIT%&8cbLid?8pv3qhHTY+ zY?L|L*ZdoYjjz}sfE>vdZi^x6L(}zUNTy5r8PXmwkChc9tQ3EWbZ6S;Uw9b3*{o#; z_J(1=-A^UJ@&RQ>#vL@4`0MG&_5)U!E+a$I(@>oSU6}Jdo4NzR_&F{ zot{`0luXKD6Njwm_bz1ZG9qstR#g3U*!(o9#EyeLO^Jkk;s|3;Y$}4fV5DdV$WA=s=Q0C0Y>nN4={B9x{@t79i zac)Npb=}wAwQ&E~Ol~tQaSB#TMPe4z%X@gE7x$0S+ZvZT(WMi7DAR#95BX!=+X59> zB3fSNQKFAT^4flz-Q?nWU{$z6*i!xbSX$qH@J37R294MH&>)oRM!jKrU@fAiFu}gv ztn)+V(n8f+{%FRfX!;SE7X)952sU@(j3#C0LtVx35&o;e{A$aCGIWMi7>b;7FYEQm z@w*VGxAd{&B-bTxNIdD-8D!A-9f^`6*ECQ9q8(@<)t9ntxyNV&ko7sWa%w$!8)rJ$ zAeCO+bAGrFh0OOCj?x|A`#jwFJwA`q7zxM~OeYccreJz5r`D=R2aZ z*hl5m&g~bBz2b*hn+AesR@vZZW;$dOSHGhA%1ovOpyFHK?JvtZRrutKH+w5R*$LCP zqL~eihVmoW9v`B?N`7w0TtTK=wE;$PKQjETuR+bjx6lCmG|gQb`S$`U^{VG{i5gj@ z>c8yd04aM&cPClmyPA%r00HuHK?x;_5u_DbfOizWVFK{+ZU!U^#PvTdL(tHpiP%Bf zL3}&cR`FJpZpSkkwe=XE@zaDanxKx4toA>cfyB)Nu^uxF(Bj5hCe6Rz-^DG+rsepU z-WemqXdW{=cGBp(6P!Z7-LZjra0zYPq1JFPcafvvD$9IG{p zEQ`>Hf9oU5HXxz77O`$)k?&LI@=U~wG^bL@opFa6%fSo~Rv?^IV& zee0oVRDXUW2+ticinI&+kKjGlMGB@RyVU@EK*I0FL>MO~yYu|)tU^&7bkNU6-oYf; zjfAjnn0CdyQ`8r39IY)N6;n6J`0~BadgQl@Ev1zp2rwucoQq|9jms!?j4i$4X)x)K zD6tUSG-#W(*RZ_&)Mlz7N=%8{rzb7#%s#KF$J!TR!u7)Y+OnJsfptD~i`!ZP4Q*v< ztihi;v&pnQTUic_l4nX1dq3s?8B7#iZzeT7Z;NyE)A#mDkz*BuIM{jdENO1;P~Y+6 zwSD0c|3Wp+{;Fp$5{(vLzN6eSq7rw#zX^QmFAXj1Vg|pCLJ57FAMm}hn@EpW81GK< zrWk318%7NOTTBfbbywc*<~_?*6e8g&K(WyR=z=+bVy28AvV8MH_@C|LrO--x=&yKU zndTOHFll*q*zIq=)9dwA_oW*i%q+Ks4&`wAr%Wh3r15d7b(iYNV-Doc&^-4?fEm@WdO?yCZI^B$Y84+&lEZj&i<>K3 zR`%PF!x=h3nv^JlYNY;gs*nh5nyH#DhHkpQYmxuV8nxfO=sIelgrbXvLT`pQ=Ujj` zF*47SMebrbBD#FT9&%iU6TFgtrp>oH2?`M^NohN+K=`h8_pAXdZU;Q8%+Ds{+2}fK z))T3A?`Scl88-5;q^6Vcpdgldg{C6=eF|nUbnC}({}tx7#H3?4n|#Q|$cz>yIJ{_2 zPchq}Lj0<^bevHo;NSPJ3G|`9OSIcevvFSmBOxv%a$0@^v~2=$v{Y6Dz|v(M4mia) z|0}@~nhu_MGQUthx!^;012cIEe-Zp?7;$5TRARuTpS)>!=JXgDFU?b%FpFokmeX}a zy!_Ne&tI7gl>Y1)FfXXr*TR_T!#Gpgx{~4xEZw5cHXjkcOzRYyeb2o&6pgq0(P4n| z(M<%diX$!@A@wSpgFDZk7OJ%_`mrwl-n@`F(T=^=IAA;v$4mzTY4_#wX_goJf_wzx zri_JhpF(++`I0i0!yP^v{m=^hk03$(8ZCrGpQo*79yZG0O<;y-c{#|h=tob!&!yl* zsci{7mSS*py$ID-hk_fD_U`7nBed3P+Lp5v9fs-AGsFiJ{b7;&sLjMcQqjac&IA?k z+S9F{?{NWXyv3WvXh`E`%92WFqgFTH3y$g_2!+z|GZUlgd?cG_inZ{Cq2KKs>y?Vf(8CATP|g8+!uPa5J8yd zKjb`in~0Vmv5Ls@Xq`SIkqeAAbkbjETN5Nk7_#uUXA*SZ4UVGS4c!B=gIhI@E!vWU2lF z)ive@*n|EwG4ICAoJU}dV$UFaJsAO9X&%+`8k`5F`$e9EEhet)Fi^P515A5ogVhII ze*YC+cq3o;Gh8~FUwrJr33u*E6Ww#$4ekmWjKkqEGC#&t6;cFX#Ahx#6Tb^JJ%Trp zROyHsL&Ps_VUeqHu*_n)OuDhe2fRmLw1Tp+W&=`+#JE5Ru6{;4(I{IJ=9E5dLQ9iV z!N#@y!1g}^;vsGVPe6Y3zh!YRVk9Qoq&*OFJnj(e7G+R!+LZT4*EIJ=OwHq&7Ugm> z!Kj+Ms&ZvO*RMA1H2+F@An#%y#{ku_aJ(jk!h|r-wCiT~jDVY6D8v%QkyPl`$>8&# z;=+9WmiL-KAAiM>ga;JrB(LN4uzG`x!MPP6BIH1S^fqGLpJm`I<7acqAScg9t+rR0 z3?^?A%XcL970GZVH3xU1ArC<*J+M`VHpW0_$`KE7ssRos-d=rivUN!_X@yqklNtWA z*yGs$2x!Ewl~~`dAJERaJgs0h#Fta2W)r`5+-l+c0yU7YbC^9&Ak>Z1J6*poS zcvT>ZX+?Hb;Qhb5{R8wO0A{Q2SBg zmai*EDJ#sn5yu;ArikH#G%0!XrdwiWb)@I5X90`H%`+ z3|vw+5|2cqye&2I90GPo?lJPn^9pf0Zg^46&ez@eW$|>|Lo95QK6a%!Q;QIKtk4lE zXt_m=Vd~1l-e+YrIcc<)Va3t*?Ms`vFqWia)17ENjUcItqr+`>cQaWaJ zPx8$m-}ljoxQ@W(%b0slH737^^5LVNLyFI^6D3%+eoD~f0Dz-y=)1UW|W4B-+M@m!jp7#>0&`nvz{AvuDkEVp; zvhj;lrT)8ToilbFa32BLX^+jHNHh9xCEQDVl4n*Oqfe4mNdprH5^2{!bjXQL6k1ez zt9?e`Pi^t9REOb@^!LdgE5w5pt_5^T%)$C?wNd6Rq{T}Xke-%VjyyIBXDY3&t^${2 zW?5p?!%Y9xO>fgHsq@6Pl>PwiM2v$vptV4jxtgv}PY zBmoGkyUnIo2Z2`}ADr(by#K0ufQ=59tut2wGt2c_e?RVDej67VrJHA>t0XA=81ZkR zI9c3(IbpO65_DONgZ8yeMxw!1*5z-m6qZT6Sf!evPcLV05@@=~fOO&f5 zXLOs}R$B0=h{Gsd zRxye*?Y27p;Z{z`u_B1eQXeBqroZt6uwDNcxy)OwB|d8txY(R8ZaDg>ZT4sWI~@L% zJ}~15_1S3W6Og=Rxzpr}YKa;pu#O#Jc2Mw?To0K4h6_AT$IP8(_2m5dUpGTZK;+S0+5AEAIHg&N@+f!Wh3uo2ERQ8t2EPGXgm$Jk6j|_AyY89{11Kw9SYS zcINr$8!5~NNC~ABUfrZxTi--?$E77WI^@#OZaI7sl{z>my{-w$u)insxtNR(dix76 z4N^LXPy{pLt7v-PWf>-NwS?LaP``hw= z1p6m(P>EBiIC-lg5L4fUCD;6>;~|=0IG$01!&gpMdPc-UY5Q=4?rf=5)eKogaon3q4Z`Fewy^tQUM)szu#BsWex1nkD_GdE+1q?G zSQu&*g}TSzjMZ$4B_3JY{>E+1@pXZN`AaoF+9}|{!e8t{`b2f z|3kNz7eDc6aX^&dg@Y@0P^@~kIvtD=)Pi6H7%d9FR<<)lx45fs5)MhwFnx06J+Awx z(U@H?ZfK@KnI#%mss5$-GvzE5di7WM$LXvOZ@mcBacq30+o!vpfFVT^NBj(13~Epg z<6l&UIt%m42>l!!=%XExVbM4+KLAnn1Y``vOQ~Q6qnxaPNEM4Wcc2&g_AN>3&9G&K zN4D0xv>j|{(}{TAy0DI1h+pTG)0D;O6l?c6kkhb4MgzfnQIA;h*+1+wIsGeBIW5uQ zTBut&&HVHS32O^$lPzgsx15sGag0te*kBsXFK=d3iht5xlQs^8OD17&&)-vCPbCq3 z2`#4g@WL2U(`mk8WV+0h-D{*>1Wa|EH4ZYY5Dz*&oCo>^}7ZGhP1Sz?3|sr=g@u8JC**@y0q zjEpRRah|GT^?+vxBLXuY4t}-1BXg$;>{elX7S0oV3%|1XzG>)- zR{s?SEfe0n|4k9d*gL1lf@3nna^}ZL1U;EJF`GHR&HHC;uoG*|=_|uvQ4&qRmvy*X zy@%p`yPjg1*!3Sl$j25##ZKfc)c~XU75De*f?4nD9}jA^!_=1ve=z6}C1ouXHpJza zrds@r!@K)!`tB&FH>Tu;%9Kl-FzL2o2#FX8LC=2Pb=y20i1}P&kdVd9&a_XqI@G1c z$hP)R!A4RLgSIl8>2zUE<;eIf@Wd?`cI>hIr)BDNtex$!y~?<>p*NB9FFocP4U_sH z^;b3KFDZsojh%to85(e)O=m;SJr2?MVZ2}IN5J}5fNo40SM>}@PHFbK8<8U-CkviZ zXtKEftcu-SjcBf&#Pn&2q|A*09k~ahf|Rg{9M>#jN?S@0f14y{`TVY zulwW67mzkS6BO_Jn`zg(&x_k?>qEVU*Q=z{WFdPKLU&wE-fsA|(GHn%wJJwe=9$xj zh0wX7h?6uXx;qxIE-z>p9z7`G^2(s}nwb(QKhevCZ_<1qJ0ke=M%0#oGw{(-rwfxMs^YnnCc_gqWNFUo*v}*H(wBQM4$iY^K4e`A((xJ)9KSg zIHf<^OGo1c1?J{Ymo|0{{Uwxz^u1}iuZLa(3JXgm?2AT=rlWgNA%;jsJxUe23{u0TzIK2L=Aekod9mJCr@%D~C6Mh$Cw@i@1i) zcDSDBIWiL8CVH~#Y|3lL&9%kt+l#svs?0!NQdrt6o$H3|{wl8l_EDn1dFjkT8Qx^p z2o$Bisru_`$4%Je3<~MBq{rllnt^OInx?;G!ekM>KO(IMjh{0pneLWD^0L(IKSBaOFO0g!n3BjMMq*iz$c% zPh%^snSM*Otuf0ZnjgZ?DTrw1rrwFru)CT_0Gk2=9*!CzeA3J8By%fXXGp?$Y|`(dqFH*mE z7&en4sNhihAMEo%xn(Qy}z>?|j^QmqmYpgcRLdZJtu#oegq{xVs5R<#cUd&Qq zqLaW;?+y`OVr@slbZ{!(UHIpQ4gcJnx)Fi&`WiI6emTMeTBpb`noS#~Of$d98cy{mh zvHS~U{M){=UOI$9;}z4J=Is%bAxyaRep$NeN)aI;OO-E)qX2puPCxe|{!JxMZ)NCL zf=j?ijrMqNIRbMT@%<7(4l zQk}k0DqY$|a26X%(mJw75`X0QRCsFe={MnD!(19YsIF$ZF3|G&EGP)vyTguW46%5i zzTW^96P>RPUu~7_#rco^qM>*D_?X~~AZfa7pQl8&A+0srcgm{pkPfeaH&FZ^q*VUj zbjl#F4=Kho#WNcnc|9dV$B>`=6=CF~>Iwm@vWEZbu+g0p&t(l9r_%-+p7~ZA?xPeA z`=6%EKV%qVQ#MA)_;ZfK&X)AvzdEV0_>Z7whXIKnepe}G?PvL$I#oCEn2`Rzle~?( zaW-hQ?Ib@U_fLi&)q6krWQ`&21e(_dEMIHn@c8PRPbgA4 z(-!OpVN$jCv#y7Kd_y}L&fQy{m?e99A5@uMtHvD~nU0 zOS@nj+ov-qH#V`CjRb@`F>Z$!x2!;n&Gs4|xc@R!mT5uccx;RGEjWVSzW?6 zA$2&14IOfj@qk>(=!&H?f4USM6aRYXPkIFB^SX@BU&QLPjR};YT_f(ewx&yAqn(BT z-^9+Vpq+54J@q-tH_r*k2$%_8ZHB@-%GS#g1@Aa+q^9Jp%6tD>TJ?3=3TwDl-m0sl z-Zy$+9r@Phe+0_OIPlwbp@^&Fm>Ve|>G*hj`!lZ00t7Sl(+GoDb^4mQ4eq#@K^Y4- zNRS3JBs*g#(3KWGR2NB9P{a89XZOio%JYbf|HOs`ED3piQHTE5X+Cy)cmVwd@E>QG}{Uq{}mM`T1a* zzNXsQ6^&5=K9}R7#l4bz$W3Vfxp@qJ%_X+6HYoIcl^UDa4*>EFNXeQyhRyEPa?a%t zOCg5XlODj6M-(j*HRxuV0$_&+SgL_L9$aSSZd+-$VnfN>!anaRffdMp$=Gr#hb9o{ zN}YQ5Xyw4Nls!yDA7f>ix-n*ZwPrxKbiEc}C+*~gp6&_A(IwLRJO78RkvqP_s%+nq z3d0u34~48_SxbPV+f^$6jVUWY&5~#d$dnqVTp$>1( zDKnX(>c!`Q)?4fSBAEv3x_$zaxAmj#{=~b%MxSa+(GGc;%hq{PU z+XYrN%~YDYwb!38MxQP`Kb0xLE4@rN>bRbA&}g6bv_vOiKU`5feZ%N8#MkV7Lo=m{ zxUzX_FqW_5IdNr=4`Wb{6ES>F zOaI`+Vxfk)N|R3W@hiUZV%YQ%V#UH_1vpdNs^dCb0v*@Ey}uI-=?$y`d0iU~48q6M zBhOx5`-X9AaHJau{saC)h*A(#`rUub{=f*a_7J~<$H(;WVQP5|6jPB`NJxq4viT&} zoDlmU!%FklBJPy04*@xt@eedS@HF)iIhW%$U@);~e4_qvk^32RG*@pUG2Ya|kSQcu zPZf4Q@Mk9Lm@s{|!QxYs@A2{Hf$nczZIUMc@a;}U{zpIs*4YsHe#Zc7pY1>AQZRk_ z{JDyB*o;;h>+3RrXvg&D^9h2Qn-Ib;wOFs5v}8A^N^nI0Y46aY3AHN?mI#f9KYeHP z>t7Ojf_vM4k;QJY;M6;@IwycnG46^)>32$I>x$5rnEyD}SBN7Qz;T|;QgN@GkgZpqLFRwelxB3YF z^;dA@l(A$My8E1^3s%j2E;~l;sll>TC{FsEjU$e}bX}W_KJK)#8`?%o;izmmFV65!ifc!2Mks24&XgR9;CaccPPl=`N`&5zu1;j&Qx zo$oOC9al#OW;L%_s?O=$6s!^C`D3uh%&0To4@rVfKnOD=pp02PmNK>^JjBwZ9jCis z-6O7d=*YsL=p;=mdXN~ZG*K$vyOYZ;hH;|KgFhM%YTY}fa&6%MHdwL(OiPl=@5Gn7 zNt_4C&%CPomK9-Hd94w$ry(NoxiF@zTtnPY>e*75o%-@GgH=BQ^>W#-tG0R!=IQ3- zrsytm5DXREgmplXWuk6*<>dG@T-;;JnNk~)syD2e-`jjNG|%`V61hPH38H0>6rnEA zE#6{Mu?kd*R)zce&BL~hUY$v<^E@Sge;I;G>{p_5#1r804IU5o6kpb1;2Dx>EKAE4 zi%j(wVylp1kvLi4Q{$(3XFIDj@Zgt@dDKnqI?<}zBrCx|j1t{bH`k3_$@}VY+_%s3 z1sF8UQ<~)+Lf=P`&gRm?y)?7nhAFGJ`lemEL!&_hTB~_Y8*2>mW+=9YU>Uqw^tG|8 zMD_?o{J<|aPPqDF8qzj8@Rp){vYUYQCp6=dQQlYWD&F2PK z)V1h_7Hn#D*v#^_(#(dPhl}_Fx1zUQ-W%#e_9Es_Uy+q(2b1LE)Ei@gO>P07G-?i3 zb+q$e@Z=ZBP-oI$qIz_gZr;t^2`xIwMz#i4I_i{Jj>!J8REK*zep3=pm;A;|`}<+T zgh$NzTB4#nR;Ulc%0}UcILa&?2!Cd>g3$2s3G^Pi@G$$9C8+cE$LoD{f|&vLIcMXR z&zC8wY4BUOqN%RjNF*fj*V|XSPM&;7EvtSu<}M0TGf?1lO$7ybKCvLVFht z&M2L))I*wb;;qYG8)W=>xR9()Kk>+z@v3Z{wiV0NZ(}ugV^glBn8A!i?48dyW0v+Q z{hiv3+7j-+bGe?acJX_-dAon=rAPsd=#$qn8N{DDA!G=X zB@V2`TfS(XwZ}MwHjb-Ky==MWD#4rc9n8)9>{_MLnqoNY^YBECx~&(3C>@$%5c!58 zWF2C!L%J^v!1I2c9|!}aOo0ezS}r4E_Ks)$dEmgrG5*i>;Zf$`xp-EpLH)jK5adj= z%Cep7N~OzT3g|N$)T!}Mk?iad1&buCy!E0+@@UcH+KO zz9}{myy(30_YaG{;!J{vjml~t(u?x^LVxO}tzaVj8*`sA6$3iZnsO0%XWNT#Ef83SJa>&t zeoH|D<9?o!H@Ba*f#P|ey38>XtR-<#Xo{a8>i$no5Cs3P>E+)4fNs@F6l?pku9*Vc zX=Tk-KCF^v9I;dy$@luYM}=j!VZ6C_1vaIoV?pH;>2OSiL$d0Vn4$^}44-T_34ArE z>z1SpDd#UwKrVWFKv(za>MXN=+M3z7e%cEA?)R)(Hi0h@vxXlr zpS`=In=Zn{1#p!VTBr#ewKNQFdw;lWe}DH+r_tfZ&C}~AS313S5}5h8)5WF`vQ>eV z)Mp(6f^d~JR;i$M=^i2lzTBxh0UVwA-1=1G^^TL^;xs}vOg{{{F|ieC_%T71{OyD^ zG{xVNJUv4JZ&DFh_G#B1(>|XwIRK#Ditqjoc?I>QvT;4rZs$83|hWHqMuxA%VQ>uSgw?J=-AeeX3oZ?VmR%vouztvCH^JrVI` z$2dfy@I}3+Yfs+>dX%e`zNzJy|G;Sfj^1M6O#%@i;a9#;+$EsI>PBSF8*TJqRwAVF zC++HzCK1}ro6``+)AvGhv~nPS^P}h@vr!4itv^65)>}@A(orm^NT*vz^s!{xYUXna zdcyDoKF?N1l!F>|mA+1vX#4I_?pkS4SJ{qX_WEQ(9;w#-gZ?~bMS=McG4bbqk-Xv@n`)rWx$P^#I1=`@+?7*|9U1X^fRZ+e)X%a6xAU6x^Ek;kzeK%^A| zz?2b}uQDaRTVrcCEAe z>66^Bt12y$KNl=v_+}bW;PPg-$)wBDVkChNw=vXp5*fiK1KVvaNLI7oK) z7{JHJyo2vqXZnn_hlUjFbumwMEz$nWK#W<)(y1R+LvmeEuj%cLvR=C@Kh)o3#-0#G zF_g`6H(<1r#Iq)2y~h-|*3gU!D@|R|#LZk-js(YnDzi*>O9HZiVGbnVG%sdntR>!h zH;~OCNU9SGIh$HDbA%K&k4LNj%cbf&!8IT`6C)+A89Mklw{vMA<0Yx9W(eTNL~7Ae z_ZE6x8AK3ZJxH(D@(J66ru>Iep-qst{gOl$jZ>SAGsj$E9DwU^*F4*h7ehqblSEm! z+J$lX(fde_Wxa;1+|;ZFqk}5viPg|Q;1i5YFzbR!U@5*=76Fa2D2mifDL1h&%^iIW(-raS4>uRS2Hx5t`?ltc9bHhK43!P1@2z%GQuHV zD0DE^sQ+aM**?XB<OAK?~Mw@MeyT0YJ&JyxK)E?!dR z`M>NBL42>sSBwvr>kO76%%71-pF+(F+r;j8(yfVm-J2kD-iEsw+fs7*iSu2waT?5t z$jps+@mKa8ZikD$eSr#HWxQrsI#Jj5P}SwHuQ!1kd&iNi%obFr<0$Vj;%&c%`dQcG zRFkm>k~)4)Wh%^Es-KwZgzGLJACVDDT(HpWZp-`VQ4&3VGaqZV<^w=aAH%dKHZrj~ zgOm4gMMG<}Zl`YK#qPy-jP(v}nan@qn~P_{-CzV0Pe^~&65{8|^#e@Sh9#Cd(QZA~ z7_3&dM+cji1*bO%WNC6Pi~P|x8tx&p|^yHq;xf_^6@15mA;;Z$-6nIxS_b71owiRE103K6fZcL`jIytm785%yJQ|jL8+%)i}+R1pVI7J(6RBMM6iU)}maGne%ILw^q8=2w%=7-Cw zAMjfqskCRB3Uyql@R_nZ#PO4@Y(PEduygE4g`^6hPaVb*pGnL8kiZhI6t;hGVmjs~ z5vmm*Q&@-_DAoJOf#-}5V)y$_bT~OR-X5hxI-6tTg4_A62xs;?`4M(?f((KpA*$xD9FpRl}Nn40=Q zR9VA7@Qg^jIk|jv$mr3_+aLAGDj}UJ@7Mez8;M1FdrZB&ERXIK4_9*G_lJ0;!563} zvh9o5By|HG<~Ss*-^h(quZPMB@f8sMbAbq1xvi>##65FFB~LUgArNz zH|WkbT5zq5pBX1QS~sPrdsHOBEx4#jCpe`RThoOebn83Uj^b16kXb_gl{eHuM=Sf- zG^V=);`)*y%iydK9Wp6)$UQi4Y>e7O2>iUREk;W;Te5bTwL5?Fd;YM(O=2%L3dary zYi^$jqixiAxO;|BuEo6E??)^jmd!Ticb3JOzqZc9%O>6=SXWyU6@@X)w@sQjn!h|T zX^g9+ZG?{P&jJottB<%j&L(>ApJGZ-#|Bd!nkROB#+J`f+xZS2PGt*!hO;gMnHzif zhCFCyBoluhMh|E6eXS(`6xNBI)2@<0)-fiwlQf#t7NUo~_58jg&4gXcO$t&M;Vv-b$6|l;_*x!RU zYYH^_NhdL4cFQof`|Ec{Fr*c!g@2{D2Rb)IVf2ktj;92B#iz&}U&2k?v_#-~h|qd> z6!e}&EKsKp5(YZi{Obg+&INuEkeg2%yJ2&wedh2%Nf_v&46L0C@C}?+IuIvPfvjN6;?#?nOj;K)lTja)_`L7il{`bFL za75xz%ypU0+~Z@OZZuUs&R9=+Ao=n3nG4X|0!+Ec2wc2+P(Mfl7mA?~H~<7Nku1La zFeH9Wpf3_BF{TQ)o^}HHr4hg>1>xYg^IePz={XYd;=-ZL#HP1PV#%LQ z4@*ug-oSlKYll?JS{`$-z0wJ}D8%aw4mPO4H>^q@81;09S ztAW@y=Um(lt%yCD>XJC}R5%%=m#^No={w7i@u&n!bwWbyf)=gBx{Qy4&c!BNK?pL>Ae|li48vtFyx3(v zbZLL#1D;p4-YNHn($1E(78*`LgaDn1JmoG$Y9fOVv)R@7Nw?HE(^(#RO2eiwPBMvB zG1otf#!8IZ&HkdnWs_$^dH6q)o@lOhf3{>s-Hqk16ncSOBfvo;N$?S-FSy|$;}13+ z47I74aDel>I1kJ4)*L&69r+CRwL31;Ah&l)b}_)a1P4ude=etz9G*9vS`sry;P>vT%8gX&2o8yG; z_Vjs+mng@9oIJ6U_rT&=~OkCf=qet6K7UeE{ISiW>b zLPF;f&C?|{=CSc(J}w_JuAa<4rCZ-+Hp&PkztcJwSE+|MQEwVizKQdYX;7oLW}X#p zsk&gZcVZUd(YV2Ni>*fQ3&~xnSyykkBlko(vC)GoA z))v%f@cIkf?;iWH&B@NLi{WrX&FXzkA%Mkb@?Eh?to#9OaKfdb*KCrtbhWq1gIJzY zTor1~8;!vmwHv^a8hV zF;M!TC-4w2T&J>#O;FF!x~rizCnzW&Rb9XYP*p>i5F3db{#PUUeGr3Y?!KldU0e3E zvt_%aphqi*lg9GugAWpogRoz#h^z9O3U7p2i~fuEhNZd-*G}T0Q8djs#r28JrThg3 zmc2})0_dx_LaBsaIj7@|{7w%LT&l6<5w$k*etZrb6cjVX>-MEoV-zME974C%Ih&q27+RasN3PM4DzQa~ zBA^D~7Hs1BHTJ}R{qNq${>4@-PUqrdX7;l}@QgM%7I+RcF zo*naV*P8PQd2purTb%5mdcR^=&8J~h*s1!_uO0dx><#WtKX59wAyA$sY4g0{DrbGU zO3lo*F(~*_PN+|k65}*r$@#G_@bh+ck#n0_<9b_mErkz&vsd*nt$hT46laYRI4Z}9 zy!q=Rgzx`RXQq+F^73tKguJI?dQ$<(b!z6{@-0f$*KBN8FRqfr&soE7agjPtOcEX% z&Kw-WZHQC8*uaG~IfgDvQsIH43*7mcZ-h(;2>xeo*?KR-qTJ%)hytCvl^TrN{wQ)}*-VoR+BVG@=ZU2M$)6k81VdJTlJj6!Fl%^_mTKDZQ1N{f1&Nt1SnFS|J48C|7_cCae-6Q{-hS zUf(HkZAD&;1*(4h`uCoG3VNso1p7s zL^{n_5pUg-MS;0hK3=*0yDPHOG=kAs0%^WSURY*hfo-)^8NTeoL0Xn!NPG3|KtcId zLGBvtX%ddP)*A0dW9!K$qie31GA(Dj_Sr+5WF7I_$(Uu^XFbbO!&1607$d{fumyr& z5XE(?p$b#i->!Cs9oX@}wPuNkapXJtL&QTsfkA0eGYnRdb*Ox; zdAhQ&$H2E>E*&dfKJ`pRb6+jk&E%3cSunsY!P*I9!sL^DSU zth+Mo`y_iEpG1 ze+bfFzPhWMT(|OLCM)7^@%<9aj}W#!zw-9H0o2L=2Udi}mHNswpBb#;9v!yGLKgSK zE8x9CMU;`zXBLU+48nA=c%}FqMu`WeEo=7km5CWwS{h7s@vUi{=Vnj{?61%QdrzmNv8<-yu3l=&G5l58LhtJ*!nitkw%wxVKp2Zl80li)d?-&2dIaJU>&n7OltyzR>&q|^j?Hm>~3{A275 zBRVKjKz0qCsBERhLo1@4)pI|SmYp|5NII&MxsVWQOMvrnEchQB2h`5Sb`pSFeG2@l!5XtTg`g)C2?G^%to}MF$hE^WKX3R5Cl8YI)q{ z^7qGAJ8SRzJNgd!CLOsSef7g?ZCRguah^&r1d4;zWy?lk4y6X#5+HdAqx!76E8(jB z0+zPIx9W1Dm2?*bwQgKS^@^Q&67~8{jIF%sSM32>cf;4KYh5r8D7G-(xHW;mQJI?( zYkg!NL(`{z<(ujopXza3aPh$p#kc|N&`+R5=s6XOr}1<~Ggj|HkClg8*X>N*b7fnf ziQuz$&i7am2kR9F>rIKPPRdXTS5?qz2+(@2;sDZ9)pG~|s zbRIIuanB5Mkw?xpcdo?gOd?9>l?N1E<*_$T3jBSL8Z%Y&Sm`c>x*yL{6NOH7{fNil zXe+KAe@FP$UlRXsMc6j$iHN+$S^u?xf0d(Toqwj354D7@Sw{Ts$wEk8^^2ZG-c(k` z>^@}I5+)a=qmRir5!}%0ZY`MToBFGZP+ZtHxu5o+UL0r3_HDT0<{LG}kAG;++1w)( zi^zoWGmKXXH1;Q^`6llV`GZU^%tk8Ql}jIP$F9(G{Ndn!ES$LAa%%akXS#Q~+^G1{ z&aoEWW-;AW>80X4TU!QA{c~-Lz8Mtpf3kvwj;HKi-apGhJbvt$N!;Iyx^$%xwW}xO*drd_h-fj8dP@~id2b2q+ z7i3%x)C6m}uS=_ZE^C58;~Wf#enAemzl1Zn_oXYJQS_W+olWlHD?&4J24DB*u<#=} zVX#YST%COJ9-wR$!SPmW=hwyv$NRO5Lo3l9OqDLWU~&Lx;g;5!t8t48Zf?p|Xa^D& z8s2g!QX44WNcPk73vnkH47E1|5Am=anNF%@0?diwPGBcCAq|Wb@*-htFsZ}N2mf

V&K0M0Mv4YBjPE@8r$r8aE$uGhID2&)TRU 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 diff --git a/doc/git/pic/p3.jpg b/doc/git/pic/p3.jpg deleted file mode 100644 index 2d8080db13dd530a3025e8b78f2bda08d593c82f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268865 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 z 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%0Ap^{pd>d%H!?sG3l3G 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ǘV5zA*uw3&sz#5~_SLV+FJ7;>mi5 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

u*Wn5Ny~P)X@A-Jd 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 z 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�JNf1&qIMC-fA>LY5^yalUnH=Kd>^ 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 diff --git a/doc/git/pic/p5.jpg b/doc/git/pic/p5.jpg deleted file mode 100644 index 3923ed02b955e1e8ef18b87bd97c526ce59aafbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187500 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

S)0C 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

?sAU_pj3a#^@Z@I?&{(FEQJKA)>YZPgW>Q-%& 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 z z<@|?cUUt3Pqlb#rMK>ko^~;Zv#y?*le+oK+xo#%s()49V#0!uA8st$N;Nc`q>Ok>m>P#(TOOJz7ltpZpVN9H?*45~I%QpuRH{ zK?T(BEBn7CaMDFYH#;&i<`Kc%{=-+e6P~rb=R4;5a%D1;)la@u`6Bu(AS-YxiU{7+01WJ~5)4XRYZ_n!U!J1;pmg*eK5W}dUWWT95}WV@W4nhsd!!=A&~XiBsNmkVcY zy-rc?1Y#_W&1~1V>n?GCbecNpe1`KzTRlka8E0fNpU4*>AiJtbGpE9y;ZCC&P&E z3w!6|fd|9qL?ljq2kPic+vxtr-EOi;BhO*W@Yfs3ZlqFj2ylIYO*-epz`Ru(``0Zb z-p#d5%&5G*+c+q>ERumg0J=R#>y}wnN~X=d7Xb%&iKsU(CfG%TGrxSXGyq8!Q(Mkr z50nsUa9eT%#haWYO+RXPR2d1st(ASd#e?BZ$Z$ZW8Dyj$FsVFw{9hR@y*aJHv9NQB z@1a;x4as^@Xkt?<4_YAAZi8;rSC_U9yy<%xam>lnL9NQbcG}E+#mm*SDjXV^FX8u z_H+ciG;BPN5Z>n(Hpy;Zld$NC`%8nUOl!U2HrI;Gy=!#oaXA;O_zR*yoW3GraRZF< zhn|Dek$13o@Q8y~+JTbN2IcC2VPcY2cq1uOQ0ymI2pbD^$O3&*+jb}%ok@P`HG^QnnFpUZjN?9~fEJO;XUXv<7p1xla{{tV42XAfj-dy=c5Ns2Iw@0Z)2`{erI z@IAN!B}uIutkd~~C*7)aXW(xda)8N6Y|twzYQ<47@c%9|JEv@Zc%tO_Hh z{a$4|QMu!JOBs!HW1LSX$jyYVEI6zxo08%POtM1hHeS=^1v>?0QG)@$V|~Hza6g>h zE!75gv-GK+k2%VwIUk(IA1Zv$iv50`dWRf>)U{O?zcSkx7%1ijWG0nI&8D|e#VkZvMJ?j(ri>5eHL(+ z$PBH^eAD&7oM`|BLysd~;z4KH;XLMghqsIs@#7|a(mj?5$nBpkz-|@-QVnfLXUHTN zTf2^uDA^DJ5z{a!(77VN1H{kT6$%}vr>OrK64wYCI}Cx@(U!{E8Y_VKM75TA>hK;|m=Bc`vEi66IKF19e5biW${gev@@#>lTkWq@J=Om!5Jg%yvn*oq z>?kxH$@vK@TLF>JyV>z(%T4dG=}?)`e5@Ys>3@wLv{#PUgxSdkptKDU8ebEh4_MWs z>%8%nD6_+QUHOj7wgrOD$vLMY=Bcj&&lNG530*0L8UystR&3#jWgP$dB_eaO9r+BKR{4`_ zk~8pT)vKZ$T-*GAqkjBvkoW&)g#7=1{{QlwD9Tm>HdX)U2m0^V{}FYV0k#N9kMskY}C zsXAyJp5e;h9;8rgJ^j9Ie;5a;G2ycQ;tn`1ev1`FdG4iY}w^@x`3 zxOnRJjJ$yN1Kdkr+r5MXr~_dieOU5-7s~lN^jkw%-Jf>zHha%kQ@vemlFy4uCRVu- z_b(X(H6}TiaskdymLuAs#dF{8LB)WeZ!te(-r+hQ{(dP7?G4Mw?VO}6X3Mp)-Q*dI z(e4SgQ`i9*16`WC0pSh{TG}7gKF#2v+)EO3w3>f4Z5D_hDbv0FN0~K(S?ZNSskR-U zRR2OP)%{LV*EGfSAotaT6Y3)r^O{buectt6TjP zO!@hFP*O>xw&>US1nr3N%cuu!nKs7ru6g^$y>Wjf12Ra*^6v#frc$gRbe7yEm>W5$ z19dCoBgfki@1h8MB7HXYA4`u9-QN1jdUSP#NH*SAybz$8VP#!J0HC>#KI5;EgTTvY4t z7YWDYLpiyItH*!l*`wkrH4Wu*s!u_RI5^)E^GbrekVeZ zNLNhr)4CV=$Zx5E!8+=#y*ZZO%PR6u$PE2gWB_}Q5iv#{$Sj+Q9mmQH4f;b{+Si!m zQq`ihQf%byI2k4eH4gtEZe4sQba5e`s!VpQf(M;d(0DBgycnhm!X(CIXn(i;)ykQ} z624JQ?j5}L*4Z!Jma^6Njm{s0vgy4qioXNsW_P~^@B-jBh#H3VJ2SdPc#+i_?D1}| z*!_)2gRYY*N4|+H^W@{V2O`XeZVj$f@3T^*JA@Uk?u^7H<2i9LLBrauH*%J1Q*b}@ z7oFltom*~f8z{fV4^e_)A6$U(UxL1Lr03C)z7CMPImK&j)w;YUO z52FEJjIx7F!s!Tsj2d|*&;gXanK3Nmrma9Jd+i%&+oTVHLXAZ z&bS{SXaBXm%Oytq?>bF$dfr>g>_(n8Pc<6%yXg~T*=?M5jhspG2aFfET8SFgWDE4o zZ#GtbB`QCCP917SDzcv!S`5rwE#LHT+)~IuWKxCCO8U;FdD;6E5m4+1btEJjd{eyJ^sIylkX1aVSB;JqE~F7UlGr~a@f^J{z8`x!%{zoRDYIkA}_X=rFctuPF+M=hT~IKlD)=jq^KzO&ZLNHDJ!1xfL56%r5iP2e!y6 z@k(T<#2P?eJtAH1D(-jgJLKdTv68=#Fp1h0&fT3q7s#dn!8dWa0T z0@(%)jiZ4({?nUZ33XwfAJ1ZH~~{jtD8x+Ny&N!59(3WPx#)E988P1)sdG z3C=Ff!sWo?di$JVnf&tzcZ;6v)%(-HnzGr>^6@TbQb`hgRD2`-)3{7=UQR|Fpb=-s zL7@bjrr5P{s)WM~?OCwX(ZO#4n(!oPSo9&M4us69he+{*FeAhP;V(}cG<~^0uTxxs zu+`R4978Pd@V;2~IG4c}E4?b#9qM|0kPl`+mLjYS0f_+-nV|||0bxyIQOFgIb3QNE z{@k7@vVD>oJA%O50bZdpP%mVfxI7tvbQs>x_g^Lp8P5OiDS;i#Uiihpsb2m~DDAiY zgMd|HjtUE!cpa`mcC4pO*5YOW_|0Y%adG}6fUj|V8p2&~yZzVOTp`2up=uG2SSDm4 zR*vL22&32Mr|OcUG={QSBN6N{*1L)f#i0#SUlbJ=+Xktm+?QHzIS;aeT^KPNWEtea zGfWUKgzqOne!%nm+Lmoub++WVgJaCQBIR!L)8KQdo#;dQX(;+d*|9r~6Z-q)y&L3& zqIA+!f+I^&#A)Bf)rejr8_ys-C#Xbyt(M;BzHvjFyMc;^f41{xgB0)ZPj6>_4V;c@ z`mvD&Vbx_OcnuaH!TrKMepTN5oN|M{QUwn)uNO&P`tR|&M!C)RieQlkLKJ!GBjU|< zRpQ1obl3c0ieLIGpF;(X&4}EGxqL5i1rosk5L^O9mq3O3uSTwnz%KOjMp8!2iC_zI z3{tG41Z((94SU@*@lHAI*V%)IBh8!CFV}pVsC-yfUQ!?dNUF$ZD#4y9MlFI*f}=Fd zx=J5wsAT-jg;kWXBfwNmvK*$1dWnECXeW?zMFfrmo^P$jvQHe?Z$7zjZhGW(SY!Ga zf}OB10s*^3T8?Q4^fy=Sv2Lw8I2%i)-QSO^{dx?xin>4-j{&ElIH=J99?*DQn>T*+ z_p-lqIy!c_=iOTA!tkZLb3JgA=tJB@Y^-1S>UP#n;{;seEK}NHjAR|hxxmo*h0waD z4^uv&Nq4|)0gnWw9}K?+=cWP#;h)LFki}%uBeE8*&N3CorOVBqj+NuS7Pqa_^NGO~ ztDa`iJgGCDWGwMQb4F0J$(vk8D8y`x1#zN)OZ}(%`o&q%%&qk@oTgYxyysquT|1Op?7v23CBp!UnR-7Lxw}#+MKxNdtv_w8wsckDOK|UP zO2cMq7Qcz0jOdOi8;E)god1@4{oJ$qbbh&OzUtx2Nj2D#TT7Cqs(F?t-Y@SByp9E( z;9(6{FL-(F!nlD&PPhwQoEiSxUeH$!*GvMi7mHH4S5eS5HR&Z)c`*^r(0}j`xmYgZ ziYZT2-I;?wse)<@wZ>Hsfm4KGyDDE3*I<4NgwUcg5o?qB+5fX2^oB9Q@AM@bbrFAm zL{wEfxqL_xNx|7m9nabg*D69}K!a(xU_YJo_m`kuX{u^_%SJDL#vhB}rvI}957hJ`M5Ct6BM zer+*pD-AzfDgEJyMjf;gps7=DJk?qkz@rd)Sz!@E*5E=yD-8N!;|4Dw3qtUrPs$_L5 zRkyhuY)CJrS+fmLVgGoMmi`6h-zN6}7R1vv|AHzVnvo9|v5@AYp~oQ5&&RwcQmJPa zF$y>s6EMbvB(}pC$o*e@g{3O4T;Jq)FeISGna!>^zgasnLU3?ag>#2W=D+dBxMh2Lk7I#|P()=)`6up*JY*l-*Lt;QpRr;KWiL%zy14`3IWEqAzk$3oSK}`V3Jk@sZ5Zx;> zZ}GCL_!j+>D-%MvhUl?AOrOB0w%Sf|ubBr|%^P3tHVys-7Rj^+tB+p%=(_mVia84i zvh61HjFoZ0#c9Gsm%_K7BHk=X2H%QezvF)Xt-EsIy6Absdnzo0e1GPE7K4SjlS~st zEJ9jkvUP1_3afSngfj~7ad+L~H499-t2Gq3iYRJo?-iji(LTe#y&;c?kipV(@wbUg zh0x^yue8Ho{wl9CKe69+6}u}CxZ(R}hcrNT#6lo6;5`!$5F%wxgt0R9cl=Es_QHdehZ@~GV&DBSx5eAzv5Fcufgp!sqFajjS6FG zDjWaxU!ki8J2labH4y|HM(Mx|;2@F`KNRc_k@N*;Rr`Eb9s7nkN#6`GRfb&wNG$pt zX!E?B(IDyr^Fa|>Nyr2@!wJ`KjkoPAoayxO?CMHeH+Ui}>zRwa2bS2>v0NLCajW+h zhNXn2H!!=jC0orkReF1M7BS?Si)5&LR5!c_HZp)Dx@eJ^3BS;&!RU=;8Iti?Wmpi~ z?qdg_6I|N8x96jmImg`>z;LmO)lmoDeeZ@y(zx2+DT*xIgy=PTv@||Y#!U?lR0x|2 zxy!Sf;GA~QNUVR~t;zE~6}0=yE(>^{K{b?{9P~Vddz`ShwEau>N1ScVA$)E z;SoY*;2ReljTwIQ$fst}@XaovroFx1?}D{)1yH&s0_GPWQIIS>x@_5q#zs%5B>~87 z1zdqxQ22IZ-Ip*P5~5c*=GqeH?^fJ_TkgVQG6H_ z57HC*Y(t>eri#3Pg(mo)O!*luk#veOp5;gc-48RlpKJ7l-(Xm;Ze7As@mhQ*;EAF` zad$EY3~T2$SW#|xJ zSz-Op!>exxK*6z$@IFE^3D!#X04B@Oac9R7Fcx~AOuPS&iX#hCnQP|r_KZ}~kFjsr z;oXZ|a(jtR9Ks;#CU8mQQ}51Gf!cireH8bgGo7XgyH&pXvpV_Mc>#Y{d0IVJNH3x2 zcT)?EgR1;Z9}HI@%nXY$nk-UvJow&!5P^?d7fD`>h>#y&UC4{Aeq}*6q=X=5 zP(r;vuVAc_0#E%<>#N5Di-9dRYDC*VZOJye8 z6Osr19^vDOJD9RjNUFF5*{5-J-^*%t&g{onzWBQU9dqez#d@hQGwvLBvHJA{JG|0h z&{7k6;oz6s``v#*%)Pq(;_;4=o4xEI!NJ?TmkLxYM)J7Zlqp^N(|#g2%Y#A!J1L=< zeIs3;r(<3TFW|0`cD%B7*-Hn$=qyzDRowu92QWwRC>B6gf@DD~d{ih*M#x6C0;m#i zs2qDLUl5S>=M@wn>ED>YDyeyco>2O5m~Uc+4+|K@{|kzTt85UgVJz!#OQL5JT8V?) zIc(!gX;P3d#`STps zLrLw+;9Y~LZLgfSx`}IT;e21=KwdMU2bZ0koQRN%3#pP+JkB`8s+cg8 zGi23@+Wp9rCNP5F%#{DEb#CbMA?6?#+M5y)=jX!YM5a`v1#CMAE`k6)kT#Fi^1yXH`0aJhl;>80Z+Xu3*}l(*OG=mgqHeSWvV=W) z;UU4my($bM$CKb^?+{F86gjf_xCTODPL%=!lM&PGlqf~ltZ2V$;~ zBmV>=#@3oR*0#?-o4 z{pSYp&{6B>0N|My6GXgD;yil+IGt6(gd;Zw!WXosCX>6mI!m!%r%j@4*KgX&^teUz zMIQ~%B$hIeEiqlX5W>#Q_OGgb{?9wxEz-MAJhkM%M7Q#ccmD=a^~st5!FW(wU$vFX z_+7ml?O%|i-8*U|2nfAPF#Q))z7bCcSgQFsoT<$sJ(c3L1%{^F&~IK~UgD{IP3Ec# zA0xZF`3C^xK=qB_z!W3aL-;cl%nOQ9QnjpUlyP~m+x}lL_YnsA(p2?H+@fG z(~aDbb#ee}Ss09l0i`z@mY~nKaydOy`m5SO`oACrB`;~eq=|hB0Kc3Xh}FF!_fVAV zscz&2!Vb1J6>cO$G8rx`*xoRrXnF@KRc{4KzU((1YR>5aujyuv_1Eu?g5X6I&&XG3 z#b<;k(ctA9^NwXq`<==UOkFz*LM|M2WAj6ys<&>to8`ton|_Rx?^lP*b)MxQ_-_%% z0YXRR$*sA|d22w_XY|`qqz6)T8XCdieP59A;F~i0>n=445U0aPhGChLo8U4yJ;e?C zZzqCZ?D#unCDU%|r9dl0vwj>ylc4C=8_f#|y(W;fP*ifkvCGPYRAOLbV`D|?;KXI2 znov!Am%1$d)W0BqFz>!NuxsOj{Q8xNoMnq@&LP9a&L?YKjPRnvJ3OW@bu;Tn+@$+! z&k8Ctk)AV2I#wK!A$NW%{|i#wbxFn@B_X)T73eh+fV-0Qd+P@r`o3~B#M{NR;HEK$ zKeXmo(s#Uq|?Pq@Cqg%Oy+1?`=Am%JN z36fbRghV@gXaAi?YR*6t-}&0^r`=F?9FhaUOnywZ!N8ImdZBN6qVgo^inj6vH{=@~ z%tS;z7R!e6hc*~!!ep6ofO=Jki4l^Ao8u%zd>7(;Uatuz@yZ^4djnm(e+n?8;I!`` zCF%t~lFOp@aNSP7LDKENI;5$ycfXsK3NctGAFQ6y*t(RPN4d{d@{yt=`;I9qRyLI} zbwGx_^oici$OfanFnJscP6A+~Y-7in3uN6pAMfuLyQ>eO`SQ7|QdS;A#~QMJj8Z+% zo+HlDzCJA|siQt5v_z)uo28=LBR=+Y9^=ASKQs1zqtCmZ$NC$myiUFX2(G?kSHr^Gsys7wy1kXh`t5(Su}5s)E?R`?8sPC? za7YLE4sqswUF_Pdk6zsVczB~;1#D$l-$X~%A(Ra(G5eI#5!B*#i@CA|a(#To&2Cz6 zcC5{|_B^p%clD+RBv$5RIf4u};($^S`F;mjOBub_BWjifPXe^Tyfq2J{vUY6Y?<$j z^Xq#Y7;4He^{<}A_bO5Jf4ZC_ZdXxs$nj1@{TJ{2c-blVAo)3%(fMD(LLAmnX@kSp zsY^0VzK2u~0M9r&%K-*qQE*rz`P^EVND)WtSpjx?R><8gZ|VY1rTgp6w?ap-eTl z`#0bab^1?5C5ybz{@aBXbNy^^^;yIf-!kF0GoeSsH|;)RncEdRcN`oe;}|RzUXOrS zdf%T523Xrg07y)ho;ird#zfpBDz>6KUs?TV^z7-%aaog%stu9Md?w9gpE`hT#Us&0 z(B{UnD8`erIA`h3uovK!#w;NgiTdO|L@Zq_qXNhvB`x;hV`bQjg(xV&_Dr|5j1UV1 zBvf(6=uvLL{mHw8I>*_11TR&nmt5u%L;ooxB;c)7*^-Cd(AfQo!f;H%w8?D0$61NK z5bYb38|r5P19DaN(Tn}!4&#+bH=kn5Wn9neI+eV`36nLt7JECXSayI6TIyTeky*JM z)8o(=H?;Nutd6~(N~g!PbJ2ZabA~F7I1g|eKd5(}b-SGb8ax)kbUf5Iec~5G!oe?% zfVHfpDZ~q^?SEr)Tw%hifsG4oi3_Si(pl&g)j0!>4?B-G=*Ot;#2)eXUtp@vb<(9x zH5bj4&pjxF5b#m{adIU}jkcI-@tVQ)at)vyZupUU^k^iUAhu6bVehu4e=EjkH;GHlQOd1?o+bKfH*Xp5!#-%uVf zMymD?f7MLp5!T@MaiWANWyAjje#Vnl*!HWRtf;zwAIh}>|^8dj*$HS3Nl zxO3B!xpdVo7!w5cDZN0LF2p$V@O94pj(*^eudqm(iI{UX>|AOEy`DJ&B&>_ zqqA?JVVza#V=9jar@Di>Ctb2cZt*+H9~$>CfxavtpVv zkJEAd9C(yL#)7aY4nSpvwM%#W;`676o(qCq6jo@A*XHhVuwBnmIh5i8Ze>{qP5Od+11v#nCLp#BkYkKbrA&dwSC%A1q z4*pR^BeS9Y)!l5X>vx0#9JR7PZ)}B>*07$IgL9$i>WvHSNLDIGJSHe^5tZIA54(lI zYirINso$L>B?*3_f5e@ir8|g+Ia1G)?W+J9kr^f^N&E7%Ak02X!_vU`t7}eESHxRP z?X%~5JI6L!PRd5W%a((vHs;h`BdMvTX8}^_7GG)8y3c!Fh3{7>=j7ooKHECEuZ6bz zAr&mX;R~X|&$_6$YN;}3fV-C$K>WVO1ZG)gpVHnVRCwcSa#J|QI~XcbMHBBuja}WL zUN|MCkTt?6vVJZsgq^g|sb~jcXos9v(4#QEIhOM7G_2X{n^Vo_DnO<62J{Wlr}()D z+$$)HcU=JC{Umm0_)nlRR!=R@Oil1I7Os7v4s)59&|3qyU(EsCx6Wz zcUlWt7X@Cc$8^L!xyE_~tLWUIr*Z?JNL&Y!UjO0)#U4yo8--ourLfr}-gJlpP6y+j zi->&D^=OVc&TnTJ`0tZvDQ2I@9$*?rJCtT#4(@1c@ViOmZ0`Mfgg=oBeUfDEbI+X% zBo!gSox`Ge%J)YL;Mk7aaN#RP746Ec6~tvhR`ty)UJDyvL4WdBqf zej5LBeHmp!8Aj#(^Q29z>gj+kl#60Ylu3l!0X8Ir%)R-i zEkipm85unQ*(zw`R@$PyG)s=!&v#UBAc zI~A;}2Y^3)Xvg$d@z))bxbp&~@^sY%T`~0Hwa_4$#k^MuAD0i@$r}78 z|3Is$WiP3!*1@+U-{)__l@PxWkz4ZjWJ7aB`8+(d7|xqsJh?ze>^yKJhF}mq6jiwV zTqpn`_~gOte`43y}JV@Sk$r!#YjnS!z+C4g`AI!ge~3>g}hAr`+1ng`iFAaNB>$YaXXiAI6v$#cUaZe znaBQWqB0FD!@T349EpTt0{GsZ)FLIewh{vmlh ziu;cnctX@6AY{xmC{X2*7X77I%_uFS# zR0Zr!qDwyEaH*-{xdqSa>YCHa7-DvZ;Z3d5v-m^*tq1kDxmD(iG4y|k2HnmB zO}Xts2o`0FGd4taa=|`k^&HloV}>IlB6#I`eplHg>3`^J^ZZy8HVT&Ydm57v$SnF(5q#M)8(F{7M2m-y z_(+&AV9Sur>QA@PqVY@(I>gT^+imlrO5@@IN;%<*b>ni7DRB4Kb~rnBsxL)^wSq`p z&O|s7EG#T||9-rrCvBUg;;^*rMKvmL=MXkF3}A=T|K0vy+XH_9?%#hyT#o%`(egit z%fE}3|I@4kFz4u4+}r?+v9}UXSL&DN4Y$hLK(05k;#&MKoVfp~dgcFp1@qs}JoUC! z+lP&<=i~RdX#vDl8V2}v+n(?NbCQZ7Jqli5LU=?r!T7je2 z_WYzaIOQ(Gs=y<{|GDq@{kR+OLWugEnUhCDLD{V+i}U)GNk-8EFp~d$b^8DDX#e|f z{_pI8yTF9`53u)NdiR=;U&pRQSX1t*khyc@3un>7HgJ&cEA#_rSk<;D5OXUgdR@;%LhL>*vm2 zi2u6L0ybDTo(TXFNf3beE0FDGWw`jI=fl?|-8@%MnB+&DnH~VFVA?VKPVy zs=J&O4A0xE>4>eb|AokDvMWy5=mdvpFJ+35yMqfp?(NX?rf9#2@qYda{k9<21D5SV)^`auf`FPN8s=ixMUErSPu^A=}}1 zvvUd+Y?J=XOj4pyG)tJd2S*)Exv>$uA&+TV@Q7$HT}d!Qs%9rM`#5w?c^Do(E|4~J zI&`Jkl&!K)RUw28#N6e108cKMo1>H0oGf_KdAAM`-0s%CLL&YVRYRa>?+CTAE%6t7 z@k(gVC)9Qn`Z2uz2UQ!PPfUYk52zFN76a0tf8K-Ks3H}&n0e#2^xzT(->6U$*upn$?jYJ zM#9qa>2jHPZvg2_bbg*4a-UT#S%0cR7veeQ60)5n!kSJWTvhILnsxuwsq9MK^=!8l zWN>~|nL*{|n%SCV&kvMF|Aq6dDFVaQ8Uk_39?V`^UNPhs!sc4E885i1<5F!#p6iIH zoRpW=h;^b~uD{c*sZp29yey~-6jOE78>Xt@K#z94y8gJjZ~7L&`Ay$WL>IPv1Z(VR zYdFPgwLcKdFz8^yenhV{o2y)=O^qRu10hw%)c)O zTE}1pyGdqSBe)<8F05f1=?hMsdmn;kaH9M(PY>pZBWhcpVEu`o%qTrh$6Pf3MARBUbHRD642?HA1Q#<$Jz=hyWghUl`c}f;u^Ehz3eG8N{cKh1i861h|%oP8_{Ksa( zko<^(_!;kW9Q8(#KGw`^tuBo9gJ_#~xi@R$K0*n;EaTM|GmP(4jV>PvIF_^a-13dX z9%m1h+c#Rhd&+3!7&rer>elj%b~?JE=kTdr(DVn4&DTwYyWzA(@{4-1$9_~K_RaA zr=ygo!(d)O9Y6m~9z&k7GMG}!w9w&tWt_v%MS&OV@?8?7G8*9wmZzLbsxW@$L6ogK{2~eSTWtMbqH84#{L4{qZ9TBV|~@_&)$Tt`<30FJ8FZg%;qhe_`DD& zI)`d;*JRwtx|y#OMI4>CUpWqQoEo;THz*G(Qth6TjT&o$#db-FPPhX;Qw(Si7_Vf0 z1!*i}omWs`RXuG0evS^NJjVhfBaeP3Lt|h%4;$H(`eaEcC)y)ra@sG&*eTmDzAdP_ zeU=A;Kn-GNYNmxXQ_Ev=33TG*1rPEq)q$Qf(a*bgtALxO3x#eLTb75fhCFKrSB$xG(NG zSw~&z4%abILF|fVWdaJY4~|ynJRZ|Vym-}ijyJe%(!H|iq>Uj;xXCHm=G&USKdTDs z)zR9$+&;cJeTfC++TCrhJIx$PpO!PMUeY2IjoHLWD$_?6x znhpn!qf0M!BZ$93xN-(7>@kJjI{eU=I#e`i)A#6|MR!%vPTfTw0VDw(467|KjUVY* z@lcC9D&kPBtkABIh{X^KuEW{eivPmVaXYUVtf?0U%}rkx<+g({whGcZ|%5@x8)P1;etauMMpn=vzv_+&l9! z=KLa%rlQ-IdGZWKxVt6~Y`Q5W=+tdY4CW5{o4F4L--8H9;+v#WhpEaf)GFBiJ7q^rXRyA9?>C@rF(e!MSW@&op-rxhLT0Q-+IjXbf;#2l7K0el&W?eHX zeBVlVB8-{RJP)nBoOs_w<@vfxB@NS*grIq%PqOH?*vhs8zdN!qIYna{){1&3p7;iv zfQlgIlNHdCVa7Hox-=lK8L29@ALoRZEwTCQ{NzCw7!R)?h!<# zRh_T^TaY(TXKTb1Trl%osku5qY4YUo^lUu+JAYJB8_}8l+HqYsyf)Z6L3}#nYl$@+2Da8hksi>j^fSArlM<(JnY>NaIVd;KdRL=-3@qW@nA7-+Zz~``m2P*Uw{F_Q5{E!5RyT^K*vEUalP?zjVAT#y-j^O20KJ&5w78Ge6i7)*Y5X$wxo~ zq&3lAUmXP{*&nbwQq?)lPut>bqDSEzlMq}~3rFuI)#S;Vt${G_FyYT-+Te6r&lADp zivY5fs*irr4;K$=?F5?gC$svd+?mNdeIED~4nzLJDTRE3rvFk5SmnbHd`SM$vOmI6}mWw~uTuCx3FDAv~-o?-hwiJnLgT&XfQ4T9Bhu z!sbwDd~6olq;B0gqcklUCSVQI?Fx7Tv-%CvHLy-uX>QS(qYHF=3E@op!P_?DLn3dm z<^&f7$0|0|)K5XE+zQgRbzVi)Shz6Z2G+1rmGY+Bed+A)s78TDpdhW_(9?~C5uWHP=Z8Vm;cDhWuO;3+rxP8@< zCiJ?e+R?--tWBeZzv26Ra5#1p#cu|Lvb6pW8yp@bAH#2$<-oDz?amEFf3d&3JZhi=K$xHF5t`#75#ybnfm)eHee@@=Nm8=e*tiU zq3^fl`&c=Y&iKAwQ3F@a(ERi#oCA?PK0n(Y7b&8zY$I;1QdQNCyS^pd?bIZWeV58W z-=dJ4U0nRD50bfV($yU#OD;aNvpkZ+j%rTO_eLTx^-%(&_qHggZ}Z(~8S%d$bKTBA z`i*Xhme1Hw+L`$`Q&rf2mh--DOF5bp*!{iX*?biomg(|msGB7cS+znt5@R zdtEZ&7KsArpa4*N%V6QsF>z(L%w+C$2r!ZyjvDGT#4>SH)m=6}eY6=PGA`(+R9hhN z4RQ&NeP_lK)^LkSe=%&b%o94Nc3mMhx95@kObrXYl{BJ)ClIXzS@YL=xUniz-nviC zT&mMwA35|)s|rk>Exs(){GpS#FqV4!7fv{wsR>;We9G`t@1?SfWn^DPMwnZ1I%;OB zH^f5`T0vyjG(7M%>1;_H)M{|>eZIHMk3yCDmv1w|}EKQ<)MRoOUB_7IDT7U=Tl5uiJjSK}QZWdTEyX*IT| zMq^Fc+%5OLO~1mN3PDTa7yz1L7R`0?fihxReBR4=7IoAuVPc{7bsLd+>}gUYe8Ix} z0O9wqrG+mi$nK$$&$JWo{U{*%h6QwIN@ASCPD2s30r0+K8@+16TO1(E^U;9al?>{QY$V`=m{w{n6{2}M5?boUegd#Cuw znG5;`-n5#r{Ak|NBj=)nF;#z9#LQ&*2be8anvuNP&;Pkk`9k=2u*WO+3g_QX{C(f{ z@BaAz@a3R2ZvN%f9ov6Q0RQ@zE%$WaEu!TgBW}Q$o8oU{ZrDGMf!u%BV%+h^!!S!? z27`dyNRnlMqJ^E1R%0?2#X-)?anYy}4F} zY$9VHfR9%ne9h#YlrZ%xFfu(zntNnp87eqB*r*)~NG#k;E>JftC}XsBO|HRX#G=7K zT&(V#QtT)haBE5ge+^ddynR&v=UQESX2*a}fEZV9{pX7d&y}a6DhxfXLaT~qOJ?}i z&(?GL77tb%D;7QK`VRB_<@=zmD?Z7czFE}r*~$*6hVYi^#2o$VhndW{M9zM$;x^?R zy)a1!6hl<9L2|eyhHUCvPN%pG=zhWv&S%X}vAf0sYSka;z@OfdZLpkQFEaVziqU(&bZp*2Js-6w~*dLFH0H zcz0GZn#cNNS|+*$j#&%~fk|U@0!WO8nb#+H1@l)c!wsKXxdo{$r!l5a`>leUNU>R~ z`-fj^_x%r*5ItG6BhOu5%b!1Zb1$CHkB=iB!ysKV9YRV3xDx$^^Gkta{NzB|mP;j} z_e{m~l4Ocfg@2RKiQG26NkpWO!n_04_fwM<)!EzF@Ml zOXbs#s%Um|`O-MTu@y}}{{b6_Mku7JYHcdRnnT&>H)bRI6M+NxW#ioe2}Ym-g}7_z z^vd}BHV8BU!CmE|=>TGn+Q;f9jpRv#j^W0E&-tGP_Ne+SaHx@PB-+6hwGxu~5lTs_ z*R?Ne5UPilw9+9Cr$7PAwQX#Nm&tSZWNAz~BF=;3^^%&H4Xs6)AMPrhkb|jWBf_DA zsWRSuuBQ98nm>KrZ+ATh!`Lp5it=ZtPNm~=@4S-*+CS#=H%YnS*ipsp^5KbeU!Qd6 zi1V-=8er0R!whEp&at?%U`>+COR40coh(t>SbpISg|Z64eTp7I1icniS>BdgPzQwPwxl+My*)yD64qH_{@ebA$% zpgI#g>^4ILcwmw(>OvNpcwo$UptfvynzpfQA>Y)Mw zxB*=qwPIzvdh_*7-pD=P=CjN6TDO z0iv0tjD@57@?Rl!EE^zk1C)wQTJD<%3Kwa* zf2T+|%gaNcb(=dZz1VLhM^u#d^rS))JBlpX|9}ihwG)!#&x27s{#@Xqm-8+UuSj+I zyCA?#TVcS;-7an>KrDJ^>Hu*7fBwkNUbv60r?((yZx%(wnNs?*;6ql7q?f;8g8It& z$E(adBm> zDjTY^e$-Xxcm*IT6l(A%UfLROL^z(divFn-jj+7)mZN=*C^Ip`25{u{3aO=XU*zb< zye(*p7yeP#-zREK#jY-GuuK!#yJ}~~F_pbeM(^!94=~;kAa$r?P-NtW?!;Ma7@XIX z4(!O~=K$|xihqAJ2%JOfbh~BwLoHO$0H>Z(P*SJge~8CYSXgUdJycFn)S_(-GY*qJ z^BR}XZlZ%%u$0rh=W-4j9Hb(_>$$;>YN+uWWp#~4_~?Fv0R?>cs#Cdh>S3SPUY7Vjwtw*uT`YV$5oZV+S4CAs z`V@5ezETmB&3!qt*w>zZ!iBY9oe7*4JYa0UBmgH~TdXBb((^p;8&bgMZ8HfjFw&)4 z2?)<3hiwJ+@T2J&lc;=(MM@|PTrht>$IW_uJ@-0wDJMJzw|Xr;AJmCMW9Df%Q( zHu77cD`%ML30A_=qM_6oYCq9t4q90&HfM(p{bD}YcA%eDE?NAsm;WO%UNnOMDMbht ze^b*~Bdj}jy2^}jY}dDuRD8Z^+i^<<$k2@jozP2q7Ulp&;nlLrK`;Fd#{i((1FZ^W z3f!N*R%`m1r4jLb{%-HOlKQ|kk;}G832O8nxI!DN>YKB34lqCsTAFY2EVc2C7;S7d zaQcjHRK2w^dMQZWMh`K*C^I#Q`t{|cecO4+sOC`*Cc*b-(|I&uoen@ghEvV4{PH{V zsL#|AHk_BQ<#1#SnvvLyHOl08wz3b;E4rq~=!Rwcoj>jObs!?90&A}@c(NWBFFnF0 zpy%5Ih~^|Yy{X5-OY7DthqD;#kSZFKad{h(Wi)wV3m0iuO5bAP1A| zZRhwfhI0I6o8`Kz8hFiRyhXX)l++_brt5GefOcCsclSPF9A!VR5}t7*(+!cD_W=iw zI<`$ha<$B~Q~GJ5z$m+x1B>4LVEjw9#V(t4i>$)ZM}Fqht6n|EjJoJ1Sd&dywwvJ8 zc=6usg`CfkocQU!kshsir&78zxL#B&TFiktH}}v3RAPTou8l~FHx`yWQh%_;2TqYN zW#YWdb^b~IuJ;a+56>HKiB%XwZ?YYRW|cb(h$)CGGU!8`xhovQIOxY8zLBRw;oX$_ zSVN_RA=&|iK#7%H+TLaKWiVGKZru_EljSE8y(=5sWwH$Pd2iN(YvNq_JiT2OP;(IV zs%L!~WIQwXI)e{P*D7{W14H13cPn#7D|AToPk1TzZ`+pd*Op%zbiLzS--HfI)2dMT zze2ObLfZ6(eMVndguI}BF1{bXId_iGdfTb>=vyG`~ z(wrPKFHiG8{WWC0pSDg!Vl5#van*%zomNLI+92{ts`?e;+&v0X(E>eLm`f}pkK0}* zI!WW9zNQ}+$N&q}9UGQ9;wCbiyHaf6N!%x^K*c`Y3Lv~@SeGkS>f$QhZ%U!$o}}D) zgOXmgYto*|dUQ*n-(Pxws|=N4FYM>5?AJWCh*i26?YNadJB34ZSz~UQ?ajEkX39ds zBlQ^r<>i>QgZzL|Gc!4m7A*+sG((U7Fbhv7aZON8VzZz3z2Gh#5Ln1vt7|+VZs&Ql z4F1qoS7(sT=H`0nipeb6@SBvv;!2&)VyC;#GKtW`=i%IF|Dmjx3Fm7PFK@YGI|W%o zuFa66RI|zf$iWI|`=g7`^K`GVc$Ch>?>IVPUK{{zIwk*Fs-C&Fh4Ne3`e3{+e z!M||sN+s^=b|c!>wYOH7a_2Pi5sNL)nzriwLygKmY{X4Ko}q`=L&IEF0spZQaHI?n zNM0lfG5tP1<-)Eu#4o+ZmY`a^RH~*O1tcjtkDygo9HjAzWRYu$jH2vn>YvTwc~6-% zN_h)Eek8y_;rQtG0~8CL40O$^@Hc@9O2^u|DemaWmUcNycKum-oXqH`m{nNm;T>f> zdAzS>LWPUR%}_7U&Xp+jhh$-X!;@F#39G7)P);H4WdWKFCL$I;=ZyxWeJm^?rD3eh zh7y-LS=}On^P|!94AtoMw%XQ)8t{}W|N4vNmfi*<)KcLvN>#ikfKGzPHzy4A$UTWN z-|7|fr+5l>O586Bzz$e(t$`r`8=`c>PG^6|+j4!L8Di8LVszLV4!l{|fUD(na+1Fo zPjkPmV({7DYV>HebeB7@-!%kmWb?3_NRl})9MN^2IvGC{x7hBvw^EXs&Hprpw+Fv( z-voooqMFC*w(ClC1ZbJM0^cH|_lobW z@QZy9a9d5rI67M&1`3@$zQ<^tsa| z5W^-goO*XCQn{rHpf|7gnFQ~eie8%n$RuONjyUzzfM?}JmX5#Q;s-KzA}ePJ#Bk(M zCcDfPUFwA3M_QSN*z31tZIBt|_hc%c%Gc(aT|EzaTjX>j%gDk9{i0C#A4~`49K>5_ znt_7Wj35^^gt}p-1=5rPVo-(lOuwZ^=kny~85ZM;Ge~I!6At`J4)TE%2p%vHUHjUg z09Rj=DV`ejXFtndII6hvXlC+>u1w$geI0;)zeK0J@3=K*uPGm~52;_=2<%hi4f1j8 z^(jIt%T5-cH^V(<%|YZCx}ov;Ux0C^Z5sd$BI4_%Z_`wE=S;vpS=3oK~0+wtupIpdEttIR49tQEBXzrR+tVq*TL?`HYK!sXo zy<+Wx+Uxgl4$gMRVaY(HI3An@t23o6iPt@5Aj6Sjd3TbsCbLxeuA81TuDcVJP(iV& zY}q};z6YDm(ej|tLLWuar`NB1kv(5gml^H{3Q4MxfE%_=;>PH>jV z*e&C=D*88=lBTG(amuiy_FZumM~MYj&>NgvFj=NwibjcupULlYd%2U+1Xryo1K%ZI z{dpZR4g2l#w2bBMWipUwQ-0V=7V$E7ic1+Uzi}0Td5GFWys90y{W;iG7f(5a>xv=b z#ED9EmBvL(-V5X=@}t2&PYxCH^OPPX*oc`|s;S2ahhBdy*Q1jGs?43h+0SbE9kt#t zF2uS-woe>N-N~-0N7n_Vp5E+5#zCGyrP#WW;pm6|b4Gp{pEMO+o} zc$)xn%A)R9^6DR|u~%dOz_^y@sqCF5#K~^o0XL&&dRJ#qKyrZu#^9D63q>C}-8V6k zDeU$>YxaB(HL>#aXwwQSU`;=%u!$VUHBX9v_xnj8q0NSIL(ekAy&|3m#)}+{kOqWt zNNRLuij&Q6+rw6krXXe+{uAC%+iRv+ zAkWLKlP`eKp~rVj@%G*QJdEb;IixgrwagOxah~?w^ABy7^wmMPcCF$clOv_+#GHa z7X9ymoixU-S=|clt1g~_bh$iVZdXy_;7J@u-SFz3wkW^D%3G0&v4%O8TeNyxT2;%i z(0Q&kGNC-d*Pv2#YxK1sN*vS(IcmydG>TJ#0<&y10sZJw zFzi6fuM}=Lz{$wI_drd`NVl6!>oO64mHB}E;8?ZXs%)dI+N)-JHbci=ZSh;ZB8vDc z{Pmx4lxgF%fU2WMy+^aBm%KS16)T-9zEqd)AD@cg6E0H&1WdN@{rJ+hVRSROxOTni z59a{ti_snv?(thTETRKWkG2DCedbQuS#>TgEY2l)up(wrfgsy9rSfOx`63X$&-viS zP=oLV6Qrt8#EuvtL2PhITf^IKW{YB1GQ!$Ba)E{_9JCFW4fQ%)9D18Y8KS9w`17

`IoeZq!*?@KDw{MZ@SGRprhK)&%E2 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 origin/master - remotes/origin/app_test - remotes/origin/master -$ git checkout -b master-sdk-202405 origin/master -------------------------------------------------- -M ipc-sdk -Branch 'master-sdk-202405' set up to track remote branch 'master' from 'origin'. -Switched to a new branch 'master-sdk-202405' -$ git branch -a ----------------- - master -* master-sdk-202405 - remotes/origin/HEAD -> origin/master - remotes/origin/app_test - remotes/origin/master -$ git push origin master-sdk-202405:sdk-202405 ----------------------------------------------- -Enumerating objects: 3, done. -Counting objects: 100% (3/3), done. -Delta compression using up to 8 threads -Compressing objects: 100% (2/2), done. -Writing objects: 100% (2/2), 250 bytes | 250.00 KiB/s, done. -Total 2 (delta 1), reused 0 (delta 0) -remote: Powered by GITEE.COM [GNK-6.4] -remote: Create a pull request for 'sdk-202405' on Gitee by visiting: -remote: https://gitee.com/shenzhen-jiuyilian/ipc-rk1106/pull/new/shenzhen-jiuyilian:sdk-202405...shenzhen-jiuyilian:master -To gitee.com:shenzhen-jiuyilian/ipc-rk1106.git - * [new branch] master-sdk-202405 -> sdk-202405 -$ git branch -a ---------------- - master -* master-sdk-202405 - remotes/origin/HEAD -> origin/master - remotes/origin/app_test - remotes/origin/master - remotes/origin/sdk-202405 -``` - -### 1.4.2. git获取远端分支 - -  当想知道远端是否新建了分支,可使用git fetch命令获取远端分支。 - -**git fetch示例:** - -```code -$ git fetch ------------- -remote: Enumerating objects: 21, done. -remote: Counting objects: 100% (21/21), done. -remote: Compressing objects: 100% (11/11), done. -remote: Total 14 (delta 8), reused 0 (delta 0), pack-reused 0 -Unpacking objects: 100% (14/14), 2.14 KiB | 156.00 KiB/s, done. -From gitee.com:shenzhen-jiuyilian/ipc-rk1106 - bf71a01..2b9b803 master -> origin/master - * [new branch] sdk-202402 -> origin/sdk-202402 // 此处发现远端新建了分支 -Fetching submodule ipc-sdk -From gitee.com:shenzhen-jiuyilian/ipc - 7c261bd..eec9fb4 master-develop -> origin/master-develop -``` - -**多个远端仓库git fetch示例:** - -```code -$ git remote -v ----------------- -dgiot git@gitee.com:shenzhen-jiuyilian/fastbootserver.git (fetch) -dgiot git@gitee.com:shenzhen-jiuyilian/fastbootserver.git (push) -rk https://gerrit.rock-chips.com:8443/linux/linux/ipc/app/fastboot_server (fetch) -rk https://gerrit.rock-chips.com:8443/linux/linux/ipc/app/fastboot_server (push) -$ git fetch dgiot // git fetch + 远端仓库名称 ---------------------------------------------- -remote: Enumerating objects: 9, done. -remote: Counting objects: 100% (9/9), done. -remote: Compressing objects: 100% (7/7), done. -remote: Total 9 (delta 3), reused 5 (delta 2), pack-reused 0 -Unpacking objects: 100% (9/9), 8.74 KiB | 746.00 KiB/s, done. -From gitee.com:shenzhen-jiuyilian/fastbootserver - * [new branch] sdk-202405 -> dgiot/sdk-202405 -``` - -### 1.4.3. git新增远端地址 - -  在一个git仓库中,可以同时管理多个远端地址,例如:在原厂的git仓库中,可以在仓库添加一个私人的git仓库,这样后续把修改提交到自己的仓库进行代码管理。 - -**git remote add示例:** - -命令格式: - -```code -git remote add -``` - -示例: - -```code -$ git remote add dgiot git@gitee.com:shenzhen-jiuyilian/fastbootserver.git ---------------------------------------------------------------------------- -$ git remote -v ----------------- -dgiot git@gitee.com:shenzhen-jiuyilian/fastbootserver.git (fetch) -dgiot git@gitee.com:shenzhen-jiuyilian/fastbootserver.git (push) -rk https://gerrit.rock-chips.com:8443/linux/linux/ipc/app/fastboot_server (fetch) -rk https://gerrit.rock-chips.com:8443/linux/linux/ipc/app/fastboot_server (push) -$ git fetch dgiot ------------------- -remote: Enumerating objects: 107, done. -remote: Counting objects: 100% (104/104), done. -remote: Compressing objects: 100% (45/45), done. -remote: Total 99 (delta 47), reused 89 (delta 42), pack-reused 0 -Unpacking objects: 100% (99/99), 29.55 KiB | 315.00 KiB/s, done. -From gitee.com:shenzhen-jiuyilian/fastbootserver - * [new branch] master -> dgiot/master - * [new branch] sdk-202405 -> dgiot/sdk-202405 -$ git branch -a ----------------- -* (HEAD detached at bf91101) - remotes/dgiot/master - remotes/dgiot/sdk-202405 - remotes/m/master - remotes/rk/master -$ git checkout -b sdk-202405 m/master --------------------------------------- -Switched to a new branch 'sdk-202405' -$ git branch -a ----------------- -* sdk-202405 - remotes/dgiot/master - remotes/dgiot/sdk-202405 - remotes/m/master - remotes/rk/master -$ git pull dgiot sdk-202405 ---------------------------- -From gitee.com:shenzhen-jiuyilian/fastbootserver - * branch sdk-202405 -> FETCH_HEAD -Updating bf91101..dc76264 -Fast-forward - .clang-format | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - .gitmodules | 3 +++ - README.md | 30 ++++++++++++++++++++++++++++++ - rv1106_ipc_sdk | 1 + - 4 files changed, 170 insertions(+) - create mode 100644 .clang-format - create mode 100644 .gitmodules - create mode 100755 README.md - create mode 160000 rv1106_ipc_sdk -$ git submodule update --init ------------------------------ -Submodule 'rv1106_ipc_sdk' (git@gitee.com:shenzhen-jiuyilian/ipc-rk1106.git) registered for path 'rv1106_ipc_sdk' -Cloning into '/home/xiaojiazhu/project/rkipc/ipc_20240517/project/app/component/fastboot_server/rv1106_ipc_sdk'... -Submodule path 'rv1106_ipc_sdk': checked out 'ff8da760b201d365300aed78190de8564f0d2171' -``` - -## 1.5. 存疑 - -* 不同的分支之间如何同步某个文件? diff --git a/doc/huntting_project_report.md b/doc/huntting_project_report.md deleted file mode 100644 index e8d03600..00000000 --- a/doc/huntting_project_report.md +++ /dev/null @@ -1,20 +0,0 @@ -# 1. 项目进度汇总 - -## 1.1. 软件开发进度 - -```mermaid -gantt -dateFormat YYYY-MM-DD -title 软件进度-3月 -section 3月 -6帧探RTSP推流 : done, rtsp_media, 2024-03-18,3d -SC230AI快启验证(快启报错) : crit, active, 2024-03-21,3d -6帧探视频回放 : active, 2024-03-25,3d -``` - -### 1.1.1. 总结 - -* 截至2024-3-25: -1. 6侦探协议框架含http和tcp,http协议框架开发完成,rtsp推流到手机APP完成; -2. 存在问题:rtsp推流存在卡顿问题,待优化; -3. 更换SC230AI调试快启,快启报错,需要提问题单找原厂协助; \ No newline at end of file diff --git a/doc/markdown_user_guide.md b/doc/markdown_user_guide.md deleted file mode 100644 index 4cb0f9b7..00000000 --- a/doc/markdown_user_guide.md +++ /dev/null @@ -1,101 +0,0 @@ -# 1. Markdown使用手册 - -## 1.1. 概述 - -使用markdown编辑开发文档有以下好处: - -* markdown语法是一种语言,类似代码一样可以方便git管理,查看修改记录; -* 对代码显示支持良好; -* 可以进行UML类图和时序图的编辑/迭代/维护(强烈推荐); - -## 1.2. 如何使用Markdown - -此处介绍基于vscode编辑环境下使用Markdown的方法: - -* 首先安装vscode插件: - 1. Markdown All in One - 2. Markdown Preview Enhanced -* 使用Markdown语法编辑开发文档,并使用vscode预览; -* 右键使用浏览器打开并打印可生成PDF文档; - -## 1.3. 基本语法介绍 - -提供常用语法参考,直接copy模块代码进行编辑。 - -### 1.3.1. 常用命令 - -``` -Markdown All in One: Create Table of Contents 创建目录 -Markdown All in One: Update Table of Contents 更新目录 -Markdown All in One: Add/Update section numbers 添加 / 更新章节编号 -Markdown All in One: Remove section numbers 删除章节编号 -Markdown All in One: Toggle code span 触发设置代码范围(`code`) -Markdown All in One: Toggle code block 触发设置代码块(```codes```) -Markdown All in One: Print current document to HTML -Markdown All in One: Toggle math environment 触发设置数学环境 -Markdown All in One: Toggle list 触发设置列表环境 -``` - -### 1.3.2. 代码段 - -``` -/*This is your code.*/ -#include -int main() -{ - return 0; -} -``` - -### 1.3.3. UML类图语法 - -```mermaid -classDiagram - Animal <|-- Fish:继承 - Animal <|.. Zebra:实现 - Animal : +int age - Animal : +String gender - Animal: +isMammal() - Animal: +mate() - class Animal{ - <> - +call() int - } - class Fish{ - -int sizeInFeet - -canEat() - } - class Zebra{ - <> - -func(int, int) int - +bool is_wild - +run(void) - } -``` - -实现:一般指对抽象类的实例类 \ -继承:一般指对普通功能基类的派生/重载 - -### 1.3.4. UML时序图 - -```mermaid -sequenceDiagram -Alice->>+Jhon:Call function -Jhon->>Jhon:handle -Jhon-->>-Alice:Call return -note left of Alice:function - -Alice->>+Jhon:Call function -Jhon->>+Fancy:Call -Fancy-->>-Jhon:Call return -Jhon-->>-Alice:Call return - -Alice->>+Jhon:Call function -Jhon->>+Fancy:Call -Fancy->>-Fancy:End -Jhon-->>-Alice:Call return -``` - -### 1.3.5. 踩坑记录 - -1. 状态图不能使用default关键字作为一个状态名称,无法画图; \ No newline at end of file diff --git a/doc/sdk_build_guide.md b/doc/sdk_build_guide.md deleted file mode 100644 index cecfbd8b..00000000 --- a/doc/sdk_build_guide.md +++ /dev/null @@ -1,9 +0,0 @@ -# 1. SDK构建设计文档 - -## 1.1. 概述 - -  SDK使用cmake构建,把分层解耦合的独立模块编译成静态库,应用程序根据依赖关系进行自动关联链接。 - -## 1.2. 启用/禁用功能模块 - -  根据不同的产品需求来启用/禁用功能模块,避免编译不需要的模块。 diff --git a/doc/vscode_ssh_guide.md b/doc/vscode_ssh_guide.md deleted file mode 100644 index 60b5f6b7..00000000 --- a/doc/vscode_ssh_guide.md +++ /dev/null @@ -1,89 +0,0 @@ -# 1. vscode使用ssh链接虚拟机服务器 - -# 2. 前言 - -   在vscode使用ssh工具远程登录虚拟机服务器进行代码编辑。 - -| 内容 | 时间 | 作者 | 备注 | -|----|----|----|----| -| 首版 | 2024-2-26 | xjz | - | - -## 2.1. Windows系统 - -* 安装ssh - -   直接安装git工具即可支持ssh - -安装完后确认: -``` -xiaojiazhu@ubuntu:~/project/rkipc/battery/ipc-rk1106/ipc-sdk/cmake-shell$ ssh -usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] - [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] - [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] - [-i identity_file] [-J [user@]host[:port]] [-L address] - [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] - [-Q query_option] [-R address] [-S ctl_path] [-W host:port] - [-w local_tun[:remote_tun]] destination [command] -``` - -* vscode安装ssh插件 - -   使用 Remote - SSH 插件 - -* ssh密钥配置 - -1. Windows生成密钥; -2. 把xxx.pub文件内容拷贝到虚拟机的ssh目录下的authorized_keys文件; -此处是: - -``` -xiaojiazhu@ubuntu:~/project/.ssh$ pwd -/home/xiaojiazhu/project/.ssh -xiaojiazhu@ubuntu:~/project/.ssh$ ls -authorized_keys id_rsa id_rsa.pub -``` - -这样设置后,每次登录ssh无需手动输入密码; - -3. 在Windows远程登录虚拟机: - -参考命令:ssh xiaojiazhu@192.168.1.29 - -``` -PS C:\Users\xjz\.ssh> ssh xiaojiazhu@192.168.1.29 -Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-94-generic x86_64) - - * Documentation: https://help.ubuntu.com - * Management: https://landscape.canonical.com - * Support: https://ubuntu.com/advantage - -Expanded Security Maintenance for Applications is not enabled. - -75 updates can be applied immediately. -To see these additional updates run: apt list --upgradable - -9 additional security updates can be applied with ESM Apps. -Learn more about enabling ESM Apps service at https://ubuntu.com/esm - -New release '22.04.3 LTS' available. -Run 'do-release-upgrade' to upgrade to it. - -Your Hardware Enablement Stack (HWE) is supported until April 2025. -*** System restart required *** -Last login: Sun Feb 25 17:20:04 2024 from 192.168.1.29 -xiaojiazhu@ubuntu:~$ -``` -## 2.2. vscode设置 - -配置文件参考 - -``` -Host dgiot // 自定义的主机名 - HostName 192.168.1.29 // 远端的IP地址 - User xiaojiazhu 用户名 - Port 22 - IdentityFile "C:\Users\xjz\.ssh\id_ed25519" // 本端的私钥文件路径 - ForwardAgent yes // 忽略 -``` - -多个远端IP复制即可。 diff --git a/test/application/MissionManager/tool/CMakeLists.txt b/test/application/MissionManager/tool/CMakeLists.txt deleted file mode 100644 index 8cf71139..00000000 --- a/test/application/MissionManager/tool/CMakeLists.txt +++ /dev/null @@ -1,71 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -include(${MIDDLEWARE_SOURCE_PATH}/HuntingUpgrade/build/hunting_upgrade.cmake) -include(${HAL_SOURCE_PATH}/build/hal.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${APPLICATION_SOURCE_PATH}/MissionManager/include - ${APPLICATION_SOURCE_PATH}/MissionManager/src - ${MIDDLEWARE_SOURCE_PATH}/AppManager/include - ${MIDDLEWARE_SOURCE_PATH}/MediaManager/include - ${MIDDLEWARE_SOURCE_PATH}/StateMachine/include - ${MIDDLEWARE_SOURCE_PATH}/McuManager/include - ${MIDDLEWARE_SOURCE_PATH}/StorageManager/include - ${MIDDLEWARE_SOURCE_PATH}/StorageManager/src - ${MIDDLEWARE_SOURCE_PATH}/FilesManager/include - ${MIDDLEWARE_SOURCE_PATH}/DeviceManager/include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/LinuxApi/include - ${UTILS_SOURCE_PATH}/UpgradeTool/include - ${UTILS_SOURCE_PATH}/KeyControl/include - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/middleware/AppManager/tool/include - ${TEST_SOURCE_PATH}/middleware/AppManager/tool/src - ${TEST_SOURCE_PATH}/middleware/MediaManager/tool/include - ${TEST_SOURCE_PATH}/middleware/MediaManager/tool/src - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET MissionManagerTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} MissionManager AppManagerTestTool MediaManagerTestTool KeyControl UpgradeTool StatusCode Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - MissionManagerTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/application/MissionManager/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - MissionManagerTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/application/MissionManager/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make MissionManagerTestTool_code_check - COMMAND make MissionManagerTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.cpp b/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.cpp deleted file mode 100644 index 5a17d831..00000000 --- a/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MissionManagerMakePtrTest.h" -#include "ILog.h" -#include "OnMissionStateMock.h" -#include "PirTriggeredMissionStateMock.h" -#include "TestMissionStateMock.h" -#include "TopStateMock.h" -void OverrideMissionManagerMakePtrObject(std::shared_ptr &appManagerMock) -{ - std::shared_ptr impl = std::make_shared(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - test->mMissionManagerMock = appManagerMock; - } - MissionManagerMakePtr::GetInstance(&impl); -} -void CancelOverrideMissionManagerMakePtrObject(void) -{ - std::shared_ptr tmp = MissionManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mMissionManagerMock.reset(); - } - tmp.reset(); - test.reset(); - std::shared_ptr impl = std::make_shared(); - MissionManagerMakePtr::GetInstance(&impl); -} -MissionManagerMakePtrTest::MissionManagerMakePtrTest() -{ -} -MissionManagerMakePtrTest::~MissionManagerMakePtrTest() -{ - mMissionManagerMock.reset(); -} -std::shared_ptr MissionManagerMakePtrTest::CreateTopState(void) -{ - std::shared_ptr state = std::make_shared(); - return state; -} -std::shared_ptr MissionManagerMakePtrTest::CreateMissionState(const IpcMission &mission) -{ - LogInfo("MissionManagerMakePtrTest::CreateMissionState\n"); - std::shared_ptr state; - switch (mission) { - case IpcMission::PIR_TRIGGERED: - LogInfo("Create PirTriggeredMissionStateMock.\n"); - state = std::make_shared(); - break; - case IpcMission::TEST: - LogInfo("Create TestMissionStateMock.\n"); - state = std::make_shared(); - break; - case IpcMission::ON: - LogInfo("Create OnMissionStateMock.\n"); - state = std::make_shared(); - break; - - default: - LogWarning("Unknown mission.\n"); - state = std::make_shared(); - break; - } - return state; -} \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.h b/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.h deleted file mode 100644 index 2587029d..00000000 --- a/test/application/MissionManager/tool/src/MissionManagerMakePtrTest.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MISSION_MANAGER_MAKE_PTR_TEST_H -#define MISSION_MANAGER_MAKE_PTR_TEST_H -#include "MissionManagerMakePtr.h" -#include "MissionManagerMock.h" -#include "MissionManagerTestTool.h" -void OverrideMissionManagerMakePtrObject(std::shared_ptr &appManagerMock); -void CancelOverrideMissionManagerMakePtrObject(void); -class MissionManagerMakePtrTest : public MissionManagerMakePtr -{ -public: - MissionManagerMakePtrTest(); - virtual ~MissionManagerMakePtrTest(); - std::shared_ptr CreateTopState(void) override; - std::shared_ptr CreateMissionState(const IpcMission &mission) override; - -public: - std::shared_ptr mMissionManagerMock; -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/MissionManagerMock.cpp b/test/application/MissionManager/tool/src/MissionManagerMock.cpp deleted file mode 100644 index 278c86a7..00000000 --- a/test/application/MissionManager/tool/src/MissionManagerMock.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MissionManagerMock.h" -#include "ILog.h" -// const StatusCode MissionManagerTest::SetAppMonitor(std::shared_ptr &monitor) -// { -// LogInfo("MissionManagerTest::SetAppMonitor\n"); -// StatusCode code = SetAppMonitorTrace(monitor); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return MissionManager::SetAppMonitor(monitor); -// } -// return code; -// } -// const StatusCode MissionManagerTest::SetAppMonitorTrace(std::shared_ptr &monitor) -// { -// LogInfo("MissionManagerTest::SetAppMonitorTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MissionManagerTest::GetAllLedsTrace(std::map> &allLeds) -// { -// LogInfo("MissionManagerTest::GetAllLedsTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MissionManagerTest::GetAllKeysTrace(std::map> &allKeys) -// { -// LogInfo("MissionManagerTest::GetAllKeysTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/MissionManagerMock.h b/test/application/MissionManager/tool/src/MissionManagerMock.h deleted file mode 100644 index e9a4ee48..00000000 --- a/test/application/MissionManager/tool/src/MissionManagerMock.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MISSION_MANAGER_MOCK_H -#define MISSION_MANAGER_MOCK_H -#include "MissionManager.h" -#include "MissionManagerTestTool.h" -class MissionManagerTest : public MissionManager -{ -public: - MissionManagerTest() = default; - virtual ~MissionManagerTest() = default; - // const StatusCode SetAppMonitor(std::shared_ptr &monitor) override; - -protected: - // virtual const StatusCode SetAppMonitorTrace(std::shared_ptr &monitor); -}; -class MissionManagerMock : public MissionManagerTest -{ -public: - MissionManagerMock() = default; - virtual ~MissionManagerMock() = default; - // MOCK_METHOD1(SetAppMonitorTrace, const StatusCode(std::shared_ptr &)); -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/MissionManagerTestTool.cpp b/test/application/MissionManager/tool/src/MissionManagerTestTool.cpp deleted file mode 100644 index 5c1e174c..00000000 --- a/test/application/MissionManager/tool/src/MissionManagerTestTool.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MissionManagerTestTool.h" -#include "ILog.h" -#include "LinuxApi.h" -#include "MissionManagerMakePtrTest.h" -#include "MissionManagerMock.h" -#include "UpgradeTool.h" -void MissionManagerTestTool::Init(void) -{ - mMissionManagerMock = std::make_shared(); - std::shared_ptr mock = std::dynamic_pointer_cast(mMissionManagerMock); - OverrideMissionManagerMakePtrObject(mock); -} -void MissionManagerTestTool::UnInit(void) -{ - mMissionManagerMock.reset(); - CancelOverrideMissionManagerMakePtrObject(); -} -void MissionManagerTestTool::CreateUpgradeFile(void) -{ - fx_system("touch " SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test"); - UpgradeTool::GetInstance()->PackFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test", - SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, - "1.0.0.0", - "hunting", - "dgiot", - "app"); -} -void MissionManagerTestTool::RemoveUpgradeFile(void) -{ - fx_system("rm " SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH); -} \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/OnMissionStateMock.cpp b/test/application/MissionManager/tool/src/OnMissionStateMock.cpp deleted file mode 100644 index 8b64a894..00000000 --- a/test/application/MissionManager/tool/src/OnMissionStateMock.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "OnMissionStateMock.h" -#include "ILog.h" \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/OnMissionStateMock.h b/test/application/MissionManager/tool/src/OnMissionStateMock.h deleted file mode 100644 index 77ecbb76..00000000 --- a/test/application/MissionManager/tool/src/OnMissionStateMock.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef ON_MISSION_STATE_MOCK_H -#define ON_MISSION_STATE_MOCK_H -#include "MissionManagerTestTool.h" -#include "OnMissionState.h" -class OnMissionStateTest : public OnMissionState -{ -public: - OnMissionStateTest() = default; - virtual ~OnMissionStateTest() = default; - -protected: -}; -class OnMissionStateMock : public OnMissionStateTest -{ -public: - OnMissionStateMock() = default; - virtual ~OnMissionStateMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.cpp b/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.cpp deleted file mode 100644 index cc245e00..00000000 --- a/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "PirTriggeredMissionStateMock.h" -#include "ILog.h" \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.h b/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.h deleted file mode 100644 index 29acdaf1..00000000 --- a/test/application/MissionManager/tool/src/PirTriggeredMissionStateMock.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PIR_TRIGGERED_MISSION_STATE_MOCK_H -#define PIR_TRIGGERED_MISSION_STATE_MOCK_H -#include "MissionManagerTestTool.h" -#include "PirTriggeredMissionState.h" -class PirTriggeredMissionStateTest : public PirTriggeredMissionState -{ -public: - PirTriggeredMissionStateTest() = default; - virtual ~PirTriggeredMissionStateTest() = default; - -protected: -}; -class PirTriggeredMissionStateMock : public PirTriggeredMissionStateTest -{ -public: - PirTriggeredMissionStateMock() = default; - virtual ~PirTriggeredMissionStateMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/SdCardHandleStateMock.cpp b/test/application/MissionManager/tool/src/SdCardHandleStateMock.cpp deleted file mode 100644 index 1ef9deb9..00000000 --- a/test/application/MissionManager/tool/src/SdCardHandleStateMock.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "SdCardHandleStateMock.h" -#include "ILog.h" -#include "StatusCode.h" -SdCardHandleStateTest::SdCardHandleStateTest() -{ -} -bool SdCardHandleStateTest::SdCardEventHandle(VStateMachineData *msg) -{ - std::shared_ptr message = std::dynamic_pointer_cast(msg->GetMessageObj()); - std::shared_ptr> data = - std::dynamic_pointer_cast>(message->mMissionData); - if (StorageEvent::SD_CARD_INSERT == data->mData) { - const std::string realSavePah = SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH; - bool directoryExist = StorageBase::CheckDirectory(realSavePah.c_str()); - if (false == directoryExist) { - LogWarning("Directory not exist.\n"); - } - } - return SdCardHandleState::SdCardEventHandle(msg); -} \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/SdCardHandleStateMock.h b/test/application/MissionManager/tool/src/SdCardHandleStateMock.h deleted file mode 100644 index 5f06a26a..00000000 --- a/test/application/MissionManager/tool/src/SdCardHandleStateMock.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef SD_CARD_HANDLE_STATE_MOCK_H -#define SD_CARD_HANDLE_STATE_MOCK_H -#include "MediaMonitorMock.h" -#include "MissionManagerTestTool.h" -#include "SdCardHandleState.h" -#include "StorageBase.h" -class SdCardHandleStateTest : public SdCardHandleState, virtual public MediaMonitorTrace, public StorageBase -{ -public: - SdCardHandleStateTest(); - virtual ~SdCardHandleStateTest() = default; - -private: - bool SdCardEventHandle(VStateMachineData *msg); -}; -class SdCardHandleStateMock : public MediaMonitorMock, public SdCardHandleStateTest -{ -public: - SdCardHandleStateMock() = default; - virtual ~SdCardHandleStateMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/TestMissionStateMock.cpp b/test/application/MissionManager/tool/src/TestMissionStateMock.cpp deleted file mode 100644 index 13a58ccb..00000000 --- a/test/application/MissionManager/tool/src/TestMissionStateMock.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "TestMissionStateMock.h" -#include "AppMonitorMock.h" -#include "ILog.h" -StatusCode TestMissionStateTest::GetProductInfo(AppGetProductInfo ¶m) -{ - LogInfo("TestMissionStateTest::GetProductInfo\n"); - StatusCode code = GetProductInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetProductInfo(param); - } - return code; -} -StatusCode TestMissionStateTest::GetDeviceAttr(AppGetDeviceAttr ¶m) -{ - LogInfo("TestMissionStateTest::GetDeviceAttr\n"); - StatusCode code = GetDeviceAttrTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetDeviceAttr(param); - } - return code; -} -StatusCode TestMissionStateTest::GetMediaInfo(AppGetMediaInfo ¶m) -{ - LogInfo("TestMissionStateTest::GetMediaInfo\n"); - StatusCode code = GetMediaInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetMediaInfo(param); - } - return code; -} -StatusCode TestMissionStateTest::GetSdCardInfo(AppGetSdCardInfo ¶m) -{ - LogInfo("TestMissionStateTest::GetSdCardInfo\n"); - StatusCode code = GetSdCardInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetSdCardInfo(param); - } - return code; -} -StatusCode TestMissionStateTest::GetBatteryInfo(AppGetBatteryInfo ¶m) -{ - LogInfo("TestMissionStateTest::GetBatteryInfo\n"); - StatusCode code = GetBatteryInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetBatteryInfo(param); - } - return code; -} -StatusCode TestMissionStateTest::GetParamValue(AppParamValue ¶m) -{ - LogInfo("TestMissionStateTest::GetParamValue\n"); - StatusCode code = GetParamValueTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetParamValue(param); - } - return code; -} -StatusCode TestMissionStateTest::GetCapability(AppGetCapability ¶m) -{ - LogInfo("TestMissionStateTest::GetCapability\n"); - StatusCode code = GetCapabilityTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetCapability(param); - } - return code; -} -StatusCode TestMissionStateTest::GetLockVideoStatus(LockVideoStatus ¶m) -{ - LogInfo("TestMissionStateTest::GetLockVideoStatus\n"); - StatusCode code = GetLockVideoStatusTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetLockVideoStatus(param); - } - return code; -} -StatusCode TestMissionStateTest::GetStorageInfo(std::vector ¶m) -{ - LogInfo("TestMissionStateTest::GetStorageInfo\n"); - StatusCode code = GetStorageInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetStorageInfo(param); - } - return code; -} -StatusCode TestMissionStateTest::GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) -{ - LogInfo("TestMissionStateTest::GetStorageFileList\n"); - StatusCode code = GetStorageFileListTrace(fileInfo, param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::GetStorageFileList(fileInfo, param); - } - return code; -} -StatusCode TestMissionStateTest::SetDateTime(const AppSetDateTime ¶m) -{ - LogInfo("TestMissionStateTest::SetDateTime\n"); - LogInfo("mYear = %u\n", param.mYear); - LogInfo("mMonth = %02u\n", param.mMonth); - LogInfo("mDay = %02u\n", param.mDay); - LogInfo("mHour = %02u\n", param.mHour); - LogInfo("mMinute = %02u\n", param.mMinute); - LogInfo("mSecond = %02u\n", param.mSecond); - StatusCode code = SetDateTimeTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::SetDateTime(param); - } - return code; -} -StatusCode TestMissionStateTest::SetTimeZone(const unsigned int &zone) -{ - LogInfo("TestMissionStateTest::SetTimeZone = %u\n", zone); - StatusCode code = SetTimeZoneTrace(zone); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::SetTimeZone(zone); - } - return code; -} -StatusCode TestMissionStateTest::SetParamValue(const AppSetParamValue ¶m) -{ - LogInfo("TestMissionStateTest::SetParamValue.\n"); - StatusCode code = SetParamValueTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::SetParamValue(param); - } - return code; -} -StatusCode TestMissionStateTest::EnterRecorder(void) -{ - LogInfo("TestMissionStateTest::EnterRecorder.\n"); - StatusCode code = EnterRecorderTrace(); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::EnterRecorder(); - } - return code; -} -StatusCode TestMissionStateTest::AppPlayback(const PlayBackEvent &event) -{ - LogInfo("TestMissionStateTest::AppPlayback.\n"); - StatusCode code = AppPlaybackTrace(event); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::AppPlayback(event); - } - return code; -} -StatusCode TestMissionStateTest::UploadFile(AppUploadFile ¶m) -{ - LogInfo("TestMissionStateTest::UploadFile\n"); - StatusCode code = UploadFileTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::UploadFile(param); - } - return code; -} -StatusCode TestMissionStateTest::AppClientConnected(std::shared_ptr &client) -{ - LogInfo("TestMissionStateTest::AppClientConnected\n"); - StatusCode code = AppClientConnectedTrace(client); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppMonitor::AppClientConnected(client); - } - return code; -} \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/TestMissionStateMock.h b/test/application/MissionManager/tool/src/TestMissionStateMock.h deleted file mode 100644 index 3590c2b7..00000000 --- a/test/application/MissionManager/tool/src/TestMissionStateMock.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef TEST_MISSION_STATE_MOCK_H -#define TEST_MISSION_STATE_MOCK_H -#include "AppMonitorMock.h" -#include "MissionManagerTestTool.h" -#include "TestMissionState.h" -class TestMissionStateTest : public TestMissionState, virtual public AppMonitorTrace -{ -public: - TestMissionStateTest() = default; - virtual ~TestMissionStateTest() = default; - StatusCode GetProductInfo(AppGetProductInfo ¶m) override; - StatusCode GetDeviceAttr(AppGetDeviceAttr ¶m) override; - StatusCode GetMediaInfo(AppGetMediaInfo ¶m) override; - StatusCode GetSdCardInfo(AppGetSdCardInfo ¶m) override; - StatusCode GetBatteryInfo(AppGetBatteryInfo ¶m) override; - StatusCode GetParamValue(AppParamValue ¶m) override; - StatusCode GetCapability(AppGetCapability ¶m) override; - StatusCode GetLockVideoStatus(LockVideoStatus ¶m) override; - StatusCode GetStorageInfo(std::vector ¶m) override; - StatusCode GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) override; - StatusCode SetDateTime(const AppSetDateTime ¶m) override; - StatusCode SetTimeZone(const unsigned int &zone) override; - StatusCode SetParamValue(const AppSetParamValue ¶m) override; - StatusCode EnterRecorder(void) override; - StatusCode AppPlayback(const PlayBackEvent &event) override; - StatusCode UploadFile(AppUploadFile ¶m) override; - StatusCode AppClientConnected(std::shared_ptr &client) override; - -protected: -}; -class TestMissionStateMock : public AppMonitorMock, public TestMissionStateTest -{ -public: - TestMissionStateMock() = default; - virtual ~TestMissionStateMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/TopStateMock.cpp b/test/application/MissionManager/tool/src/TopStateMock.cpp deleted file mode 100644 index 183ca742..00000000 --- a/test/application/MissionManager/tool/src/TopStateMock.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "TopStateMock.h" \ No newline at end of file diff --git a/test/application/MissionManager/tool/src/TopStateMock.h b/test/application/MissionManager/tool/src/TopStateMock.h deleted file mode 100644 index a54480f6..00000000 --- a/test/application/MissionManager/tool/src/TopStateMock.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef TOP_STATE_MOCK_H -#define TOP_STATE_MOCK_H -#include "MediaMonitorMock.h" -#include "MissionManagerTestTool.h" -#include "TopState.h" -class TopStateTest : public TopState, virtual public MediaMonitorTrace -{ -public: - TopStateTest() = default; - virtual ~TopStateTest() = default; - -protected: -}; -class TopStateMock : public MediaMonitorMock, public TopStateTest -{ -public: - TopStateMock() = default; - virtual ~TopStateMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/CMakeLists.txt b/test/hal/tool/CMakeLists.txt deleted file mode 100644 index 88566d5c..00000000 --- a/test/hal/tool/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -include(${HAL_SOURCE_PATH}/build/hal.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/KeyControl/include - ${UTILS_SOURCE_PATH}/LedControl/include - ${HAL_SOURCE_PATH}/src - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET HalTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} Hal KeyControl LedControl LinuxApiMock Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - HalTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/hal/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - HalTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/hal/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make HalTestTool_code_check - COMMAND make HalTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/hal/tool/src/CameraHalMock.cpp b/test/hal/tool/src/CameraHalMock.cpp deleted file mode 100644 index 2531b059..00000000 --- a/test/hal/tool/src/CameraHalMock.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "CameraHalMock.h" -#include "HalCppMock.h" -#include "ILog.h" -CameraHalTest::CameraHalTest(const CameraType &cameraType) : mCameraType(cameraType) -{ -} -void CameraHalTest::SetCameraMonitor(std::shared_ptr &monitor) -{ - LogInfo("CameraHalTest::SetCameraMonitor.\n"); - mMonitor = monitor; - SetCameraMonitorTrace(monitor); - if (nullptr != mFastBootEvent) { - monitor->ReportEvent(*(mFastBootEvent.get())); - } -} -void CameraHalTest::SetCameraMonitorTrace(std::shared_ptr &monitor) -{ - LogWarning("SetCameraMonitorTrace.\n"); -} -StatusCode CameraHalTest::StartSingleTask(const CameraTaskParam ¶m) -{ - LogInfo("CameraHalTest::StartSingleTask\n"); - StatusCode code = StartSingleTaskTrace(param); - // if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - // return HalCpp::GetAllKeys(allKeys); - // } - return code; -} -StatusCode CameraHalTest::StartSingleTaskTrace(const CameraTaskParam ¶m) -{ - LogInfo("CameraHalTest::StartSingleTaskTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -CameraHalMock::CameraHalMock(const CameraType &cameraType) : CameraHalTest(cameraType) -{ -} -void CameraHalMock::MockReportCameraEvent(const CameraReportEvent &event) -{ - auto monitor = mMonitor.lock(); - if (mMonitor.expired()) { - LogWarning("monitor is nullptr.\n"); - mFastBootEvent = std::make_shared(event.mFileName, event.mCameraType); - return; - } - monitor->ReportEvent(event); -} \ No newline at end of file diff --git a/test/hal/tool/src/CameraHalMock.h b/test/hal/tool/src/CameraHalMock.h deleted file mode 100644 index c8144ba2..00000000 --- a/test/hal/tool/src/CameraHalMock.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef CAMERA_HAL_MOCK_H -#define CAMERA_HAL_MOCK_H -#include "HalCpp.h" -#include "HalTestTool.h" -class CameraHalTest : public VCameraHal -{ -public: - CameraHalTest(const CameraType &cameraType); - virtual ~CameraHalTest() = default; - void SetCameraMonitor(std::shared_ptr &monitor) override; - StatusCode StartSingleTask(const CameraTaskParam ¶m) override; - -private: - virtual void SetCameraMonitorTrace(std::shared_ptr &monitor); - virtual StatusCode StartSingleTaskTrace(const CameraTaskParam ¶m); - -protected: - const CameraType mCameraType; - std::weak_ptr mMonitor; - std::shared_ptr mFastBootEvent; -}; -class CameraHalMock : public CameraHalTest -{ -public: - CameraHalMock(const CameraType &cameraType); - virtual ~CameraHalMock() = default; - void MockReportCameraEvent(const CameraReportEvent &event); - MOCK_METHOD1(SetCameraMonitorTrace, void(std::shared_ptr &)); - MOCK_METHOD1(StartSingleTaskTrace, StatusCode(const CameraTaskParam &)); -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/HalCppMock.cpp b/test/hal/tool/src/HalCppMock.cpp deleted file mode 100644 index 0c172081..00000000 --- a/test/hal/tool/src/HalCppMock.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "HalCppMock.h" -#include "ILog.h" -StatusCode HalCppTest::GetAllLeds(std::map> &allLeds) -{ - LogInfo("HalCppTest::GetAllLeds\n"); - StatusCode code = GetAllLedsTrace(allLeds); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return HalCpp::GetAllLeds(allLeds); - } - return code; -} -StatusCode HalCppTest::GetAllLedsTrace(std::map> &allLeds) -{ - LogInfo("HalCppTest::GetAllLedsTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode HalCppTest::GetAllKeys(std::map> &allKeys) -{ - LogInfo("HalCppTest::GetAllKeys\n"); - StatusCode code = GetAllKeysTrace(allKeys); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return HalCpp::GetAllKeys(allKeys); - } - return code; -} -StatusCode HalCppTest::GetAllKeysTrace(std::map> &allKeys) -{ - LogInfo("HalCppTest::GetAllKeysTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode HalCppTest::GetWifiHal(std::shared_ptr &wifi) -{ - LogInfo("HalCppTest::GetAllKeys\n"); - StatusCode code = GetWifiHalTrace(wifi); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return HalCpp::GetWifiHal(wifi); - } - return code; -} -StatusCode HalCppTest::GetCameraHal(std::map> &allCameras) -{ - LogInfo("HalCppTest::GetCameraHal\n"); - StatusCode code = GetCameraHalTrace(allCameras); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return HalCpp::GetCameraHal(allCameras); - } - return code; -} -StatusCode HalCppTest::GetWifiHalTrace(std::shared_ptr &wifi) -{ - LogInfo("HalCppTest::GetWifiHalTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode HalCppTest::GetCameraHalTrace(std::map> &allCameras) -{ - LogInfo("HalCppTest::GetCameraHalTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} \ No newline at end of file diff --git a/test/hal/tool/src/HalCppMock.h b/test/hal/tool/src/HalCppMock.h deleted file mode 100644 index 46926eb4..00000000 --- a/test/hal/tool/src/HalCppMock.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef HAL_CPP_MOCK_H -#define HAL_CPP_MOCK_H -#include "HalCpp.h" -#include "HalTestTool.h" -class HalCppTest : public HalCpp -{ -public: - HalCppTest() = default; - virtual ~HalCppTest() = default; - StatusCode GetAllLeds(std::map> &allLeds) override; - StatusCode GetAllKeys(std::map> &allKeys) override; - StatusCode GetWifiHal(std::shared_ptr &wifi) override; - StatusCode GetCameraHal(std::map> &allCameras) override; - -protected: - virtual StatusCode GetAllLedsTrace(std::map> &allLeds); - virtual StatusCode GetAllKeysTrace(std::map> &allKeys); - virtual StatusCode GetWifiHalTrace(std::shared_ptr &wifi); - virtual StatusCode GetCameraHalTrace(std::map> &allCameras); -}; -class HalCppMock : public HalCppTest -{ -public: - HalCppMock() = default; - virtual ~HalCppMock() = default; - MOCK_METHOD1(GetAllLedsTrace, StatusCode(std::map> &)); - MOCK_METHOD1(GetAllKeysTrace, StatusCode(std::map> &)); - MOCK_METHOD1(GetWifiHalTrace, StatusCode(std::shared_ptr &)); - MOCK_METHOD1(GetCameraHalTrace, StatusCode(std::map> &)); -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/HalMakePtrTest.cpp b/test/hal/tool/src/HalMakePtrTest.cpp deleted file mode 100644 index 49ecd77b..00000000 --- a/test/hal/tool/src/HalMakePtrTest.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "HalMakePtrTest.h" -#include "ILog.h" -void OverrideHalMakePtrObject(std::shared_ptr &halMock, std::shared_ptr &sdCardHalMock) -{ - std::shared_ptr impl = std::make_shared(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - test->mHalCppMock = halMock; - test->mSdCardHalMock = sdCardHalMock; - } - HalMakePtr::GetInstance(&impl); -} -void CancelOverrideHalMakePtrObject(void) -{ - std::shared_ptr tmp = HalMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mHalCppMock.reset(); - test->mSdCardHalMock.reset(); - } - std::shared_ptr impl = std::make_shared(); - HalMakePtr::GetInstance(&impl); -} -HalMakePtrTest::HalMakePtrTest() -{ -} -HalMakePtrTest::~HalMakePtrTest() -{ - mHalCppMock.reset(); - mSdCardHalMock.reset(); -} -StatusCode HalMakePtrTest::CreateHalSharePtr(std::shared_ptr &impl) -{ - if (mHalCppMock) { - LogInfo("CreateHalSharePtr mHalCppMock\n"); - impl = mHalCppMock; - } - else { - LogWarning("CreateMcuManager failed:mHalCppMock is nullptr.\n"); - } - return CreateStatusCode(STATUS_CODE_OK); -} -StatusCode HalMakePtrTest::CreateSdCardHal(std::shared_ptr &impl) -{ - impl = mSdCardHalMock; - return CreateStatusCode(STATUS_CODE_OK); -} -StatusCode HalMakePtrTest::CreateAllKeyHal(std::vector> &keys) -{ - if (mKeysMock.size() > 0) { - LogInfo("Create mock keys.size = %d\n", mKeysMock.size()); - keys = mKeysMock; - } - else { - HalMakePtr::CreateAllKeyHal(keys); - } - return CreateStatusCode(STATUS_CODE_OK); -} \ No newline at end of file diff --git a/test/hal/tool/src/HalMakePtrTest.h b/test/hal/tool/src/HalMakePtrTest.h deleted file mode 100644 index d2ca99db..00000000 --- a/test/hal/tool/src/HalMakePtrTest.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef HAL_MAKE_PTR_TEST_H -#define HAL_MAKE_PTR_TEST_H -#include "HalCppMock.h" -#include "HalMakePtr.h" -#include "HalTestTool.h" -#include "KeyControlMock.h" -#include "SdCardHalMock.h" -void OverrideHalMakePtrObject(std::shared_ptr &halMock, std::shared_ptr &sdCardHalMock); -void CancelOverrideHalMakePtrObject(void); -class HalMakePtrTest : public HalMakePtr -{ -public: - HalMakePtrTest(); - virtual ~HalMakePtrTest(); - StatusCode CreateHalSharePtr(std::shared_ptr &impl) override; - StatusCode CreateSdCardHal(std::shared_ptr &impl) override; - StatusCode CreateAllKeyHal(std::vector> &keys) override; - -public: - std::shared_ptr mHalCppMock; - std::shared_ptr mSdCardHalMock; - std::vector> mKeysMock; -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/HalTestTool.cpp b/test/hal/tool/src/HalTestTool.cpp deleted file mode 100644 index c1d9b6d9..00000000 --- a/test/hal/tool/src/HalTestTool.cpp +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "HalTestTool.h" -#include "CameraHalMock.h" -#include "HalCppMock.h" -#include "HalMakePtrTest.h" -#include "ILog.h" -#include "KeyControl.h" -#include "KeyControlMock.h" -#include "LedControlMock.h" -#include "SdCardHalMock.h" -#include "WifiHalMock.h" -#include -void HalTestTool::Init(void) -{ - mHalMock = std::make_shared(); - mSdCardHal = std::make_shared(); - HalMockInit(mHalMock); - // TODO: 初始化mSdCardHal - std::shared_ptr halMock = std::dynamic_pointer_cast(mHalMock); - std::shared_ptr sdCardHalMock = std::dynamic_pointer_cast(mSdCardHal); - OverrideHalMakePtrObject(halMock, sdCardHalMock); -} -void HalTestTool::InitSdCardHal(std::shared_ptr &mock) -{ - std::shared_ptr sdCardHal = std::dynamic_pointer_cast(mSdCardHal); - if (nullptr == sdCardHal) { - LogError("SdCardHalMock is null.\n"); - return; - } - sdCardHal->SetLinuxTest(mock); -} -void HalTestTool::UnInit(void) -{ - mHalMock.reset(); - CancelOverrideHalMakePtrObject(); - mAllKeys.clear(); - mAllLeds.clear(); -} -void HalTestTool::SetAllKeysResult(std::map> &allKeys) -{ - std::shared_ptr halMock = mHalMock; - SetAllKeysResult(halMock, allKeys); - mAllKeys = allKeys; -} -void HalTestTool::SetAllLedsResult(std::map> &allLeds) -{ - std::shared_ptr halMock = mHalMock; - SetAllLedsResult(halMock, allLeds); - mAllLeds = allLeds; -} -void HalTestTool::SetAllCamerasResult(std::map> &allCameras) -{ - std::shared_ptr halMock = mHalMock; - SetAllCamerasResult(halMock, allCameras); - mAllCameras = allCameras; -} -void HalTestTool::MockKeyClick(const std::string &keyName, const unsigned int &pressingTimeMs) -{ - std::shared_ptr key = SearchKey(keyName); - if (!key) { - LogError("Can't mock key event, key not found.\n"); - return; - } - std::shared_ptr keyMock = std::dynamic_pointer_cast(key); - if (keyMock) { - if (keyMock->MockKeyClick(pressingTimeMs)) { - DeviceManagerNotice(keyName, pressingTimeMs); - } - } - else { - LogWarning("Key mock error.\n"); - } -} -void HalTestTool::SetLedStateExpectations(const std::string &ledName, const LedState &state, - const unsigned int &aliveTimeMs, const unsigned int &blinkTimeMs) -{ - std::shared_ptr &led = SearchLed(ledName); - // if (!led) { - // LogError("Can't set led state, led not found.\n"); - // return; - // } - // std::shared_ptr ledMock = std::dynamic_pointer_cast(led); - // if (ledMock) { - // LedControlMock::SetLedStateMock(ledMock, state, aliveTimeMs, blinkTimeMs); - // } - // else { - // LogWarning("led mock error.\n"); - // } - LedControlMock::SetLedStateMock(led, state, aliveTimeMs, blinkTimeMs); -} -void HalTestTool::MockReportCameraEvent(const std::string &fileName, const CameraType &cameraType) -{ - std::shared_ptr camera = SearchCamera(cameraType); - if (!camera) { - LogError("Can't mock camera event, camera not found.\n"); - return; - } - std::shared_ptr cameraMock = std::dynamic_pointer_cast(camera); - if (cameraMock) { - CameraReportEvent report(fileName, cameraType); - cameraMock->MockReportCameraEvent(report); - } - else { - LogWarning("camera mock error.\n"); - } -} -void HalTestTool::DeviceManagerNotice(const std::string &keyName, const unsigned int &pressingTimeMs) -{ -} -void HalTestTool::KeyEventHappendOnce(std::shared_ptr &vMock, const unsigned int &pressingTimeMs) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(_, _, _)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - constexpr int CLICK_EVENT_HAPPENED_ONLY_ONCE = 1; - if (KEY_ACTION_SHORT_CLICK <= pressingTimeMs && pressingTimeMs < KEY_ACTION_HOLD_DWON) { - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::SHORT_CLICK, _)) - .Times(CLICK_EVENT_HAPPENED_ONLY_ONCE) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - if (KEY_ACTION_HOLD_DWON <= pressingTimeMs) { - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::HOLD_DOWN, _)) - .Times(AtLeast(1)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } -} -std::shared_ptr HalTestTool::SearchKey(const std::string &keyName) -{ - std::shared_ptr mock; - std::map>::iterator iter; - iter = mAllKeys.find(keyName); - if (iter != mAllKeys.end()) { - mock = std::dynamic_pointer_cast(mAllKeys[keyName]); - } - else { - LogWarning("Can't found the key control.\n"); - } - return mock; -} -void HalTestTool::InitAllKeysMock(std::map> &allKeys) -{ - std::map>::iterator iter; - for (iter = allKeys.begin(); iter != allKeys.end(); ++iter) { - std::shared_ptr keyHal = iter->second; - InitKeysMock(keyHal); - } -} -void HalTestTool::InitKeysMock(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - constexpr int KEY_SHOULD_NOT_TRIGGER_WHEN_NOBODY_SET_KEY_RESULT = 0; - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(_, _, _)).Times(KEY_SHOULD_NOT_TRIGGER_WHEN_NOBODY_SET_KEY_RESULT); -} -void HalTestTool::HalMockInit(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - EXPECT_CALL(*mock.get(), GetAllLedsTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetAllKeysTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - std::shared_ptr wifiHal = std::make_shared(); - std::shared_ptr wifiHalMock = std::dynamic_pointer_cast(wifiHal); - EXPECT_CALL(*wifiHalMock.get(), OpenApMode()).WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_OK)))); - EXPECT_CALL(*mock.get(), GetWifiHalTrace(_)) - .WillRepeatedly(DoAll(SetArgReferee<0>(wifiHal), Return(CreateStatusCode(STATUS_CODE_OK)))); - EXPECT_CALL(*mock.get(), GetCameraHalTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); -} -void HalTestTool::SetAllKeysResult(std::shared_ptr &vMock, - std::map> &allKeys) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - // EXPECT_CALL(*mock.get(), GetAllKeysTrace(_)) - // .WillRepeatedly(DoAll(SetArgReferee<0>(allKeys), Return(CreateStatusCode(STATUS_CODE_OK)))); - // InitAllKeysMock(allKeys); - std::vector> keysMock; - std::shared_ptr impl = HalMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - for (auto &key : allKeys) { - std::shared_ptr keyMock = std::dynamic_pointer_cast(key.second); - if (keyMock) { - keysMock.push_back(keyMock); - LogInfo("Create key mock. name = %s\n", keyMock->GetKeyName().c_str()); - } - else { - LogWarning("Can't create key mock.\n"); - } - } - test->mKeysMock = keysMock; - LogInfo("Create all keys mock. size = %d\n", keysMock.size()); - } -} -void HalTestTool::SetAllLedsResult(std::shared_ptr &vMock, - std::map> &allLeds) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - /** - * @brief - * Note: The SetArgReference function cannot be used here, as it will prevent the smart pointer from being released - * within the TEST range, resulting in an error only being reported after all test cases have finished running. - * Can't use: - * EXPECT_CALL(*mock.get(), GetAllLedsTrace(_)) - * .WillRepeatedly(DoAll(SetArgReferee<0>(allLeds), Return(CreateStatusCode(STATUS_CODE_OK)))); - */ - auto getAllLeds = [=, &allLeds](std::map> &setAllLeds) { - setAllLeds = allLeds; - }; - EXPECT_CALL(*mock.get(), GetAllLedsTrace(_)) - .WillRepeatedly(DoAll(WithArgs<0>(Invoke(getAllLeds)), Return(CreateStatusCode(STATUS_CODE_OK)))); - InitAllLedsMock(allLeds); -} -std::shared_ptr &HalTestTool::SearchLed(const std::string &ledName) -{ - static std::shared_ptr noLed = std::make_shared(); - std::shared_ptr mock; - std::map>::iterator iter; - iter = mAllLeds.find(ledName); - if (iter != mAllLeds.end()) { - // mock = std::dynamic_pointer_cast(mAllLeds[ledName]); - std::shared_ptr &existLed = mAllLeds[ledName]; - return existLed; - } - LogWarning("Can't found the led control.\n"); - return noLed; -} -void HalTestTool::InitAllLedsMock(std::map> &allLeds) -{ - std::map>::iterator iter; - for (iter = allLeds.begin(); iter != allLeds.end(); ++iter) { - std::shared_ptr ledHal = iter->second; - InitLedsMock(ledHal); - } -} -void HalTestTool::InitLedsMock(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - constexpr int LED_SHOULD_NOT_BE_CONTROLED_WHEN_NOBODY_CONTROL_IT = 0; - EXPECT_CALL(*mock.get(), SetLedStateTrace(_)).Times(LED_SHOULD_NOT_BE_CONTROLED_WHEN_NOBODY_CONTROL_IT); -} -void HalTestTool::SetAllCamerasResult(std::shared_ptr &vMock, - std::map> &allCameras) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - /** - * @brief - * Note: The SetArgReference function cannot be used here, as it will prevent the smart pointer from being released - * within the TEST range, resulting in an error only being reported after all test cases have finished running. - * Can't use: - * EXPECT_CALL(*mock.get(), GetCameraHalTrace(_)) - * .WillRepeatedly(DoAll(SetArgReferee<0>(allCameras), Return(CreateStatusCode(STATUS_CODE_OK)))); - */ - auto getAllCameras = [=, &allCameras](std::map> &setAllCameras) { - setAllCameras = allCameras; - }; - EXPECT_CALL(*mock.get(), GetCameraHalTrace(_)) - .WillRepeatedly(DoAll(WithArgs<0>(Invoke(getAllCameras)), Return(CreateStatusCode(STATUS_CODE_OK)))); - InitAllCamerasMock(allCameras); -} -std::shared_ptr HalTestTool::SearchCamera(const CameraType &cameraType) -{ - std::shared_ptr mock; - std::map>::iterator iter; - iter = mAllCameras.find(cameraType); - if (iter != mAllCameras.end()) { - mock = std::dynamic_pointer_cast(mAllCameras[cameraType]); - } - else { - LogWarning("Can't found the camera control.\n"); - } - return mock; -} -void HalTestTool::InitAllCamerasMock(std::map> &allCameras) -{ - std::map>::iterator iter; - for (iter = allCameras.begin(); iter != allCameras.end(); ++iter) { - std::shared_ptr cameraHal = iter->second; - InitCamerasMock(cameraHal); - } -} -void HalTestTool::InitCamerasMock(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - constexpr int USER_SHOULD_SET_CAMERA_MONITER = 1; - // constexpr int SINGLE_TASK_DEFAULT_TIMES = 0; - EXPECT_CALL(*mock.get(), SetCameraMonitorTrace(_)).Times(USER_SHOULD_SET_CAMERA_MONITER); - EXPECT_CALL(*mock.get(), StartSingleTaskTrace(_)) - .Times(AnyNumber()) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_OK)))); -} -void HalTestTool::MockSdCardRemove(std::shared_ptr &mock) -{ - std::shared_ptr sdCardHal = std::dynamic_pointer_cast(mSdCardHal); - if (nullptr == sdCardHal) { - LogError("SdCardHalMock is null.\n"); - return; - } - sdCardHal->MockSdCardRemove(mock); -} -void HalTestTool::MockSdCardInsert(std::shared_ptr &mock) -{ - std::shared_ptr sdCardHal = std::dynamic_pointer_cast(mSdCardHal); - if (nullptr == sdCardHal) { - LogError("SdCardHalMock is null.\n"); - return; - } - sdCardHal->MockSdCardInsert(mock); -} -std::shared_ptr HalTestTool::MakeKeyHalTest(const std::string &keyName) -{ - std::shared_ptr key = std::make_shared(keyName); - std::dynamic_pointer_cast(key)->InitKeyControlMock(); - return key; -} -std::shared_ptr HalTestTool::MakeLedHalTest(const std::string &ledName) -{ - std::shared_ptr led = std::make_shared(ledName); - return led; -} -std::shared_ptr HalTestTool::MakeCameraHalTest(const CameraType &type) -{ - std::shared_ptr camera = std::make_shared(type); - return camera; -} \ No newline at end of file diff --git a/test/hal/tool/src/KeyControlMock.cpp b/test/hal/tool/src/KeyControlMock.cpp deleted file mode 100644 index 6bb42aa8..00000000 --- a/test/hal/tool/src/KeyControlMock.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "KeyControlMock.h" -#include "ILog.h" -unsigned int KeyControlTest::GetStatusCheckPeriodMs(void) -{ - return PERIPHERAL_CHECK_PERIOD_MS; -} -KeyControlTest::KeyControlTest(const std::string &keyName) : mKeyName(keyName) -{ -} -void KeyControlTest::SetKeyMonitor(std::shared_ptr &monitor) -{ - mMonitor = monitor; -} -void KeyControlMock::CheckKeyStatus(void) -{ - KeyHalEvent pinValue = mKeyStatus; - // LogInfo("KeyContrl::CheckKeyValue pin = %d, pinValue = %d\n", mGpioPin, pinValue); - if (pinValue == KeyHalEvent::NOT_PRESSING && KeyHalEvent::NOT_PRESSING != mLastKeyStatus) { - KeyControl::KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); - } - else if (pinValue != KeyHalEvent::NOT_PRESSING && KeyHalEvent::NOT_PRESSING == mLastKeyStatus) { - KeyControl::KeyHalEventTrigger(KeyHalEvent::PRESSING); - } - else { - KeyControl::TimerKeyEventTrigger(KeyHalEvent::PRESSING); - } - mLastKeyStatus = pinValue; -} -void KeyControlTest::KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) -{ - // LogInfo("KeyEventTrigger keyName = %s, event = %s, time = %u\n", keyName.c_str(), PrintKeyEvent(event), timeMs); - KeyEventTriggerTrace(keyName, event, timeMs); - auto monitor = mMonitor.lock(); - if (mMonitor.expired()) { - LogError("monitor is nullptr.\n"); - return; - } - monitor->KeyEventHappened(keyName, static_cast(event), timeMs); -} -const std::string KeyControlTest::GetKeyName(void) -{ - return mKeyName; -} -StatusCode KeyControlTest::KeyEventTriggerTrace(const std::string &keyName, const KeyEvent &event, - const unsigned int &timeMs) -{ - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -KeyControlMock::KeyControlMock(const std::string &keyName) - : KeyControlTest(keyName), mKeyStatus(KeyHalEvent::NOT_PRESSING), mLastKeyStatus(KeyHalEvent::NOT_PRESSING) -{ -} -void KeyControlMock::InitKeyControlMock(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(KeyControl::shared_from_this()); - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), _, _)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); -} -void KeyControlMock::SetKeyEvent(const KeyHalEvent &event) -{ - KeyHalEventTrigger(event); -} -bool KeyControlMock::MockKeyClick(const unsigned int &pressingTimeMs) -{ - if (mMutex.try_lock()) { - auto keyClickThread = [=](std::shared_ptr key) { - KeyEventHappendOnce(key, pressingTimeMs); - // key->KeyHalEventTrigger(KeyHalEvent::PRESSING); - mKeyStatus = KeyHalEvent::PRESSING; - std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs)); - // key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); - mKeyStatus = KeyHalEvent::NOT_PRESSING; - mMutex.unlock(); - }; - std::shared_ptr tmp = KeyControl::shared_from_this(); - std::shared_ptr key = std::dynamic_pointer_cast(tmp); - std::thread clickThread = std::thread(keyClickThread, key); - clickThread.detach(); - return true; - } - LogWarning("MockKeyClick failed, becase key was lock.\n"); - return false; -} -void KeyControlMock::KeyEventHappendOnce(std::shared_ptr &mock, const unsigned int &pressingTimeMs) -{ - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(_, _, _)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - constexpr int CLICK_EVENT_HAPPENED_ONLY_ONCE = 1; - constexpr int HOLD_UP_EVENT_HAPPENED_ONLY_ONCE = 1; - if (KEY_ACTION_SHORT_CLICK <= pressingTimeMs && pressingTimeMs < KEY_ACTION_HOLD_DWON) { - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::SHORT_CLICK, _)) - .Times(CLICK_EVENT_HAPPENED_ONLY_ONCE) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - return; - } - if (KEY_ACTION_HOLD_DWON <= pressingTimeMs) { - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::HOLD_DOWN, _)) - .Times(AtLeast(1)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), KeyEvent::HOLD_UP, _)) - .Times(HOLD_UP_EVENT_HAPPENED_ONLY_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - return; - } - constexpr int KEY_SHOULD_NOT_TRIGGER_WHEN_NOBODY_SET_KEY_RESULT = 0; - EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), _, _)) - .Times(KEY_SHOULD_NOT_TRIGGER_WHEN_NOBODY_SET_KEY_RESULT); -} \ No newline at end of file diff --git a/test/hal/tool/src/KeyControlMock.h b/test/hal/tool/src/KeyControlMock.h deleted file mode 100644 index 6d53c240..00000000 --- a/test/hal/tool/src/KeyControlMock.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef KEY_CONTROL_MOCK_H -#define KEY_CONTROL_MOCK_H -#include "HalTestTool.h" -#include "IHalCpp.h" -#include "KeyControl.h" -#include -class KeyControlTest : public KeyControl, public VKeyHal -{ -public: - KeyControlTest(const std::string &keyName); - virtual ~KeyControlTest() = default; - unsigned int GetStatusCheckPeriodMs(void) override; - void SetKeyMonitor(std::shared_ptr &monitor) override; - // void CheckKeyStatus(void) override; - void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override; - const std::string GetKeyName(void) override; - -private: - virtual StatusCode KeyEventTriggerTrace(const std::string &keyName, const KeyEvent &event, - const unsigned int &timeMs); - -private: - const std::string mKeyName; - std::weak_ptr mMonitor; -}; -class KeyControlMock : public KeyControlTest -{ -public: - KeyControlMock(const std::string &keyName); - virtual ~KeyControlMock() = default; - void CheckKeyStatus(void) override; - void InitKeyControlMock(void); - void SetKeyEvent(const KeyHalEvent &event); - bool MockKeyClick(const unsigned int &pressingTimeMs = 200); - MOCK_METHOD3(KeyEventTriggerTrace, StatusCode(const std::string &, const KeyEvent &, const unsigned int &)); - -private: - void KeyEventHappendOnce(std::shared_ptr &mock, const unsigned int &pressingTimeMs); - -private: - std::mutex mMutex; - KeyHalEvent mKeyStatus; - KeyHalEvent mLastKeyStatus; -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/LedControlMock.cpp b/test/hal/tool/src/LedControlMock.cpp deleted file mode 100644 index 13417e0e..00000000 --- a/test/hal/tool/src/LedControlMock.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "LedControlMock.h" -#include "ILog.h" -LedControlTest::LedControlTest(const std::string &ledName) : mLedName(ledName) -{ - // -} -LedControlMock::LedControlMock(const std::string &ledName) : LedControlTest(ledName) -{ - // -} -StatusCode LedControlTest::SetLedState(const LedState &state) -{ - LogInfo("SetLedState mLedName = %s, state = %s\n", mLedName.c_str(), PrintLedState(state)); - StatusCode code = SetLedStateTrace(state); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - // return SetLedState(state); - } - return code; -} -StatusCode LedControlTest::SetLedStateTrace(const LedState &state) -{ - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -void LedControlMock::SetLedStateMock(std::shared_ptr &vMock, const LedState &state, - const unsigned int &aliveTimeMs, const unsigned int &blinkTimeMs) -{ - LogInfo("LedControlMock::SetLedState\n"); - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("Can't set led state, led not found.\n"); - return; - } - constexpr int SOMEBODY_CONTROL_LED = 1; - EXPECT_CALL(*mock.get(), SetLedStateTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - auto defaultExpectations = [=, &vMock]() { - // std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - // if (!mock) { - // LogError("Can't set led state, led not found.\n"); - // return; - // } - // EXPECT_CALL(*mock.get(), SetLedStateTrace(state)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - }; - if (blinkTimeMs == LED_NOT_BLINK) { - EXPECT_CALL(*mock.get(), SetLedStateTrace(state)) - .Times(SOMEBODY_CONTROL_LED) - .WillRepeatedly(DoAll(Invoke(defaultExpectations), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - else { - EXPECT_CALL(*mock.get(), SetLedStateTrace(state)) - .Times(AtLeast(SOMEBODY_CONTROL_LED)) - .WillRepeatedly(DoAll(Invoke(defaultExpectations), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } -} \ No newline at end of file diff --git a/test/hal/tool/src/LedControlMock.h b/test/hal/tool/src/LedControlMock.h deleted file mode 100644 index 2f566ac1..00000000 --- a/test/hal/tool/src/LedControlMock.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef LED_CONTROL_MOCK_H -#define LED_CONTROL_MOCK_H -#include "HalTestTool.h" -#include "IHalCpp.h" -#include "LedControl.h" -class LedControlTest : public LedControl, public VLedHal -{ -public: - LedControlTest(const std::string &ledName); - virtual ~LedControlTest() = default; - StatusCode SetLedState(const LedState &state) override; - -protected: - virtual StatusCode SetLedStateTrace(const LedState &state); - -private: - const std::string mLedName; -}; -class LedControlMock : public LedControlTest -{ -public: - LedControlMock(const std::string &ledName); - virtual ~LedControlMock() = default; - MOCK_METHOD1(SetLedStateTrace, StatusCode(const LedState &)); - -public: - static void SetLedStateMock(std::shared_ptr &vMock, const LedState &state, const unsigned int &aliveTimeMs, - const unsigned int &blinkTimeMs); -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/SdCardHalMock.cpp b/test/hal/tool/src/SdCardHalMock.cpp deleted file mode 100644 index d332901c..00000000 --- a/test/hal/tool/src/SdCardHalMock.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "SdCardHalMock.h" -#include "ILog.h" -extern const char *SD_CARD_DEVICE; -constexpr int FSTAT_SUCCESS = 0; -constexpr int FILE_EXIST = 0; -constexpr int FILE_NOT_EXIST = -1; -SdCardHalMock::SdCardHalMock() -{ - mDevFd = -1; -} -void SdCardHalMock::SetLinuxTest(std::shared_ptr &mock) -{ - mLinuxTest = mock; - mDevFd = mLinuxTest->GetHandleForMock(); - EXPECT_CALL(*mock.get(), fx_access(SD_CARD_DEVICE, F_OK)).WillRepeatedly(DoAll(Return(FILE_EXIST))); - EXPECT_CALL(*mock.get(), fx_open(SD_CARD_DEVICE, _)).WillRepeatedly(DoAll((Return(mDevFd)))); - auto fstatFunc = [=, &mock](int fd, struct stat *statbuf) { - statbuf->st_mode = S_IFBLK | 0600; - }; - EXPECT_CALL(*mock.get(), fx_fstat(mDevFd, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1>(Invoke(fstatFunc)), Return(FSTAT_SUCCESS))); -} -void SdCardHalMock::MockSdCardRemove(std::shared_ptr &mock) -{ - EXPECT_CALL(*mock.get(), fx_access(SD_CARD_DEVICE, F_OK)).WillRepeatedly(DoAll(Return(FILE_NOT_EXIST))); -} -void SdCardHalMock::MockSdCardInsert(std::shared_ptr &mock) -{ - EXPECT_CALL(*mock.get(), fx_access(SD_CARD_DEVICE, F_OK)).WillRepeatedly(DoAll(Return(FILE_EXIST))); -} \ No newline at end of file diff --git a/test/hal/tool/src/SdCardHalMock.h b/test/hal/tool/src/SdCardHalMock.h deleted file mode 100644 index bf7f5e24..00000000 --- a/test/hal/tool/src/SdCardHalMock.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef SD_CARD_HAL_MOCK_H -#define SD_CARD_HAL_MOCK_H -#include "IHalCpp.h" -#include "LinuxApiMock.h" -#include "SdCardHal.h" -class SdCardHalMock : public SdCardHal -{ -public: - SdCardHalMock(); - virtual ~SdCardHalMock() = default; - void SetLinuxTest(std::shared_ptr &mock); - void MockSdCardRemove(std::shared_ptr &mock); - void MockSdCardInsert(std::shared_ptr &mock); - -private: - std::shared_ptr mLinuxTest; - int mDevFd; -}; -#endif \ No newline at end of file diff --git a/test/hal/tool/src/WifiHalMock.cpp b/test/hal/tool/src/WifiHalMock.cpp deleted file mode 100644 index ff1a404c..00000000 --- a/test/hal/tool/src/WifiHalMock.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "HalCppMock.h" -#include "ILog.h" \ No newline at end of file diff --git a/test/hal/tool/src/WifiHalMock.h b/test/hal/tool/src/WifiHalMock.h deleted file mode 100644 index 47814916..00000000 --- a/test/hal/tool/src/WifiHalMock.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef WIFI_HAL_MOCK_H -#define WIFI_HAL_MOCK_H -#include "HalCpp.h" -#include "HalTestTool.h" -class WifiHalTest : public VWifiHal -{ -public: - WifiHalTest() = default; - virtual ~WifiHalTest() = default; -}; -class WifiHalMock : public WifiHalTest -{ -public: - WifiHalMock() = default; - virtual ~WifiHalMock() = default; - MOCK_METHOD0(OpenApMode, StatusCode(void)); -}; -#endif \ No newline at end of file diff --git a/test/middleware/AppManager/tool/CMakeLists.txt b/test/middleware/AppManager/tool/CMakeLists.txt deleted file mode 100644 index c335eb0f..00000000 --- a/test/middleware/AppManager/tool/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -include(${MIDDLEWARE_SOURCE_PATH}/AppManager/build/app_manager.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/Servers/include - ${UTILS_SOURCE_PATH}/TcpModule/include - ${MIDDLEWARE_SOURCE_PATH}/AppManager/src - ${MIDDLEWARE_SOURCE_PATH}/AppManager/src/Protocol/SixFrame - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET AppManagerTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} AppManager Servers Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - AppManagerTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/AppManager/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - AppManagerTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/AppManager/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make AppManagerTestTool_code_check - COMMAND make AppManagerTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.cpp b/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.cpp deleted file mode 100644 index ad9a7b09..00000000 --- a/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "AppManagerMakePtrTest.h" -#include "ILog.h" -void OverrideAppManagerMakePtrObject(std::shared_ptr &appManagerMock) -{ - std::shared_ptr impl = std::make_shared(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - test->mAppManagerMock = appManagerMock; - } - AppManagerMakePtr::GetInstance(&impl); -} -void CancelOverrideAppManagerMakePtrObject(void) -{ - std::shared_ptr tmp = AppManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mAppManagerMock.reset(); - } - tmp.reset(); - test.reset(); - std::shared_ptr impl = std::make_shared(); - AppManagerMakePtr::GetInstance(&impl); -} -AppManagerMakePtrTest::AppManagerMakePtrTest() -{ - // -} -AppManagerMakePtrTest::~AppManagerMakePtrTest() -{ - // - mAppManagerMock.reset(); -} -const StatusCode AppManagerMakePtrTest::CreateAppManager(std::shared_ptr &impl) -{ - if (mAppManagerMock) { - LogInfo("CreateAppManager mAppManagerMock\n"); - impl = mAppManagerMock; - } - else { - LogWarning("CreateMcuManager failed:mAppManagerMock is nullptr.\n"); - } - return CreateStatusCode(STATUS_CODE_OK); -} \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.h b/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.h deleted file mode 100644 index cf6c97a1..00000000 --- a/test/middleware/AppManager/tool/src/AppManagerMakePtrTest.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef APP_MANAGER_MAKE_PTR_TEST_H -#define APP_MANAGER_MAKE_PTR_TEST_H -#include "AppManagerMock.h" -#include "AppManagerTestTool.h" -#include "SixFrameMakePtr.h" -void OverrideAppManagerMakePtrObject(std::shared_ptr &appManagerMock); -void CancelOverrideAppManagerMakePtrObject(void); -class AppManagerMakePtrTest : public SixFrameMakePtr -{ -public: - AppManagerMakePtrTest(); - virtual ~AppManagerMakePtrTest(); - const StatusCode CreateAppManager(std::shared_ptr &impl) override; - -public: - std::shared_ptr mAppManagerMock; -}; -#endif \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppManagerMock.cpp b/test/middleware/AppManager/tool/src/AppManagerMock.cpp deleted file mode 100644 index 925214d5..00000000 --- a/test/middleware/AppManager/tool/src/AppManagerMock.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "AppManagerMock.h" -#include "ILog.h" -const StatusCode AppManagerTest::SetAppMonitor(std::shared_ptr &monitor) -{ - LogInfo("AppManagerTest::SetAppMonitor\n"); - StatusCode code = SetAppMonitorTrace(monitor); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return AppManager::SetAppMonitor(monitor); - } - return code; -} -const StatusCode AppManagerTest::SetAppMonitorTrace(std::shared_ptr &monitor) -{ - LogInfo("AppManagerTest::SetAppMonitorTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppManagerMock.h b/test/middleware/AppManager/tool/src/AppManagerMock.h deleted file mode 100644 index 03313190..00000000 --- a/test/middleware/AppManager/tool/src/AppManagerMock.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef APP_MANAGER_MOCK_H -#define APP_MANAGER_MOCK_H -#include "AppManager.h" -#include "AppManagerTestTool.h" -class AppManagerTest : public AppManager -{ -public: - AppManagerTest() = default; - virtual ~AppManagerTest() = default; - const StatusCode SetAppMonitor(std::shared_ptr &monitor) override; - -protected: - virtual const StatusCode SetAppMonitorTrace(std::shared_ptr &monitor); -}; -class AppManagerMock : public AppManagerTest -{ -public: - AppManagerMock() = default; - virtual ~AppManagerMock() = default; - MOCK_METHOD1(SetAppMonitorTrace, const StatusCode(std::shared_ptr &)); -}; -#endif \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp b/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp deleted file mode 100644 index fda61f5c..00000000 --- a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "AppManagerTestTool.h" -#include "AppManagerMakePtrTest.h" -#include "AppManagerMock.h" -#include "AppMonitorMock.h" -#include "ILog.h" -#include "ServersMock.h" -#include "TcpModule.h" -constexpr int ONLY_BE_CALLED_ONCE = 1; -AppManagerTestTool::AppManagerTestTool() -{ - mAppClientTool = nullptr; -} -void AppManagerTestTool::Init(void) -{ - ServersMock::GetInstance()->Init(); - mAppManagerMock = std::make_shared(); - AppManagerMockInit(mAppManagerMock); - std::shared_ptr mock = std::dynamic_pointer_cast(mAppManagerMock); - OverrideAppManagerMakePtrObject(mock); -} -void AppManagerTestTool::UnInit(void) -{ - ServersMock::GetInstance()->UnInit(); - mAppManagerMock.reset(); - mAppMonitorMock.reset(); - CancelOverrideAppManagerMakePtrObject(); - if (nullptr != mAppClientTool) { - FreeTcpClient(mAppClientTool); - } -} -void AppManagerTestTool::MockGetProductInfo(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetProductInfoTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetProductInfo(); -} -void AppManagerTestTool::MockGetDeviceAttr(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetDeviceAttrTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetDeviceAttr(); -} -void AppManagerTestTool::MockGetMediaInfo(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetMediaInfoTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetMediaInfo(); -} -void AppManagerTestTool::MockGetSdCardInfo(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetSdCardInfoTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetSdCardInfo(); -} -void AppManagerTestTool::MockGetBatteryInfo(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetBatteryInfoTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetBatteryInfo(); -} -void AppManagerTestTool::MockSetDateTime(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), SetDateTimeTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockSetDateTime(); -} -void AppManagerTestTool::MockSetTimeZone(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), SetTimeZoneTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockSetTimeZone(); -} -void AppManagerTestTool::MockUploadFiles(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), UploadFileTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockUploadFiles(); -} -void AppManagerTestTool::MockGetParamValue(const std::string ¶mName) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetParamValueTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetParamValue(paramName); -} -void AppManagerTestTool::MockGetParamItems(const std::string ¶mName) -{ - // std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - // if (mock) { - // EXPECT_CALL(*mock.get(), GetParamValueTrace(_)) // TODO: - // .Times(ONLY_BE_CALLED_ONCE) - // .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // } - ServersMock::GetInstance()->MockGetParamItems(paramName); -} -void AppManagerTestTool::MockGetCapability(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetCapabilityTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetCapability(); -} -void AppManagerTestTool::MockGetLockVideoStatus(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetLockVideoStatusTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetLockVideoStatus(); -} -void AppManagerTestTool::MockGetStorageInfo(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetStorageInfoTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetStorageInfo(); -} -void AppManagerTestTool::MockGetStorageFileList(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetStorageFileListTrace(_, _)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockGetStorageFileList(); -} -void AppManagerTestTool::MockSetParamValue(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), SetParamValueTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockSetParamValue(); -} -void AppManagerTestTool::MockEnterRecorder(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), EnterRecorderTrace()) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockEnterRecorder(); -} -void AppManagerTestTool::MockAppPlayback(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), AppPlaybackTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - ServersMock::GetInstance()->MockAppPlayback(); -} -void AppManagerTestTool::MockMonitorSetFileList(std::vector &files) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetStorageFileListTrace(_, _)) - .WillRepeatedly(DoAll(SetArgReferee<1>(files), Return(CreateStatusCode(STATUS_CODE_OK)))); - } - else { - LogError("MockMonitorSetFileList failed, mAppMonitorMock isn't mock object.\n"); - } -} -void AppManagerTestTool::MockAppClientConnect(void) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); - if (mock) { - auto appClientConnected = [=](std::shared_ptr &cliient) { - LogInfo("appClientConnected.\n"); - mAppClient = cliient; - }; - EXPECT_CALL(*mock.get(), AppClientConnectedTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce( - DoAll(WithArgs<0>(Invoke(appClientConnected)), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } - auto readFunc = [](const void *data, const ssize_t len, const void *context) -> void { - LogInfo("read data: %s", (char *)data); - }; - auto closedFunc = [](const void *object) -> void { - LogInfo("tcp client closed.\n"); - }; - TcpClientParam param = { - .mIp = APP_MANAGER_DEVICE_IP, - .mPort = APP_MANAGER_TCP_SERVER_PORT, - .mReadFunc = readFunc, - .mClosedFunc = closedFunc, - }; - mAppClientTool = CreateTcpClient(param); - if (nullptr == mAppClientTool) { - LogError("CreateTcpClient failed.\n"); - } -} -void AppManagerTestTool::MockSetRecordingStatus(const RecordingStatus &status) -{ - if (mAppClient) { - mAppClient->SetRecordingStatus(status); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::MockSetMicrophoneStatus(const MicrophoneStatus &status) -{ - if (mAppClient) { - mAppClient->SetMicrophoneStatus(status); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::MockSetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity) -{ - if (mAppClient) { - mAppClient->SetBatteryStatus(status, batteryCapacity); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::MockSetSdCardStatus(const SdCardStatus &status) -{ - if (mAppClient) { - mAppClient->SetSdCardStatus(status); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::MockDeletedFileMessage(const std::string &file, const StorageFileType &type) -{ - if (mAppClient) { - mAppClient->DeletedFileMessage(file, type); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::MockCreatedFileMessage(const std::string &file, const StorageFileType &type) -{ - if (mAppClient) { - mAppClient->CreatedFileMessage(file, type); - return; - } - LogWarning("mAppClient is nullptr.\n"); -} -void AppManagerTestTool::AppManagerMockInit(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - auto getAppMonitor = [=](std::shared_ptr &monitor) { - LogInfo("mAppMonitorMock get.\n"); - mAppMonitorMock = monitor; - AppManagerTestTool::AppMonitorInit(mAppMonitorMock); - }; - EXPECT_CALL(*mock.get(), SetAppMonitorTrace(_)) - .Times(testing::Between(0, 1)) - .WillOnce(DoAll(WithArgs<0>(Invoke(getAppMonitor)), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); -} -std::shared_ptr AppManagerTestTool::MakeMonitorMock(void) -{ - class Monitor : public AppMonitorMock, public AppMonitorTest - { - public: - Monitor() = default; - virtual ~Monitor() = default; - }; - std::shared_ptr monitor = std::make_shared(); - return monitor; -} -void AppManagerTestTool::AppMonitorInit(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (mock) { - EXPECT_CALL(*mock.get(), GetProductInfoTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetDeviceAttrTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetMediaInfoTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetSdCardInfoTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetParamValueTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetCapabilityTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetLockVideoStatusTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetStorageInfoTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetStorageFileListTrace(_, _)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetBatteryInfoTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), SetDateTimeTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), SetTimeZoneTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), SetParamValueTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), EnterRecorderTrace()) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), AppPlaybackTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), UploadFileTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), GetThumbnailTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - EXPECT_CALL(*mock.get(), AppClientConnectedTrace(_)) - .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } -} \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppMonitorMock.cpp b/test/middleware/AppManager/tool/src/AppMonitorMock.cpp deleted file mode 100644 index 7dacab5f..00000000 --- a/test/middleware/AppManager/tool/src/AppMonitorMock.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "AppMonitorMock.h" -#include "ILog.h" -StatusCode AppMonitorTest::GetProductInfo(AppGetProductInfo ¶m) -{ - LogInfo("AppMonitorTest::GetProductInfo\n"); - StatusCode code = GetProductInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetProductInfo(param); - } - return code; -} -StatusCode AppMonitorTrace::GetProductInfoTrace(AppGetProductInfo ¶m) -{ - LogInfo("AppMonitorTrace::GetProductInfoTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetDeviceAttr(AppGetDeviceAttr ¶m) -{ - LogInfo("AppMonitorTest::GetDeviceAttr\n"); - StatusCode code = GetDeviceAttrTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetDeviceAttr(param); - } - return code; -} -StatusCode AppMonitorTrace::GetDeviceAttrTrace(AppGetDeviceAttr ¶m) -{ - LogInfo("AppMonitorTrace::GetDeviceAttrTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetMediaInfo(AppGetMediaInfo ¶m) -{ - LogInfo("AppMonitorTest::GetMediaInfo\n"); - StatusCode code = GetMediaInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetMediaInfo(param); - } - return code; -} -StatusCode AppMonitorTrace::GetMediaInfoTrace(AppGetMediaInfo ¶m) -{ - LogInfo("AppMonitorTrace::GetMediaInfoTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetSdCardInfo(AppGetSdCardInfo ¶m) -{ - LogInfo("AppMonitorTest::GetSdCardInfo\n"); - StatusCode code = GetSdCardInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetSdCardInfo(param); - } - return code; -} -StatusCode AppMonitorTrace::GetSdCardInfoTrace(AppGetSdCardInfo ¶m) -{ - LogInfo("AppMonitorTrace::GetSdCardInfoTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetBatteryInfo(AppGetBatteryInfo ¶m) -{ - LogInfo("AppMonitorTest::GetBatteryInfo\n"); - StatusCode code = GetBatteryInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetBatteryInfo(param); - } - return code; -} -StatusCode AppMonitorTrace::GetBatteryInfoTrace(AppGetBatteryInfo ¶m) -{ - LogInfo("AppMonitorTrace::GetBatteryInfoTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetParamValue(AppParamValue ¶m) -{ - LogInfo("AppMonitorTest::GetParamValue\n"); - StatusCode code = GetParamValueTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetParamValue(param); - } - return code; -} -StatusCode AppMonitorTrace::GetParamValueTrace(AppParamValue ¶m) -{ - LogInfo("AppMonitorTrace::GetParamValueTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetCapability(AppGetCapability ¶m) -{ - LogInfo("AppMonitorTest::GetCapability\n"); - StatusCode code = GetCapabilityTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetCapability(param); - } - return code; -} -StatusCode AppMonitorTrace::GetCapabilityTrace(AppGetCapability ¶m) -{ - LogInfo("AppMonitorTrace::GetCapabilityTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetLockVideoStatus(LockVideoStatus ¶m) -{ - LogInfo("AppMonitorTest::GetLockVideoStatus\n"); - StatusCode code = GetLockVideoStatusTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetLockVideoStatus(param); - } - return code; -} -StatusCode AppMonitorTrace::GetLockVideoStatusTrace(LockVideoStatus ¶m) -{ - LogInfo("AppMonitorTrace::GetLockVideoStatusTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetStorageInfo(std::vector ¶m) -{ - LogInfo("AppMonitorTest::GetStorageInfo\n"); - StatusCode code = GetStorageInfoTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetStorageInfo(param); - } - return code; -} -StatusCode AppMonitorTrace::GetStorageInfoTrace(std::vector ¶m) -{ - LogInfo("AppMonitorTrace::GetStorageInfoTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) -{ - LogInfo("AppMonitorTest::GetStorageFileList\n"); - StatusCode code = GetStorageFileListTrace(fileInfo, param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetStorageFileList(fileInfo, param); - } - return code; -} -StatusCode AppMonitorTrace::GetStorageFileListTrace(const AppGetFileInfo &fileInfo, std::vector ¶m) -{ - LogInfo("AppMonitorTrace::GetStorageFileListTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::SetDateTime(const AppSetDateTime ¶m) -{ - LogInfo("AppMonitorTest::SetDateTime\n"); - LogInfo("mYear = %u\n", param.mYear); - LogInfo("mMonth = %02u\n", param.mMonth); - LogInfo("mDay = %02u\n", param.mDay); - LogInfo("mHour = %02u\n", param.mHour); - LogInfo("mMinute = %02u\n", param.mMinute); - LogInfo("mSecond = %02u\n", param.mSecond); - StatusCode code = SetDateTimeTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::SetDateTime(param); - } - return code; -} -StatusCode AppMonitorTrace::SetDateTimeTrace(const AppSetDateTime ¶m) -{ - LogInfo("AppMonitorTrace::SetDateTimeTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::SetTimeZone(const unsigned int &zone) -{ - LogInfo("AppMonitorTest::SetTimeZone = %u\n", zone); - StatusCode code = SetTimeZoneTrace(zone); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::SetTimeZone(zone); - } - return code; -} -StatusCode AppMonitorTrace::SetTimeZoneTrace(const unsigned int &zone) -{ - LogInfo("AppMonitorTrace::SetTimeZoneTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::SetParamValue(const AppSetParamValue ¶m) -{ - LogInfo("AppMonitorTest::SetParamValue\n"); - StatusCode code = SetParamValueTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::SetParamValue(param); - } - return code; -} -StatusCode AppMonitorTrace::SetParamValueTrace(const AppSetParamValue ¶m) -{ - LogInfo("AppMonitorTrace::SetParamValueTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::EnterRecorder(void) -{ - LogInfo("AppMonitorTest::EnterRecorder\n"); - StatusCode code = EnterRecorderTrace(); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::EnterRecorder(); - } - return code; -} -StatusCode AppMonitorTrace::EnterRecorderTrace(void) -{ - LogInfo("AppMonitorTrace::EnterRecorderTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::AppPlayback(const PlayBackEvent &event) -{ - LogInfo("AppMonitorTest::AppPlayback\n"); - StatusCode code = AppPlaybackTrace(event); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::AppPlayback(event); - } - return code; -} -StatusCode AppMonitorTrace::AppPlaybackTrace(const PlayBackEvent &event) -{ - LogInfo("AppMonitorTrace::AppPlaybackTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::UploadFile(AppUploadFile ¶m) -{ - LogInfo("AppMonitorTest::UploadFile\n"); - StatusCode code = UploadFileTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::UploadFile(param); - } - return code; -} -StatusCode AppMonitorTrace::UploadFileTrace(AppUploadFile ¶m) -{ - LogInfo("AppMonitorTrace::UploadFileTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::GetThumbnail(AppGetThumbnail ¶m) -{ - LogInfo("AppMonitorTest::GetThumbnail\n"); - StatusCode code = GetThumbnailTrace(param); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::GetThumbnail(param); - } - return code; -} -StatusCode AppMonitorTrace::GetThumbnailTrace(AppGetThumbnail ¶m) -{ - LogInfo("AppMonitorTrace::UploadFileTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -StatusCode AppMonitorTest::AppClientConnected(std::shared_ptr &client) -{ - LogInfo("AppMonitorTest::AppClientConnected\n"); - StatusCode code = AppClientConnectedTrace(client); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return VAppMonitor::AppClientConnected(client); - } - return code; -} -StatusCode AppMonitorTrace::AppClientConnectedTrace(std::shared_ptr &client) -{ - LogInfo("AppMonitorTrace::AppClientConnected\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/AppMonitorMock.h b/test/middleware/AppManager/tool/src/AppMonitorMock.h deleted file mode 100644 index 0e392858..00000000 --- a/test/middleware/AppManager/tool/src/AppMonitorMock.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef APP_MONITOR_MOCK_H -#define APP_MONITOR_MOCK_H -#include "GtestUsing.h" -#include "IAppManager.h" -class AppMonitorTrace -{ -public: - AppMonitorTrace() = default; - virtual ~AppMonitorTrace() = default; - -protected: - virtual StatusCode GetProductInfoTrace(AppGetProductInfo ¶m); - virtual StatusCode GetDeviceAttrTrace(AppGetDeviceAttr ¶m); - virtual StatusCode GetMediaInfoTrace(AppGetMediaInfo ¶m); - virtual StatusCode GetSdCardInfoTrace(AppGetSdCardInfo ¶m); - virtual StatusCode GetBatteryInfoTrace(AppGetBatteryInfo ¶m); - virtual StatusCode GetParamValueTrace(AppParamValue ¶m); - virtual StatusCode GetCapabilityTrace(AppGetCapability ¶m); - virtual StatusCode GetLockVideoStatusTrace(LockVideoStatus ¶m); - virtual StatusCode GetStorageInfoTrace(std::vector ¶m); - virtual StatusCode GetStorageFileListTrace(const AppGetFileInfo &fileInfo, std::vector ¶m); - virtual StatusCode SetDateTimeTrace(const AppSetDateTime ¶m); - virtual StatusCode SetTimeZoneTrace(const unsigned int &zone); - virtual StatusCode SetParamValueTrace(const AppSetParamValue ¶m); - virtual StatusCode EnterRecorderTrace(void); - virtual StatusCode AppPlaybackTrace(const PlayBackEvent &event); - virtual StatusCode UploadFileTrace(AppUploadFile ¶m); - virtual StatusCode GetThumbnailTrace(AppGetThumbnail ¶m); - virtual StatusCode AppClientConnectedTrace(std::shared_ptr &client); -}; -class AppMonitorTest : public VAppMonitor, virtual public AppMonitorTrace -{ -public: - AppMonitorTest() = default; - virtual ~AppMonitorTest() = default; - StatusCode GetProductInfo(AppGetProductInfo ¶m) override; - StatusCode GetDeviceAttr(AppGetDeviceAttr ¶m) override; - StatusCode GetMediaInfo(AppGetMediaInfo ¶m) override; - StatusCode GetSdCardInfo(AppGetSdCardInfo ¶m) override; - StatusCode GetBatteryInfo(AppGetBatteryInfo ¶m) override; - StatusCode GetParamValue(AppParamValue ¶m) override; - StatusCode GetCapability(AppGetCapability ¶m) override; - StatusCode GetLockVideoStatus(LockVideoStatus ¶m) override; - StatusCode GetStorageInfo(std::vector ¶m) override; - StatusCode GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) override; - StatusCode SetDateTime(const AppSetDateTime ¶m) override; - StatusCode SetTimeZone(const unsigned int &zone) override; - StatusCode SetParamValue(const AppSetParamValue ¶m) override; - StatusCode EnterRecorder(void) override; - StatusCode AppPlayback(const PlayBackEvent &event) override; - StatusCode UploadFile(AppUploadFile ¶m) override; - StatusCode GetThumbnail(AppGetThumbnail ¶m) override; - StatusCode AppClientConnected(std::shared_ptr &client) override; -}; -class AppMonitorMock : virtual public AppMonitorTrace -{ -public: - AppMonitorMock() = default; - virtual ~AppMonitorMock() = default; - MOCK_METHOD1(GetProductInfoTrace, StatusCode(AppGetProductInfo &)); - MOCK_METHOD1(GetDeviceAttrTrace, StatusCode(AppGetDeviceAttr &)); - MOCK_METHOD1(GetMediaInfoTrace, StatusCode(AppGetMediaInfo &)); - MOCK_METHOD1(GetSdCardInfoTrace, StatusCode(AppGetSdCardInfo &)); - MOCK_METHOD1(GetBatteryInfoTrace, StatusCode(AppGetBatteryInfo &)); - MOCK_METHOD1(GetParamValueTrace, StatusCode(AppParamValue &)); - MOCK_METHOD1(GetCapabilityTrace, StatusCode(AppGetCapability &)); - MOCK_METHOD1(GetLockVideoStatusTrace, StatusCode(LockVideoStatus &)); - MOCK_METHOD1(GetStorageInfoTrace, StatusCode(std::vector &)); - MOCK_METHOD2(GetStorageFileListTrace, StatusCode(const AppGetFileInfo &, std::vector &)); - MOCK_METHOD1(SetDateTimeTrace, StatusCode(const AppSetDateTime &)); - MOCK_METHOD1(SetTimeZoneTrace, StatusCode(const unsigned int &)); - MOCK_METHOD1(SetParamValueTrace, StatusCode(const AppSetParamValue &)); - MOCK_METHOD0(EnterRecorderTrace, StatusCode(void)); - MOCK_METHOD1(AppPlaybackTrace, StatusCode(const PlayBackEvent &)); - MOCK_METHOD1(UploadFileTrace, StatusCode(AppUploadFile &)); - MOCK_METHOD1(GetThumbnailTrace, StatusCode(AppGetThumbnail &)); - MOCK_METHOD1(AppClientConnectedTrace, StatusCode(std::shared_ptr &)); -}; -#endif \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/ServersMock.cpp b/test/middleware/AppManager/tool/src/ServersMock.cpp deleted file mode 100644 index d703e153..00000000 --- a/test/middleware/AppManager/tool/src/ServersMock.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "ServersMock.h" -#include "ILog.h" -#include "servers.h" -#include -extern const char *APP_GET_PRODUCT_INFO; -extern const char *APP_GET_DEVICE_ATTR; -extern const char *APP_GET_MEDIA_INFO; -extern const char *APP_GET_SD_CARD_INFO; -extern const char *APP_GET_BATTERY_INFO; -extern const char *APP_GET_PARAM_VALUE; -extern const char *APP_GET_PARAM_ITEMS; -extern const char *APP_GET_CAPABILITY; -extern const char *APP_GET_LOCK_VIDEO_STATUS; -extern const char *APP_GET_STORAGE_INFO; -extern const char *APP_GET_FILE_LIST; -extern const char *APP_SET_DATE_TIME; -extern const char *APP_SET_TIME_ZONE; -extern const char *APP_SET_PARAM_VALUE; -extern const char *APP_ENTER_RECORDER; -extern const char *APP_PLAYBACK; -extern const char *APP_UPLOAD_FILE; -std::shared_ptr &ServersMock::GetInstance(std::shared_ptr *impl) -{ - static auto instance = std::make_shared(); - if (impl) { - if (instance.use_count() == 1) { - LogInfo("Instance changed succeed.\n"); - instance = *impl; - } - else { - LogError("Can't changing the instance becase of using by some one.\n"); - } - } - return instance; -} -ServersMock::ServersMock() -{ - mServerUrl = APP_MANAGER_DEVICE_IP ":" + std::to_string(APP_MANAGER_HTTP_SERVER_PORT); -} -void ServersMock::Init(void) -{ - ServerParam init = { - .logFlag = LOG_FLAG_ENABLE, - .sslVerifyFlag = SSL_VERIFY_DISABLE, - }; - ServersInit(init); -} -void ServersMock::UnInit(void) -{ -} -void ServersMock::MockGetProductInfo(void) -{ - LogInfo("APP_GET_PRODUCT_INFO test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_PRODUCT_INFO; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetDeviceAttr(void) -{ - LogInfo("APP_GET_DEVICE_ATTR test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_DEVICE_ATTR; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetMediaInfo(void) -{ - LogInfo("APP_GET_MEDIA_INFO test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_MEDIA_INFO; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetSdCardInfo(void) -{ - LogInfo("APP_GET_SD_CARD_INFO test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_SD_CARD_INFO; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetBatteryInfo(void) -{ - LogInfo("APP_GET_BATTERY_INFO test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_BATTERY_INFO; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetParamValue(const std::string ¶mName) -{ - LogInfo("APP_GET_PARAM_VALUE test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_PARAM_VALUE + "?param=" + paramName; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetParamItems(const std::string ¶mName) -{ - LogInfo("APP_GET_PARAM_ITEMS test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_PARAM_ITEMS + "?param=" + paramName; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetCapability(void) -{ - LogInfo("APP_GET_CAPABILITY test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_CAPABILITY; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetLockVideoStatus(void) -{ - LogInfo("APP_GET_LOCK_VIDEO_STATUS test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_LOCK_VIDEO_STATUS; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetStorageInfo(void) -{ - LogInfo("APP_GET_STORAGE_INFO test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_STORAGE_INFO; - MockHttpGet(mockRequest); -} -void ServersMock::MockGetStorageFileList(void) -{ - LogInfo("APP_GET_FILE_LIST test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_FILE_LIST + "?folder=loop&start=0&end=99"; - MockHttpGet(mockRequest); -} -void ServersMock::MockSetDateTime(void) -{ - LogInfo("APP_SET_DATE_TIME test start.\n"); - std::string mockRequest = mServerUrl + APP_SET_DATE_TIME + "?date=20240101010101"; - MockHttpGet(mockRequest); -} -void ServersMock::MockSetTimeZone(void) -{ - LogInfo("APP_SET_TIME_ZONE test start.\n"); - std::string mockRequest = mServerUrl + APP_SET_TIME_ZONE + "?timezone=8"; - MockHttpGet(mockRequest); -} -void ServersMock::MockSetParamValue(void) -{ - LogInfo("APP_SET_PARAM_VALUE test start.\n"); - std::string mockRequest = mServerUrl + APP_SET_PARAM_VALUE + "?param=switchcam&value=1"; - MockHttpGet(mockRequest); -} -void ServersMock::MockEnterRecorder(void) -{ - LogInfo("APP_ENTER_RECORDER test start.\n"); - std::string mockRequest = mServerUrl + APP_ENTER_RECORDER + "?timezone=8"; // TODO: - MockHttpGet(mockRequest); -} -void ServersMock::MockAppPlayback(void) -{ - LogInfo("APP_PLAYBACK test start.\n"); - std::string mockRequest = mServerUrl + APP_PLAYBACK + "?param=enter"; - MockHttpGet(mockRequest); -} -#ifndef PLATFORM_PATH - #error Add the code in your linux.toolchain.cmake : add_definitions(-DPLATFORM_PATH="${PLATFORM_PATH}") -#endif -void ServersMock::MockUploadFiles(void) -{ - LogInfo("servers test start.\n"); - std::string mockRequest = mServerUrl + APP_UPLOAD_FILE; - ServerHttp *http = NewServersHttp(mockRequest.c_str()); - if (http) { - http->filePath = (char *)PLATFORM_PATH "/output_files/test/bin/AppManagerTest"; - LogInfo("http post file:%s\n", http->filePath); - HttpPostFile(http); - if (http->reply) { - char *replyStr = (char *)malloc(http->replyLength + 1); - memset(replyStr, 0, http->replyLength + 1); - memcpy(replyStr, http->reply, http->replyLength); - LogInfo("HttpPost response :\n%s\n", replyStr); - free(replyStr); - } - DeleteServersHttp(http); - } -} -void ServersMock::MockHttpGet(const std::string &mockRequest) -{ - ServerHttp *http = NewServersHttp(mockRequest.c_str()); - if (http) { - HttpGet(http); - if (http->reply) { - char *replyStr = (char *)malloc(http->replyLength + 1); - memset(replyStr, 0, http->replyLength + 1); - memcpy(replyStr, http->reply, http->replyLength); - LogInfo("HttpGet response :\n%s\n", replyStr); - free(replyStr); - } - DeleteServersHttp(http); - } - else { - LogWarning("http is null.\n"); - } -} \ No newline at end of file diff --git a/test/middleware/AppManager/tool/src/ServersMock.h b/test/middleware/AppManager/tool/src/ServersMock.h deleted file mode 100644 index 112a3fa7..00000000 --- a/test/middleware/AppManager/tool/src/ServersMock.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef SERVERS_MOCK_H -#define SERVERS_MOCK_H -#include "servers.h" -#include -class ServersMock -{ -public: - ServersMock(); - virtual ~ServersMock() = default; - static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr); - virtual void Init(void); - virtual void UnInit(void); - virtual void MockGetProductInfo(void); - virtual void MockGetDeviceAttr(void); - virtual void MockGetMediaInfo(void); - virtual void MockGetSdCardInfo(void); - virtual void MockGetBatteryInfo(void); - virtual void MockGetParamValue(const std::string ¶mName); - virtual void MockGetParamItems(const std::string ¶mName); - virtual void MockGetCapability(void); - virtual void MockGetLockVideoStatus(void); - virtual void MockGetStorageInfo(void); - virtual void MockGetStorageFileList(void); - virtual void MockSetDateTime(void); - virtual void MockSetTimeZone(void); - virtual void MockSetParamValue(void); - virtual void MockEnterRecorder(void); - virtual void MockAppPlayback(void); - virtual void MockUploadFiles(void); - -private: - void MockHttpGet(const std::string &mockRequest); - -private: - std::string mServerUrl; -}; -#endif \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/CMakeLists.txt b/test/middleware/DeviceManager/tool/CMakeLists.txt deleted file mode 100644 index 73bd6c66..00000000 --- a/test/middleware/DeviceManager/tool/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/LedControl/include - # ${UTILS_SOURCE_PATH}/McuProtocol/include - ${MIDDLEWARE_SOURCE_PATH}/DeviceManager/src - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET DeviceManagerTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} LedControl Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - DeviceManagerTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/DeviceManager/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - DeviceManagerTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/DeviceManager/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make DeviceManagerTestTool_code_check - COMMAND make DeviceManagerTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.cpp b/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.cpp deleted file mode 100644 index 0391b04b..00000000 --- a/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "DeviceManagerMakePtrTest.h" -#include "ILog.h" -void OverrideDeviceMakePtrObject(std::shared_ptr &halMock) -{ - std::shared_ptr impl = std::make_shared(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - test->mDeviceManagerMock = halMock; - } - DeviceManagerMakePtr::GetInstance(&impl); -} -void CancelOverrideDeviceMakePtrObject(void) -{ - std::shared_ptr tmp = DeviceManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mDeviceManagerMock.reset(); - } - test.reset(); - tmp.reset(); - std::shared_ptr impl = std::make_shared(); - DeviceManagerMakePtr::GetInstance(&impl); -} -DeviceManagerMakePtrTest::DeviceManagerMakePtrTest() -{ - // -} -DeviceManagerMakePtrTest::~DeviceManagerMakePtrTest() -{ - // - mDeviceManagerMock.reset(); -} -const StatusCode DeviceManagerMakePtrTest::CreateDeviceManager(std::shared_ptr &impl) -{ - if (mDeviceManagerMock) { - LogInfo("CreateDeviceManager mDeviceManagerMock\n"); - impl = mDeviceManagerMock; - } - else { - LogWarning("CreateMcuManager failed:mDeviceManagerMock is nullptr.\n"); - } - return CreateStatusCode(STATUS_CODE_OK); -} \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.h b/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.h deleted file mode 100644 index c35ccc68..00000000 --- a/test/middleware/DeviceManager/tool/src/DeviceManagerMakePtrTest.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef DEVICE_MANAGER_MAKE_PTR_TEST_H -#define DEVICE_MANAGER_MAKE_PTR_TEST_H -#include "DeviceManagerMakePtr.h" -#include "DeviceManagerTestTool.h" -void OverrideDeviceMakePtrObject(std::shared_ptr &halMock); -void CancelOverrideDeviceMakePtrObject(void); -class DeviceManagerMakePtrTest : public DeviceManagerMakePtr -{ -public: - DeviceManagerMakePtrTest(); - virtual ~DeviceManagerMakePtrTest(); - const StatusCode CreateDeviceManager(std::shared_ptr &impl) override; - -public: - std::shared_ptr mDeviceManagerMock; -}; -#endif \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/src/DeviceManagerTestTool.cpp b/test/middleware/DeviceManager/tool/src/DeviceManagerTestTool.cpp deleted file mode 100644 index 2895e1fe..00000000 --- a/test/middleware/DeviceManager/tool/src/DeviceManagerTestTool.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "DeviceManagerTestTool.h" -#include "DeviceManagerMakePtrTest.h" -#include "ILog.h" -#include "KeyControl.h" -#include "SingleControlMock.h" -const StatusCode DeviceManagerTool::SetAllKeysMonitor(std::shared_ptr &monitor) -{ - LogInfo("DeviceManagerTool::SetAllKeysMonitor\n"); - StatusCode code = SetAllKeysMonitorTrace(monitor); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return DeviceManager::SetAllKeysMonitor(monitor); - } - return code; -} -void DeviceManagerTestTool::Init(void) -{ - mDeviceManagerMock = std::make_shared(); - DeviceManagerMockInit(mDeviceManagerMock); - OverrideDeviceMakePtrObject(mDeviceManagerMock); -} -void DeviceManagerTestTool::UnInit(void) -{ - mDeviceManagerMock.reset(); - mKeyMonitorMock.reset(); - CancelOverrideDeviceMakePtrObject(); -} -std::shared_ptr DeviceManagerTestTool::ControlLed(const std::string &ledName, const LedState &state, - const unsigned int &aliveTimeMs, - const unsigned int &blinkTimeMs) -{ - HalTestTool::SetLedStateExpectations(ledName, state, aliveTimeMs, blinkTimeMs); - std::shared_ptr ledControl = - std::make_shared(state, aliveTimeMs, blinkTimeMs); - IDeviceManager::GetInstance()->ControlLed(ledName, ledControl); - return ledControl; -} -void DeviceManagerTestTool::DeviceManagerNotice(const std::string &keyName, const unsigned int &pressingTimeMs) -{ - LogInfo("DeviceManagerTestTool::DeviceManagerNotice\n"); - if (mKeyMonitorMock) { - KeyMonitorInit(mKeyMonitorMock, keyName, pressingTimeMs); - } - else { - LogWarning("mKeyMonitorMock is nullptr.\n"); - } -} -void DeviceManagerTestTool::DeviceManagerMockInit(std::shared_ptr &mock) -{ - auto getKeyMonitor = [=](std::shared_ptr &monitor) { - LogInfo("mKeyMonitorMock get.\n"); - mKeyMonitorMock = std::dynamic_pointer_cast(monitor); - }; - constexpr int ONLY_BE_CALLED_ONCE = 1; - EXPECT_CALL(*mock.get(), SetAllKeysMonitorTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(WithArgs<0>(Invoke(getKeyMonitor)), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); -} -void DeviceManagerTestTool::KeyMonitorInit(std::shared_ptr &mock, const std::string &keyName, - const unsigned int &pressingTimeMs) -{ - // EXPECT_CALL(*mock.get(), KeyEventReport(_, _, _)).Times(100).WillRepeatedly(DoAll(Return())); - EXPECT_CALL(*mock.get(), KeyEventReport(_, _, _)).WillRepeatedly(DoAll(Return())); - constexpr int CLICK_EVENT_HAPPENED_ONLY_ONCE = 1; - constexpr int HOLD_UP_EVENT_HAPPENED_ONLY_ONCE = 1; - if (KEY_ACTION_SHORT_CLICK <= pressingTimeMs && pressingTimeMs < KEY_ACTION_HOLD_DWON) { - EXPECT_CALL(*mock.get(), KeyEventReport(keyName, static_cast(KeyEvent::SHORT_CLICK), _)) - .Times(CLICK_EVENT_HAPPENED_ONLY_ONCE) - .WillRepeatedly(DoAll(Return())); - } - if (KEY_ACTION_HOLD_DWON <= pressingTimeMs) { - EXPECT_CALL(*mock.get(), KeyEventReport(keyName, static_cast(KeyEvent::HOLD_DOWN), _)) - .Times(AtLeast(1)) - .WillRepeatedly(DoAll(Return())); - EXPECT_CALL(*mock.get(), KeyEventReport(keyName, static_cast(KeyEvent::HOLD_UP), _)) - .Times(HOLD_UP_EVENT_HAPPENED_ONLY_ONCE) - .WillOnce(DoAll(Return())); - } -} \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/src/SingleControlMock.cpp b/test/middleware/DeviceManager/tool/src/SingleControlMock.cpp deleted file mode 100644 index 0ca4cb6d..00000000 --- a/test/middleware/DeviceManager/tool/src/SingleControlMock.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "SingleControlMock.h" -SingleControlTool::SingleControlTool(const LedState &state, const unsigned int aliveTimeMs, - const unsigned int &blinkTimeMs) - : mState(state), mAliveTimeMs(aliveTimeMs), mBlinkTimeMs(blinkTimeMs) -{ - // -} -StatusCode SingleControlTool::GetLedState(LedState &state) -{ - state = mState; - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} -SingleControlMock::SingleControlMock(const LedState &state, const unsigned int aliveTimeMs, - const unsigned int &blinkTimeMs) - : SingleControlTool(state, aliveTimeMs, blinkTimeMs) -{ - // -} \ No newline at end of file diff --git a/test/middleware/DeviceManager/tool/src/SingleControlMock.h b/test/middleware/DeviceManager/tool/src/SingleControlMock.h deleted file mode 100644 index 91fd65eb..00000000 --- a/test/middleware/DeviceManager/tool/src/SingleControlMock.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef LED_CONTROL_MOCK_H -#define LED_CONTROL_MOCK_H -#include "IDeviceManager.h" -#include "LedControl.h" -class SingleControlTool : public VSingleControl, public VirtualLedControl -{ -public: - SingleControlTool(const LedState &state, const unsigned int aliveTimeMs, const unsigned int &blinkTimeMs); - virtual ~SingleControlTool() = default; - virtual StatusCode GetLedState(LedState &state); - virtual unsigned int GetKeepAliveTimeMs(void) - { - return mAliveTimeMs; - } - virtual unsigned int GetBlinkTimeMs(void) - { - return mBlinkTimeMs; - } - -private: - const LedState mState; - const unsigned int mAliveTimeMs; - const unsigned int mBlinkTimeMs; -}; -class SingleControlMock : public SingleControlTool -{ -public: - SingleControlMock(const LedState &state, const unsigned int aliveTimeMs, const unsigned int &blinkTimeMs); - virtual ~SingleControlMock() = default; -}; -#endif \ No newline at end of file diff --git a/test/middleware/HuntingUpgrade/tool/CMakeLists.txt b/test/middleware/HuntingUpgrade/tool/CMakeLists.txt deleted file mode 100644 index cd7aafc3..00000000 --- a/test/middleware/HuntingUpgrade/tool/CMakeLists.txt +++ /dev/null @@ -1,56 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -include(${HAL_SOURCE_PATH}/build/hal.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/LinuxApi/include - ${UTILS_SOURCE_PATH}/UpgradeTool/include - ${MIDDLEWARE_SOURCE_PATH}/HuntingUpgrade/src - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET HuntingUpgradeTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} UpgradeTool LinuxApi HuntingUpgrade Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - HuntingUpgradeTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/HuntingUpgrade/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - HuntingUpgradeTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/HuntingUpgrade/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make HuntingUpgradeTestTool_code_check - COMMAND make HuntingUpgradeTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp b/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp deleted file mode 100644 index d547406d..00000000 --- a/test/middleware/HuntingUpgrade/tool/src/HuntingUpgradeTestTool.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "HuntingUpgradeTestTool.h" -#include "ILog.h" -#include "LinuxApi.h" -#include "UpgradeTool.h" -#include -#include -#include -#include -#include -void HuntingUpgradeTestTool::Init(void) -{ -} -void HuntingUpgradeTestTool::UnInit(void) -{ - if (access(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test", F_OK) == 0) { - fx_system("rm -rf " SD_CARD_MOUNT_PATH); - } -} -void HuntingUpgradeTestTool::CreateUpgradeFile(void) -{ - CheckDirectory(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test"); - fx_system("touch " SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test"); - UpgradeTool::GetInstance()->PackFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH "-test", - SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, - "6.4.5.6", - "hunting", - "dgiot", - "app"); -} -bool HuntingUpgradeTestTool::CheckDirectory(const char *filepath) -{ - LogInfo("CheckDirectory:%s\n", filepath); - char *path = nullptr; - char *sep = nullptr; - struct stat st = {0}; - - path = strdup(filepath); - if (!path) { - LogError("strdup\n"); - return false; - } - - for (sep = strchr(path, '/'); sep != NULL; sep = strchr(sep + 1, '/')) { - *sep = '\0'; - if (strlen(path) == 0) { - *sep = '/'; - continue; - } - if (stat(path, &st) == -1) { - if (errno == ENOENT) { - if (mkdir(path, 0755) == -1) { - LogError("mkdir path failed:%s\n", path); - free(path); - return false; - } - } - else { - LogError("stat\n"); - free(path); - return false; - } - } - - *sep = '/'; - } - free(path); - return true; -} \ No newline at end of file diff --git a/test/middleware/IpcConfig/tool/CMakeLists.txt b/test/middleware/IpcConfig/tool/CMakeLists.txt deleted file mode 100644 index eb3d4b11..00000000 --- a/test/middleware/IpcConfig/tool/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -include(${MIDDLEWARE_SOURCE_PATH}/IpcConfig/build/ipc_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${MIDDLEWARE_SOURCE_PATH}/IpcConfig/src - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET IpcConfigTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} IpcConfig LinuxApiMock Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - IpcConfigTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/IpcConfig/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - IpcConfigTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/IpcConfig/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make IpcConfigTestTool_code_check - COMMAND make IpcConfigTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/IpcConfig/tool/src/IpcConfigTestTool.cpp b/test/middleware/IpcConfig/tool/src/IpcConfigTestTool.cpp deleted file mode 100644 index d12906e7..00000000 --- a/test/middleware/IpcConfig/tool/src/IpcConfigTestTool.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "IpcConfigTestTool.h" -#include "ILog.h" -#include "LinuxApi.h" -#include -#include -const char *MOUNTED_FILE = "./mount_info.txt"; -extern const char *SYSTEM_MOUNTED_FILE; -void IpcConfigTestTool::Init(std::shared_ptr &mock) -{ - MockMountedFile(); - auto api_fopen = [=](const char *pathname, const char *mode) { - LogInfo("Open mock mounted file.\n"); - mFile = OpenMockMountedFile(mode); - }; - EXPECT_CALL(*mock.get(), fx_fopen(SYSTEM_MOUNTED_FILE, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1>(Invoke(api_fopen)), (ReturnPointee(&mFile)))); -} -void IpcConfigTestTool::UnInit(void) -{ - constexpr int BUF_LENGTH = 256; - char cmd[BUF_LENGTH] = {0}; - sprintf(cmd, "rm -rf %s", MOUNTED_FILE); - fx_system(cmd); -} -void IpcConfigTestTool::MockMountedFile(void) -{ - FILE *file; - file = fopen(MOUNTED_FILE, "w"); - if (file == NULL) { - perror("Error opening file"); - return; - } - - fprintf(file, "devtmpfs /dev devtmpfs rw,relatime,size=10176k,nr_inodes=2544,mode=755 0 0\n"); - fprintf(file, "proc /proc proc rw,relatime 0 0\n"); - fprintf(file, "tmpfs /tmp tmpfs rw,relatime,size=14464k,nr_inodes=3616 0 0\n"); - fprintf(file, "tmpfs /run tmpfs rw,nosuid,nodev,relatime,size=14464k,nr_inodes=3616,mode=755 0 0\n"); - fprintf(file, "sysfs /sys sysfs rw,relatime 0 0\n"); - fprintf(file, "/dev/block/by-name" USERDATA_MOUNT_PATH " " USERDATA_MOUNT_PATH " jffs2 rw,relatime 0 0\n"); - fprintf( - file, - "/dev/mmcblk1p1 /mnt/sdcard vfat " - "rw,relatime,fmask=0022,dmask=0022,codepage=936,iocharset=cp936,shortname=mixed,utf8,errors=remount-ro 0 0\n"); - - fclose(file); - fx_system("sync"); - LogInfo("File written successfully.\n"); -} -FILE *IpcConfigTestTool::OpenMockMountedFile(const char *mode) -{ - FILE *fp = nullptr; - fp = fopen(MOUNTED_FILE, mode); - return fp; -} \ No newline at end of file diff --git a/test/middleware/McuAskBase/tool/CMakeLists.txt b/test/middleware/McuAskBase/tool/CMakeLists.txt deleted file mode 100644 index 51471c74..00000000 --- a/test/middleware/McuAskBase/tool/CMakeLists.txt +++ /dev/null @@ -1,60 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${MIDDLEWARE_SOURCE_PATH}/McuAskBase/include - ${MIDDLEWARE_SOURCE_PATH}/McuManager/include - # ${UTILS_SOURCE_PATH}/UartDevice/include - # ${UTILS_SOURCE_PATH}/ModBusCRC16/include - # ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - # ${TEST_SOURCE_PATH}/utils/UartDevice/tool/include - ${TEST_SOURCE_PATH} - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - - - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET McuAskBaseTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} UartDeviceTestTool Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - McuAskBaseTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuAskBase/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - McuAskBaseTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuAskBase/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make McuAskBaseTestTool_code_check - COMMAND make McuAskBaseTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp b/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp deleted file mode 100644 index d09acff4..00000000 --- a/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "McuAskBaseTestTool.h" -#include "ILog.h" -constexpr int CALL_ONLY_ONCE = 1; -constexpr int SHOULD_NOT_CALL = 0; -ASK_RESULT McuAskBaseTest::Blocking(void) -{ - BlockingTrace(); - return McuAskBase::Blocking(); -} -bool McuAskBaseTest::NeedReply(void) -{ - NeedReplyTrace(); - return McuAskBase::NeedReply(); -} -void McuAskBaseTest::ReplyFinished(const bool result) -{ - ReplyFinishedTrace(result); - McuAskBase::ReplyFinished(result); -} -bool McuAskBaseTest::IfTimeout(const unsigned int &integrationTimeMs) -{ - IfTimeoutTrace(integrationTimeMs); - return McuAskBase::IfTimeout(integrationTimeMs); -} -void McuAskBaseTestTool::McuAskDefaultFeatures(std::shared_ptr &mock) -{ - if (McuAskBlock::BLOCK == mIsBlock && McuAskReply::NEED_REPLY == mNeedReply) { - EXPECT_CALL(*mock.get(), BlockingTrace()).Times(CALL_ONLY_ONCE); - EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AtLeast(1)); - EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(CALL_ONLY_ONCE); - EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(AnyNumber()); - } - if (McuAskBlock::NOT_BLOCK == mIsBlock && McuAskReply::NEED_REPLY == mNeedReply) { - EXPECT_CALL(*mock.get(), BlockingTrace()).Times(CALL_ONLY_ONCE); - EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AtLeast(1)); - EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(CALL_ONLY_ONCE); - EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(AnyNumber()); - } - if (McuAskBlock::UNRELATED == mIsBlock && McuAskReply::NEED_NOT_REPLY == mNeedReply) { - EXPECT_CALL(*mock.get(), BlockingTrace()).Times(SHOULD_NOT_CALL); - EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AtLeast(1)); - EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(SHOULD_NOT_CALL); - EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(SHOULD_NOT_CALL); - } -} -void McuAskBaseTestTool::McuAskDoNothing(std::shared_ptr &mock) -{ - EXPECT_CALL(*mock.get(), BlockingTrace()).Times(AnyNumber()); - EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AnyNumber()); - EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(AnyNumber()); - EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(AnyNumber()); -} -void McuAskBaseTestTool::NoNeedToBlocking(std::shared_ptr &mock) -{ - // Mock::AllowLeak(mock.get()); - EXPECT_CALL(*mock.get(), BlockingTrace()).Times(SHOULD_NOT_CALL); -} \ No newline at end of file diff --git a/test/middleware/McuManager/tool/CMakeLists.txt b/test/middleware/McuManager/tool/CMakeLists.txt deleted file mode 100644 index cfc6d46d..00000000 --- a/test/middleware/McuManager/tool/CMakeLists.txt +++ /dev/null @@ -1,54 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/McuProtocol/include - ${MIDDLEWARE_SOURCE_PATH}/McuManager/src - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET McuManagerTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} McuManager McuProtocolTestTool UartDeviceTestTool LinuxApiMock Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - McuManagerTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuManager/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - McuManagerTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/McuManager/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make McuManagerTestTool_code_check - COMMAND make McuManagerTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/McuManager/tool/src/McuManagerImplTest.cpp b/test/middleware/McuManager/tool/src/McuManagerImplTest.cpp deleted file mode 100644 index 11458154..00000000 --- a/test/middleware/McuManager/tool/src/McuManagerImplTest.cpp +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "McuManagerTestTool.h" -bool McuManagerImplTest::CheckAskExist(const std::shared_ptr &ask) -{ - std::shared_ptr result; - return SearchMcuAsk(ask->mSerialNumber, result); -} \ No newline at end of file diff --git a/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.cpp b/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.cpp deleted file mode 100644 index a14ac39c..00000000 --- a/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "McuManagerMakePtrTest.h" -#include "ILog.h" -#include "McuManagerTestTool.h" -void OverrideMcuManagerMakePtrObject(std::shared_ptr &mcuManagerMock) -{ - std::shared_ptr impl = std::make_shared(); - McuManagerMakePtr::GetInstance(&impl); - std::shared_ptr tmp = McuManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mMcuManagerMock = mcuManagerMock; - } -} -void CancelOverrideMcuManagerMakePtrObject(void) -{ - std::shared_ptr tmp = McuManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mMcuManagerMock.reset(); - } - tmp.reset(); - test.reset(); - std::shared_ptr impl = std::make_shared(); - McuManagerMakePtr::GetInstance(&impl); -} -McuManagerMakePtrTest::McuManagerMakePtrTest() -{ - // -} -McuManagerMakePtrTest::~McuManagerMakePtrTest() -{ - // - mMcuManagerMock.reset(); -} -const StatusCode McuManagerMakePtrTest::CreateMcuManager(std::shared_ptr &impl) -{ - if (mMcuManagerMock) { - impl = mMcuManagerMock; - } - else { - LogWarning("CreateMcuManager failed:mMcuManagerMock is nullptr.\n"); - } - return CreateStatusCode(STATUS_CODE_OK); -} \ No newline at end of file diff --git a/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.h b/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.h deleted file mode 100644 index 611f8c25..00000000 --- a/test/middleware/McuManager/tool/src/McuManagerMakePtrTest.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MCU_MANAGER_MAKE_PTR_TEST_H -#define MCU_MANAGER_MAKE_PTR_TEST_H -#include "McuManagerMakePtr.h" -#include "McuManagerTestTool.h" -void OverrideMcuManagerMakePtrObject(std::shared_ptr &mcuManagerMock); -void CancelOverrideMcuManagerMakePtrObject(void); -class McuManagerMakePtrTest : public McuManagerMakePtr -{ -public: - McuManagerMakePtrTest(); - virtual ~McuManagerMakePtrTest(); - const StatusCode CreateMcuManager(std::shared_ptr &impl) override; - -public: -public: - std::shared_ptr mMcuManagerMock; -}; -#endif \ No newline at end of file diff --git a/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp b/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp deleted file mode 100644 index fd441134..00000000 --- a/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "McuManagerTestTool.h" -#include "ILog.h" -#include "McuManagerMakePtrTest.h" -extern const char *MCU_UART_DEVICE_PTR; -static UartInfo gUartDevice = { - MCU_UART_DEVICE_PTR, - 1152000, - 'N', - 8, - 1, - 'N', -}; -void McuManagerTestTool::Init(std::shared_ptr &mock) -{ - LogInfo("McuManagerTestTool::Init\n"); - mMcuManagerMock = std::make_shared(); - OverrideMcuManagerMakePtrObject(mMcuManagerMock); - UartDeviceTestTool::RegisterUartDevice(mock, gUartDevice); - McuProtocolTestTool::Init(mock, gUartDevice); -} -void McuManagerTestTool::UnInit(void) -{ - LogInfo("McuManagerTestTool::UnInit\n"); - mMcuManagerMock.reset(); - CancelOverrideMcuManagerMakePtrObject(); - UartDeviceTestTool::UnregisterUartDevice(gUartDevice); - McuProtocolTestTool::UnInit(); -} -bool McuManagerTestTool::CheckAskExist(const std::shared_ptr &ask) -{ - return mMcuManagerMock->CheckAskExist(ask); -} -void McuManagerTestTool::MockOtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber) -{ - McuProtocolTestTool::MockOtherSideAskIpcMission(mock, serialNumber); -} -void McuManagerTestTool::MockOtherSideAskHeartBeat(std::shared_ptr &mock, const unsigned int &serialNumber) -{ - McuProtocolTestTool::MockOtherSideAskHeartBeat(mock, serialNumber); -} -void McuManagerTestTool::MockOtherSideGetIntervalStart(std::shared_ptr &mock, - const unsigned int &serialNumber) -{ - McuProtocolTestTool::MockOtherSideAskGetIntervalStart(mock, serialNumber); -} -void McuManagerTestTool::MockOtherSideGetDateTime(std::shared_ptr &mock, const unsigned int &serialNumber) -{ - McuProtocolTestTool::MockOtherSideAskGetDateTime(mock, serialNumber); -} -void McuManagerTestTool::MockOtherSideGetPriSensitivity(std::shared_ptr &mock, - const unsigned int &serialNumber) -{ - McuProtocolTestTool::MockOtherSideAskGetPirSensitivity(mock, serialNumber); -} -void McuManagerTestTool::MockOtherSideSendData(std::shared_ptr &mock, const void *data, const size_t &size) -{ - McuProtocolTestTool::MockOtherSideAskSendAnyData(mock, data, size); -} -void McuManagerTestTool::MockMcuDeviceOpenFailed(std::shared_ptr &mock) -{ - UartDeviceTestTool::SetUartDeviceOpenFailed(mock, gUartDevice); -} -void McuManagerTestTool::MockMcuDeviceOpenSuccessButReadNothing(std::shared_ptr &mock) -{ - McuProtocolTestTool::ReadNothingAnyTime(mock); -} -void McuManagerTestTool::MockOtherSideIpcMissionReply(const IpcMission &replyIpcMission) -{ - unsigned char reply = static_cast(replyIpcMission); - McuProtocolTestTool::MockOtherSideIpcMissionReply(reply); -} \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/CMakeLists.txt b/test/middleware/MediaManager/tool/CMakeLists.txt deleted file mode 100644 index c6b08d6a..00000000 --- a/test/middleware/MediaManager/tool/CMakeLists.txt +++ /dev/null @@ -1,56 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - # ${UTILS_SOURCE_PATH}/Servers/include - # ${UTILS_SOURCE_PATH}/TcpModule/include - ${MIDDLEWARE_SOURCE_PATH}/MediaManager/src - ${HAL_SOURCE_PATH}/include - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/McuProtocol/tool/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET MediaManagerTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} MediaManager Servers Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - MediaManagerTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/MediaManager/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - MediaManagerTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/middleware/MediaManager/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make MediaManagerTestTool_code_check - COMMAND make MediaManagerTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaHandleMock.cpp b/test/middleware/MediaManager/tool/src/MediaHandleMock.cpp deleted file mode 100644 index fb9cbc08..00000000 --- a/test/middleware/MediaManager/tool/src/MediaHandleMock.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MediaHandleMock.h" \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaHandleMock.h b/test/middleware/MediaManager/tool/src/MediaHandleMock.h deleted file mode 100644 index b8c565d5..00000000 --- a/test/middleware/MediaManager/tool/src/MediaHandleMock.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MEDIA_HANDLE_MOCK_H -#define MEDIA_HANDLE_MOCK_H -#include "MediaHandle.h" -#endif \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.cpp b/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.cpp deleted file mode 100644 index 06749c21..00000000 --- a/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MediaManagerMakePtrTest.h" -#include "ILog.h" -void OverrideMediaManagerMakePtrObject(std::shared_ptr &appManagerMock) -{ - std::shared_ptr impl = std::make_shared(); - std::shared_ptr test = std::dynamic_pointer_cast(impl); - if (test) { - test->mMediaManagerMock = appManagerMock; - } - MediaManagerMakePtr::GetInstance(&impl); -} -void CancelOverrideMediaManagerMakePtrObject(void) -{ - std::shared_ptr tmp = MediaManagerMakePtr::GetInstance(); - std::shared_ptr test = std::dynamic_pointer_cast(tmp); - if (test) { - test->mMediaManagerMock.reset(); - } - tmp.reset(); - test.reset(); - std::shared_ptr impl = std::make_shared(); - MediaManagerMakePtr::GetInstance(&impl); -} -MediaManagerMakePtrTest::MediaManagerMakePtrTest() -{ -} -MediaManagerMakePtrTest::~MediaManagerMakePtrTest() -{ - mMediaManagerMock.reset(); -} -const StatusCode MediaManagerMakePtrTest::CreateMediaManagerModule(std::shared_ptr &impl) -{ - if (mMediaManagerMock) { - LogInfo("CreateMediaManagerModule mMediaManagerMock\n"); - impl = mMediaManagerMock; - } - else { - LogWarning("CreateMcuManager failed:mMediaManagerMock is nullptr.\n"); - } - return CreateStatusCode(STATUS_CODE_OK); -} \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.h b/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.h deleted file mode 100644 index 296d7822..00000000 --- a/test/middleware/MediaManager/tool/src/MediaManagerMakePtrTest.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MEDIA_MANAGER_MAKE_PTR_TEST_H -#define MEDIA_MANAGER_MAKE_PTR_TEST_H -#include "MediaManagerMock.h" -#include "MediaManagerTestTool.h" -#include "MediaManagerMakePtr.h" -void OverrideMediaManagerMakePtrObject(std::shared_ptr &appManagerMock); -void CancelOverrideMediaManagerMakePtrObject(void); -class MediaManagerMakePtrTest : public MediaManagerMakePtr -{ -public: - MediaManagerMakePtrTest(); - virtual ~MediaManagerMakePtrTest(); - const StatusCode CreateMediaManagerModule(std::shared_ptr &impl) override; - -public: - std::shared_ptr mMediaManagerMock; -}; -#endif \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaManagerMock.cpp b/test/middleware/MediaManager/tool/src/MediaManagerMock.cpp deleted file mode 100644 index da8e84e1..00000000 --- a/test/middleware/MediaManager/tool/src/MediaManagerMock.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MediaManagerMock.h" -#include "ILog.h" -StatusCode MediaManagerTest::SetMediaMonitor(std::shared_ptr &monitor) -{ - LogInfo("MediaManagerTest::SetMediaMonitor\n"); - StatusCode code = SetMediaMonitorTrace(monitor); - if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { - return MediaManagerImpl::SetMediaMonitor(monitor); - } - return code; -} -const StatusCode MediaManagerTest::SetMediaMonitorTrace(std::shared_ptr &monitor) -{ - LogInfo("SetMediaMonitorTrace::SetMediaMonitorTrace\n"); - return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -} \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaManagerMock.h b/test/middleware/MediaManager/tool/src/MediaManagerMock.h deleted file mode 100644 index 6b6fcd9f..00000000 --- a/test/middleware/MediaManager/tool/src/MediaManagerMock.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MEDIA_MANAGER_MOCK_H -#define MEDIA_MANAGER_MOCK_H -#include "MediaManagerImpl.h" -#include "MediaManagerTestTool.h" -class MediaManagerTest : public MediaManagerImpl -{ -public: - MediaManagerTest() = default; - virtual ~MediaManagerTest() = default; - // const StatusCode SetMediaMonitor(std::shared_ptr &monitor) override; - StatusCode SetMediaMonitor(std::shared_ptr &monitor) override; - -protected: - virtual const StatusCode SetMediaMonitorTrace(std::shared_ptr &monitor); -}; -class MediaManagerMock : public MediaManagerTest -{ -public: - MediaManagerMock() = default; - virtual ~MediaManagerMock() = default; - MOCK_METHOD1(SetMediaMonitorTrace, const StatusCode(std::shared_ptr &)); -}; -#endif \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaManagerTestTool.cpp b/test/middleware/MediaManager/tool/src/MediaManagerTestTool.cpp deleted file mode 100644 index 2ad40cbe..00000000 --- a/test/middleware/MediaManager/tool/src/MediaManagerTestTool.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MediaManagerTestTool.h" -#include "ILog.h" -#include "MediaManagerMakePtrTest.h" -#include "MediaManagerMock.h" -#include "MediaMonitorMock.h" -constexpr int ONLY_BE_CALLED_ONCE = 1; -void MediaManagerTestTool::Init(void) -{ - mMediaManagerMock = std::make_shared(); - MediaManagerMockInit(mMediaManagerMock); - std::shared_ptr mock = std::dynamic_pointer_cast(mMediaManagerMock); - OverrideMediaManagerMakePtrObject(mock); -} -void MediaManagerTestTool::UnInit(void) -{ - mMediaManagerMock.reset(); - mMediaMonitorMock.reset(); - CancelOverrideMediaManagerMakePtrObject(); -} -void MediaManagerTestTool::MediaManagerMockInit(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (!mock) { - LogError("vMock error.\n"); - return; - } - auto getMediaMonitor = [=](std::shared_ptr &monitor) { - LogInfo("mMediaMonitorMock get.\n"); - mMediaMonitorMock = monitor; - MediaManagerTestTool::MediaMonitorInit(mMediaMonitorMock); - }; - EXPECT_CALL(*mock.get(), SetMediaMonitorTrace(_)) - .Times(ONLY_BE_CALLED_ONCE) - .WillOnce(DoAll(WithArgs<0>(Invoke(getMediaMonitor)), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); -} -void MediaManagerTestTool::MediaMonitorInit(std::shared_ptr &vMock) -{ - std::shared_ptr mock = std::dynamic_pointer_cast(vMock); - if (mock) { - // EXPECT_CALL(*mock.get(), GetProductInfoTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetDeviceAttrTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetMediaInfoTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetSdCardInfoTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetParamValueTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetCapabilityTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetLockVideoStatusTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetStorageInfoTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetStorageFileListTrace(_, _)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetBatteryInfoTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), SetDateTimeTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), SetTimeZoneTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), SetParamValueTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), EnterRecorderTrace()) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), MediaPlaybackTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), UploadFileTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), GetThumbnailTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - // EXPECT_CALL(*mock.get(), MediaClientConnectedTrace(_)) - // .WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); - } -} -std::shared_ptr MediaManagerTestTool::MakeMonitorMock(void) -{ - class Monitor : public MediaMonitorMock, public MediaMonitorTest - { - public: - Monitor() = default; - virtual ~Monitor() = default; - }; - std::shared_ptr monitor = std::make_shared(); - return monitor; -} \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaMonitorMock.cpp b/test/middleware/MediaManager/tool/src/MediaMonitorMock.cpp deleted file mode 100644 index 9432142c..00000000 --- a/test/middleware/MediaManager/tool/src/MediaMonitorMock.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "MediaMonitorMock.h" -#include "ILog.h" -// StatusCode MediaMonitorTest::GetProductInfo(AppGetProductInfo ¶m) -// { -// LogInfo("MediaMonitorTest::GetProductInfo\n"); -// StatusCode code = GetProductInfoTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetProductInfo(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetProductInfoTrace(AppGetProductInfo ¶m) -// { -// LogInfo("MediaMonitorTrace::GetProductInfoTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetDeviceAttr(AppGetDeviceAttr ¶m) -// { -// LogInfo("MediaMonitorTest::GetDeviceAttr\n"); -// StatusCode code = GetDeviceAttrTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetDeviceAttr(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetDeviceAttrTrace(AppGetDeviceAttr ¶m) -// { -// LogInfo("MediaMonitorTrace::GetDeviceAttrTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetMediaInfo(AppGetMediaInfo ¶m) -// { -// LogInfo("MediaMonitorTest::GetMediaInfo\n"); -// StatusCode code = GetMediaInfoTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetMediaInfo(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetMediaInfoTrace(AppGetMediaInfo ¶m) -// { -// LogInfo("MediaMonitorTrace::GetMediaInfoTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetSdCardInfo(AppGetSdCardInfo ¶m) -// { -// LogInfo("MediaMonitorTest::GetSdCardInfo\n"); -// StatusCode code = GetSdCardInfoTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetSdCardInfo(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetSdCardInfoTrace(AppGetSdCardInfo ¶m) -// { -// LogInfo("MediaMonitorTrace::GetSdCardInfoTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetBatteryInfo(AppGetBatteryInfo ¶m) -// { -// LogInfo("MediaMonitorTest::GetBatteryInfo\n"); -// StatusCode code = GetBatteryInfoTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetBatteryInfo(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetBatteryInfoTrace(AppGetBatteryInfo ¶m) -// { -// LogInfo("MediaMonitorTrace::GetBatteryInfoTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetParamValue(AppParamValue ¶m) -// { -// LogInfo("MediaMonitorTest::GetParamValue\n"); -// StatusCode code = GetParamValueTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetParamValue(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetParamValueTrace(AppParamValue ¶m) -// { -// LogInfo("MediaMonitorTrace::GetParamValueTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetCapability(AppGetCapability ¶m) -// { -// LogInfo("MediaMonitorTest::GetCapability\n"); -// StatusCode code = GetCapabilityTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetCapability(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetCapabilityTrace(AppGetCapability ¶m) -// { -// LogInfo("MediaMonitorTrace::GetCapabilityTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetLockVideoStatus(LockVideoStatus ¶m) -// { -// LogInfo("MediaMonitorTest::GetLockVideoStatus\n"); -// StatusCode code = GetLockVideoStatusTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetLockVideoStatus(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetLockVideoStatusTrace(LockVideoStatus ¶m) -// { -// LogInfo("MediaMonitorTrace::GetLockVideoStatusTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetStorageInfo(std::vector ¶m) -// { -// LogInfo("MediaMonitorTest::GetStorageInfo\n"); -// StatusCode code = GetStorageInfoTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetStorageInfo(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetStorageInfoTrace(std::vector ¶m) -// { -// LogInfo("MediaMonitorTrace::GetStorageInfoTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) -// { -// LogInfo("MediaMonitorTest::GetStorageFileList\n"); -// StatusCode code = GetStorageFileListTrace(fileInfo, param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetStorageFileList(fileInfo, param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetStorageFileListTrace(const AppGetFileInfo &fileInfo, std::vector ¶m) -// { -// LogInfo("MediaMonitorTrace::GetStorageFileListTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::SetDateTime(const AppSetDateTime ¶m) -// { -// LogInfo("MediaMonitorTest::SetDateTime\n"); -// LogInfo("mYear = %u\n", param.mYear); -// LogInfo("mMonth = %02u\n", param.mMonth); -// LogInfo("mDay = %02u\n", param.mDay); -// LogInfo("mHour = %02u\n", param.mHour); -// LogInfo("mMinute = %02u\n", param.mMinute); -// LogInfo("mSecond = %02u\n", param.mSecond); -// StatusCode code = SetDateTimeTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::SetDateTime(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::SetDateTimeTrace(const AppSetDateTime ¶m) -// { -// LogInfo("MediaMonitorTrace::SetDateTimeTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::SetTimeZone(const unsigned int &zone) -// { -// LogInfo("MediaMonitorTest::SetTimeZone = %u\n", zone); -// StatusCode code = SetTimeZoneTrace(zone); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::SetTimeZone(zone); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::SetTimeZoneTrace(const unsigned int &zone) -// { -// LogInfo("MediaMonitorTrace::SetTimeZoneTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::SetParamValue(const AppSetParamValue ¶m) -// { -// LogInfo("MediaMonitorTest::SetParamValue\n"); -// StatusCode code = SetParamValueTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::SetParamValue(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::SetParamValueTrace(const AppSetParamValue ¶m) -// { -// LogInfo("MediaMonitorTrace::SetParamValueTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::EnterRecorder(void) -// { -// LogInfo("MediaMonitorTest::EnterRecorder\n"); -// StatusCode code = EnterRecorderTrace(); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::EnterRecorder(); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::EnterRecorderTrace(void) -// { -// LogInfo("MediaMonitorTrace::EnterRecorderTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::AppPlayback(const PlayBackEvent &event) -// { -// LogInfo("MediaMonitorTest::AppPlayback\n"); -// StatusCode code = AppPlaybackTrace(event); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::AppPlayback(event); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::AppPlaybackTrace(const PlayBackEvent &event) -// { -// LogInfo("MediaMonitorTrace::AppPlaybackTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::UploadFile(AppUploadFile ¶m) -// { -// LogInfo("MediaMonitorTest::UploadFile\n"); -// StatusCode code = UploadFileTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::UploadFile(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::UploadFileTrace(AppUploadFile ¶m) -// { -// LogInfo("MediaMonitorTrace::UploadFileTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::GetThumbnail(AppGetThumbnail ¶m) -// { -// LogInfo("MediaMonitorTest::GetThumbnail\n"); -// StatusCode code = GetThumbnailTrace(param); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::GetThumbnail(param); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::GetThumbnailTrace(AppGetThumbnail ¶m) -// { -// LogInfo("MediaMonitorTrace::UploadFileTrace\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } -// StatusCode MediaMonitorTest::AppClientConnected(std::shared_ptr &client) -// { -// LogInfo("MediaMonitorTest::AppClientConnected\n"); -// StatusCode code = AppClientConnectedTrace(client); -// if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) { -// return VMediaMonitor::AppClientConnected(client); -// } -// return code; -// } -// StatusCode MediaMonitorTrace::AppClientConnectedTrace(std::shared_ptr &client) -// { -// LogInfo("MediaMonitorTrace::AppClientConnected\n"); -// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); -// } \ No newline at end of file diff --git a/test/middleware/MediaManager/tool/src/MediaMonitorMock.h b/test/middleware/MediaManager/tool/src/MediaMonitorMock.h deleted file mode 100644 index c73c4741..00000000 --- a/test/middleware/MediaManager/tool/src/MediaMonitorMock.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MEDIA_MONITOR_MOCK_H -#define MEDIA_MONITOR_MOCK_H -#include "GtestUsing.h" -#include "IMediaManager.h" -class MediaMonitorTrace -{ -public: - MediaMonitorTrace() = default; - virtual ~MediaMonitorTrace() = default; - -protected: - // virtual StatusCode GetProductInfoTrace(AppGetProductInfo ¶m); - // virtual StatusCode GetDeviceAttrTrace(AppGetDeviceAttr ¶m); - // virtual StatusCode GetMediaInfoTrace(AppGetMediaInfo ¶m); - // virtual StatusCode GetSdCardInfoTrace(AppGetSdCardInfo ¶m); - // virtual StatusCode GetBatteryInfoTrace(AppGetBatteryInfo ¶m); - // virtual StatusCode GetParamValueTrace(AppParamValue ¶m); - // virtual StatusCode GetCapabilityTrace(AppGetCapability ¶m); - // virtual StatusCode GetLockVideoStatusTrace(LockVideoStatus ¶m); - // virtual StatusCode GetStorageInfoTrace(std::vector ¶m); - // virtual StatusCode GetStorageFileListTrace(const AppGetFileInfo &fileInfo, std::vector ¶m); - // virtual StatusCode SetDateTimeTrace(const AppSetDateTime ¶m); - // virtual StatusCode SetTimeZoneTrace(const unsigned int &zone); - // virtual StatusCode SetParamValueTrace(const AppSetParamValue ¶m); - // virtual StatusCode EnterRecorderTrace(void); - // virtual StatusCode AppPlaybackTrace(const PlayBackEvent &event); - // virtual StatusCode UploadFileTrace(AppUploadFile ¶m); - // virtual StatusCode GetThumbnailTrace(AppGetThumbnail ¶m); - // virtual StatusCode AppClientConnectedTrace(std::shared_ptr &client); -}; -class MediaMonitorTest : public VMediaMonitor, virtual public MediaMonitorTrace -{ -public: - MediaMonitorTest() = default; - virtual ~MediaMonitorTest() = default; - // StatusCode GetProductInfo(AppGetProductInfo ¶m) override; - // StatusCode GetDeviceAttr(AppGetDeviceAttr ¶m) override; - // StatusCode GetMediaInfo(AppGetMediaInfo ¶m) override; - // StatusCode GetSdCardInfo(AppGetSdCardInfo ¶m) override; - // StatusCode GetBatteryInfo(AppGetBatteryInfo ¶m) override; - // StatusCode GetParamValue(AppParamValue ¶m) override; - // StatusCode GetCapability(AppGetCapability ¶m) override; - // StatusCode GetLockVideoStatus(LockVideoStatus ¶m) override; - // StatusCode GetStorageInfo(std::vector ¶m) override; - // StatusCode GetStorageFileList(const AppGetFileInfo &fileInfo, std::vector ¶m) override; - // StatusCode SetDateTime(const AppSetDateTime ¶m) override; - // StatusCode SetTimeZone(const unsigned int &zone) override; - // StatusCode SetParamValue(const AppSetParamValue ¶m) override; - // StatusCode EnterRecorder(void) override; - // StatusCode AppPlayback(const PlayBackEvent &event) override; - // StatusCode UploadFile(AppUploadFile ¶m) override; - // StatusCode GetThumbnail(AppGetThumbnail ¶m) override; - // StatusCode AppClientConnected(std::shared_ptr &client) override; -}; -class MediaMonitorMock : virtual public MediaMonitorTrace -{ -public: - MediaMonitorMock() = default; - virtual ~MediaMonitorMock() = default; - // MOCK_METHOD1(GetProductInfoTrace, StatusCode(AppGetProductInfo &)); - // MOCK_METHOD1(GetDeviceAttrTrace, StatusCode(AppGetDeviceAttr &)); - // MOCK_METHOD1(GetMediaInfoTrace, StatusCode(AppGetMediaInfo &)); - // MOCK_METHOD1(GetSdCardInfoTrace, StatusCode(AppGetSdCardInfo &)); - // MOCK_METHOD1(GetBatteryInfoTrace, StatusCode(AppGetBatteryInfo &)); - // MOCK_METHOD1(GetParamValueTrace, StatusCode(AppParamValue &)); - // MOCK_METHOD1(GetCapabilityTrace, StatusCode(AppGetCapability &)); - // MOCK_METHOD1(GetLockVideoStatusTrace, StatusCode(LockVideoStatus &)); - // MOCK_METHOD1(GetStorageInfoTrace, StatusCode(std::vector &)); - // MOCK_METHOD2(GetStorageFileListTrace, StatusCode(const AppGetFileInfo &, std::vector &)); - // MOCK_METHOD1(SetDateTimeTrace, StatusCode(const AppSetDateTime &)); - // MOCK_METHOD1(SetTimeZoneTrace, StatusCode(const unsigned int &)); - // MOCK_METHOD1(SetParamValueTrace, StatusCode(const AppSetParamValue &)); - // MOCK_METHOD0(EnterRecorderTrace, StatusCode(void)); - // MOCK_METHOD1(AppPlaybackTrace, StatusCode(const PlayBackEvent &)); - // MOCK_METHOD1(UploadFileTrace, StatusCode(AppUploadFile &)); - // MOCK_METHOD1(GetThumbnailTrace, StatusCode(AppGetThumbnail &)); - // MOCK_METHOD1(AppClientConnectedTrace, StatusCode(std::shared_ptr &)); -}; -#endif \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/CMakeLists.txt b/test/utils/McuProtocol/tool/CMakeLists.txt deleted file mode 100644 index a72de19c..00000000 --- a/test/utils/McuProtocol/tool/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${UTILS_SOURCE_PATH}/UartDevice/include - ${UTILS_SOURCE_PATH}/ModBusCRC16/include - ${UTILS_SOURCE_PATH}/McuProtocol/src - ${TEST_SOURCE_PATH} - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH}/utils/UartDevice/tool/include - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include - ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET McuProtocolTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} UartDeviceTestTool Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - McuProtocolTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/utils/McuProtocol/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - McuProtocolTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/utils/McuProtocol/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make McuProtocolTestTool_code_check - COMMAND make McuProtocolTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp b/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp deleted file mode 100644 index 16cb847a..00000000 --- a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp +++ /dev/null @@ -1,1099 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "McuProtocolTestTool.h" -#include "ILog.h" -#include "ModBusCRC16.h" -#include "ProtocolHandle.h" -#include "ProtocolMonitor.h" -#include -#include -#include -#include -using std::placeholders::_1; -using std::placeholders::_2; -using std::placeholders::_3; -using std::placeholders::_4; -constexpr int PIPE_READ_FD_INDEX = 0; -constexpr int PIPE_WRITE_FD_INDEX = 1; -constexpr int INVALID_FD = -1; -const char *gPipeBuf = "nothing"; -constexpr size_t PROTOCOL_HEAD_LENGTH = 2; -constexpr size_t PROTOCOL_SERIAL_NUMBER_LENGTH = sizeof(unsigned int); -constexpr size_t PROTOCOL_SERIAL_NUMBER_OFFSET = PROTOCOL_HEAD_LENGTH; -constexpr size_t PROTOCOL_COMMAND_LENGTH = sizeof(short); -constexpr size_t PROTOCOL_COMMAND_OFFSET = PROTOCOL_SERIAL_NUMBER_OFFSET + PROTOCOL_SERIAL_NUMBER_LENGTH; -constexpr size_t PROTOCOL_DATA_LENGTH_LENGTH = sizeof(short); -constexpr size_t PROTOCOL_DATA_LENGTH_OFFSET = PROTOCOL_COMMAND_OFFSET + PROTOCOL_DATA_LENGTH_LENGTH; -constexpr size_t PROTOCOL_CHECK_CODE_LENGTH = sizeof(short); -constexpr size_t PROTOCOL_DATA_KEY_HEAD_LENGTH = - PROTOCOL_HEAD_LENGTH + PROTOCOL_SERIAL_NUMBER_LENGTH + PROTOCOL_COMMAND_LENGTH + PROTOCOL_DATA_LENGTH_LENGTH; -constexpr size_t PROTOCOL_DATA_OFFSET = PROTOCOL_DATA_KEY_HEAD_LENGTH; -unsigned char ASK_IPC_MISSION_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char REPLY_IPC_MISSION_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char ASK_CUT_OFF_POWER_SUPPLY_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81, 0x02, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char ASK_FEED_WATCH_DOG_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81, 0x03, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char ASK_SET_FEEDING_CYCLE_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x81, 0x04, 0x00, 0x0F, 0x01, 0x01, 0x01, 0xFF, 0xFF}; -unsigned char REPLY_SET_FEEDING_CYCLE_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char ASK_SET_DATE_TIME_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x81, 0x07, 0x00, 0x12, 0x20, 0x01, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF}; -unsigned char REPLY_SET_DATE_TIME_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char ASK_SET_PIR_SENSITIVITY_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x81, 0x08, 0x00, 0x0D, 0x09, 0xFF, 0xFF}; -unsigned char REPLY_SET_PIR_SENSITIVITY_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char ASK_CONTORL_INFRARED_LIGHT_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x81, 0x0A, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char REPLY_ASK_CONTORL_INFRARED_LIGHT_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char ASK_GET_PHOTOSENSITIVITY_X[] = {0xFA, 0xC1, 0x00, 0x00, 0x00, 0x01, 0x81, 0x0B, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char REPLY_ASK_GET_PHOTOSENSITIVITY_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x0D, 0x0A, 0xFF, 0xFF}; -unsigned char REPLY_OTHER_SIDE_ASK_SEND_IPC_MISSION_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x01, 0x00, 0x0D, 0x0A, 0xFF, 0xFF}; -unsigned char OTHER_SIDE_ASK_SEND_IPC_MISSION_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x0D, 0x01, 0xFF, 0xFF}; -unsigned char REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x02, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char OTHER_SIDE_ASK_SEND_HEART_BEAT_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x41, 0x02, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char REPLY_OTHER_SIDE_ASK_GET_INTERVAL_START_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x06, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF}; -unsigned char OTHER_SIDE_ASK_GET_INTERVAL_START_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x41, 0x06, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char REPLY_OTHER_SIDE_ASK_GET_DATE_TIME_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}; -unsigned char OTHER_SIDE_ASK_GET_DATE_TIME_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x41, 0x07, 0x00, 0x0C, 0xFF, 0xFF}; -unsigned char REPLY_OTHER_SIDE_ASK_GET_SENSITIVITY_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x08, 0x00, 0x0C, 0x00, 0xFF, 0xFF}; -unsigned char OTHER_SIDE_ASK_GET_SENSITIVITY_X[] = { - 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x0C, 0xFF, 0xFF}; -McuProtocolTestTool::McuProtocolTestTool() -{ - mThreadRuning = false; - mPipeFdMockSelectInit = false; - mPipeFdMockSelect[PIPE_READ_FD_INDEX] = -1; - mPipeFdMockSelect[PIPE_WRITE_FD_INDEX] = -1; - mUartFd = INVALID_FD; - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::MonitorProtocolPacket, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::IpcMissionProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::CutOffPowerSupplyProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::FeedWatchDogProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::FeedingCycleProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::SetDataTimeProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::SetPirSensitivityProtocolHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::ContorlInfraredLightHandle, this, _1, _2, _3, _4)); - mProtocolHandle.push_back(std::bind(&McuProtocolTestTool::GetPhotosensitivityValueHandle, this, _1, _2, _3, _4)); -} -void McuProtocolTestTool::Init(std::shared_ptr &mock, const UartInfo &uart) -{ - std::shared_ptr test = std::make_shared(); - std::shared_ptr tmp = std::dynamic_pointer_cast(test); - ProtocolMonitorTest::Init(tmp); - ProtocolMonitor::GetInstance(&test); - if (pipe(mPipeFdMockSelect) == 0) { - mPipeFdMockSelectInit = true; - } - else { - LogWarning("pipe failed, mPipeFdMockSelect willn,t work.\n"); - } - int uartFd = GetDeviceMockFd(uart); - mUart = std::make_shared(uart); - mUartFd = uartFd; - static size_t WRITE_COUNT = -1; - auto api_write = [=, &mock](int fd, const void *buf, size_t count) { - McuProtocolTestTool::PrintHexadecimalData(buf, count, "app write :"); - CheckSerialNumber(buf, count); - ChecCRC16Code(buf, count); - for (auto iter = mProtocolHandle.begin(); iter != mProtocolHandle.end(); ++iter) { - if ((*iter)(mock, uartFd, buf, count) == PROTOCOL_HANDLED) { - return; - } - } - LogWarning("Can't find protocol handle function.\n"); - }; - EXPECT_CALL(*mock.get(), fx_write(uartFd, _, _)) - .WillRepeatedly( - DoAll(SaveArg<2>(&WRITE_COUNT), WithArgs<0, 1, 2>(Invoke(api_write)), ReturnPointee(&WRITE_COUNT))); - SelectInit(mock, mUartFd); - InitProtocolBuff(); -} -void McuProtocolTestTool::UnInit(void) -{ - if (mLockThread.joinable()) { - mLockThread.join(); - } - if (mUnLockThread.joinable()) { - mUnLockThread.join(); - } - mSerialNumberList.clear(); - if (mPipeFdMockSelectInit) { - mPipeFdMockSelectInit = false; - close(mPipeFdMockSelect[PIPE_READ_FD_INDEX]); - close(mPipeFdMockSelect[PIPE_WRITE_FD_INDEX]); - mPipeFdMockSelect[PIPE_READ_FD_INDEX] = -1; - mPipeFdMockSelect[PIPE_WRITE_FD_INDEX] = -1; - } - mUartFd = INVALID_FD; - std::shared_ptr monitor = std::make_shared(); - ProtocolMonitor::GetInstance(&monitor); -} -void McuProtocolTestTool::MockOtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber) -{ - OtherSideAskIpcMissionHandle(mock, mUartFd, serialNumber); -} -void McuProtocolTestTool::MockOtherSideAskHeartBeat(std::shared_ptr &mock, const unsigned int &serialNumber) -{ - OtherSideAskHeartBeatHandle(mock, mUartFd, serialNumber); -} -void McuProtocolTestTool::MockOtherSideAskGetIntervalStart(std::shared_ptr &mock, - const unsigned int &serialNumber) -{ - OtherSideAskGetIntervalStartHandle(mock, mUartFd, serialNumber); -} -void McuProtocolTestTool::MockOtherSideAskGetDateTime(std::shared_ptr &mock, - const unsigned int &serialNumber) -{ - OtherSideAskGetDateTimeHandle(mock, mUartFd, serialNumber); -} -void McuProtocolTestTool::MockOtherSideAskGetPirSensitivity(std::shared_ptr &mock, - const unsigned int &serialNumber) -{ - OtherSideAskGetPirSensitivityHandle(mock, mUartFd, serialNumber); -} -void McuProtocolTestTool::MockOtherSideAskSendAnyData(std::shared_ptr &mock, const void *data, - const size_t &size) -{ - OtherSideAskSendSomeDataHandle(mock, mUartFd, data, size); -} -void McuProtocolTestTool::ReadNothingAnyTime(std::shared_ptr &mock) -{ - static size_t WRITE_COUNT = -1; - EXPECT_CALL(*mock.get(), fx_write(mUartFd, _, _)) - .WillRepeatedly(DoAll(SaveArg<2>(&WRITE_COUNT), ReturnPointee(&WRITE_COUNT))); - if (mUart) { - UartDeviceTestTool::SetUartDeviceReadNothing(mock, *mUart.get()); - } - else { - LogWarning("mUart is null.\n"); - } -} -void McuProtocolTestTool::InitProtocolBuff(void) -{ - REPLY_IPC_MISSION_X[PROTOCOL_DATA_OFFSET] = 0x01; -} -void McuProtocolTestTool::CheckSerialNumber(const void *buf, const size_t &count) -{ - unsigned int serialNumber = 0; - if (count > PROTOCOL_COMMAND_OFFSET + PROTOCOL_CHECK_CODE_LENGTH) { - memcpy(&serialNumber, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); - for (auto iter = mSerialNumberList.begin(); iter != mSerialNumberList.end(); ++iter) { - EXPECT_NE(*iter, serialNumber); - } - mSerialNumberList.push_back(serialNumber); - } -} -void McuProtocolTestTool::ChecCRC16Code(const void *buf, const size_t &count) -{ - short checkCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - checkCode = ntohs(checkCode); - } - EXPECT_EQ(memcmp((unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &checkCode, PROTOCOL_CHECK_CODE_LENGTH), - 0); -} -void McuProtocolTestTool::ResetCheckCode(const void *buf, const size_t &count) -{ - short checkCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - checkCode = ntohs(checkCode); - } - memcpy((unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &checkCode, PROTOCOL_CHECK_CODE_LENGTH); -} -void McuProtocolTestTool::SelectInit(std::shared_ptr &mock, const int &uartFd) -{ - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - if (false == mPipeFdMockSelectInit) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - } - else { - constexpr int READ_BUF_LENGTH = 256; - constexpr int READ_FAILD = -1; - char buf[READ_BUF_LENGTH] = {0}; - int selectResult = -1; - fd_set fdsRead; - FD_ZERO(&fdsRead); - FD_SET(mPipeFdMockSelect[PIPE_READ_FD_INDEX], &fdsRead); - selectResult = select(mPipeFdMockSelect[PIPE_READ_FD_INDEX] + 1, &fdsRead, NULL, NULL, timeout); - if (selectResult) { - if (false == mPipeFdMockSelectInit) { - LogWarning("mPipeFdMockSelectInit = false.\n"); - return; - } - ssize_t length = read(mPipeFdMockSelect[PIPE_READ_FD_INDEX], buf, READ_BUF_LENGTH); - if (READ_FAILD == length) { - LogError("mPipeFdMockSelect failed.\n"); - return; - } - if ((size_t)length != strlen(gPipeBuf)) { - LogWarning("Something wrong happened.\n"); - } - } - } - }; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); -} -void McuProtocolTestTool::ReplySelectSucceed(std::shared_ptr &mock, const int &uartFd) -{ - auto selectReadable = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - FD_ZERO(readfds); - FD_SET(uartFd, readfds); - }; - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - if (false == mPipeFdMockSelectInit) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - } - else { - constexpr int READ_BUF_LENGTH = 256; - constexpr int READ_FAILD = -1; - char buf[READ_BUF_LENGTH] = {0}; - int selectResult = -1; - fd_set fdsRead; - FD_ZERO(&fdsRead); - FD_SET(mPipeFdMockSelect[PIPE_READ_FD_INDEX], &fdsRead); - selectResult = select(mPipeFdMockSelect[PIPE_READ_FD_INDEX] + 1, &fdsRead, NULL, NULL, timeout); - if (selectResult) { - if (false == mPipeFdMockSelectInit) { - LogWarning("mPipeFdMockSelectInit = false.\n"); - return; - } - ssize_t length = read(mPipeFdMockSelect[PIPE_READ_FD_INDEX], buf, READ_BUF_LENGTH); - if (READ_FAILD == length) { - LogError("mPipeFdMockSelect failed.\n"); - return; - } - if ((size_t)length != strlen(gPipeBuf)) { - LogWarning("Something wrong happened.\n"); - } - } - } - }; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectReadable)), Return(1))) - .WillOnce(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectReadable)), Return(1))) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); - PipeSelectTimeoutForProtocolHandleImmediately(); -} -void McuProtocolTestTool::ReadOnceSelectSucceed(std::shared_ptr &mock, const int &uartFd) -{ - auto selectReadable = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - FD_ZERO(readfds); - FD_SET(uartFd, readfds); - }; - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - if (false == mPipeFdMockSelectInit) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - } - else { - constexpr int READ_BUF_LENGTH = 256; - constexpr int READ_FAILD = -1; - char buf[READ_BUF_LENGTH] = {0}; - int selectResult = -1; - fd_set fdsRead; - FD_ZERO(&fdsRead); - FD_SET(mPipeFdMockSelect[PIPE_READ_FD_INDEX], &fdsRead); - selectResult = select(mPipeFdMockSelect[PIPE_READ_FD_INDEX] + 1, &fdsRead, NULL, NULL, timeout); - if (selectResult) { - if (false == mPipeFdMockSelectInit) { - LogWarning("mPipeFdMockSelectInit = false.\n"); - return; - } - ssize_t length = read(mPipeFdMockSelect[PIPE_READ_FD_INDEX], buf, READ_BUF_LENGTH); - if (READ_FAILD == length) { - LogError("mPipeFdMockSelect failed.\n"); - return; - } - if ((size_t)length != strlen(gPipeBuf)) { - LogWarning("Something wrong happened.\n"); - } - } - } - }; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectReadable)), Return(1))) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); - PipeSelectTimeoutForProtocolHandleImmediately(); -} -void McuProtocolTestTool::MockOtherSideIpcMissionReply(const unsigned char &replyIpcMission) -{ - REPLY_IPC_MISSION_X[PROTOCOL_DATA_OFFSET] = replyIpcMission; -} -void McuProtocolTestTool::ReplySelectTimeOut(std::shared_ptr &mock, const int &uartFd) -{ - if (mUart) { - UartDeviceTestTool::SetUartDeviceTimeOut(mock, *mUart.get()); - } - else { - LogWarning("mUart is null.\n"); - } -} -bool McuProtocolTestTool::MonitorProtocolPacket(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - LogInfo("MonitorProtocolPacket\n"); - short head; - unsigned int serialNumber; - short command; - void *data; - short packetLength; - memcpy(&head, buf, PROTOCOL_HEAD_LENGTH); - memcpy(&serialNumber, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); - memcpy(&command, (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, PROTOCOL_COMMAND_LENGTH); - memcpy(&packetLength, (unsigned char *)buf + PROTOCOL_DATA_LENGTH_OFFSET, PROTOCOL_DATA_LENGTH_LENGTH); - data = (unsigned char *)buf + PROTOCOL_DATA_KEY_HEAD_LENGTH; - head = ntohs(head); - serialNumber = ntohl(serialNumber); - command = ntohs(command); - packetLength = ntohs(packetLength); - ProtocolMonitor::GetInstance()->MonitorWriteProtocolData(head, serialNumber, command, data, packetLength); - return PROTOCOL_NOT_HANDLED; -} -bool McuProtocolTestTool::IpcMissionProtocolHandle(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - if (sizeof(ASK_IPC_MISSION_X) == count && memcmp(ASK_IPC_MISSION_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - LogInfo("Set REPLY_IPC_MISSION_X\n"); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->IpcMissionProtocolInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::IpcMissionProtocolInit(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - LockProtocolHandle(); - LogInfo("IpcMissionProtocolInit start.\n"); - memcpy(REPLY_IPC_MISSION_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - free((void *)buf); - ResetCheckCode(REPLY_IPC_MISSION_X, sizeof(REPLY_IPC_MISSION_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_IPC_MISSION_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_IPC_MISSION_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "IpcMissionProtocolInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_IPC_MISSION_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "IpcMissionProtocolInit read:"); - UnlockProtocolHandle(); - LogInfo("IpcMissionProtocolInit finished.\n"); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -bool McuProtocolTestTool::CutOffPowerSupplyProtocolHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_CUT_OFF_POWER_SUPPLY_X) == count && memcmp(ASK_CUT_OFF_POWER_SUPPLY_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - LogInfo("Set ASK_CUT_OFF_POWER_SUPPLY_X\n"); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -bool McuProtocolTestTool::FeedWatchDogProtocolHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_FEED_WATCH_DOG_X) == count && memcmp(ASK_FEED_WATCH_DOG_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - LogInfo("Set ASK_FEED_WATCH_DOG_X\n"); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -bool McuProtocolTestTool::FeedingCycleProtocolHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_SET_FEEDING_CYCLE_X) == count && memcmp(ASK_SET_FEEDING_CYCLE_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - short replyCheckCode = calculate_check_sum(REPLY_SET_FEEDING_CYCLE_X, - sizeof(REPLY_SET_FEEDING_CYCLE_X) - PROTOCOL_CHECK_CODE_LENGTH); - replyCheckCode = htons(replyCheckCode); - LogInfo("Set ASK_SET_FEEDING_CYCLE_X, reply data check code = 0x%x\n", replyCheckCode); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->FeedingCycleProtocolInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::FeedingCycleProtocolInit(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - LockProtocolHandle(); - LogInfo("FeedingCycleProtocolInit start.\n"); - memcpy(REPLY_SET_FEEDING_CYCLE_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - free((void *)buf); - ResetCheckCode(REPLY_SET_FEEDING_CYCLE_X, sizeof(REPLY_SET_FEEDING_CYCLE_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_FEEDING_CYCLE_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_FEEDING_CYCLE_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "FeedingCycleProtocolInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_FEEDING_CYCLE_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "FeedingCycleProtocolInit read:"); - UnlockProtocolHandle(); - LogInfo("FeedingCycleProtocolInit finished.\n"); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -bool McuProtocolTestTool::SetDataTimeProtocolHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_SET_DATE_TIME_X) == count && memcmp(ASK_SET_DATE_TIME_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - short replyCheckCode = - calculate_check_sum(REPLY_SET_DATE_TIME_X, sizeof(REPLY_SET_DATE_TIME_X) - PROTOCOL_CHECK_CODE_LENGTH); - replyCheckCode = htons(replyCheckCode); - LogInfo("Set ASK_SET_DATE_TIME_X, reply data check code = 0x%x\n", replyCheckCode); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->SetDataTimeProtocolInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::SetDataTimeProtocolInit(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - LockProtocolHandle(); - memcpy(REPLY_SET_DATE_TIME_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - free((void *)buf); - ResetCheckCode(REPLY_SET_DATE_TIME_X, sizeof(REPLY_SET_DATE_TIME_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_DATE_TIME_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_DATE_TIME_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "SetDataTimeProtocolInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_DATE_TIME_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "SetDataTimeProtocolInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -bool McuProtocolTestTool::SetPirSensitivityProtocolHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_SET_PIR_SENSITIVITY_X) == count && memcmp(ASK_SET_PIR_SENSITIVITY_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - short replyCheckCode = calculate_check_sum(REPLY_SET_PIR_SENSITIVITY_X, - sizeof(REPLY_SET_PIR_SENSITIVITY_X) - PROTOCOL_CHECK_CODE_LENGTH); - replyCheckCode = htons(replyCheckCode); - LogInfo("Set ASK_SET_PIR_SENSITIVITY_X, reply data check code = 0x%x\n", replyCheckCode); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - if (ORDER_LITTLE_ENDIAN == ProtocolHandle::GetByteOrder()) { - askCheckCode = ntohs(askCheckCode); - } - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->SetDataTimeProtocolInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::SetPirSensitivityProtocolInit(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - LockProtocolHandle(); - memcpy(REPLY_SET_PIR_SENSITIVITY_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(REPLY_SET_PIR_SENSITIVITY_X, sizeof(REPLY_SET_PIR_SENSITIVITY_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_PIR_SENSITIVITY_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_PIR_SENSITIVITY_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "SetPirSensitivityProtocolInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_SET_PIR_SENSITIVITY_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "SetPirSensitivityProtocolInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -bool McuProtocolTestTool::ContorlInfraredLightHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_CONTORL_INFRARED_LIGHT_X) == count && memcmp(ASK_CONTORL_INFRARED_LIGHT_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - short replyCheckCode = - calculate_check_sum(REPLY_ASK_CONTORL_INFRARED_LIGHT_X, - sizeof(REPLY_ASK_CONTORL_INFRARED_LIGHT_X) - PROTOCOL_CHECK_CODE_LENGTH); - replyCheckCode = htons(replyCheckCode); - LogInfo("Set ASK_CONTORL_INFRARED_LIGHT_X, reply data check code = 0x%x\n", replyCheckCode); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - // askCheckCode = htons(askCheckCode); - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->ContorlInfraredLightInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::ContorlInfraredLightInit(std::shared_ptr &mock, const int &uartFd, const void *buf, - size_t count) -{ - LockProtocolHandle(); - memcpy(REPLY_ASK_CONTORL_INFRARED_LIGHT_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - free((void *)buf); - ResetCheckCode(REPLY_ASK_CONTORL_INFRARED_LIGHT_X, sizeof(REPLY_ASK_CONTORL_INFRARED_LIGHT_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_ASK_CONTORL_INFRARED_LIGHT_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_ASK_CONTORL_INFRARED_LIGHT_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "ContorlInfraredLightInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_ASK_CONTORL_INFRARED_LIGHT_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "ContorlInfraredLightInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -bool McuProtocolTestTool::GetPhotosensitivityValueHandle(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - if (sizeof(ASK_GET_PHOTOSENSITIVITY_X) == count && memcmp(ASK_GET_PHOTOSENSITIVITY_X + PROTOCOL_COMMAND_OFFSET, - (unsigned char *)buf + PROTOCOL_COMMAND_OFFSET, - PROTOCOL_COMMAND_LENGTH) == 0) { - short replyCheckCode = calculate_check_sum( - REPLY_ASK_GET_PHOTOSENSITIVITY_X, sizeof(REPLY_ASK_GET_PHOTOSENSITIVITY_X) - PROTOCOL_CHECK_CODE_LENGTH); - replyCheckCode = htons(replyCheckCode); - LogInfo("Set ASK_GET_PHOTOSENSITIVITY_X, reply data check code = 0x%x\n", replyCheckCode); - short askCheckCode = calculate_check_sum((unsigned char *)buf, count - PROTOCOL_CHECK_CODE_LENGTH); - // askCheckCode = htons(askCheckCode); - int result = memcmp( - (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); - EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; - unsigned char *bufHandle = (unsigned char *)malloc(count); - if (nullptr == bufHandle) { - LogError("malloc failed.\n"); - return PROTOCOL_HANDLED; - } - memcpy(bufHandle, buf, count); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->GetPhotosensitivityValueInit(mock, uartFd, bufHandle, count); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); - return PROTOCOL_HANDLED; - } - return PROTOCOL_NOT_HANDLED; -} -void McuProtocolTestTool::GetPhotosensitivityValueInit(std::shared_ptr &mock, const int &uartFd, - const void *buf, size_t count) -{ - LockProtocolHandle(); - memcpy(REPLY_ASK_GET_PHOTOSENSITIVITY_X + PROTOCOL_SERIAL_NUMBER_OFFSET, - (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, - PROTOCOL_SERIAL_NUMBER_LENGTH); - free((void *)buf); - ResetCheckCode(REPLY_ASK_GET_PHOTOSENSITIVITY_X, sizeof(REPLY_ASK_GET_PHOTOSENSITIVITY_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_ASK_GET_PHOTOSENSITIVITY_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_ASK_GET_PHOTOSENSITIVITY_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "GetPhotosensitivityValueInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, REPLY_ASK_GET_PHOTOSENSITIVITY_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "GetPhotosensitivityValueInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); -} -void McuProtocolTestTool::UnlockProtocolHandle(void) -{ - auto unlockThread = [=](McuProtocolTestTool *testTool) { - testTool->UnlockThread(); - }; - if (mUnLockThread.joinable()) { - mUnLockThread.join(); - } - mUnLockThread = std::thread(unlockThread, this); -} -void McuProtocolTestTool::LockProtocolHandle(void) -{ - mMutex.lock(); -} -void McuProtocolTestTool::UnlockThread(void) -{ - std::this_thread::sleep_for(std::chrono::milliseconds(5)); - mMutex.unlock(); -} -void McuProtocolTestTool::PipeSelectTimeoutForProtocolHandleImmediately(void) -{ - constexpr int WRITE_FAILD = -1; - if (true == mPipeFdMockSelectInit) { - ssize_t length = write(mPipeFdMockSelect[PIPE_WRITE_FD_INDEX], gPipeBuf, strlen(gPipeBuf)); - if (WRITE_FAILD == length) { - LogError("mPipeFdMockSelect failed.\n"); - return; - } - if ((size_t)length != strlen(gPipeBuf)) { - LogWarning("Something wrong happened.\n"); - } - } -} -void McuProtocolTestTool::OtherSideAskIpcMissionHandle(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LogInfo("OtherSideAskIpcMissionHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskIpcMissionInit(mock, uartFd, serialNumber); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskIpcMissionInit(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LockProtocolHandle(); - LogInfo("OtherSideAskIpcMissionInit start.\n"); - unsigned int serialNum = serialNumber; - serialNum = htonl(serialNum); - memcpy( - OTHER_SIDE_ASK_SEND_IPC_MISSION_X + PROTOCOL_SERIAL_NUMBER_OFFSET, &serialNum, PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(OTHER_SIDE_ASK_SEND_IPC_MISSION_X, sizeof(OTHER_SIDE_ASK_SEND_IPC_MISSION_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(OTHER_SIDE_ASK_SEND_IPC_MISSION_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_SEND_IPC_MISSION_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "OtherSideAskIpcMissionInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_SEND_IPC_MISSION_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "OtherSideAskIpcMissionInit read:"); - UnlockProtocolHandle(); - LogInfo("OtherSideAskIpcMissionInit finished.\n"); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); - std::shared_ptr test = - std::dynamic_pointer_cast(ProtocolMonitorTest::GetInstance()); - if (test) { - ProtocolMonitorTest::WriteDataOnce(test, - PROTOCOL_HEAD, - serialNumber, - REPLY_OTHER_SIDE_ASK_SEND_IPC_MISSION, - nullptr, - sizeof(REPLY_OTHER_SIDE_ASK_SEND_IPC_MISSION_X)); - } -} -void McuProtocolTestTool::OtherSideAskHeartBeatHandle(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LogInfo("OtherSideAskHeartBeatHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskHeartBeatInit(mock, uartFd, serialNumber); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskHeartBeatInit(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LockProtocolHandle(); - unsigned int serialNum = serialNumber; - serialNum = htonl(serialNum); - memcpy(OTHER_SIDE_ASK_SEND_HEART_BEAT_X + PROTOCOL_SERIAL_NUMBER_OFFSET, &serialNum, PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(OTHER_SIDE_ASK_SEND_HEART_BEAT_X, sizeof(OTHER_SIDE_ASK_SEND_HEART_BEAT_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(OTHER_SIDE_ASK_SEND_HEART_BEAT_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_SEND_HEART_BEAT_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "OtherSideAskHeartBeatInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_SEND_HEART_BEAT_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "OtherSideAskHeartBeatInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); - std::shared_ptr test = - std::dynamic_pointer_cast(ProtocolMonitorTest::GetInstance()); - if (test) { - ProtocolMonitorTest::WriteDataOnce(test, - PROTOCOL_HEAD, - serialNumber, - REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT, - nullptr, - sizeof(REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT_X)); - } -} -void McuProtocolTestTool::OtherSideAskGetIntervalStartHandle(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LogInfo("OtherSideAskGetIntervalStartHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskGetIntervalStartInit(mock, uartFd, serialNumber); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskGetIntervalStartInit(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LockProtocolHandle(); - unsigned int serialNum = serialNumber; - serialNum = htonl(serialNum); - memcpy( - OTHER_SIDE_ASK_GET_INTERVAL_START_X + PROTOCOL_SERIAL_NUMBER_OFFSET, &serialNum, PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(OTHER_SIDE_ASK_GET_INTERVAL_START_X, sizeof(OTHER_SIDE_ASK_GET_INTERVAL_START_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(OTHER_SIDE_ASK_GET_INTERVAL_START_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_INTERVAL_START_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "OtherSideAskGetIntervalStartInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_INTERVAL_START_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "OtherSideAskGetIntervalStartInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); - std::shared_ptr test = - std::dynamic_pointer_cast(ProtocolMonitorTest::GetInstance()); - if (test) { - ProtocolMonitorTest::WriteDataOnce(test, - PROTOCOL_HEAD, - serialNumber, - REPLY_OTHER_SIDE_ASK_GET_INTERVAL_START, - nullptr, - sizeof(REPLY_OTHER_SIDE_ASK_GET_INTERVAL_START_X)); - } -} -void McuProtocolTestTool::OtherSideAskGetDateTimeHandle(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LogInfo("OtherSideAskGetDateTimeHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskGetDateTimeInit(mock, uartFd, serialNumber); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskGetDateTimeInit(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LockProtocolHandle(); - unsigned int serialNum = serialNumber; - serialNum = htonl(serialNum); - memcpy(OTHER_SIDE_ASK_GET_DATE_TIME_X + PROTOCOL_SERIAL_NUMBER_OFFSET, &serialNum, PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(OTHER_SIDE_ASK_GET_DATE_TIME_X, sizeof(OTHER_SIDE_ASK_GET_DATE_TIME_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(OTHER_SIDE_ASK_GET_DATE_TIME_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_DATE_TIME_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "OtherSideAskGetDateTimeInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_DATE_TIME_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "OtherSideAskGetDateTimeInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); - std::shared_ptr test = - std::dynamic_pointer_cast(ProtocolMonitorTest::GetInstance()); - if (test) { - ProtocolMonitorTest::WriteDataOnce(test, - PROTOCOL_HEAD, - serialNumber, - REPLY_OTHER_SIDE_ASK_GET_DATE_TIME, - nullptr, - sizeof(REPLY_OTHER_SIDE_ASK_GET_DATE_TIME_X)); - } -} -void McuProtocolTestTool::OtherSideAskGetPirSensitivityHandle(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LogInfo("OtherSideAskGetPirSensitivityHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskGetPirSensitivityInit(mock, uartFd, serialNumber); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskGetPirSensitivityInit(std::shared_ptr &mock, const int &uartFd, - const unsigned int &serialNumber) -{ - LockProtocolHandle(); - unsigned int serialNum = serialNumber; - serialNum = htonl(serialNum); - memcpy(OTHER_SIDE_ASK_GET_SENSITIVITY_X + PROTOCOL_SERIAL_NUMBER_OFFSET, &serialNum, PROTOCOL_SERIAL_NUMBER_LENGTH); - ResetCheckCode(OTHER_SIDE_ASK_GET_SENSITIVITY_X, sizeof(OTHER_SIDE_ASK_GET_SENSITIVITY_X)); - constexpr int LEFT_DATA_LENGTH = sizeof(OTHER_SIDE_ASK_GET_SENSITIVITY_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; - auto apiReadKeyHead = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_SENSITIVITY_X, PROTOCOL_DATA_KEY_HEAD_LENGTH); - McuProtocolTestTool::PrintHexadecimalData( - buf, PROTOCOL_DATA_KEY_HEAD_LENGTH, "OtherSideAskGetPirSensitivityInit read:"); - }; - auto apiReadLeftData = [=](int fd, void *buf, size_t count) { - memcpy(buf, OTHER_SIDE_ASK_GET_SENSITIVITY_X + PROTOCOL_DATA_KEY_HEAD_LENGTH, LEFT_DATA_LENGTH); - McuProtocolTestTool::PrintHexadecimalData(buf, LEFT_DATA_LENGTH, "OtherSideAskGetPirSensitivityInit read:"); - UnlockProtocolHandle(); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadKeyHead)), Return(PROTOCOL_DATA_KEY_HEAD_LENGTH))) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), Return(LEFT_DATA_LENGTH))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - ReplySelectSucceed(mock, uartFd); - std::shared_ptr test = - std::dynamic_pointer_cast(ProtocolMonitorTest::GetInstance()); - if (test) { - ProtocolMonitorTest::WriteDataOnce(test, - PROTOCOL_HEAD, - serialNumber, - REPLY_OTHER_SIDE_ASK_GET_PIR_SENSITIVITY, - nullptr, - sizeof(REPLY_OTHER_SIDE_ASK_GET_SENSITIVITY_X)); - } -} -void McuProtocolTestTool::OtherSideAskSendSomeDataHandle(std::shared_ptr &mock, const int &uartFd, - const void *data, const size_t &size) -{ - LogInfo("OtherSideAskSendSomeDataHandle\n"); - auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->OtherSideAskSendSomeDataInit(mock, uartFd, data, size); - }; - if (mLockThread.joinable()) { - mLockThread.join(); - } - mLockThread = std::thread(handle, this); -} -void McuProtocolTestTool::OtherSideAskSendSomeDataInit(std::shared_ptr &mock, const int &uartFd, - const void *data, const size_t &size) -{ - LockProtocolHandle(); - static size_t totalLength = 0; - static size_t leftDataLength = 0; - static size_t readResult = 0; - totalLength = size; - leftDataLength = totalLength; - readResult = 0; - auto apiReadLeftData = [this, data, &mock, uartFd](int fd, void *buf, size_t count) { - if (leftDataLength >= count) { - memcpy(buf, (unsigned char *)data + totalLength - leftDataLength, count); - readResult = count; - leftDataLength = leftDataLength - count; - McuProtocolTestTool::PrintHexadecimalData(buf, count, "OtherSideAskSendSomeDataInit read:"); - } - else { - memcpy(buf, (unsigned char *)data + totalLength - leftDataLength, leftDataLength); - readResult = leftDataLength; - leftDataLength = 0; - McuProtocolTestTool::PrintHexadecimalData(buf, readResult, "OtherSideAskSendSomeDataInit2 read:"); - } - if (leftDataLength > 0) { - this->ReadOnceSelectSucceed(mock, uartFd); - } - else { - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)).WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - UnlockProtocolHandle(); - } - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2>(Invoke(apiReadLeftData)), ReturnPointee(&readResult))); - ReadOnceSelectSucceed(mock, uartFd); -} -void McuProtocolTestTool::PrintHexadecimalData(const void *buf, const size_t &bufLength, const char *log) -{ - printf("%s { 0x%02X", log, *(unsigned char *)buf); - for (size_t i = 1; i < bufLength; i++) { - printf(", 0x%02X", *((unsigned char *)buf + i)); - } - printf(" }\n"); -} \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/src/ProtocolMonitor.cpp b/test/utils/McuProtocol/tool/src/ProtocolMonitor.cpp deleted file mode 100644 index 41470308..00000000 --- a/test/utils/McuProtocol/tool/src/ProtocolMonitor.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "ProtocolMonitor.h" -#include "ILog.h" -static void PrintHexadecimalData(const void *buf, const size_t &bufLength, const char *log) -{ - printf("%s { 0x%02X", log, *(unsigned char *)buf); - for (size_t i = 1; i < bufLength; i++) { - printf(", 0x%02X", *((unsigned char *)buf + i)); - } - printf(" }\n"); -} -std::shared_ptr &ProtocolMonitor::GetInstance(std::shared_ptr *impl) -{ - static auto instance = std::make_shared(); - if (impl) { - if (instance.use_count() == 1) { - LogInfo("Instance changed succeed.\n"); - instance = *impl; - } - else { - LogError("Can't changing the instance becase of using by some one.\n"); - } - } - return instance; -} -void ProtocolMonitor::MonitorWriteProtocolData(const short &head, const unsigned int &serialNumber, - const short &command, const void *data, const short &packetLength) -{ -} -void ProtocolMonitorTest::Init(std::shared_ptr &test) -{ - auto printfParam = [=](const short &head, - const unsigned int &serialNumber, - const short &command, - const void *data, - const short &packetLength) { - LogInfo("MonitorWriteProtocolData called.\n"); - PrintHexadecimalData(&head, sizeof(head), "MonitorWriteProtocolData(head):"); - PrintHexadecimalData(&serialNumber, sizeof(serialNumber), "MonitorWriteProtocolData(serialNumber):"); - PrintHexadecimalData(&command, sizeof(command), "MonitorWriteProtocolData(command):"); - PrintHexadecimalData(&packetLength, sizeof(packetLength), "MonitorWriteProtocolData(packetLength):"); - }; - EXPECT_CALL(*test.get(), MonitorWriteProtocolData(_, _, _, _, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(printfParam)), Return())); -} -void ProtocolMonitorTest::WriteDataOnce(std::shared_ptr &test, const short &head, - const unsigned int &serialNumber, const short &command, const void *data, - const short &packetLength) -{ - auto printfParam = [=](const short &head, - const unsigned int &serialNumber, - const short &command, - const void *data, - const short &packetLength) { - }; - PrintHexadecimalData(&head, sizeof(head), "WriteDataOnce(head):"); - PrintHexadecimalData(&serialNumber, sizeof(serialNumber), "WriteDataOnce(serialNumber):"); - PrintHexadecimalData(&command, sizeof(command), "WriteDataOnce(command):"); - PrintHexadecimalData(&packetLength, sizeof(packetLength), "WriteDataOnce(packetLength):"); - EXPECT_CALL(*test.get(), MonitorWriteProtocolData(head, serialNumber, command, _, packetLength)) - .Times(1) - .WillOnce(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(printfParam)), Return())); -} \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/src/ProtocolMonitor.h b/test/utils/McuProtocol/tool/src/ProtocolMonitor.h deleted file mode 100644 index 3d49168e..00000000 --- a/test/utils/McuProtocol/tool/src/ProtocolMonitor.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PROTOCOL_MONITOR_H -#define PROTOCOL_MONITOR_H -#include "GtestUsing.h" -#include -class ProtocolMonitor -{ -public: - ProtocolMonitor() = default; - virtual ~ProtocolMonitor() = default; - static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr); - /** - * @brief This function is used to monitor whether the data written to the serial port matches the protocol and - * belongs to a piling function. - * @param head Whether to match the protocol header. - * @param serialNumber Whether to match the serial number. - * @param command Whether to match command words. - * @param data - * @param packetLength Whether to match the packet length. - */ - virtual void MonitorWriteProtocolData(const short &head, const unsigned int &serialNumber, const short &command, - const void *data, const short &packetLength); -}; -class ProtocolMonitorTest : public ProtocolMonitor -{ -public: - ProtocolMonitorTest() = default; - virtual ~ProtocolMonitorTest() = default; - MOCK_METHOD5(MonitorWriteProtocolData, - void(const short &, const unsigned int &, const short &, const void *, const short &)); - -public: - static void Init(std::shared_ptr &test); - static void WriteDataOnce(std::shared_ptr &test, const short &head, - const unsigned int &serialNumber, const short &command, const void *data, - const short &packetLength); -}; -#endif \ No newline at end of file diff --git a/test/utils/UartDevice/tool/CMakeLists.txt b/test/utils/UartDevice/tool/CMakeLists.txt deleted file mode 100644 index a3cea16a..00000000 --- a/test/utils/UartDevice/tool/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -include(${CMAKE_SOURCE_DIR_IPCSDK}/build/global_config.cmake) -set(EXECUTABLE_OUTPUT_PATH ${EXEC_OUTPUT_PATH}) -set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) - -include_directories( - ./src - ./include - ${UTILS_SOURCE_PATH}/StatusCode/include - ${UTILS_SOURCE_PATH}/Log/include - ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include - ${TEST_SOURCE_PATH} -) -# link_directories( -# ${EXTERNAL_SOURCE_PATH}/libconfig/libconfig-1.7.3/lib/.libs -# ) - -aux_source_directory(./src TEST_TOOL_SRC_FILES) -set(TEST_TOOL_TARGET UartDeviceTestTool) -add_library(${TEST_TOOL_TARGET} STATIC ${TEST_TOOL_SRC_FILES}) -target_link_libraries(${TEST_TOOL_TARGET} LinuxApiMock Log) - -if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") -add_custom_target( - UartDeviceTestTool_code_check - COMMAND ${CLANG_TIDY_EXE} - -checks='${CLANG_TIDY_CHECKS}' - --header-filter=.* - --system-headers=false - ${TEST_TOOL_SRC_FILES} - ${CLANG_TIDY_CONFIG} - -p ${PLATFORM_PATH}/cmake-shell - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/utils/UartDevice/tool -) -file(GLOB_RECURSE HEADER_FILES *.h) -add_custom_target( - UartDeviceTestTool_code_format - COMMAND ${CLANG_FORMAT_EXE} - -style=file - -i ${TEST_TOOL_SRC_FILES} ${HEADER_FILES} - WORKING_DIRECTORY ${TEST_SOURCE_PATH}/utils/UartDevice/tool -) -add_custom_command( - TARGET ${TEST_TOOL_TARGET} - PRE_BUILD - COMMAND make UartDeviceTestTool_code_check - COMMAND make UartDeviceTestTool_code_format - WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/ -) -endif() - -define_file_name(${TEST_TOOL_TARGET}) \ No newline at end of file diff --git a/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp b/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp deleted file mode 100644 index 2ab1bb35..00000000 --- a/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2023 Fancy Code. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "UartDeviceTestTool.h" -#include "ILog.h" -#include -static size_t WRITE_COUNT = -1; -constexpr int INVALID_FD = -1; -int UartDeviceTestTool::RegisterUartDevice(std::shared_ptr &mock, const UartInfo &uart) -{ - if (nullptr == uart.mDevice) { - LogError("Parament error, nullptr == uartInfo.mDevice\n"); - return INVALID_FD; - } - constexpr int TCGETATTR_SUCCEED = 0; - constexpr int TCSETATTR_SUCCEED = 0; - int uartFd = mock->GetHandleForMock(); - LogInfo("device = %s, uartFd = %d\n", uart.mDevice, uartFd); - EXPECT_CALL(*mock.get(), fx_open(uart.mDevice, _)).WillRepeatedly(DoAll((Return(uartFd)))); - EXPECT_CALL(*mock.get(), fx_tcgetattr(uartFd, _)).WillRepeatedly(DoAll(Return(TCGETATTR_SUCCEED))); - EXPECT_CALL(*mock.get(), fx_tcsetattr(uartFd, _, _)).WillRepeatedly(DoAll(Return(TCSETATTR_SUCCEED))); - EXPECT_CALL(*mock.get(), fx_write(uartFd, _, _)) - .WillRepeatedly(DoAll(SaveArg<2>(&WRITE_COUNT), ReturnPointee(&WRITE_COUNT))); - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - }; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)).WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); - mDeviceMap[uart.mDevice] = uartFd; - return uartFd; -} -int UartDeviceTestTool::GetDeviceMockFd(const UartInfo &uart) -{ - std::map::iterator iter; - iter = mDeviceMap.find(uart.mDevice); - if (iter == mDeviceMap.end()) { - LogError("Can't found the uart device[%s].\n", uart.mDevice); - return INVALID_FD; - } - return mDeviceMap[uart.mDevice]; -} -void UartDeviceTestTool::UnregisterUartDevice(const UartInfo &uart) -{ - std::map::iterator iter; - iter = mDeviceMap.find(uart.mDevice); - if (iter != mDeviceMap.end()) { - mDeviceMap.erase(iter); - return; - } - LogError("Can't found the uart device[%s].\n", uart.mDevice); -} -void UartDeviceTestTool::SetSendApiOnce(std::shared_ptr &mock, const UartInfo &uart, const ssize_t &length) -{ - std::map::iterator iter; - iter = mDeviceMap.find(uart.mDevice); - if (iter == mDeviceMap.end()) { - LogError("Can't found the uart device[%s].\n", uart.mDevice); - return; - } - EXPECT_CALL(*mock.get(), fx_write(mDeviceMap[uart.mDevice], _, _)) - .WillOnce(DoAll(Return(length))) - .WillRepeatedly(DoAll(SaveArg<2>(&WRITE_COUNT), ReturnPointee(&WRITE_COUNT))); -} -void UartDeviceTestTool::SetRecvApiOnce(std::shared_ptr &mock, const UartInfo &uart, void *recvBuff, - const ssize_t &length) -{ - std::map::iterator iter; - iter = mDeviceMap.find(uart.mDevice); - if (iter == mDeviceMap.end()) { - LogError("Can't found the uart device[%s].\n", uart.mDevice); - return; - } - int uartFd = mDeviceMap[uart.mDevice]; - auto selectSucceed = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - FD_ZERO(readfds); - FD_SET(uartFd, readfds); - }; - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - }; - constexpr int SELECT_READABLE = 1; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectSucceed)), Return(SELECT_READABLE))) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); - auto readBuf = [=, &mock](int fd, void *buf, size_t count) { - memcpy(buf, recvBuff, length); - }; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) - .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(readBuf)), Return(length))) - .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); -} -void UartDeviceTestTool::SetUartDeviceOpenFailed(std::shared_ptr &mock, const UartInfo &uart) -{ - LogInfo("SetUartDeviceOpenFailed[%s], will return -1\n", uart.mDevice); - EXPECT_CALL(*mock.get(), fx_open(uart.mDevice, _)).WillRepeatedly(DoAll((Return(-1)))); -} -void UartDeviceTestTool::SetUartDeviceReadNothing(std::shared_ptr &mock, const UartInfo &uart) -{ - SetUartDeviceTimeOut(mock, uart); - int uartFd = mDeviceMap[uart.mDevice]; - EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)).WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); -} -void UartDeviceTestTool::SetUartDeviceTimeOut(std::shared_ptr &mock, const UartInfo &uart) -{ - int uartFd = mDeviceMap[uart.mDevice]; - auto selectTimeOut = - [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { - long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); - }; - EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) - .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); -} \ No newline at end of file