# 1. AT指令差异化代码适配 ## 1.1. 概述    由于不同厂家的移动网络模块的AT指令有较大差异,暂时使用独立的文件对AT指令和相关逻辑进行维护。架构设计上满足任意芯片芯片可适配任意的AT指令集,所以独立目录管理,仅仅源码独立目录存放,使用时和依赖AT指令集接口的模块源码一起编译成目标文件。 ## 1.2. 添加新AT指令集方法:    通过在芯片的工具链配置cmake文件添加路径来选择使用哪个模块(或者版本)的AT指令集源码,实现任意平台可配置任意的AT指令集进行编译链接。 以./at-command/eg91为例: 1. 在此目录新建一个目录,例如“eg91”,存放新模块或者新指令集的代码; 2. 创建AT指令相关接口类文件,参考eg91目录创建一一对应的cpp文件; 3. 创建名为at-command.cmake的配置文件,负责把源码加入到PeripheralManager模块,如存在多版本继承可构建多个源码目录。 ## 1.3. 项目构建时选择AT指令集方法 ``` #参考./333DE/build/cmake/toolchain/sigmastart_333DE.toolchain.cmake set(AT_COMMAND_PATH "${CMAKE_SOURCE_DIR}/at-command/eg91") ```    相关模块会使用上述变量(AT_COMMAND_PATH)把该路径下的源码加入到依赖文件集合里面进行项目构建,在编译时链接该目录的所有源码文件。 例如:./component/PeripheralManager/CMakeLists.txt ``` # At command src code. string(COMPARE EQUAL "${AT_COMMAND_PATH}" "" value) message("The at-command src code path is ${AT_COMMAND_PATH}.") if (value EQUAL 0) #变量被设置了 message("build at-command src code.") include(${AT_COMMAND_PATH}/at-command.cmake) endif() ``` ## 1.4. 项目客制化实现    at-command目录源码为SifarSDK的公版AT指令集源码,项目在AT指令代码需要修改时,可继承并重载相关函数即可,无需也禁止因为项目需求而修改at-command目录下的源码文件。