diff --git a/application/MissionManager/README.md b/application/MissionManager/README.md
index 9e2f23b..2bf2a53 100644
--- a/application/MissionManager/README.md
+++ b/application/MissionManager/README.md
@@ -14,6 +14,8 @@
## 1.2. 状态机设计
+### 1.2.1. 状态树设计图
+
```mermaid
stateDiagram-v2
[*] --> TopState
@@ -38,6 +40,9 @@ MissionState --> 4G管理
MissionState --> Upgrade
```
+1. 任意状态处理命令时,不能阻塞,否则整个应用将会瘫痪无法响应任意的命令;
+2. MissionState: 任务状态,在此状态下,由任务状态处理各种逻辑命令,根据逻辑命令定义,切换到相应的状态再处理数据,处理完数据会停留在当前状态,等待新的命令;
+
## 1.3. 任务状态获取启动
应用程序运行后,首先需要知道主控是由于何种任务被唤醒,然后根据任务来执行相应的功能代码;
diff --git a/middleware/AppManager/README.md b/middleware/AppManager/README.md
index 11fbc35..8433e83 100644
--- a/middleware/AppManager/README.md
+++ b/middleware/AppManager/README.md
@@ -1 +1,112 @@
-# 手机APP对接
\ No newline at end of file
+# 1. 打猎相机APP(WiFi单机版)设计文档
+
+## 1.1. 概述
+
+ 打猎相机手机APP是用于查看相机的实时视频,回放保存在SD卡的MP4视频文件,以及对相机进行设置/管理。
+
+**备注:** 本文基于六帧探APP现有功能,最小修改量实现APP的定制开发。
+
+## 1.2. APP功能详解
+
+### 1.2.1. 主页
+
+ 主页分三大块:相机管理,本地相册,更多(APP相关)。
+
+#### 1.2.1.1. 相机管理
+
+* 相机管理-添加设备
+
+ 手机连接设备的AP热点后,自动搜索设备,并添加到设备列表。可多次添加多个设备,设备列表中可对设备进行删除。
+
+* 相机管理-连接设备
+
+ APP只能连接当前WiFi设备,如果当前WiFi未发现设备,提示用户正确连接设备WiFi。连接设备后,跳转到设备管理页面。
+
+#### 1.2.1.2. 本地相册
+
+ 本地相册可查找从相机下载到手机本地的文件(视频/图片)。“紧急”分类里面显示记录仪碰撞时的文件。
+
+ 在打猎机的产品形态中,“紧急”分类显示PIR触发时拍摄的图片/视频。
+
+#### 1.2.1.3. 更多
+
+ 保持不变。
+
+#### 1.2.1.4. 问题列表
+
+1. 如果用户未对设备出厂设置进行修改,如何区分不同的设备?
+2. 如果APP面对多个出厂设备(设备信息完全一样),如何快速判断连接的是哪个设备?
+
+### 1.2.2. 相机连接页
+
+ APP连接设备后,可手动开始/停止录像;可手动拍照。可跳转到相机文件/相机设置界面。
+
+#### 1.2.2.1. 实时播放界面
+
+* 实时播放rtsp视频流;
+* 可手动开始/停止录像;
+* 可手动拍照;
+
+#### 1.2.2.2. 相机文件
+
+ 对设备的文件进行分类显示。可下载到手机本地/删除/编辑等操作。
+
+##### 1.2.2.2.1. 文件分类
+
+1. PIR触发图片/视频;
+2. 手动抓拍图片/视频;
+3. 定时抓拍图片/视频;
+4. 全部文件;
+
+**文件分类整改方案:**
+
+ 目前APP支持的四种协议类型显示:循环/拍照/紧急/停车。打猎相机的分类定义为全部/PIR/手动/定时,根据协议进行一一对应回复,全部-循环,PIR-紧急,手动-拍照,定时-停车,在不修改协议的情况下,只需要修改APP的显示文字即可实现APP定制开发。
+
+##### 1.2.2.2.2. 相机设置
+
+ 对设备的参数进行读取/修改。目前基于记录仪产品的设置内容无法满足打猎机产品需求。
+
+**记录仪当前参数列表:**
+
+| 参数名称 | 数据类型 | 取值说明 | 备注 |
+| ---- | ---- | ---- | ---- |
+| 记录仪WiFi名称 | ---- | ---- | ---- |
+| 记录仪WiFi密码 | ---- | ---- | ---- |
+| 固件版本 | ---- | ---- | ---- |
+| 格式化存储卡 | ---- | ---- | ---- |
+| 恢复出厂设置 | ---- | ---- | ---- |
+
+**打猎机参数需求列表:**
+
+| 参数名称 | 数据类型 | 取值说明 | 备注 |
+| ---- | ---- | ---- | ---- |
+| 记录仪WiFi名称 | ---- | ---- | ---- |
+| 记录仪WiFi密码 | ---- | ---- | ---- |
+| 固件版本 | ---- | ---- | 仅显示 |
+| ---- | ---- | ---- | ---- |
+| 工作模式 | 数字 | 0:图片
1:图片+视频 | ---- |
+| 连拍|数字 | 1/2/3 | 单位:P |
+| 连拍间隔 | 数字 | 0~60 | 单位:s |
+| 图片大小 | 数字 | 8/16/24/32/40 | 单位:M |
+| 视频长度 | 数字 | 10/15 | 单位:s |
+| PIR延时 | 数字 | 0~60 | 单位:s |
+| 工作时间 | 时间 | 起始的时间设置
例如:起点20:00至终点6:00 | ---- |
+| 循环存储 | 数字 | 0:OFF
1:ON | ---- |
+| 红外灯功率 | 数字 | 0/1/2 | 低/中/高 |
+| PIR灵敏度 | 数字 | 0~9 | ---- |
+| 恢复出厂 | ---- | ---- | 功能 |
+| 格式化SD卡 | ---- | ---- | 功能 |
+| 重启 | ---- | ---- | 功能 |
+
+#### 1.2.2.3. 问题列表
+
+1. 针对软件迭代需求,除了一些和APP业务逻辑相关的参数需要特殊处理外,是否可以通过协议来获取设备自定义的参数设置?方便设备可以随意的增加/删除设置参数。
+2. 没发现升级功能。
+
+## 1.3. APP定制整改总结
+
+1. “记录仪”统一修改为“相机”;
+2. 本地相册-“紧急”分类,改为“PIR”;
+3. APP连接设备后,自动录像,改为默认不录像,可手动录像;
+4. APP上的“循环”改成“全部”,“拍照”改成“手动”,“紧急”改成“PIR”,“停车”改成“定时”;
+5. 相机设置需要实现设备自定义设置项功能;
\ No newline at end of file
diff --git a/test/middleware/AppManager/src/AppManager_Test.cpp b/test/middleware/AppManager/src/AppManager_Test.cpp
index bf15ed6..9776689 100644
--- a/test/middleware/AppManager/src/AppManager_Test.cpp
+++ b/test/middleware/AppManager/src/AppManager_Test.cpp
@@ -70,10 +70,12 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_Demo0)
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
IAppManager::GetInstance()->UnInit();
}
-// ../output_files/test/bin/AppManagerTest --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_Demo
-TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_Demo)
+// ../output_files/test/bin/AppManagerTest --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_Demo
+TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_Demo)
{
+ std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock();
IAppManager::GetInstance()->Init(mAppParam);
+ IAppManager::GetInstance()->SetAppMonitor(monitor);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
MockGetProductInfo();
std::this_thread::sleep_for(std::chrono::milliseconds(1000));