diff --git a/App/Inc/encrypt.h b/App/Inc/encrypt.h
new file mode 100644
index 0000000..03d9853
--- /dev/null
+++ b/App/Inc/encrypt.h
@@ -0,0 +1,9 @@
+#ifndef _ENCRYPT_H_
+#define _ENCRYPT_H_
+#include "comm_types.h"
+#include "stm32l4xx_hal.h"
+#include "inflash.h"
+
+uint8_t JudgeEncrypt();
+
+#endif //_ENCRYPT_H_
\ No newline at end of file
diff --git a/App/Inc/frt_protocol.h b/App/Inc/frt_protocol.h
index 5c54207..9de0ea6 100644
--- a/App/Inc/frt_protocol.h
+++ b/App/Inc/frt_protocol.h
@@ -75,6 +75,14 @@ typedef enum
FRT_REGISTER_MAX_WAVE_2 = 52, /* 换能器最大波形 */
FRT_REGISTER_MAX_WAVE_3 = 53, /* 换能器最大波形 */
FRT_REGISTER_MAX_WAVE_4 = 54, /* 换能器最大波形 */
+ FRT_REGISTER_ID_1 = 55, /* ID16 */
+ FRT_REGISTER_ID_2 = 56, /* ID32 */
+ FRT_REGISTER_ID_3 = 57, /* ID48 */
+ FRT_REGISTER_ID_4 = 58, /* ID64 */
+ FRT_REGISTER_ENCRYPT_1 = 59, /* 密文16 */
+ FRT_REGISTER_ENCRYPT_2 = 60, /* 密文32 */
+ FRT_REGISTER_ENCRYPT_3 = 61, /* 密文48 */
+ FRT_REGISTER_ENCRYPT_4 = 62, /* 密文64 */
}FRT_MsgRegister;
#pragma pack(push,1)
diff --git a/App/Inc/inflash.h b/App/Inc/inflash.h
index d4a182c..6f610a3 100644
--- a/App/Inc/inflash.h
+++ b/App/Inc/inflash.h
@@ -37,6 +37,7 @@ typedef struct _usr_config_info{
//鍑哄巶閰嶇疆鍙傛暟
typedef struct _factory_config_info{
u_int8_t flag_head;
+ u_int32_t encrypt_0; /* 鍓32浣嶅瘑鏂 */
u_int16_t transducer_cfg_1R5; /* 鎹㈣兘鍣ㄥ弬鏁 */
u_int16_t transducer_cfg_4R5; /* 鎹㈣兘鍣ㄥ弬鏁 */
u_int16_t transducer_cfg_8R0; /* 鎹㈣兘鍣ㄥ弬鏁 */
@@ -55,6 +56,7 @@ typedef struct _factory_config_info{
u_int16_t linear_point_5_x; /* 绾挎ф彃鍊肩偣5X */
u_int16_t linear_point_5_y; /* 绾挎ф彃鍊肩偣5Y */
u_int16_t linear_enable; /* 绾挎ф彃鍊间娇鑳 */
+ u_int32_t encrypt_1; /* 鍚32浣嶅瘑鏂 */
u_int8_t flag_end;
}factory_config_info;
#pragma pack(pop)
diff --git a/App/Src/encrypt.c b/App/Src/encrypt.c
new file mode 100644
index 0000000..d17e146
--- /dev/null
+++ b/App/Src/encrypt.c
@@ -0,0 +1,51 @@
+#include "encrypt.h"
+
+/* TEA加密算法的加密过程 */
+void tea_encrypt(uint32_t *en, uint32_t *k)
+{
+ uint32_t v[2];
+ v[0] = *(uint32_t*)(0x1FFF7590);
+ v[1] = *(uint32_t*)(0x1FFF7590 + 4);
+ uint32_t v0 = v[0], v1 = v[1], sum = 0, i; // 初始化v0, v1, sum
+ uint32_t delta = 0x9e3779b9; // 初始化delta
+ uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k
+ for (i = 0; i < 32; i++) { // 执行32轮加密
+ sum += delta;
+ v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
+ v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
+ }
+ en[0] = v0; // 返回加密结果
+ en[1] = v1;
+
+// term_printf("%x %x", v[0], v[1]);
+}
+
+/* TEA加密算法的解密过程 */
+void tea_decrypt(uint32_t *v, uint32_t *k)
+{
+ uint32_t delta = 0x9e3779b9; // 初始化delta
+// uint32_t v0 = 0x93ae5ba8, v1 = 0xc5ba4e82, sum = delta << 5, i; // 初始化v0, v1, sum
+ uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // 初始化v0, v1, sum
+ uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k
+ for(i = 0; i < 32; i++) { // 执行32轮解密
+ v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
+ v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
+ sum -= delta;
+ }
+ v[0] = v0; // 返回解密结果
+ v[1] = v1;
+
+// term_printf("%x %x", v[0], v[1]);
+}
+
+/*
+ * 判断密文是否正确
+ *
+ */
+uint8_t JudgeEncrypt()
+{
+ uint32_t encryptCode[2] = {0};
+ uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, 0x7d729015}; //密钥可能要打散位置,不在这里定死
+ tea_decrypt(encryptCode, key);
+ return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]);
+}
\ No newline at end of file
diff --git a/App/Src/frt_protocol.c b/App/Src/frt_protocol.c
index 0909453..6775fa3 100644
--- a/App/Src/frt_protocol.c
+++ b/App/Src/frt_protocol.c
@@ -71,6 +71,11 @@ static u_int16_t FRT_ReadReg_MaxWave_1(void *pMsg);
static u_int16_t FRT_ReadReg_MaxWave_2(void *pMsg);
static u_int16_t FRT_ReadReg_MaxWave_3(void *pMsg);
static u_int16_t FRT_ReadReg_MaxWave_4(void *pMsg);
+/* 璇籌D */
+static u_int16_t FRT_ReadReg_ID_1(void *pMsg);
+static u_int16_t FRT_ReadReg_ID_2(void *pMsg);
+static u_int16_t FRT_ReadReg_ID_3(void *pMsg);
+static u_int16_t FRT_ReadReg_ID_4(void *pMsg);
/* 鍐欓厤缃 */
static u_int16_t FRT_WriteRegTransducerCFG1R5(void *pMsg);
static u_int16_t FRT_WriteRegTransducerCFG4R5(void *pMsg);
@@ -86,6 +91,12 @@ static u_int16_t FRT_WriteRegPoint_4Y(void *pMsg);
static u_int16_t FRT_WriteRegPoint_5Y(void *pMsg);
static u_int16_t FRT_WriteRegLinearEnable(void *pMsg);
+/* 鍐欏瘑鏂 */
+static u_int16_t FRT_WriteRegEncrypt1(void *pMsg);
+static u_int16_t FRT_WriteRegEncrypt2(void *pMsg);
+static u_int16_t FRT_WriteRegEncrypt3(void *pMsg);
+static u_int16_t FRT_WriteRegEncrypt4(void *pMsg);
+
static void pdebug_mcs_info();
/* 鍔熻兘鐮佸鐞嗚〃 */
@@ -145,6 +156,10 @@ FRT_RegProcTable_s g_RegTbl[] =
{ FRT_REGISTER_MAX_WAVE_2, FRT_ReadReg_MaxWave_2 }, /* 娉㈠舰鏈澶у箙鍊 */
{ FRT_REGISTER_MAX_WAVE_3, FRT_ReadReg_MaxWave_3 }, /* 娉㈠舰鏈澶у箙鍊 */
{ FRT_REGISTER_MAX_WAVE_4, FRT_ReadReg_MaxWave_4 }, /* 娉㈠舰鏈澶у箙鍊 */
+ { FRT_REGISTER_ID_1, FRT_ReadReg_ID_1 }, /* ID */
+ { FRT_REGISTER_ID_2, FRT_ReadReg_ID_2 }, /* ID */
+ { FRT_REGISTER_ID_3, FRT_ReadReg_ID_3 }, /* ID */
+ { FRT_REGISTER_ID_4, FRT_ReadReg_ID_4 }, /* ID */
};
/* 鍐欏瘎瀛樺櫒澶勭悊琛 */
@@ -169,6 +184,10 @@ FRT_RegProcTable_s g_Write_RegTbl[] =
{ FRT_REGISTER_LINEAR_POINT_Y_4, FRT_WriteRegPoint_4Y }, /* 绾挎ф彃鍊兼牎鍑嗙偣4 */
{ FRT_REGISTER_LINEAR_POINT_Y_5, FRT_WriteRegPoint_5Y }, /* 绾挎ф彃鍊兼牎鍑嗙偣5 */
{ FRT_REGISTER_LINEAR_ENABLE, FRT_WriteRegLinearEnable }, /* 绾挎ф彃鍊间娇鑳 */
+ { FRT_REGISTER_ENCRYPT_1, FRT_WriteRegEncrypt1 }, /* 瀵嗘枃1 */
+ { FRT_REGISTER_ENCRYPT_2, FRT_WriteRegEncrypt2 }, /* 瀵嗘枃2 */
+ { FRT_REGISTER_ENCRYPT_3, FRT_WriteRegEncrypt3 }, /* 瀵嗘枃3 */
+ { FRT_REGISTER_ENCRYPT_4, FRT_WriteRegEncrypt4 }, /* 瀵嗘枃4 */
};
/**
@@ -864,6 +883,50 @@ static u_int16_t FRT_ReadReg_MaxWave_4(void *pMsg)
return FRT_swap_endian_16(value);
}
+/**
+ * @brief ID16
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_ReadReg_ID_1(void *pMsg)
+{
+ u_int16_t value = ((*(uint32_t*)(0x1FFF7590)) >> 16) & 0x0000FFFF;
+ return FRT_swap_endian_16(value);
+}
+
+/**
+ * @brief ID32
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_ReadReg_ID_2(void *pMsg)
+{
+ u_int16_t value = (*(uint32_t*)(0x1FFF7590)) & 0x0000FFFF;
+ return FRT_swap_endian_16(value);
+}
+
+/**
+ * @brief ID48
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_ReadReg_ID_3(void *pMsg)
+{
+ u_int16_t value = ((*(uint32_t*)(0x1FFF7590 + 4)) >> 16) & 0x0000FFFF;
+ return FRT_swap_endian_16(value);
+}
+
+/**
+ * @brief ID64
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_ReadReg_ID_4(void *pMsg)
+{
+ u_int16_t value = (*(uint32_t*)(0x1FFF7590 + 4)) & 0x0000FFFF;
+ return FRT_swap_endian_16(value);
+}
+
/**
* @brief 鍐欐崲鑳藉櫒鍙傛暟瀵勫瓨鍣ㄥ1R5
* @param
@@ -1092,6 +1155,70 @@ static u_int16_t FRT_WriteRegLinearEnable(void *pMsg)
return 0;
}
+/**
+ * @brief 鍐欏乏1-16浣
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_WriteRegEncrypt1(void *pMsg)
+{
+ uint16_t *pMsgData = (uint16_t *)pMsg;
+ uint16_t data = *pMsgData;
+
+ g_stConfigInfo.encrypt_0 = (g_stConfigInfo.encrypt_0 & 0x0000FFFF) | ((data << 16) & 0xFFFF0000);
+ save_factory_config_info(g_stConfigInfo);
+
+ return 0;
+}
+
+/**
+ * @brief 鍐欏乏17-32浣
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_WriteRegEncrypt2(void *pMsg)
+{
+ uint16_t *pMsgData = (uint16_t *)pMsg;
+ uint16_t data = *pMsgData;
+
+ g_stConfigInfo.encrypt_0 = (g_stConfigInfo.encrypt_0 & 0xFFFF0000) | (data & 0x0000FFFF);
+ save_factory_config_info(g_stConfigInfo);
+
+ return 0;
+}
+
+/**
+ * @brief 鍐欏乏33-47浣
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_WriteRegEncrypt3(void *pMsg)
+{
+ uint16_t *pMsgData = (uint16_t *)pMsg;
+ uint16_t data = *pMsgData;
+
+ g_stConfigInfo.encrypt_1 = (g_stConfigInfo.encrypt_1 & 0x0000FFFF) | ((data << 16) & 0xFFFF0000);
+ save_factory_config_info(g_stConfigInfo);
+
+ return 0;
+}
+
+/**
+ * @brief 鍐欏乏48-64浣
+ * @param
+ * @retval
+ */
+static u_int16_t FRT_WriteRegEncrypt4(void *pMsg)
+{
+ uint16_t *pMsgData = (uint16_t *)pMsg;
+ uint16_t data = *pMsgData;
+
+ g_stConfigInfo.encrypt_1 = (g_stConfigInfo.encrypt_1 & 0xFFFF0000) | (data & 0x0000FFFF);
+ save_factory_config_info(g_stConfigInfo);
+
+ return 0;
+}
+
/**
* @brief 灏佽鍗忚鍙戦
@@ -1173,7 +1300,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
start_reg_addr < 0x00 ||\
(start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
(start_reg_addr > FRT_REGISTER_TEMPHUM_UPDATE_TIME && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
- start_reg_addr > FRT_REGISTER_MAX_WAVE_4 \
+ start_reg_addr > FRT_REGISTER_ID_4 \
)
{
@@ -1185,7 +1312,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
reg_num < 0x01 ||\
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_TEMPHUM_UPDATE_TIME) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
- ((reg_num + start_reg_addr -1) > FRT_REGISTER_MAX_WAVE_4) \
+ ((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \
)
{
@@ -1237,8 +1364,9 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
if (start_reg_addr < FRT_REGISTER_DEVICE_ADDR ||\
(start_reg_addr > FRT_REGISTER_REST_DEFAULT_SETTING && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
(start_reg_addr > FRT_REGISTER_DISTANCE_WE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\
- (start_reg_addr > FRT_REGISTER_LINEAR_POINT_Y_5) \
- )
+ (start_reg_addr > FRT_REGISTER_LINEAR_POINT_Y_5) && (start_reg_addr < FRT_REGISTER_ENCRYPT_1) ||\
+ (start_reg_addr > FRT_REGISTER_ENCRYPT_4)
+ )
{
term_printf("start_reg_addr error:%d", start_reg_addr);
return;
@@ -1246,8 +1374,9 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg)
if (reg_num < 0x01 ||\
((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR) ||\
(((reg_num + start_reg_addr -1) > FRT_REGISTER_REST_DEFAULT_SETTING) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
- (((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\
- ((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_POINT_Y_5) \
+ (((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\
+ (((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_POINT_Y_5) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_ENCRYPT_1)) ||\
+ ((reg_num + start_reg_addr -1) > FRT_REGISTER_ENCRYPT_4)
)
{
term_printf("reg_num error:%d", reg_num);
diff --git a/App/Src/inflash.c b/App/Src/inflash.c
index 26d7be4..4393da6 100644
--- a/App/Src/inflash.c
+++ b/App/Src/inflash.c
@@ -41,6 +41,8 @@ factory_config_info g_stConfigInfo={
.linear_point_5_x = 0, /* 线性插值点5 */
.linear_point_5_y = 0, /* 线性插值点5 */
.linear_enable = 0, /* 线性插值使能 */
+ .encrypt_0 = 0, /* 密文 */
+ .encrypt_1 = 0, /* 密文 */
.flag_end = FLAG_SAVE_INFLASH_END,
};
diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c
index 0067694..3522549 100644
--- a/Core/Src/freertos.c
+++ b/Core/Src/freertos.c
@@ -32,6 +32,7 @@ void task_shell_term_main_loop(void const * argument);
#include "frt_protocol.h"
#include "inflash.h"
#include "hp203b.h"
+#include "encrypt.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
diff --git a/Core/Src/main.c b/Core/Src/main.c
index a67c83f..3c1f1cd 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -125,10 +125,8 @@ void Flash_EnableReadProtection(void)
{
/* USER CODE BEGIN 1 */
- //远程升级时读保护
-#ifdef REMOTE_UPDATE
- Flash_EnableReadProtection();//读保护
-#endif
+ ///远程升级时读保护
+ ///Flash_EnableReadProtection();//读保护
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@@ -174,7 +172,6 @@ void Flash_EnableReadProtection(void)
term_printf("Version 1.0.0 Build: %s %s\r\n",__DATE__,__TIME__);
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
sht30_init();
-
/* USER CODE END 2 */
/* Call init function for freertos objects (in cmsis_os2.c) */
diff --git a/EWARM/micro_climate.ewp b/EWARM/micro_climate.ewp
index f86853b..4e95e6e 100644
--- a/EWARM/micro_climate.ewp
+++ b/EWARM/micro_climate.ewp
@@ -701,7 +701,7 @@
- 88
+ 1
inputOutputBased
@@ -2245,6 +2245,9 @@
$PROJ_DIR$\..\App\Inc\comm_types.h
+
+ $PROJ_DIR$\..\App\Inc\encrypt.h
+
$PROJ_DIR$\..\App\Inc\frt_protocol.h
@@ -2266,6 +2269,9 @@
$PROJ_DIR$\..\App\Src\anemometer_dev.c
+
+ $PROJ_DIR$\..\App\Src\encrypt.c
+
$PROJ_DIR$\..\App\Src\frt_protocol.c
diff --git a/EWARM/micro_climate.ewt b/EWARM/micro_climate.ewt
index e59bc61..408c6e9 100644
--- a/EWARM/micro_climate.ewt
+++ b/EWARM/micro_climate.ewt
@@ -1426,6 +1426,1431 @@
+
+ REMOTE_UPDATE
+
+ ARM
+
+ 1
+
+ C-STAT
+ 517
+
+ 517
+
+ 0
+
+ 1
+ 600
+ 1
+ 8
+ 0
+ 1
+ 100
+ REMOTE_UPDATE/C-STAT
+
+
+ 2.5.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RuntimeChecking
+ 0
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Application
@@ -1449,6 +2874,9 @@
$PROJ_DIR$\..\App\Inc\comm_types.h
+
+ $PROJ_DIR$\..\App\Inc\encrypt.h
+
$PROJ_DIR$\..\App\Inc\frt_protocol.h
@@ -1470,6 +2898,9 @@
$PROJ_DIR$\..\App\Src\anemometer_dev.c
+
+ $PROJ_DIR$\..\App\Src\encrypt.c
+
$PROJ_DIR$\..\App\Src\frt_protocol.c