diff --git a/MDK/hc32l17x.uvoptx b/MDK/hc32l17x.uvoptx
index 8c07dba..0b38e73 100644
--- a/MDK/hc32l17x.uvoptx
+++ b/MDK/hc32l17x.uvoptx
@@ -157,18 +157,18 @@
0
0
- 43
+ 60
1
- 41708
+ 15478
0
0
0
0
0
1
- ..\source\src\Update.c
+ ..\source\Src\main.c
- \\hc32l17x\../source/src/Update.c\43
+ \\hc32l17x\../source/Src/main.c\60
diff --git a/source/inc/Algorithm.h b/source/inc/Algorithm.h
index dd97796..096a690 100644
--- a/source/inc/Algorithm.h
+++ b/source/inc/Algorithm.h
@@ -48,7 +48,7 @@ bool count_greater(int32_t *arr, uint8_t size, int32_t target);
bool count_smaller(int32_t *arr, uint8_t size, int32_t target);
uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length);
uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen);
-bool isAllZero(uint8_t *arr, int size);
+bool is_all_byte(const uint8_t *data, size_t len, uint8_t val);
#endif
diff --git a/source/src/Algorithm.c b/source/src/Algorithm.c
index c28bba9..01ac291 100644
--- a/source/src/Algorithm.c
+++ b/source/src/Algorithm.c
@@ -729,23 +729,23 @@ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen)
return cmd_sum;
}
-/*****************************************************************************************
-* 函数名称: isAllZero
-* 功能描述: 判断一个数组的值是否全部为0
-* 参 数: arr,数组
- size,长度
-* 返 回 值: true或false
-*****************************************************************************************/
-bool isAllZero(uint8_t *arr, int size)
+/**
+ * @brief 检查缓冲区是否全部等于指定字节值
+ * @param data : 待检查的数据指针
+ * @param len : 数据长度(字节数)
+ * @param val : 期望的字节值 (0x00 ~ 0xFF)
+ * @return true : 全部等于 val
+ * false: 存在不等于 val 的字节
+ */
+bool is_all_byte(const uint8_t *data, size_t len, uint8_t val)
{
- for (int i = 0; i < size; i++) {
- if (arr[i] != 0) {
- return false; // 如果数组中有一个元素不为0,则返回false
+ for (size_t i = 0; i < len; i++) {
+ if (data[i] != val) {
+ return false;
}
}
- return true; // 遍历完数组后,若所有元素都为0,则返回true
+ return true;
}
-
/*****************************************************************************************
* 函数名称: HexToAscii
* 功能描述: 16进制转ASCII码
diff --git a/source/src/SGCP.c b/source/src/SGCP.c
index c47421e..a100259 100644
--- a/source/src/SGCP.c
+++ b/source/src/SGCP.c
@@ -881,7 +881,7 @@ static void GWRevHandler(void)
if(memcmp(GFHeader->MDAddr, LocalMAC, sizeof(GFHeader->MDAddr)) != false)
{
- if(isAllZero(GFHeader->MDAddr, sizeof(GFHeader->MDAddr)) != true)
+ if(is_all_byte(GFHeader->MDAddr, sizeof(GFHeader->MDAddr), 0x00) != true)
{
DBG_LOG("Gateway Master Device MAC Err...\r\n");
return;
@@ -1725,7 +1725,7 @@ void GwRevLoopHandler(void)
memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], &SGCP.DevData.LaserTracing.MasterDev, sizeof(SGCP.DevData.LaserTracing.MasterDev));
SGCP.DeviceDataLen += sizeof(SGCP.DevData.LaserTracing.MasterDev);
- if(isAllZero(LocalDataPack, LocalDataLen) == false)
+ if(is_all_byte(LocalDataPack, LocalDataLen, 0x00) == false)
{
memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], LocalDataPack, sizeof(LocalDataPack));
SGCP.DeviceDataLen = SGCP.DeviceDataLen + DevGetDataMess(LocalType, LocalDataPack);;
@@ -1778,7 +1778,7 @@ void GwRevLoopHandler(void)
SGCP.DeviceMAC[SGCP.ReadDataAdd][0],SGCP.DeviceMAC[SGCP.ReadDataAdd][1],SGCP.DeviceMAC[SGCP.ReadDataAdd][2],
SGCP.DeviceMAC[SGCP.ReadDataAdd][3],SGCP.DeviceMAC[SGCP.ReadDataAdd][4],SGCP.DeviceMAC[SGCP.ReadDataAdd][5]);
- if(isAllZero(LocalDataPack, LocalDataLen) == false)
+ if(is_all_byte(LocalDataPack, LocalDataLen, 0x00) == false)
{
memcpy(&SGCP.DeviceData[SGCP.DeviceDataLen], LocalDataPack, sizeof(LocalDataPack));
SGCP.DeviceDataLen = DevGetDataMess(LocalType, LocalDataPack);
diff --git a/source/src/main.c b/source/src/main.c
index c84835d..a95f44b 100644
--- a/source/src/main.c
+++ b/source/src/main.c
@@ -57,6 +57,33 @@ static void AppInit(void)
CommWay = BLPara.DevMac[2]; //鏈満閫氳鏂瑰紡
DeviceSign = BLPara.DevMac[3] & 0x80; //鏈満璁惧鏍囧織
AddNumber = ((BLPara.DevMac[3] << 16)+ (BLPara.DevMac[4] << 8) + BLPara.DevMac[5]) - 0x800000; //鏈満鍦板潃缂栧彿锛屾暟瀛楅儴鍒嗗搴斿敮涓鍦板潃缂栧彿
+ if(is_all_byte(LocalMAC, 6, 0xFF) == true)/*閽堝鏃х増鏈琤oot绋嬪簭鐨勫崌绾у吋瀹*/
+ {
+ LocalType = LASER_TRACING; //鏈満璁惧绫诲瀷
+ CommWay = LORA; //鏈満閫氳鏂瑰紡
+ DeviceSign = MASTER; //鏈満璁惧鏍囧織
+ AddNumber = 0x000022 + DeviceSign;//鏈満鍦板潃缂栧彿锛屾暟瀛楅儴鍒嗗搴斿敮涓鍦板潃缂栧彿
+
+ LocalMAC[0] = LocalType & 0xFF; //鏈満MAC鍦板潃
+ LocalMAC[1] = (LocalType >> 8) & 0xFF;
+ LocalMAC[2] = CommWay;
+ LocalMAC[3] = (AddNumber >> 16) & 0xFF;
+ LocalMAC[4] = (AddNumber >> 8) & 0xFF;
+ LocalMAC[5] = AddNumber & 0xFF;
+
+ if(AddNumber <= 0x14)
+ {
+ SX1276LoRaSetFreqHz(CH1); //Lora棰戠巼:433100000ul + 200000*N
+ BLPara.LoraFreq = CH1;
+ memcpy(&BLPara.DevMac[0], LocalMAC, 6);
+ }
+ else if(AddNumber > 0x14 && AddNumber < 0x23)
+ {
+ SX1276LoRaSetFreqHz(CH2); //Lora棰戠巼:433100000ul + 200000*N
+ BLPara.LoraFreq = CH2;
+ memcpy(&BLPara.DevMac[0], LocalMAC, 6);
+ }
+ }
if(App.Para.FactoryFlag != 0x00)
{
App.Para.FactoryFlag = 0x00;
@@ -64,7 +91,6 @@ static void AppInit(void)
App.Para.CaliPara.PitchZero = 0;
App.Para.CaliPara.RollZero = 0;
App.Para.CaliPara.YawZero = 0;
- SAVE_APP_PARA((uint32_t *)&App.Para);
}
#elif
LocalType = LASER_TRACING; //鏈満璁惧绫诲瀷