Improve Protocol handle code.

This commit is contained in:
Fancy code 2024-02-11 05:49:00 -08:00
parent 8a79fe352c
commit f1747df345
3 changed files with 20 additions and 8 deletions

View File

@ -634,12 +634,13 @@ unsigned short calculate_check_sum(const unsigned char* pData, unsigned short le
**基本描述** **基本描述**
1. 大于等于0x8000的命令字由CPU发给MCU; 1. 大于等于0x8000的命令字由CPU发给MCU;
2. 小于0x8000的命令字由MCU发给CPU; 2. 小于0x8000的命令字由MCU发给CPU;
3. 问答型协议只有按位最高位相反其它位相等例如0x8101与0x0101是一问一答的协议 3. 大于0x0801而小于0xC101的命令由CPU主动发送给MCU大于等于0xC101的命令由CPU回复发送给MCU
4. 问答型协议只有按位最高位相反其它位相等例如0x8101与0x0101是一问一答的协议
| 命令字 | CPU | MCU | 数据段 | 协议解析 | 备注 | | 命令字 | CPU | MCU | 数据段 | 协议解析 | 备注 |
|----|----|----|----|----|----| |----|----|----|----|----|----|
| 0x8101 | ask | - | - | 获取启动模式 | - | | 0x8101 | ask | - | - | 获取启动模式 | - |
| 0x0101 | - | reply | Data[0]:启动模式<br>0x01:PIR启动<br>0x02:TEST启动<br>0x03:连拍启动<br>0x04:PIR延时启动 | 回复启动模式 | - | | 0x0101 | - | reply/ask | Data[0]:启动模式<br>0x01:PIR启动<br>0x02:TEST启动<br>0x03:连拍启动<br>0x04:PIR延时启动<br>0x05:定时(间隔一定时间)启动 | 回复启动模式 | - |
| 0x8102 | ask | - | - | 断电关机 | - | | 0x8102 | ask | - | - | 断电关机 | - |
| 0x8103 | ask | - | - | 喂狗 | - | | 0x8103 | ask | - | - | 喂狗 | - |
| 0x8104 | ask | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 开启狗/设置喂狗周期 | - | | 0x8104 | ask | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 开启狗/设置喂狗周期 | - |
@ -654,6 +655,13 @@ unsigned short calculate_check_sum(const unsigned char* pData, unsigned short le
| 0x0108 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置PIR灵敏度回复 | - | | 0x0108 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置PIR灵敏度回复 | - |
| 0x8109 | ask | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 设置连拍间隔 | - | | 0x8109 | ask | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 设置连拍间隔 | - |
| 0x0109 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置连拍间隔回复 | - | | 0x0109 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置连拍间隔回复 | - |
| 0x810A | ask | - | Data[0]:控制模式<br>0-关闭红外灯<br>1-开启红外灯 | 红外灯控制 | - |
| 0x010A | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 红外灯控制回复 | - |
| 0x810B | ask | - | - | 获取光敏值 | - |
| 0x010B | - | reply | Data[0]:结果<br>0-100 | 获取光敏值回复 | - |
| ====== | === | ====== | ============================ | ==================== | ======= |
| 0xC101 | reply | - | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 发送启动模式回复 | - |
| 0x4101 | - | ask | Data[0]:启动模式<br>0x01:PIR启动<br>0x02:TEST启动<br>0x03:连拍启动<br>0x04:PIR延时启动<br>0x05:定时(间隔一定时间)启动 | 发送启动模式 | - |
##### 1.4.3.2.6. IPC配置库 ##### 1.4.3.2.6. IPC配置库

View File

@ -20,7 +20,11 @@ bool CreateMcuManager(void);
bool DestroyMcuManager(void); bool DestroyMcuManager(void);
enum class IpcMission enum class IpcMission
{ {
TEST = 0, PIR_TRIGGERED = 0,
TEST,
CONTINUOUS_SHOOTING,
PIR_TRIGGERED_DELAY,
REGULAR_START,
END END
}; };
enum class ASK_RESULT enum class ASK_RESULT

View File

@ -157,6 +157,11 @@ void ProtocolHandle::AnalyzeProtocolPacket(void)
LogError("CheckoutTheCheckCode failed.\n"); LogError("CheckoutTheCheckCode failed.\n");
return; return;
} }
/**
* @brief unsigned int number = packet.mSerialNumber This line of code is for
* avoiding errors: runtime error: reference binding to misaligned address xxxx
*/
mProtocolSerialNumber = packet.mSerialNumber;
LogInfo("AnalyzeProtocolPacket, command = 0x%04X\n", packet.mCommand); LogInfo("AnalyzeProtocolPacket, command = 0x%04X\n", packet.mCommand);
PROTOCOL_COMMAND command = static_cast<PROTOCOL_COMMAND>(packet.mCommand); PROTOCOL_COMMAND command = static_cast<PROTOCOL_COMMAND>(packet.mCommand);
std::map<PROTOCOL_COMMAND, AnalyzePacketFunc>::iterator iter; std::map<PROTOCOL_COMMAND, AnalyzePacketFunc>::iterator iter;
@ -174,11 +179,6 @@ unsigned char ProtocolHandle::ReplyOneBytePacketResult(const ProtocolPacket &pac
constexpr unsigned int PROTOCOL_DATA_START_ADDRESS = KEY_HEAD_LENGTH; constexpr unsigned int PROTOCOL_DATA_START_ADDRESS = KEY_HEAD_LENGTH;
unsigned char replyResult = UNKNOWN_RESULT; unsigned char replyResult = UNKNOWN_RESULT;
replyResult = mProtocolData[PROTOCOL_DATA_START_ADDRESS]; replyResult = mProtocolData[PROTOCOL_DATA_START_ADDRESS];
/**
* @brief unsigned int number = packet.mSerialNumber This line of code is for
* avoiding errors: runtime error: reference binding to misaligned address xxxx
*/
mProtocolSerialNumber = packet.mSerialNumber;
LogInfo("reply result = 0x%02X\n", replyResult); LogInfo("reply result = 0x%02X\n", replyResult);
return replyResult; return replyResult;
} }