Browse Source

修改bc260y模块接收字符串分割出错,造成个别设备注册失败的问题。

龙三郎 1 year ago
parent
commit
87b466959a

+ 1 - 1
Drivers/Business/PumpBusiness.c

@@ -21,7 +21,7 @@ static struct TIMER_Struct timer;
 
 
 
-uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
+uint8_t send_data_switch = 0; // 发送数据的开关,0表示发送数据
 uint8_t networkTest_Flag=0;//开机判断是否有信号,0是未知默认状态,1是失败状态,2是成功状态。
 uint8_t module_switch = 0;//4G模块开关 0正常,1是关闭标志
 static uint8_t test_switch=0; //0代表正常流程,1代表测试流程

+ 6 - 3
Drivers/Encrypt/Mbedtls_Util.c

@@ -8,6 +8,7 @@
 #include "mbedtls/cipher.h"
 #include "mbedtls/base64.h"
 #include "Common_Util.h"
+#include "Log_Module.h"
 #define KEY_IOPAD_SIZE 64
 
 #define SHA1_DIGEST_SIZE 20
@@ -19,7 +20,7 @@
 #define AES_BLOCK_SIZE 16
 
 //unsigned char buffer[AES_LEN_SIZE*2]={0};
-static char plaintextdata[AES_LEN_SIZE]= {0};
+static uint8_t plaintextdata[AES_LEN_SIZE]= {0};
 /**
 * 填充源码,返回填充后的数据长度
 */
@@ -199,14 +200,16 @@ int utils_aes128_ECB_base64_dec(char *aes_key, uint8_t * plaintext, uint16_t rec
 	int times=0;
 	memset(plaintextdata, 0, sizeof(plaintextdata));
 	mbedtls_aes_context aes_ctx;
-	if(strlen((const char *)plaintext) + 16 > AES_LEN_SIZE) return -1;
+	if(recvdata_length + 16 > AES_LEN_SIZE) return -1;
 	memcpy(plaintextdata, plaintext, recvdata_length);
+	
+	memset(plaintext, 0, recvdata_length);
 
 	mbedtls_aes_init(&aes_ctx);
 	//setkey_dec
 	mbedtls_aes_setkey_dec(&aes_ctx, (unsigned char * )aes_key, 128);
 	while(times*AES_BLOCK_SIZE<recvdata_length){
-		mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_DECRYPT,  (unsigned char * )plaintextdata+times*AES_BLOCK_SIZE, (unsigned char * )plaintext+times*AES_BLOCK_SIZE);
+		mbedtls_aes_crypt_ecb(&aes_ctx, MBEDTLS_AES_DECRYPT,  plaintextdata+times*AES_BLOCK_SIZE, plaintext+times*AES_BLOCK_SIZE);
 		++times;
 	}
 	cutAESPKCS7Data((char *)plaintext);

+ 17 - 7
Drivers/Modules/bc260y/Bc260y_Regist.c

@@ -34,21 +34,21 @@
 
 static uint8_t register_status;//注册成功,向flash存储标志
 static Coefficient_Data flashdata;
-static uint8_t mcu_id[8]="ceshi001";
+static uint8_t mcu_id[8]="ceshi002";
 // 生成环境
 static char * REGIST_SERVER = "iot.tuoren.com" ; //注册服务器地址
 static uint16_t REGIST_PORT = 8888; //端口号
-
-static uint8_t tcpconnectID = 2;
 // 开发环境
 //static char * REGIST_SERVER = "z18z017026.51vip.biz" ; //注册服务器地址
 //static uint16_t REGIST_PORT = 31396; //端口号
 
+static uint8_t tcpconnectID = 2;
+
 // 注册参数
 static struct Regist_Params_Struct regist_params_struct = {
 	.platform = "aliyun",
 	.connType = "CoAP",
-	.deviceId = "123456",
+	.deviceId = "3431228A1936013C",
 	.userId = 4562
 };
 static uint8_t regist_data[512];
@@ -101,9 +101,15 @@ uint8_t regist_Handle()
 		Log_Printf_Debug("开启回显成功\r\n");
 		result=bc260y.set_sleep_sync(1);//设置休眠模式
 	}
-  if(result==Result_Success)
+	if(result==Result_Success)
 	{
 		Log_Printf_Debug("设置休眠模式成功\r\n");
+		result = bc260y.dataformat_sync(0); // 设置数据格式
+	}
+	
+  if(result==Result_Success)
+	{
+		Log_Printf_Debug("设置数据格式成功\r\n");
 		result=bc260y.query_cfun_sync(&cfun_mode);//查询功能模式
 	}
   if(result==Result_Success)
@@ -150,8 +156,9 @@ uint8_t regist_Handle()
 	if(result==Result_Success)
 	{
 		Log_Printf_Debug("连接tcp成功\r\n");
-		memset(regist_data, 0, sizeof(regist_data));
+		memset(regist_params_struct.deviceId, 0, sizeof(regist_params_struct.deviceId));
 		byteToHexStr(mcu_id, regist_params_struct.deviceId, sizeof(mcu_id));
+		memset(regist_data, 0, sizeof(regist_data));
 		packRegistParams(regist_data, &regist_data_length, regist_params_struct);
 		printf_regist_param_struct(regist_params_struct);
 		result =bc260y.send_sync(tcpconnectID, regist_data, regist_data_length);//数据发送
@@ -162,6 +169,9 @@ uint8_t regist_Handle()
 		Log_Printf_Debug("数据发送成功\r\n");
 		memset(regist_data, 0, sizeof(regist_data));
 		result =bc260y.recv_with_time_sync(tcpconnectID,regist_data,&regist_data_length,10000);
+		Log_Printf_Debug("解密前:\r\n");
+		Log_SendHex(regist_data, regist_data_length);
+		Log_Printf_Debug("\r\n");
 	}
 	
 	
@@ -186,7 +196,7 @@ uint8_t regist_Handle()
   if(result == Result_Failed)
 	{
 		Log_Printf_Debug("设置最小功能模式\r\n");
-		bc260y.set_cfun_sync(0);//设置最小功能模式
+//		bc260y.set_cfun_sync(0);//设置最小功能模式
 	}
 	
 

+ 7 - 22
Drivers/Modules/bc260y/bc260y.c

@@ -1527,31 +1527,16 @@ enum Result bc260y_recv(uint8_t connectID, uint8_t * data, uint16_t * data_lengt
 		{
 			// 发送日志
 			Log_Printf_Debug("AT返回: %d, time_diff: %d\r\n", AT_result_length(), last_time);
-	//		Log_SendArray_Debug(AT_result(), AT_result_length());
+			
+			// 分割结果,获取报文长度
 			char * saveptr = NULL;
-			char * split = "\r";//删除\n,这个会改变解析的值
-			char * Line1 = strtok_r((char * )AT_result(), split, &saveptr);
-			uint8_t Line1_Len = strlen(Line1);
-//			Log_Printf_Debug("Line1(%d): %s\r\n",Line1_Len ,Line1);
+			char * split = ",";
+			strtok_r((char * )AT_result(), split, &saveptr);
+			strtok_r(NULL, split, &saveptr);
+			* data_length = strtoul(strtok_r(NULL, split, &saveptr), NULL, 10);
 			 
-			// 分割Line1,获取报文长度
-			char * saveptr_inner = NULL;
-			char * split_inner = ",";
-			strtok_r(Line1, split_inner, &saveptr_inner);
-			strtok_r(NULL, split_inner, &saveptr_inner);
-			//Log_Printf_Debug("saveptr_inner: %s####\r\n",saveptr_inner);
-			* data_length = strtoul(strtok_r(NULL, split_inner, &saveptr_inner), NULL, 10);
-			 
-//			uint16_t line_length = Line1_Len+4 ;
 			// 内存拷贝
-			memcpy(data,saveptr_inner+1, *data_length);
-			//memcpy(data,AT_result(), *data_length);
-//			for(int i =0;i<*data_length;i++)
-//			{
-//			  Log_Printf_Debug("%02x",data[i]);
-//			}
-			
-//	        Log_Printf_Debug("\r\n ####data: %s\r\n",data);
+			memcpy(data,saveptr+1, *data_length);
 			// 成功
 			result = Result_Success;
 			// 清理一下AT返回结果缓存

+ 1 - 1
Drivers/Modules/ec800m/Ec800m_Regist.c

@@ -48,7 +48,7 @@ static uint16_t REGIST_PORT = 8888; //
 static struct Regist_Params_Struct regist_params_struct = {
 	.platform = "aliyun",
 	.connType = "CoAP",
-	.deviceId = "123456",
+	.deviceId = "3431228A1936013C",
 	.userId = 4562
 };
 static uint8_t regist_data[512];