Parcourir la source

注册代码结构调整

龙三郎 il y a 1 an
Parent
commit
df92428fb8

+ 5 - 28
Drivers/Business/PumpBusiness.c

@@ -21,7 +21,7 @@ static struct TIMER_Struct timer;
 
 
 
-uint8_t send_data_switch = 0; // 发送数据的开关,0表示发送数据
+uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
 uint8_t networkTest_Flag=0;//开机判断是否有信号,0是未知默认状态,1是失败状态,2是成功状态。
 static uint8_t test_switch=0; //0代表正常流程,1代表测试流程
 struct Pump_Params pump_params; // 泵参数
@@ -95,11 +95,10 @@ void Pump_Params_Refresh(void)
 
 
 
-static uint32_t Business_wait_time = 1200; // 秒
+static uint32_t Business_wait_time = 60; // 秒
 // 业务处理
 void PumpBusines_Handle(void)
 {
-	
 	// 定时发送数据
 	if(time_get_delay(&timer) > 1000 * Business_wait_time) // // 定时时间,20分钟
 	{
@@ -109,17 +108,11 @@ void PumpBusines_Handle(void)
 		Log_Printf_Debug("PumpBusines_Handle\r\n");
 	}
 	
-	
 	// 发送标志位不为1直接返回
 	if(send_data_switch != 1)
 	{
 		return;
 	}
-//	//没有初始化成功前不发送数据
-//   if(get_initialize_status()!=1)
-//   {
-//     return;
-//   }
 	// 发送
 	if(UDP_Client_Status() == Client_Status_None)
 	{
@@ -171,27 +164,11 @@ void PumpBusines_Handle(void)
 // 循环执行
 void pump_business_loop_execution()
 {
-	Power_Handle();
-	#if  EC800M
-//	if(module_switch==1) return;
-	#endif
-	
-	if(networkTest_Flag==2)
-	{
-		//信号显示开
-	}
-	else if(networkTest_Flag ==1)
-	{
-	 //信号显示关
-	}
-	if(regist_get_result()==Regist_Result_Failure)return;
-//	if(flashdata.read_flag==0)return;//注册失败或flash存储失败
-	//if(network_switch==1)return;//关闭网络状态
+	// 初始化
+	Initialize_Handle();
 	// 业务处理
 	PumpBusines_Handle();
-//	// 处理AT指令
+	// 未及时处理的AT指令
 	AT_Handle();
-//	
-	
 }
 

+ 22 - 122
Drivers/Encrypt/Mbedtls_Util.c

@@ -141,83 +141,26 @@ void utils_sha256(const char *msg, int msg_len, char * digest)
 	
 }
 
-//void utils_sha256_str(const char *msg, int msg_len, char *digest)
-//{
-
-//		//hmac sha1加密处理
-//    //mbedtls_sha256_context context;
-//    unsigned char out[SHA256_DIGEST_SIZE];
-//	
-//		utils_sha256(msg,msg_len, (char * )out);
-//    
-//	//加密后的数据16进制输出
-//		byteToHexStr(out,digest,SHA256_DIGEST_SIZE);
-//		
-//}
 
-/**
-*AES CBC加密 , plaintext:源数据,ciphertext:加密数据, 返回加密长度
-*/
 char iv_use[16] = {0};
-//int utils_aes128_cbc_enc(uint8_t * aes_key, char *iv, char *plaintext, char *ciphertext)
-//{
-
-//		
-//		memset(testhexdata, 0, sizeof(testhexdata));
-//		byteToHexStr((const unsigned char *)aes_key,testhexdata, 16);
-//		Log_Printf_Debug("数据报文aes_key:%s,iv:%s\r\n", testhexdata,iv);
-//		memset(testhexdata, 0, sizeof(testhexdata));
-//		memset(plaintextdata, 0, sizeof(plaintextdata));
-//		mbedtls_aes_context aes_ctx;
-//		if(strlen(plaintext)+16 > AES_LEN_SIZE) return 0;
-//	    memset(iv_use,0,sizeof(iv_use));
-//		memcpy(iv_use,iv,16);
-//		memcpy(plaintextdata,(const char *)plaintext,strlen(plaintext));
-//		byteToHexStr((const unsigned char *)plaintextdata,testhexdata, strlen((char * )plaintextdata));
-//		Log_Printf_Debug("数据报文加密数据plaintextdata:%s\r\n", testhexdata);
-////    int len = fillAESPKCS7Data(plaintextdata);
-//	int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, strlen((char * )plaintextdata));
-//		memset(testhexdata, 0, sizeof(testhexdata));
-//		byteToHexStr((const unsigned char *)plaintextdata,testhexdata, len);
-//		Log_Printf_Debug("数据报文加密数据填充后plaintextdata:%s\r\n", testhexdata);
-//    
-//    mbedtls_aes_init(&aes_ctx);
-//    //setkey_dec
-//      mbedtls_aes_setkey_enc(&aes_ctx, aes_key, 128);
-//		 mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, len, (unsigned char * )iv_use, (unsigned char * )plaintextdata, (unsigned char * )ciphertext);
-//		byteToHexStr((const unsigned char *)ciphertext,testhexdata, len);
-//		Log_Printf_Debug("数据报文加密数据后ciphertext:%s,ciphertext:%d,testhexdata:%d,len2:%d\r\n", testhexdata,strlen((char * )ciphertext),strlen(testhexdata),len);
-//		
-//    
-//    mbedtls_aes_free(&aes_ctx);
-//    return len; //OK
-
-//}
-
-
 int utils_aes128_cbc_enc_with_length(uint8_t *aes_key, char *iv, uint8_t * plaintext, uint16_t plaintext_length, uint8_t * ciphertext)
 {
+	memset(plaintextdata, 0, sizeof(plaintextdata));
+	mbedtls_aes_context aes_ctx;
+	if(plaintext_length + 16 > AES_LEN_SIZE) return -1;
+	memset(iv_use,0,sizeof(iv_use));
+	memcpy(iv_use,iv,16);
+	memcpy(plaintextdata, (const char *)plaintext, plaintext_length);
 
+	int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, plaintext_length);
 
+	mbedtls_aes_init(&aes_ctx);
+	//setkey_dec
+	mbedtls_aes_setkey_enc(&aes_ctx, (unsigned char * )aes_key, 128);
+	mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, len, (unsigned char * )iv_use, (unsigned char * )plaintextdata, (unsigned char * )ciphertext);
 
-		memset(plaintextdata, 0, sizeof(plaintextdata));
-		mbedtls_aes_context aes_ctx;
-		if(plaintext_length + 16 > AES_LEN_SIZE) return -1;
-	     memset(iv_use,0,sizeof(iv_use));
-		memcpy(iv_use,iv,16);
-		memcpy(plaintextdata, (const char *)plaintext, plaintext_length);
-
-    int len = fillAESPKCS7DataWithLength((uint8_t *)plaintextdata, plaintext_length);
-
- 
-    mbedtls_aes_init(&aes_ctx);
-    //setkey_dec
-    mbedtls_aes_setkey_enc(&aes_ctx, (unsigned char * )aes_key, 128);
-		mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, len, (unsigned char * )iv_use, (unsigned char * )plaintextdata, (unsigned char * )ciphertext);
-    
-    mbedtls_aes_free(&aes_ctx);
-    return len; //OK
-
+	mbedtls_aes_free(&aes_ctx);
+	return len; //OK
 }
 /**
 *AES ECB加密 , src:源数据,dataLen:数据长度,ciphertext:加密数据, 返回加密长度
@@ -247,20 +190,21 @@ int utils_aes128_ECB_base64_enc_with_length(char *aes_key, uint8_t * plaintext)
 		
 }
 
+
 /**
 *AES ECB解密, src:源数据,dataLen:数据长度,ciphertext:加密数据
 */
 int utils_aes128_ECB_base64_dec(char *aes_key, uint8_t * plaintext, uint16_t recvdata_length)
 {
 	int times=0;
- 		memset(plaintextdata, 0, sizeof(plaintextdata));
-		mbedtls_aes_context aes_ctx;
-		if(strlen((const char *)plaintext) + 16 > AES_LEN_SIZE) return -1;
-		memcpy(plaintextdata, plaintext, strlen((const char *)plaintext));
+	memset(plaintextdata, 0, sizeof(plaintextdata));
+	mbedtls_aes_context aes_ctx;
+	if(strlen((const char *)plaintext) + 16 > AES_LEN_SIZE) return -1;
+	memcpy(plaintextdata, plaintext, recvdata_length);
 
 	mbedtls_aes_init(&aes_ctx);
-	   //setkey_dec
-    mbedtls_aes_setkey_dec(&aes_ctx, (unsigned char * )aes_key, 128);
+	//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);
 		++times;
@@ -268,8 +212,7 @@ int utils_aes128_ECB_base64_dec(char *aes_key, uint8_t * plaintext, uint16_t rec
 	cutAESPKCS7Data((char *)plaintext);
 	mbedtls_aes_free(&aes_ctx);
 
-		return strlen((const char *)plaintext); 
-		
+	return strlen((const char *)plaintext); 
 }
 
 /**
@@ -290,47 +233,4 @@ int utils_aes128_cbc_dec(uint8_t *aes_key, char *iv, char *ciphertext, int len,
     mbedtls_aes_free(&aes_ctx);
     return strlen(plaintext); //OK
 
-}
-
-///**
-//*AES CBC加密 , src:源数据,dataLen:数据长度,ciphertext:加密数据, 返回加密长度
-//*/
-//int utils_aes128_cbc_base64_enc(char *aes_key, char *iv, uint8_t *src,int dataLen, char *ciphertext)
-//{
-
-//		size_t len;
-//    
-//		 memset(buffer, 0, sizeof(buffer));
-//		if(dataLen+16 > AES_LEN_SIZE) return 0;
-//		
-//		int ret = mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, dataLen );
-//		printf("base64_encode:%s\r\n",buffer);
-//		if(ret)
-//		{
-//			printf("base64 encode err:%d",ret);
-//			return 0;
-//		}
-//		return utils_aes128_cbc_enc(aes_key,iv,(char * )buffer,ciphertext);
-//		
-//}
-
-///**
-//*AES CBC解密 ciphertext:加密数据, len:加密数据长度,plaintext:解密到的数据
-//*/
-//int utils_aes128_cbc_base64_dec(char *aes_key, char *iv, char *ciphertext, int dataLen, char *plaintext,int plainLen)
-//{
-//		size_t len = 0;
-//       memset(buffer, '\0', sizeof(buffer));
-//		int retlen = utils_aes128_cbc_dec(aes_key,iv,ciphertext,dataLen,(char * )buffer);
-//		if(retlen)
-//		{
-//			printf("base64_encode2:%s\r\n",buffer);
-//			int ret = mbedtls_base64_decode((unsigned char * )plaintext, plainLen, &len, buffer, retlen);
-//			if(ret)
-//			{
-//				printf("base64 decode err:%d,%d",ret,retlen);
-//				len = 0;
-//			}
-//		}
-//		return len;
-//}
+}

+ 2 - 2
Drivers/INflash.h

@@ -23,10 +23,10 @@ void STMFLASH_Read(uint32_t ReadAddr,uint16_t *pBuffer,uint16_t NumToRead);
 void STMFLASH_Write(uint32_t WriteAddr,uint16_t *pBuffer,uint16_t NumToWrite);
 //结构体存储数组
 #pragma pack(1)
- typedef struct{
+typedef struct{
 	char deviceSecret[40];
 	char productKey[20];
-    char deviceName[20];
+	char deviceName[20];
 	uint8_t    read_flag;//判断存flash是否成功,从flash读取值为1代表成功
 }Coefficient_Data;
  

+ 1 - 1
Drivers/Modules/Initialize.h

@@ -8,6 +8,6 @@ enum Initialize_Result
 	Initialize_Result_Busy, // ÕýÔÚ³õʼ»¯
 };
 
-void Power_Handle(void);
+void Initialize_Handle(void);
 enum Initialize_Result get_initialize_status(void);
 #endif

+ 61 - 30
Drivers/Modules/Tuoreniot.c

@@ -10,45 +10,76 @@
 #include "At_Module.h"
 #include "Common_Util.h"
 #include "ec800m.h"
+#include "cJSON.h"
 
 unsigned char key[17]="tuorenzhinenghua";
+
 /**
 * 
-*注册信息打包
+*注册参数信息打包
 */
-enum Result packRegistDataAnd(uint8_t *length,char * qcciddata,char *recvdata,uint8_t *mcu_id,uint16_t Version_data){
-	 enum Result result = Result_None;
-	// 
-//	 int i=0;
-	int datalen = 0;
-	char* dataPtr = recvdata+2; //dataPtr指针指向registData第三个字节
-	//复制muid,并转化为16进制
-
-	Log_Printf_Debug("mcu_id:%s,%d\r\n",mcu_id,sizeof(mcu_id));//串口打印
-	byteToHexStr(mcu_id, dataPtr, (int)length);
-	Log_Printf_Debug("device data:%s,%d\r\n",dataPtr,strlen(dataPtr));//串口打印
-	memcpy(dataPtr+strlen(dataPtr),"&",1);
-	//获取qccid
-	AT_Clear();
-	//get_qccid_flag=get_qccid(qcciddata);
+void packRegistParams(uint8_t * pack_data, uint16_t * pack_data_length, struct Regist_Params_Struct registParams)
+{
+	sprintf((char *)(pack_data + 2), "{\"platform\":\"%s\",\"connectionType\":\"%s\",\"deviceId\":\"%s\",\"userId\":%d}", 
+	registParams.platform, registParams.connType, registParams.deviceId, registParams.userId); // 拼接AT指令
+	Log_Printf_Debug("%s\r\n", (char *)(pack_data + 2));
 	
-//	result=ec800m.query_qccid_sync(qcciddata);
+	uint16_t datalen = utils_aes128_ECB_base64_enc_with_length((char *)key, (pack_data + 2));
 	
-    //获取复制qccid
-	memcpy(dataPtr+strlen(dataPtr),qcciddata,31);
-	//复制版本号
-	snprintf(dataPtr+strlen(dataPtr),10,"&%d.%03d",Version_data/1000,Version_data%1000);
-	Log_Printf_Debug("device data:%s,%d\r\n",dataPtr,strlen(dataPtr));//串口打印
-	Log_Printf_Debug("regist data:%s\r\n",recvdata+2);
-	datalen = utils_aes128_ECB_base64_enc_with_length((char *)key,(uint8_t *)dataPtr);
-
-	recvdata[0] = datalen>>8;//头2个字节赋值数据长度
-	recvdata[1] = datalen;
-	Log_Printf_Debug("strlendata:%d,datalen=%d\r\n",strlen(dataPtr),datalen);
-	 *length=datalen+2;
-	 return Result_Success;
+	pack_data[0] = datalen>>8;//头2个字节赋值数据长度
+	pack_data[1] = datalen;
+
+	* pack_data_length = datalen + 2;
 }
 
 
 
+/**
+* 
+*注册数据解密
+*/
+uint8_t analysisRegistData(uint8_t * regist_data, uint16_t regist_data_length, struct Regist_Params_Struct * regist_data_struct)
+{
+//	Log_Printf_Debug("regist_data: \r\n");
+//	Log_SendHex(regist_data, regist_data_length);
+//	Log_Printf_Debug("\r\n");
+
+	uint8_t result;
+	utils_aes128_ECB_base64_dec((char *)key,regist_data,regist_data_length);
+	Log_Printf_Debug("解密数据(%d):%s\r\n", regist_data_length, (char *)regist_data);
+
+	cJSON *json = cJSON_Parse((char *)regist_data);
+	if(!json)
+	{
+		Log_Printf_Debug("json parse error,%s\r\n",cJSON_GetErrorPtr());
+		result = 0;
+	}else{
+		strcpy(regist_data_struct->deviceSecret, cJSON_GetObjectItem(json,"deviceSecret")->valuestring);
+		strcpy(regist_data_struct->productKey, cJSON_GetObjectItem(json,"productKey")->valuestring);
+		strcpy(regist_data_struct->deviceName, cJSON_GetObjectItem(json,"deviceName")->valuestring);
+		result = 1;
+	}
+	cJSON_Delete(json);
+	return result;
+}
+
+
+
+
+void printf_regist_param_struct(struct Regist_Params_Struct regist_params_struct)
+{
+	Log_Printf("------print regist params start------\r\n");
+	Log_Printf("connType=%s\r\n", regist_params_struct.connType);
+	Log_Printf("deviceId=%s\r\n", regist_params_struct.deviceId);
+	Log_Printf("deviceName=%s\r\n", regist_params_struct.deviceName);
+	Log_Printf("platform=%s\r\n", regist_params_struct.platform);
+	Log_Printf("deviceSecret=%s\r\n", regist_params_struct.deviceSecret);
+	Log_Printf("Host=%s\r\n", regist_params_struct.host);
+	Log_Printf("port=%d\r\n", regist_params_struct.port);
+	Log_Printf("productKey=%s\r\n", regist_params_struct.productKey);
+	Log_Printf("userId=%d\r\n", regist_params_struct.userId);
+	Log_Printf("------print regist params end------\r\n");
+}
+
+
 

+ 19 - 1
Drivers/Modules/Tuoreniot.h

@@ -2,7 +2,25 @@
 #define __TUORENIOT_H
 
 #include <stdint.h>
-enum Result packRegistDataAnd(uint8_t *length,char * qcciddata,char *recvdata,uint8_t *mcu_id,uint16_t Version_data);
 
+struct Regist_Params_Struct
+{
+	char platform[20];
+	char connType[10];
+	char deviceId[20];
+	uint16_t userId;
+	char host[20];
+	uint16_t port;
+	char deviceSecret[50];
+	char productKey[20];
+	char deviceName[20];
+};
+
+
+void packRegistParams(uint8_t * pack_data, uint16_t * pack_data_length, struct Regist_Params_Struct registParams);
+
+uint8_t analysisRegistData(uint8_t * regist_data, uint16_t regist_data_length, struct Regist_Params_Struct * regist_data_struct);
+
+void printf_regist_param_struct(struct Regist_Params_Struct regist_params_struct);
 
 #endif

+ 1 - 1
Drivers/Modules/UDP_Client.h

@@ -8,7 +8,7 @@ enum Client_Status{
 	Client_Status_Success, // 发送成功
 	Client_Status_Failure, // 发送失败
 };
-struct COMM_Client_Struct{
+struct UDP_Client_Struct{
 	enum Client_Status status; // 状态
 	char info[200]; // 备注信息
 };

+ 40 - 19
Drivers/Modules/ec800m/EC800M_UDP_Client5.c

@@ -57,6 +57,10 @@ enum Step{
 	STEP_SUCCESS, // 成功
 	STEP_FAILURE, // 失败
 	STEP_FINISH, // 流程结束
+	
+	
+	STEP_VERIFY_REGIST, // 验证注册
+	STEP_VERIFY_INITIALIZE, // 验证初始化
 };
 // 当前
 static enum Step step = STEP_NONE;
@@ -64,7 +68,7 @@ static enum Step step = STEP_NONE;
 static enum Step next_step = STEP_NONE;
 
 // 客户端5
-struct COMM_Client_Struct udp_client = {
+struct UDP_Client_Struct client = {
 	.status = Client_Status_None,
 };
 
@@ -132,7 +136,7 @@ void UDP_Client_Send(uint8_t test_switch)
 		// 初始化
 		UDP_Client_Init();
 		// 正在发送
-		udp_client.status = Client_Status_Sending;
+		client.status = Client_Status_Sending;
 		// 流程开始
 		goto_step(STEP_START);
 	}
@@ -140,13 +144,13 @@ void UDP_Client_Send(uint8_t test_switch)
 // 获取状态
 enum Client_Status UDP_Client_Status(void)
 {
-	if(udp_client.status == Client_Status_None)
+	if(client.status == Client_Status_None)
 	{
-		return udp_client.status;
+		return client.status;
 	}
 	else if(step == STEP_FINISH)
 	{
-		return udp_client.status;
+		return client.status;
 	}
 	else
 	{
@@ -157,7 +161,7 @@ enum Client_Status UDP_Client_Status(void)
 // 获取备注
 char * UDP_Client_Get_Info(void)
 {
-	return udp_client.info;
+	return client.info;
 }
 // 清除
 void UDP_Client_Clear(void)
@@ -165,7 +169,7 @@ void UDP_Client_Clear(void)
 	// 流程置空
 	goto_step(STEP_NONE);
 	// 空闲
-	udp_client.status = Client_Status_None;
+	client.status = Client_Status_None;
 }
 
 // 直接跳转到下一步
@@ -194,8 +198,8 @@ static void goto_wait(uint32_t t)
 static void goto_failure(char * info)
 {
 	Log_Printf_Debug("STEP: 数据发送失败,%s\r\n", info);
-	udp_client.status = Client_Status_Failure;
-	strcpy(udp_client.info, info);
+	client.status = Client_Status_Failure;
+	strcpy(client.info, info);
 	goto_step(STEP_FAILURE);
 }
 
@@ -203,8 +207,8 @@ static void goto_failure(char * info)
 static void goto_success(char * info)
 {
 	Log_Printf_Debug("STEP: 数据发送成功,%s\r\n", info);
-	udp_client.status = Client_Status_Success;
-	strcpy(udp_client.info, info);
+	client.status = Client_Status_Success;
+	strcpy(client.info, info);
 	goto_step(STEP_SUCCESS);
 }
 
@@ -228,15 +232,10 @@ static uint8_t query_cgreg_times = 0; // 
 static uint8_t auth_times = 0; // 认证次数
 static uint16_t socket_err = 0;
 static uint8_t auth_or_data = 0;
+static enum Initialize_Result InitializeResult;
+static enum Regist_Result regist_result;
 void UDP_Client_Handle(void)
 {
-	static enum Initialize_Result InitializeResult;
-	InitializeResult=get_initialize_status();
-	if(InitializeResult==Initialize_Result_Busy)
-	{
-		return ;
-	
-	}
 	// 流程
 	switch(step)
 	{
@@ -245,7 +244,29 @@ void UDP_Client_Handle(void)
 		case STEP_START: // 开始
 			query_cgreg_times = 0; // 查询网络状态的次数
 			auth_times = 0; // 认证次数
-			goto_step(STEP_EXIT_SLEEP);
+			goto_step(STEP_VERIFY_REGIST);
+			break;
+		case STEP_VERIFY_REGIST: // 验证是否注册
+			regist_result = regist_get_result();
+			if(regist_result == Regist_Result_Success)
+			{
+				goto_step(STEP_VERIFY_INITIALIZE);
+			}
+			else
+			{
+				goto_failure("设备未注册");
+			}
+			break;
+		case STEP_VERIFY_INITIALIZE: // 验证是否初始化
+			InitializeResult = get_initialize_status();
+			if(InitializeResult==Initialize_Result_Busy)
+			{
+				goto_failure("模块正在初始化");
+			}
+			else
+			{
+				goto_step(STEP_EXIT_SLEEP);
+			}
 			break;
 		case STEP_EXIT_SLEEP: // 退出休眠
 			ec800m.exit_sleep();

+ 25 - 42
Drivers/Modules/ec800m/Ec800m_Initialize.c

@@ -59,8 +59,7 @@ static uint32_t cgreg_ci;
 static uint8_t query_cgreg_times = 0; // 查询网络状态的次数
 //// 声明函数。步骤跳转
 void pownext_step(enum PowerStep ns);
-// 发送流程
-void Power_Handle(void);
+
 
 // 等待
 static void powerwait(void)
@@ -120,7 +119,7 @@ enum Initialize_Result get_initialize_status(void){
  return InitializeResult;
 
 }
-void Power_Handle(void)
+void Initialize_Handle(void)
 {
 	result =ec800m.ready();
 	if(result==Result_Success)
@@ -129,24 +128,20 @@ void Power_Handle(void)
 		pownext_step(STEP_START);
 		Restart_flag++;
 		Log_Printf_Debug("完成准备%d\r\n",Restart_flag);
-		
-
 	}
 	
-	if(time_get_delay(&timer2)>=240000)
-		{
-		 Restart_flag=0;
-		 time_clear(&timer2);
-		}else
-        {
-		  if(Restart_flag>=4&&module_switch==0)//4分钟内重启4次
-		  {
-		    module_switch=1;
-			  pownext_step(STEP_SET_CFUN_0);//模块不断重启,直接进入最小功能模式
-			  Log_Printf_Debug("模块关闭中...%d\r\n",module_switch);
-		  }
-	    }
-	if(set_mincfun_flag==1) 
+	if(time_get_delay(&timer2) >= 240000)
+	{
+		Restart_flag=0;
+		time_clear(&timer2);
+	}
+	else if(Restart_flag >= 4 && module_switch == 0)//4分钟内重启4次
+	{
+		module_switch=1;
+		pownext_step(STEP_SET_CFUN_0);//模块不断重启,直接进入最小功能模式
+		Log_Printf_Debug("模块关闭中...%d\r\n",module_switch);
+	}
+	if(set_mincfun_flag == 1)
 	{
 		return ;
 	}
@@ -205,10 +200,8 @@ void Power_Handle(void)
 			{
 				if(cgreg_stat == 1)
 				{
-					
 					// 下一步
-			            power_success("查询PS域成功");
-					
+			    power_success("查询PS域成功");
 				}
 				else if(query_cgreg_times > 20) // 最多查询20次
 				{
@@ -237,7 +230,6 @@ void Power_Handle(void)
 			{
 				Log_Printf_Debug("设置最小功能模式失败\r\n");
 				pownext_step(STEP_FAILURE);
-
 			}
 			break;
 		case STEP_WAIT: // 等待
@@ -246,28 +238,19 @@ void Power_Handle(void)
 		case STEP_SUCCESS: // 成功
 			ec800m.enter_sleep();
 			pownext_wait_step(STEP_START, 50);
-		    Log_Printf_Debug("初始化成功\r\n");
-//		   if(networkTest_Flag==1)
-//		   {
-		    set_mincfun_flag=1;
-//		   }else
-//		   {
-//			   set_mincfun_flag=0;
-//			if(power_times>=10)
-//		    set_mincfun_flag=1;
-//		   }
+			Log_Printf_Debug("初始化成功\r\n");
+			set_mincfun_flag=1;
 			break;
 		case STEP_FAILURE: // 失败
 			ec800m.enter_sleep();
-			
-		 if(module_switch==0)
-		 {
-		 pownext_wait_step(STEP_START, 50);
-		 }
-		 else
-		 {
-		 pownext_wait_step(STEP_SET_CFUN_0, 500);
-		 }
+			if(module_switch==0)
+			{
+				pownext_wait_step(STEP_START, 50);
+			}
+			else
+			{
+				pownext_wait_step(STEP_SET_CFUN_0, 500);
+			}
 			break;
 		default:
 			break;

+ 126 - 235
Drivers/Modules/ec800m/Ec800m_Regist.c

@@ -31,271 +31,162 @@
 #include "At_Module.h"
 #include "Common_Util.h"
 #include "Tuoreniot.h"
-static uint8_t mcu_id[8]="8945809";
-static uint16_t Version_data = 1032;
-static uint8_t regist_result =0;
 static uint8_t register_status;//注册成功,向flash存储标志
 
-
-
-//unsigned char key[17]="tuorenzhinenghua";
 static Coefficient_Data flashdata;
 
 static uint8_t tcpconnectID = 2;
-static char * REGIST_SERVER ="8337239yf4.yicp.fun" ; //注册服务器地址
-static uint16_t REGIST_PORT=22155; //端口号
-static char qcciddata[31]={0};//
-//char registData[100] = {0};
-static char recvdata[512]={0};//和registData共用
+// 生成环境
+static char * REGIST_SERVER = "iot.tuoren.com" ; //注册服务器地址
+static uint16_t REGIST_PORT = 8888; //端口号
+// 开发环境
+//static char * REGIST_SERVER = "z18z017026.51vip.biz" ; //注册服务器地址
+//static uint16_t REGIST_PORT = 31396; //端口号
+
+// 注册参数
+static struct Regist_Params_Struct regist_params_struct = {
+	.platform = "aliyun",
+	.connType = "CoAP",
+	.deviceId = "123456",
+	.userId = 4562
+};
+static uint8_t regist_data[512];
+static uint16_t regist_data_length;
 
 //清空flash
 void clearflash(void){
-flashdata.read_flag=0;
-memcpy(flashdata.deviceSecret,"0",40);
-memcpy(flashdata.productKey,"0",20);
-memcpy(flashdata.deviceName,"0",20);
-delay_ms(10);
-STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
+	flashdata.read_flag=0;
+	memset(flashdata.deviceSecret, 0, sizeof(flashdata.deviceSecret));
+	memset(flashdata.productKey, 0, sizeof(flashdata.productKey));
+	memset(flashdata.deviceName, 0, sizeof(flashdata.deviceName));
+	delay_ms(10);
+	STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
 }
 
-void storedata(void){
-
-flashdata.read_flag=1;
- Log_Printf_Debug("###########\r\n");
- Log_Printf_Debug("deviceSecret:%s,productKey:%s,deviceName:%s,read_flag:%d\r\n",flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName,flashdata.read_flag);
- Log_Printf_Debug("结构体大小: %d\r\n", sizeof(Coefficient_Data));
-	
-     
-     delay_ms(10);
-    STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
-    flashdata.read_flag=0;
-    delay_ms(10);
-   Log_Printf_Debug("写入数据完成\r\n");
-   STMFLASH_Read(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
-   Log_Printf_Debug("读取完成read_flag:%d,deviceSecret:%s,productKey:%s,deviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName);
-
-}
-
-///**
-//* 
-//*注册信息打包
-//*/
-//enum Result packRegistDataAnd(uint8_t *length){
-//	 enum Result result = Result_None;
-//	// 
-////	 int i=0;
-//	int datalen = 0;
-//     memset(qcciddata,'\0',sizeof(qcciddata));
-//     memset(recvdata,'\0', sizeof(recvdata));
-//	char* dataPtr = recvdata+2; //dataPtr指针指向registData第三个字节
-//	//复制muid,并转化为16进制
-//	byteToHexStr(mcu_id, dataPtr, sizeof(mcu_id));
-//	memcpy(dataPtr+strlen(dataPtr),"&",1);
-//	//获取qccid
-//	AT_Clear();
-//	//get_qccid_flag=get_qccid(qcciddata);
-//	
-//	result=ec800m.query_qccid_sync(qcciddata);
-//	
-//	  if(result==Result_Failed)
-//     {
-//      return result;
-//     }
-//    //获取复制qccid
-//	memcpy(dataPtr+strlen(dataPtr),qcciddata,31);
-//	//复制版本号
-//	snprintf(dataPtr+strlen(dataPtr),10,"&%d.%03d",Version_data/1000,Version_data%1000);
-//	Log_Printf_Debug("device data:%s,%d\r\n",dataPtr,strlen(dataPtr));//串口打印
-//	Log_Printf_Debug("regist data:%s\r\n",recvdata+2);
-//	datalen = utils_aes128_ECB_base64_enc_with_length((char *)key,(uint8_t *)dataPtr);
-
-//	recvdata[0] = datalen>>8;//头2个字节赋值数据长度
-//	recvdata[1] = datalen;
-//	Log_Printf_Debug("strlendata:%d,datalen=%d\r\n",strlen(dataPtr),datalen);
-//	 *length=datalen+2;
-//	 return Result_Success;
-//}
-/**
-* 
-*注册数据解密
-*/
-enum Result analysis_recvdata()
+void storedata(void)
 {
-	enum Result result = Result_None;
-	unsigned char key[17]="tuorenzhinenghua";
-	uint16_t recvdata_length=0;
-  cJSON *json = NULL,*json_productKey = NULL,*json_deviceName = NULL,*json_deviceSecret = NULL;
-	memset(recvdata, '\0', sizeof(recvdata));
-	result =ec800m.recv_with_time_sync(tcpconnectID,(uint8_t *)recvdata,&recvdata_length,10000);
+	flashdata.read_flag=1;
+	strcpy(flashdata.deviceSecret, regist_params_struct.deviceSecret);
+	strcpy(flashdata.productKey, regist_params_struct.productKey);
+	strcpy(flashdata.deviceName, regist_params_struct.deviceName);
 	
-     if(result==Result_Failed)
- {
-   return result;
- }
- Log_Printf_Debug("recvdata:%d",strlen(recvdata));
+	delay_ms(10);
+	STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
+	flashdata.read_flag=0;
+	delay_ms(10);
+	Log_Printf_Debug("写入数据完成\r\n");
+	STMFLASH_Read(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
+	Log_Printf_Debug("读取完成read_flag:%d,deviceSecret:%s,productKey:%s,deviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName);
 
- utils_aes128_ECB_base64_dec((char *)key,(unsigned char*)recvdata,recvdata_length);
- Log_Printf_Debug("解密数据recvdata:%s,%d,%d\r\n",recvdata,strlen(recvdata),recvdata_length);
-  			json = cJSON_Parse(recvdata);
-		if(!json)
-			{
-				Log_Printf_Debug("json parse error,%s\r\n",cJSON_GetErrorPtr());
-				cJSON_Delete(json);
-				return Result_Failed;
-		
-			}else{
-				json_deviceSecret = cJSON_GetObjectItem(json,"deviceSecret");
-				json_productKey = cJSON_GetObjectItem(json,"productKey");
-				json_deviceName = cJSON_GetObjectItem(json,"deviceName");
-				Log_Printf_Debug("获取数据成功deviceSecret:%s,json_productKey:%s,deviceName:%s\r\n",json_deviceSecret->valuestring,json_productKey->valuestring,json_deviceName->valuestring);
-				strcpy(flashdata.deviceSecret,json_deviceSecret->valuestring);
-               strcpy(flashdata.productKey,json_productKey->valuestring);
-				strcpy(flashdata.deviceName,json_deviceName->valuestring);
-				memset(&register_status, 1, sizeof(register_status));
-				cJSON_Delete(json);
-				
-				return Result_Success;
-			
-			}
 }
 
 //4G模块注册流程
 uint8_t regist_Handle()
 {
- uint8_t stat,length=0;
-	uint16_t lac,err=0;
-	uint32_t ci=0;
- enum Result result = Result_None;
- ec800m.exit_sleep();//退出休眠
- delay_ms(10);
-  result=ec800m.set_sleep_sync(1);//设置休眠模式
-  if(result==Result_Success)
- {
-   result=ec800m.set_cfun_sync(1);//设置全功能模式
- }
-  
- 
-  if(result==Result_Success)
- {
-   result=ec800m.set_cgreg_sync(2);//设置网络状态
- }
-   
-  if(result==Result_Success)
- {
-   for(int i=0;i<20;i++){
- delay_ms(400);
-result=ec800m.query_cgreg_sync(&regist_result,&stat,&lac,&ci);//循环查询网络状态最多20次
-	if(stat==1)
-	{i=20;
+	uint8_t mode,stat,regist_flag = 0;
+	uint16_t lac,err = 0;
+	uint32_t ci = 0;
+	enum Result result = Result_None;
+	ec800m.exit_sleep();//退出休眠
+	delay_ms(10);
+	result=ec800m.set_sleep_sync(1);//设置休眠模式
+	if(result==Result_Success)
+	{
+		result=ec800m.set_cfun_sync(1);//设置全功能模式
+	}
 	
+	if(result==Result_Success)
+	{
+		result=ec800m.set_cgreg_sync(2);//设置网络状态
+	}
+	
+	if(result==Result_Success)
+	{
+		for(int i=0;i<20;i++){
+			delay_ms(400);
+			result=ec800m.query_cgreg_sync(&mode,&stat,&lac,&ci);//循环查询网络状态最多20次
+			if(stat==1)
+			{
+				i=20;
+			}
+		}
 	}
-}
- }
-  
- 
-
-
-  if(result==Result_Success&&stat==1)
- {
-    //tcp连接流程
-  result=ec800m.open_socket_sync(tcpconnectID,"TCP",REGIST_SERVER,REGIST_PORT,1,&err);//连接tcp
- }
-
- 
- 
- if(result==Result_Success)
- {
-	 result=ec800m.query_qccid_sync(qcciddata);
-
- }
-  if(result==Result_Success)
-  {
-	 memset(qcciddata,'\0',sizeof(qcciddata));
-     memset(recvdata,'\0', sizeof(recvdata));
-	  length = sizeof(mcu_id);
-    result =(enum Result)packRegistDataAnd(&length,qcciddata,recvdata,mcu_id,Version_data);//数据打包
-	 Log_Printf_Debug("data length=%d\r\n", length);
-	  Log_Printf_Debug("recvdata:%s\r\n", recvdata);
- }
- 
-  
-   if(result==Result_Success)
- {
-    result = ec800m.set_qisde_sync(0);//关闭回显
- }
 
-   if(result==Result_Success)
- {
-   result =ec800m.send_sync(tcpconnectID,(uint8_t *)recvdata,length);//数据发送
- }
+	if(result==Result_Success&&stat==1)
+	{
+		//tcp连接流程
+		result=ec800m.open_socket_sync(tcpconnectID,"TCP",REGIST_SERVER,REGIST_PORT,1,&err);//连接tcp
+	}
 
-    if(result==Result_Success)
- {
-   result =analysis_recvdata();
- }
+	if(result==Result_Success)
+	{
+		result = ec800m.set_qisde_sync(0);//关闭回显
+	}
+	
+	if(result==Result_Success)
+	{
+		memset(regist_data, 0, sizeof(regist_data));
+		packRegistParams(regist_data, &regist_data_length, regist_params_struct);
+		printf_regist_param_struct(regist_params_struct);
+		result =ec800m.send_sync(tcpconnectID, regist_data, regist_data_length);//数据发送
+	}
 
-   
-    if(result==Result_Success)
- {
-   result=ec800m.close_socket_sync(tcpconnectID);//断开tcp连接
- }
- 
- 
+	if(result==Result_Success)
+	{
+		memset(regist_data, 0, sizeof(regist_data));
+		result =ec800m.recv_with_time_sync(tcpconnectID,regist_data,&regist_data_length,10000);
+		if(result==Result_Failed)
+		{
+			return result;
+		}
+		// 解析注册数据
+		regist_flag = analysisRegistData(regist_data, regist_data_length, &regist_params_struct);
+		printf_regist_param_struct(regist_params_struct);
+	}
 
- ec800m.set_cfun_sync(0);//设置最小功能模式
- 
+	if(result==Result_Success)
+	{
+		result=ec800m.close_socket_sync(tcpconnectID);//断开tcp连接
+	}
+	
+	ec800m.set_cfun_sync(0);//设置最小功能模式
+	ec800m.enter_sleep();//进入休眠状态
+	
+	return regist_flag;
+}
 
 
- ec800m.enter_sleep();//进入休眠状态
-   if(result==Result_Success)
- {
-   return 1;
- }
- else
-{
-  return 0;
- }
-}
 
 uint8_t regist_device_sync(void)
 {
- flashdata.read_flag=0;
- uint8_t regist_flag=0;
- //读取flash
- Log_Printf_Debug("读取前read_flag:%d\r\n",flashdata.read_flag);
- STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)&flashdata,sizeof(flashdata));//读取flash
- delay_ms(10);
- //已经注册。读取flash成功
- if(flashdata.read_flag==1)
- {
-	 Log_Printf_Debug("读取flash成功read_flag:%d,\ndeviceSecret:%s,\n productKey:%s,\ndeviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName); 
-	 register_status=1;
- return 1;
- }
-  //未注册开始注册流程
- regist_flag=regist_Handle();//注册流程
- if(regist_flag==0)//注册流程失败不储存flash
- {
-  flashdata.read_flag=0;
-	 register_status=0;
-	 clearflash();
-  return 0;
- }
-  //注册成功向flash储存
- if(register_status==1){
-	 storedata();//存储到flash
-     return 1;
-  }
-  else
-  {
-	  Log_Printf_Debug("注册失败。。。regist_flag:%d,register_status:%d\r\n",regist_flag,register_status);
-    return 0;
-  }
- 
+	flashdata.read_flag=0;
+	//读取flash
+	Log_Printf_Debug("读取前read_flag:%d\r\n",flashdata.read_flag);
+	STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)&flashdata,sizeof(flashdata));//读取flash
+	delay_ms(10);
+	//已经注册。读取flash成功
+	if(flashdata.read_flag == 1)
+	{
+		register_status=1;
+		Log_Printf_Debug("读取flash成功read_flag:%d,\ndeviceSecret:%s,\n productKey:%s,\ndeviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName); 
+		return 1;
+	}
+	//未注册开始注册流程
+	register_status=regist_Handle();//注册流程
+	if (register_status==0)//注册流程失败不储存flash
+	{
+		clearflash();
+		return 0;
+	}
+	else
+	{
+		storedata();//存储到flash
+		return 1;
+	}
 }
 enum Regist_Result regist_get_result(void)
 {
-  if(register_status){
+  if(register_status == 1){
     return Regist_Result_Success;
   }
   else
@@ -306,7 +197,7 @@ enum Regist_Result regist_get_result(void)
 
 char * regist_get_aliyun_productKey(void)
 {
- return flashdata.productKey;
+	return flashdata.productKey;
 }
 char * regist_get_aliyun_deviceName(void)
 {
@@ -314,7 +205,7 @@ char * regist_get_aliyun_deviceName(void)
 }
 char * regist_get_aliyun_deviceSecret(void)
 {
- return flashdata.deviceSecret;
+	return flashdata.deviceSecret;
 }
 
 

+ 12 - 22
User/main.c

@@ -20,14 +20,11 @@
 #include "Timer_Module.h"
 #include "Log_Module.h"
 
-// 毫秒计时器
-//extern uint32_t Timer_Ms;
-
-uint8_t mode = 0;
+#include "Tuoreniot.h"
 
+// 计时器
 static struct TIMER_Struct timer;
 
-
 int main(void)
 {
 //	uint8_t memmem_flag = 0;
@@ -44,28 +41,21 @@ int main(void)
 	
 	//注册设备,最多失败三次
 	
-         regist_device_sync();
-//	Log_Printf_Debug("1234\r\n");
-//		Log_Printf_Debug("regist_device_flag%d\r\n",regist_device_flag);
-//	GPIO_SetBits(WAKE_GPIO, WAKE_GPIO_Pin);
-//	bc260y.exit_sleep();
-//	delay_ms(100);
-//	bc260y.reset();
-//	Log_Printf_Debug("123456\r\n");
-//	bc260y.query_sleep_sync(&mode);
-//	bc260y.query_sleep_sync(&mode);
-//    bc260y.set_cfun_sync(1);//设置全功能模式
-//	bc260y.set_cgreg_sync(2);//设置网络状态
-//	bc260y.enter_sleep();
-//	delay_ms(100);
-//	bc260y.reset();
-//	test_encaes128();
+  regist_device_sync();
+	
+	Log_Printf_Debug("注册结束\r\n");
+	
 	while(1)
 	{
 		// 循环执行udp客户端OLED_ShowNum
 		OLED_ShowNum(1, 4, time_get_delay(&timer), 6);
 		
-//		pump_business_loop_execution();
+		if(time_get_delay(&timer) > 60 * 1000)
+		{
+			time_clear(&timer);
+		}
+		
+		pump_business_loop_execution();