Explorar o código

优化b260y模块

YunZhiNeng hai 1 ano
pai
achega
9bfeeadae6

+ 6 - 24
Drivers/Business/PumpBusiness.c

@@ -14,21 +14,21 @@
 #include "Log_Module.h"
 #include "At_Module.h"
 #include "Pump_Dicts_Util.h"
-
+#include "Regist.h"
 
 // 计时相关的变量
 static struct TIMER_Struct timer;
 
 
-uint8_t resend_counter = 0;//nb失败重发标志
-uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
+
+uint8_t send_data_switch = 0; // 发送数据的开关,0表示发送数据
 uint8_t networkTest_Flag=0;//开机判断是否有信号,0是未知默认状态,1是失败状态,2是成功状态。
-struct Pump_Params pump_params; // 泵参数
 uint8_t test_switch=0; //0代表正常流程,1代表测试流程
+struct Pump_Params pump_params; // 泵参数
+
 static uint16_t Data_Number = 0; // 数据编号
 static uint16_t Data_success_Number = 0; // 成功包
 static uint16_t Data_fail_Number = 0; // 失败包
-extern Coefficient_Data flashdata;
 
 int RSRP1=0;
 int RSRQ2=0; 
@@ -145,7 +145,6 @@ void PumpBusines_Handle(void)
 		
 		send_data_switch = 0; // 关闭发送
 		Data_success_Number++;
-		resend_counter =0;
 		if(test_switch==1){
 			Query_Signal(&RSRP1,&RSRQ2,&RSSI3,&SINR4);
 			Log_Printf("\r\nRSRP1:%d,RSRQ2:%d,RSSI3:%d,SINR4:%d\r\n", RSRP1,RSRQ2,RSSI3,SINR4);
@@ -155,23 +154,7 @@ 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
 		send_data_switch = 0; // 关闭发送
-//		#endif
 		Data_fail_Number++;
 
 	}
@@ -188,7 +171,6 @@ void PumpBusines_Handle(void)
 // 循环执行
 void pump_business_loop_execution()
 {
-	
 	Power_Handle();
 	#if  EC800M
 //	if(module_switch==1) return;
@@ -202,7 +184,7 @@ void pump_business_loop_execution()
 	{
 	 //信号显示关
 	}
-	
+	if(regist_get_result()==Regist_Result_Failure)return;
 //	if(flashdata.read_flag==0)return;//注册失败或flash存储失败
 	//if(network_switch==1)return;//关闭网络状态
 	// 业务处理

+ 53 - 39
Drivers/Modules/bc260y/BC260Y_UDP_Client5.c

@@ -25,9 +25,9 @@
 
 #include "UDP_Client.h"
 #include "CoAP_Util.h"
-
+#include "Timer_Module.h"
 #include "mbedtls_util.h"
-
+#include "Regist.h"
 #include "cJSON.h"
 #include "bc260y.h"
 #include "Pump_Dicts_Util.h"
@@ -35,7 +35,7 @@
 #include "PumpBusiness.h"
 #include "aliyuniot.h"
 #include "Log_Module.h"
-
+#include "Initialize.h"
 
 // 流程
 enum Step{
@@ -78,14 +78,12 @@ enum Step{
 static enum Step step = STEP_NONE;
 // 下一步
 static enum Step next_step = STEP_NONE;
-
+static uint8_t resend_counter = 0;//nb失败重发标志
 // 客户端5
-struct COMM_Client_Struct UDP_Client5 = {
+struct COMM_Client_Struct udp_client = {
 	.status = Client_Status_None,
 };
 
-// 注册后的参数
-extern Coefficient_Data flashdata;
 
 // socket ID
 static uint8_t connectID = 1;
@@ -104,11 +102,10 @@ static uint16_t data_length;
 
 static uint8_t test_flag=0;
 
-extern struct AT_Struct AT;
+
 // 计时相关的变量
-uint8_t Client5_time_flag = 0;
-uint32_t Client5_timer_ms = 0;
-uint32_t Client5_wait_time = 10;
+static struct TIMER_Struct timer;
+uint32_t wait_time = 10;
 // 信号值
 static struct Signal
 {
@@ -132,54 +129,61 @@ void Query_Signal(int * RSRP, int * RSRQ, int * RSSI, int * SINR)
 }
 
 // 初始化
-void UDP_Client5_Init(void)
+void UDP_Client_Init(void)
 {
-
-	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());
+//	aliyuniot_set_device_params(flashdata.productKey,flashdata.deviceName,flashdata.deviceSecret);
 	// 设置host
- 
+  resend_counter=0;//失败重发置0
 }
 // 声明函数。步骤跳转
 void goto_step(enum Step ns);
 // 发送流程
-void UDP_Client5_Handle(void);
+void UDP_Client_Handle(void);
 // 发送数据
-void UDP_Client5_Send(uint8_t test_switch)
+void UDP_Client_Send(uint8_t test_switch)
 {
 	test_flag=test_switch;
 	if(step == STEP_NONE)
 	{
 		// 初始化
-		UDP_Client5_Init();
+		UDP_Client_Init();
 		// 正在发送
-		UDP_Client5.status = Client_Status_Sending;
+		udp_client.status = Client_Status_Sending;
 		// 流程开始
 		goto_step(STEP_START);
 	}
 }
 // 获取状态
-enum Client_Status UDP_Client5_Status(void)
+enum Client_Status UDP_Client_Status(void)
 {
-	if(UDP_Client5.status == Client_Status_None)
+	if(udp_client.status == Client_Status_None)
 	{
-		return UDP_Client5.status;
+		return udp_client.status;
 	}
 	else if(step == STEP_FINISH)
 	{
-		return UDP_Client5.status;
+		return udp_client.status;
 	}
 	else
 	{
 		return Client_Status_Sending;
 	}
 }
+
+// 获取备注
+char * UDP_Client_Get_Info(void)
+{
+	return udp_client.info;
+}
+
 // 清除
-void UDP_Client5_Clear(void)
+void UDP_Client_Clear(void)
 {
 	// 流程置空
 	goto_step(STEP_NONE);
 	// 空闲
-	UDP_Client5.status = Client_Status_None;
+	udp_client.status = Client_Status_None;
 }
 
 // 直接跳转到下一步
@@ -194,7 +198,7 @@ static void goto_step(enum Step ns)
 static void goto_step_wait(enum Step ns, uint32_t t)
 {
 	goto_step(STEP_WAIT); // 等待
-	Client5_wait_time = t;
+	wait_time = t;
 	next_step = ns; // 等待之后跳转
 }
 
@@ -208,32 +212,27 @@ static void goto_wait(uint32_t t)
 static void goto_failure(char * info)
 {
 	Log_Printf_Debug("STEP: 数据发送失败,%s\r\n", info);
-	UDP_Client5.status = Client_Status_Failure;
-	strcpy(UDP_Client5.info, info);
+	udp_client.status = Client_Status_Failure;
+	strcpy(udp_client.info, info);
 	goto_step(STEP_FAILURE);
 }
 
 // 成功
 static void goto_success(char * info)
 {
-	Log_Printf_Debug("STEP: 数据发送成功,%s\r\n", info);
-	UDP_Client5.status = Client_Status_Success;
-	strcpy(UDP_Client5.info, info);
+    Log_Printf_Debug("STEP: 数据发送成功,%s\r\n", info);
+	udp_client.status = Client_Status_Success;
+	strcpy(udp_client.info, info);
 	goto_step(STEP_SUCCESS);
 }
 
 // 等待
 static void wait(void)
 {
-	if(Client5_time_flag == 0)
-	{
-		Client5_timer_ms = 0;
-		Client5_time_flag = 1;
-	}
-	else if(Client5_timer_ms > Client5_wait_time)
+	if(time_get_delay(&timer) > wait_time)
 	{
 		goto_step(next_step); // 进入下一步
-		Client5_time_flag = 0;
+		time_clear(&timer);
 	}
 }
 
@@ -247,8 +246,15 @@ 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;
-void UDP_Client5_Handle(void)
+void UDP_Client_Handle(void)
 {
+	static enum Initialize_Result InitializeResult;
+	InitializeResult=get_initialize_status();
+	if(InitializeResult==Initialize_Result_Busy)
+	{
+		return ;
+	
+	}
 	// 流程
 	switch(step)
 	{
@@ -463,7 +469,15 @@ void UDP_Client5_Handle(void)
 			goto_step(STEP_SET_SLEEP);
 			break;
 		case STEP_FAILURE: // 失败
+			if(resend_counter>=2){
 			goto_step(STEP_SET_SLEEP);
+			}
+			else
+			{
+				//重发2次
+			resend_counter++;
+			goto_step(STEP_SET_CFUN_1);	
+			}
 			break;
 		case STEP_SET_SLEEP: // 设置休眠模式
 			result = bc260y.set_sleep(1);

+ 35 - 21
Drivers/Modules/bc260y/Bc260y_Initialize.c

@@ -7,10 +7,11 @@
 #include <string.h>
 #include <stdlib.h>
 
-#include "Initialize.h"
+
 #include "bc260y.h"
 #include "PumpBusiness.h"
 #include "Log_Module.h"
+#include "Initialize.h"
 
 
 // 流程
@@ -33,15 +34,16 @@ static enum PowerStep powerstep = STEP_START;
 // 下一步
 static enum PowerStep next_step = STEP_START;
 
-extern struct AT_Struct AT;
-extern uint8_t send_data_switch;
+static enum Initialize_Result InitializeResult;
+
+static struct TIMER_Struct timer;
+
 
 // 计时相关的变量
-uint8_t Power_time_flag = 0;
-uint32_t Power_timer_ms = 0;
-uint32_t Power_wait_time = 10;
+static uint32_t Power_wait_time = 10;
+
+static uint8_t set_mincfun_flag=0;//0代表正在初始化,1代表空闲
 
-uint8_t set_mincfun_flag=1;
 static uint8_t cgreg_n; 
 static uint8_t cgreg_stat; 
 static uint16_t cgreg_lac; 
@@ -50,20 +52,15 @@ static uint8_t query_cgreg_times = 0; // 
 //// 声明函数。步骤跳转
 void pownext_step(enum PowerStep ns);
 // 发送流程
-void Power_Handle_Handle(void);
+void Power_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;
+	 pownext_step(next_step); // 进入下一步
+	 time_clear(&timer);
 	}
 }
 // 失败
@@ -104,6 +101,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 =bc260y.ready();
@@ -121,11 +132,14 @@ void Power_Handle(void)
 	switch(powerstep)
 	{
 		case STEP_START: // 开始
-			pownext_step(STEP_SET_SLEEP);
+			pownext_step(STEP_EXIT_SLEEP);
 		
 		   query_cgreg_times = 0; // 查询网络状态的次数
 			break;
-
+        case STEP_EXIT_SLEEP: // 退出休眠
+			bc260y.exit_sleep();
+			pownext_wait_step(STEP_SET_SLEEP, 10);
+			break;
 		case STEP_SET_SLEEP: // 设置休眠模式
 			result = bc260y.set_sleep(1);
 //            power_times++;
@@ -205,14 +219,14 @@ void Power_Handle(void)
 			break;
 		case STEP_SUCCESS: // 成功
 //			bc260y.enter_sleep();
-			pownext_wait_step(STEP_START, 5);
+			pownext_wait_step(STEP_START, 50);
 
 		    set_mincfun_flag=1;
-
+             Log_Printf_Debug("初始化成功\r\n");
 			break;
 		case STEP_FAILURE: // 失败
 //			bc260y.enter_sleep();
-			pownext_wait_step(STEP_START, 5);
+			pownext_wait_step(STEP_START, 500);
 			break;
 		default:
 			break;

+ 41 - 6
Drivers/Modules/bc260y/Bc260y_Regist.c

@@ -34,21 +34,50 @@
 static uint8_t mcu_id[8]="8945809";
 static uint16_t Version_data = 1032;
 static uint8_t regist_result =0;
-static uint8_t register_status;
+static uint8_t register_status;//注册成功,向flash存储标志
 static Coefficient_Data flashdata;
 //uint8_t registlen=0;
 
-extern struct AT_Struct AT;
+
 unsigned char key[17]="tuorenzhinenghua";
 
 
-//static uint8_t tcpcontextID = 1;
+
 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);
+
+}
 /**
 * 
 *注册信息打包
@@ -65,7 +94,6 @@ enum Result packRegistDataAnd(uint8_t *length){
 	memcpy(dataPtr+strlen(dataPtr),"&",1);
 	//获取qccid
 	AT_Clear();
-	//get_qccid_flag=get_qccid(qcciddata);
 	
 	 result=bc260y.query_qccid_sync(qcciddata);
 	
@@ -237,20 +265,27 @@ 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;
@@ -263,7 +298,7 @@ uint8_t regist_device_sync(void)
 }
 enum Regist_Result regist_get_result(void)
 {
-  if(register_status){
+  if(register_status==1){
     return Regist_Result_Success;
   }
   else

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

@@ -219,7 +219,6 @@ enum Result bc260y_query_qccid_sync(char * iccid);
 enum Result bc260y_dataformat(uint8_t n);
 enum Result bc260y_dataformat_sync(uint8_t n);
 // 
-extern struct AT_Struct AT;
 
 // AT指令
 static char AT_CMD[256];
@@ -269,11 +268,11 @@ struct BC260Y_Struct bc260y =
 
 
 // 发送AT指令
-//static void send_data(uint8_t * data, uint16_t length)
-//{
-//	// 发送AT指令
-//	AT_Send_Bytes(data, length);
-//}
+static void send_data(uint8_t * data, uint16_t length)
+{
+	// 发送AT指令
+	AT_Send_Bytes(data, length);
+}
 
 // 发送AT指令
 static uint8_t send_at_string(char * cmd)
@@ -289,7 +288,6 @@ static uint8_t send_at_string(char * cmd)
 }
 
 
-
 // 获取状态
 static enum STATUS getStatus(void)
 {

+ 2 - 1
Drivers/Modules/bc260y/bc260y.h

@@ -4,8 +4,8 @@
 #ifndef __BC260Y_H
 #define __BC260Y_H
 #include <stdint.h>
+#include "Timer_Module.h"
 
-extern struct BC260Y_Struct bc260y;
 
 enum Result
 {
@@ -22,6 +22,7 @@ enum STATUS
 	Status_Overtime, // ³¬Ê±
 };
 
+extern struct BC260Y_Struct bc260y;
 
 // ec800mµÄAT·¢ËÍ״̬»ú
 struct BC260Y_Struct

+ 7 - 7
Drivers/Modules/ec800m/Ec800m_Initialize.c

@@ -34,12 +34,12 @@ static enum PowerStep powerstep = STEP_START;
 // 下一步
 static enum PowerStep next_step = STEP_START;
 
+static enum Initialize_Result InitializeResult;
 
-extern uint8_t send_data_switch;
 
 static struct TIMER_Struct timer;
 
-static enum Initialize_Result InitializeResult;
+
 // 计时相关的变量
 
 static uint8_t Restart_flag = 0;//5分钟内重启次数计数
@@ -60,15 +60,15 @@ static uint8_t query_cgreg_times = 0; // 
 //// 声明函数。步骤跳转
 void pownext_step(enum PowerStep ns);
 // 发送流程
-void Power_Handle_Handle(void);
+void Power_Handle(void);
 
 // 等待
 static void powerwait(void)
 {
-if(time_get_delay(&timer) > Power_wait_time)
+   if(time_get_delay(&timer) > Power_wait_time)
 	{
-		pownext_step(next_step); // 进入下一步
-		time_clear(&timer);
+	 pownext_step(next_step); // 进入下一步
+	 time_clear(&timer);
 	}
 }
 // 失败
@@ -159,7 +159,7 @@ void Power_Handle(void)
 			break;
 		case STEP_EXIT_SLEEP: // 退出休眠
 			ec800m.exit_sleep();
-			pownext_wait_step(STEP_SET_SLEEP, 5);
+			pownext_wait_step(STEP_SET_SLEEP, 10);
 			break;
 		
 		case STEP_SET_SLEEP: // 设置休眠模式

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

@@ -33,7 +33,7 @@
 static uint8_t mcu_id[8]="8945809";
 static uint16_t Version_data = 1032;
 static uint8_t regist_result =0;
-static uint8_t register_status;
+static uint8_t register_status;//注册成功,向flash存储标志
 
 
 
@@ -251,14 +251,18 @@ 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
  {
@@ -267,6 +271,7 @@ uint8_t regist_device_sync(void)
 	 clearflash();
   return 0;
  }
+  //注册成功向flash储存
  if(register_status==1){
 	 storedata();//存储到flash
      return 1;