embedded-framework/doc/design.md
2023-07-13 22:42:04 +08:00

2.7 KiB
Raw Blame History

1. 设计文档

1.1. 产品概述

1.2. 结构设计

  1. 迷彩外观;
  2. 抽屉式电池箱组;
  3. 捆绑/相机支架安装方式;
  4. 案件翻盖保护;
  5. 可拓展4G模块
  6. 户外防水;

1.3. 硬件设计

1.3.1. 关键外设

  1. 摄像头;
  2. PIR sensor
  3. IR leds
  4. 电池(箱体);
  5. 启动模式拨键(三键);
  6. 按键:同步/复位/格式化;
  7. SD card
  8. usb接口
  9. NFC绑定APP
  10. 光感传感器:白天/黑夜;
  11. 指示灯:设备状态/SD卡状态/电量/无线信号灯/账号状态;

1.3.2. 生产测试/研发调试

1.4. 软件设计

1.4.1. 多态单例设计模式

多态单例模式包含两部分:抽象接口 + 抽象接口实例,代码基于抽象接口存在,业务基于抽象接口实例存在。

1.4.1.1. 多态单例图示

下述图示分别为:类图 / 依赖关系图 / 编译链接关系图

classDiagram
    APP --> AbstractInterface:使用
    AbstractInterface <|.. Instance:实现
    应用 --> 抽象接口库:依赖
    抽象接口库 ..> 实例库:依赖
    main线程 --> 抽象接口代码库:链接
    main线程 --> 实例代码库:链接

1.4.1.2. 多态单例模块使用时序图

在使用多态单例设计模式开发功能模块时,使用统一的命名规则:

  • 抽象接口命名xxx + Abstract例如libLogAbstract.a;
  • 实例库命名xxx + 具体实例名称例如libLogEasylogging.a

调用关系如下图

sequenceDiagram
User ->> +libLogAbstract.a:调用抽象接口
libLogAbstract.a --> +libLogEasylogging.a:实际调用实例接口
libLogEasylogging.a --> -libLogAbstract.a:return
libLogAbstract.a -->> -User:return

只有main函数实际调用实例库的实例化接口时log功能才会生效。

1.4.1.3. 多态单例总结:

  1. 应用代码只使用抽象接口,禁止直接依赖实例代码;
  2. 应用代码只有在main线程初始化时实例化实例模块即可
  3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态;

1.4.2. 根据软件模块作用域分层

1.4.2.1. 工具库utils

1.4.2.1.1. 工具库概述

工具库是功能单一的不依赖任何三方库的独立库必须提供C语言接口内部实现不限于C或者C++。

1.4.2.1.2. 日志库
1.4.2.1.2.1. 日志库概述

提供程序的日志管理功能,含日志的实时打印/保存/跟踪(实时上传云端)。

1.4.2.1.2.2. 日志库设计模式

C语言接口的多态单例模式可动态/静态加载多态实例。