Browse Source

实现4G的初始化模块和注册模块

YunZhiNeng 1 năm trước cách đây
mục cha
commit
78877c8941

+ 22 - 18
Drivers/Business/PumpBusiness.c

@@ -115,7 +115,11 @@ void PumpBusines_Handle(void)
 	{
 		return;
 	}
-
+//	//没有初始化成功前不发送数据
+//   if(get_initialize_status()!=1)
+//   {
+//     return;
+//   }
 	// 发送
 	if(UDP_Client_Status() == Client_Status_None)
 	{
@@ -151,23 +155,23 @@ void PumpBusines_Handle(void)
 	{
 		Log_Printf("发送失败:%s\r\n", UDP_Client_Get_Info());
 		UDP_Client_Clear(); // 清除
-		#if  BC260Y
-		resend_counter++;
-		if(resend_counter<=3)
-		{
-		send_data_switch = 1; // 失败重发
-		Data_success_Number--;
-		Data_Number--;	
-		}
-		else
-		{
-		send_data_switch = 0; // 关闭发送
-//			resend_counter=4;
-		}
-		#endif
-		#if  EC800M
+//		#if  BC260Y
+//		resend_counter++;
+//		if(resend_counter<=3)
+//		{
+//		send_data_switch = 1; // 失败重发
+//		Data_success_Number--;
+//		Data_Number--;	
+//		}
+//		else
+//		{
+//		send_data_switch = 0; // 关闭发送
+////			resend_counter=4;
+//		}
+//		#endif
+//		#if  EC800M
 		send_data_switch = 0; // 关闭发送
-		#endif
+//		#endif
 		Data_fail_Number++;
 
 	}
@@ -185,7 +189,7 @@ void PumpBusines_Handle(void)
 void pump_business_loop_execution()
 {
 	
-//	Power_Handle();
+	Power_Handle();
 	#if  EC800M
 //	if(module_switch==1) return;
 	#endif

+ 3 - 38
Drivers/INflash.c

@@ -15,7 +15,7 @@
 #include "stm32f10x.h"
 #include <stdint.h>
 #include "INflash.h"
-
+#include "Regist.h"
 #include "string.h"
 #include "Delay.h"
 #include "Log_Module.h"
@@ -23,8 +23,8 @@
 typedef uint16_t uint16;
 typedef uint32_t uint32;
 
-Coefficient_Data flashdata;
-uint8_t register_success;
+
+
 uint16 STMFLASH_BUF[STM32_SECTOR_SIZE/2];//最多是2K字节
 void write_to_flash(uint32 WriteAddr,uint16 *pBuffer,uint16 NumToWrite)
 {
@@ -101,46 +101,11 @@ void STMFLASH_Write(uint32 WriteAddr,uint16 *pBuffer,uint16 NumToWrite)
 	FLASH_Lock();//上锁
  
 }
-//清空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*)&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*)&flashdata,sizeof(flashdata));
-    flashdata.read_flag=0;
-    delay_ms(10);
-   Log_Printf_Debug("写入数据完成\r\n");
-   STMFLASH_Read(FLASH_SAVE_ADDR,(uint16*)&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);
 
-}
-void store(void){
 
 
 
-if(register_success==1){
-    storedata();
-}
-else
-{
-Log_Printf_Debug("数据解析失败,没有存储flash\r\n");
-flashdata.read_flag=0;
-}
 
 
 
-}
 

+ 3 - 1
Drivers/INflash.h

@@ -17,9 +17,10 @@
 
 
 
-void store(void);
+void storedata(void);
 void clearflash(void);
 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{
@@ -28,6 +29,7 @@ void STMFLASH_Read(uint32_t ReadAddr,uint16_t *pBuffer,uint16_t NumToRead);
     char deviceName[20];
 	uint8_t    read_flag;//判断存flash是否成功,从flash读取值为1代表成功
 }Coefficient_Data;
+ 
 #pragma pack()
 #endif
 

+ 8 - 1
Drivers/Modules/Initialize.h

@@ -1,6 +1,13 @@
 #ifndef __INITIALIZE_H
 #define __INITIALIZE_H
+#include <stdint.h>
 
-void Power_Handle(void);
+enum Initialize_Result
+{
+	Initialize_Result_free, // ¿ÕÏÐ
+	Initialize_Result_Busy, // ÕýÔÚ³õʼ»¯
+};
 
+void Power_Handle(void);
+enum Initialize_Result get_initialize_status(void);
 #endif

+ 1 - 0
Drivers/Modules/Regist.h

@@ -21,5 +21,6 @@ char * regist_get_aliyun_productKey(void);
 char * regist_get_aliyun_deviceName(void);
 // 获取阿里云参数ProductKey
 char * regist_get_aliyun_deviceSecret(void);
+//获取注册状态
 
 #endif

+ 1 - 1
Drivers/Modules/bc260y/Bc260y_Regist.c

@@ -33,7 +33,7 @@
 #include "Common_Util.h"
 uint8_t mcu_id[8]="8945809";
 uint16_t Version_data = 1032;
-uint8_t regist_result =0;
+static uint8_t regist_result =0;
 
 //uint8_t registlen=0;
 

+ 12 - 5
Drivers/Modules/ec800m/EC800M_UDP_Client5.c

@@ -17,9 +17,10 @@
 #include "cJSON.h"
 #include "ec800m.h"
 #include "Pump_Dicts_Util.h"
-#include "INflash.h"
+#include "Regist.h"
 #include "PumpBusiness.h"
 #include "aliyuniot.h"
+#include "Initialize.h"
 
 // 流程
 enum Step{
@@ -67,8 +68,6 @@ struct COMM_Client_Struct udp_client = {
 	.status = Client_Status_None,
 };
 
-// 注册后的参数
-extern Coefficient_Data flashdata;
 
 // socket ID
 static uint8_t connectID = 5;
@@ -116,8 +115,9 @@ void Query_Signal(int * RSRP, int * RSRQ, int * RSSI, int * SINR)
 // 初始化
 void UDP_Client_Init(void)
 {
-//	aliyuniot_set_device_params(flashdata.productKey,flashdata.deviceName,flashdata.deviceSecret);
-	aliyuniot_set_device_params("k0g9w9xRhhi","6365736869303032","5eb96433e9f6dd9738d376368a32ab05");
+	//aliyuniot_set_device_params(flashdata.productKey,flashdata.deviceName,flashdata.deviceSecret);
+
+	aliyuniot_set_device_params(regist_get_aliyun_productKey(),regist_get_aliyun_deviceName(),regist_get_aliyun_deviceSecret());
 }
 // 声明函数。步骤跳转
 void goto_step(enum Step ns);
@@ -230,6 +230,13 @@ static uint16_t socket_err = 0;
 static uint8_t auth_or_data = 0;
 void UDP_Client_Handle(void)
 {
+	static enum Initialize_Result InitializeResult;
+	InitializeResult=get_initialize_status();
+	if(InitializeResult==Initialize_Result_Busy)
+	{
+		return ;
+	
+	}
 	// 流程
 	switch(step)
 	{

+ 29 - 20
Drivers/Modules/ec800m/Ec800m_Initialize.c

@@ -34,23 +34,22 @@ static enum PowerStep powerstep = STEP_START;
 // 下一步
 static enum PowerStep next_step = STEP_START;
 
-extern struct AT_Struct AT;
-extern uint8_t send_data_switch;
-
 
+extern uint8_t send_data_switch;
 
+static struct TIMER_Struct timer;
 
+static enum Initialize_Result InitializeResult;
 // 计时相关的变量
-uint8_t Power_time_flag = 0;
 
-uint8_t Restart_flag = 0;//5分钟内重启次数计数
+static uint8_t Restart_flag = 0;//5分钟内重启次数计数
+
+static uint8_t module_switch = 0;//4G模块开关 0正常,1是关闭标志
 
-uint8_t module_switch = 0;//4G模块开关 0正常,1是关闭标志
 
-uint32_t Power_timer_ms = 0;
-uint32_t Power_wait_time = 10;
-uint32_t Restart_time_ms = 0;//重启时间计时
-uint8_t set_mincfun_flag=1;//最小功能模式的标志
+static uint32_t Power_wait_time = 10;
+static uint32_t Restart_time_ms = 0;//重启时间计时
+static uint8_t set_mincfun_flag=1;//0代表正在初始化,1代表空闲
 
 
 static uint8_t cgreg_n; 
@@ -66,15 +65,10 @@ void Power_Handle_Handle(void);
 // 等待
 static void powerwait(void)
 {
-	if(Power_time_flag == 0)
-	{
-		Power_timer_ms = 0;
-		Power_time_flag = 1;
-	}
-	else if(Power_timer_ms >Power_wait_time)
+if(time_get_delay(&timer) > Power_wait_time)
 	{
 		pownext_step(next_step); // 进入下一步
-		Power_time_flag = 0;
+		time_clear(&timer);
 	}
 }
 // 失败
@@ -112,6 +106,20 @@ static void pownext_wait_step(enum PowerStep ns, uint32_t t)
 
 // 发送数据的逻辑
 static enum Result result = Result_None;
+//获取初始化状态
+enum Initialize_Result get_initialize_status(void){
+	
+	if(set_mincfun_flag==0)
+	{
+	  InitializeResult=Initialize_Result_Busy;
+	}
+	else
+	{
+	InitializeResult=Initialize_Result_free;
+	}
+ return InitializeResult;
+
+}
 void Power_Handle(void)
 {
 	result =ec800m.ready();
@@ -237,7 +245,8 @@ void Power_Handle(void)
 			break;
 		case STEP_SUCCESS: // 成功
 			ec800m.enter_sleep();
-			pownext_wait_step(STEP_START, 5);
+			pownext_wait_step(STEP_START, 50);
+		    Log_Printf_Debug("初始化成功\r\n");
 //		   if(networkTest_Flag==1)
 //		   {
 		    set_mincfun_flag=1;
@@ -253,11 +262,11 @@ void Power_Handle(void)
 			
 		 if(module_switch==0)
 		 {
-		 pownext_wait_step(STEP_START, 5);
+		 pownext_wait_step(STEP_START, 500);
 		 }
 		 else
 		 {
-		 pownext_wait_step(STEP_SET_CFUN_0, 100);
+		 pownext_wait_step(STEP_SET_CFUN_0, 1000);
 		 }
 			break;
 		default:

+ 73 - 11
Drivers/Modules/ec800m/Ec800m_Regist.c

@@ -30,29 +30,58 @@
 #include "Log_Module.h"
 #include "At_Module.h"
 #include "Common_Util.h"
-uint8_t mcu_id[8]="8945809";
-uint16_t Version_data = 1032;
-uint8_t regist_result =0;
+static uint8_t mcu_id[8]="8945809";
+static uint16_t Version_data = 1032;
+static uint8_t regist_result =0;
+static uint8_t register_status;
+
 
-//uint8_t registlen=0;
 
-extern struct AT_Struct AT;
 unsigned char key[17]="tuorenzhinenghua";
-extern Coefficient_Data flashdata;
-extern uint8_t register_success;
-//static uint8_t tcpcontextID = 1;
+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共用
+
+//清空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));
+}
+
+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));
@@ -121,7 +150,7 @@ enum Result analysis_recvdata()
 				strcpy(flashdata.deviceSecret,json_deviceSecret->valuestring);
                strcpy(flashdata.productKey,json_productKey->valuestring);
 				strcpy(flashdata.deviceName,json_deviceName->valuestring);
-				memset(&register_success, 1, sizeof(register_success));
+				memset(&register_status, 1, sizeof(register_status));
 				cJSON_Delete(json);
 				
 				return Result_Success;
@@ -234,10 +263,43 @@ uint8_t regist_device_sync(void)
  if(regist_flag==0)//注册流程失败不储存flash
  {
   flashdata.read_flag=0;
+	 register_status=0;
+	 clearflash();
   return 0;
  }
- store();//存储到flash
-  return 1;
+ 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;
+  }
+ 
+}
+enum Regist_Result regist_get_result(void)
+{
+  if(register_status){
+    return Regist_Result_Success;
+  }
+  else
+  {
+    return Regist_Result_Failure;
+  }
+}
+
+char * regist_get_aliyun_productKey(void)
+{
+ return flashdata.productKey;
+}
+char * regist_get_aliyun_deviceName(void)
+{
+  return flashdata.deviceName;
+}
+char * regist_get_aliyun_deviceSecret(void)
+{
+ return flashdata.deviceSecret;
 }
 
 

+ 1 - 1
User/main.c

@@ -44,7 +44,7 @@ int main(void)
 	
 	//×¢²áÉ豸,×î¶àʧ°ÜÈý´Î
 	
-//         regist_device();
+         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);