Huyi 1 ano atrás
pai
commit
1c4ca01408

+ 1 - 1
Drivers/Modules/esp32/Esp32.Regist.c

@@ -221,7 +221,7 @@ static void REGIST_Process()
 						
 						break;
 		case STEP_READY: 				// 判断模块是否启动
-						result = esp32.ready();
+						result = esp32.recv_ready_with_time(5000);
 						if(result == Result_Success)
 						{
 							PCTRL_GotoStep(&pctrl, STEP_CLOSE_AUTOCONNECT, "关闭自动连接AP模式");

+ 1 - 1
Drivers/Modules/esp32/Esp32_UDP_Client5.c

@@ -247,7 +247,7 @@ static void UDPCLIENT_Process(void)
 						PCTRL_GotoStep(&pctrl, STEP_READY, "判断模块是否启动");
 						break;
 		case STEP_READY: 				// 判断模块是否启动
-						result = esp32.ready();
+						result = esp32.recv_ready_with_time(5000);
 						if(result == Result_Success)
 						{
 							PCTRL_GotoStep(&pctrl, STEP_SELECT_AP, "选择AP");

+ 135 - 39
Drivers/Modules/esp32/esp32.c

@@ -42,16 +42,17 @@ enum Result esp32_autoconnect_ap(uint8_t mode);					//20.
 enum Result esp32_autoconnect_ap_sync(uint8_t mode);			//21.是否自动连接AP-同步
 enum Result esp32_close_ap(void);				//22.关闭AP连接
 enum Result esp32_close_ap_sync(void);			//23.关闭AP连接-同步
-//enum Result esp32_recv(uint8_t * data, uint16_t * data_length);										//24.接收数据
-//enum Result esp32_recv_with_time(uint8_t * data, uint16_t * data_length, uint32_t time_out);		//25.接收数据+等待时间
-//enum Result esp32_recv_with_time_sync(uint8_t * data, uint16_t * data_length, uint32_t time_out);	//26.接收数据+等待时间-同步
-enum Result esp32_query_signal(int * RSSI);			//27.查询已连接WiFi的信号强度
-enum Result esp32_query_signal_sync(int * RSSI);	//28.查询已连接WiFi的信号强度-同步
-enum Result esp32_ready(void);						//29.模块是否启动
-enum Result esp32_ready_sync(void);
 
-enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);	//30.处理数据(数据发送+等待发送结果)
-enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);
+enum Result esp32_query_signal(int * RSSI);			//24.查询已连接WiFi的信号强度
+enum Result esp32_query_signal_sync(int * RSSI);	//25.查询已连接WiFi的信号强度-同步
+enum Result esp32_ready(void);						//26.模块是否启动-初始化处理专用
+enum Result esp32_ready_sync(void);					//27.模块是否启动-同步
+
+enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);	//28.处理数据(数据发送+等待发送结果)
+enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);	//29.处理数据(数据发送+等待发送结果)-同步
+
+enum Result esp32_recv_ready(void);							//30.判断模块是否正常启动
+enum Result esp32_recv_ready_with_time(uint32_t time_out);	//31.判断模块是否正常启动+等待时间
 
 /*************************************************** AT指令相关函数 ***************************************************/
 
@@ -145,13 +146,46 @@ static enum Result success(void)
 	return Result_Success;		//结果
 }
 
+// 返回成功结果
+static enum Result success_no_log(void)
+{
+	// 成功
+	setStatus(Status_Success);
+	// 结果
+	return Result_Success;
+}
+
+//// 返回失败结果
+//static enum Result failed(void)
+//{
+//	setStatus(Status_Failed);	//失败
+//	return Result_Failed;		//结果
+//}
+
 // 返回失败结果
-static enum Result failed(void)
+static enum Result failed(int type)
 {
-	setStatus(Status_Failed);	//失败
-	return Result_Failed;		//结果
+	// 失败
+	setStatus(Status_Failed);
+	if(type == 1)
+	{
+		Log_Printf_Debug("activeID: %d, error: 接收结果过期,请重置状态\r\n", esp32.activeID); // 打印日志
+	}
+	else if(type == 2)
+	{
+		// 发送日志
+		Log_Printf_Debug("activeID: %d, AT接收失败: %d\r\n", esp32.activeID, AT_result_length());
+		Log_SendArray_Debug(AT_result(), AT_result_length());
+	}
+	else
+	{
+		Log_Printf_Debug("activeID: %d, error: 未知错误类型\r\n", esp32.activeID); // 打印日志
+	}
+	// 失败结果
+	return Result_Failed;
 }
 
+
 // 发送指令并改变状态
 enum Result send_at(char * cmd, uint8_t activeID)
 {
@@ -234,7 +268,7 @@ enum Result esp32_set_lightsleep_wakeup(uint8_t source, uint8_t gpio, uint8_t mo
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -254,7 +288,7 @@ enum Result esp32_set_lightsleep_wakeup(uint8_t source, uint8_t gpio, uint8_t mo
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -303,7 +337,7 @@ enum Result esp32_set_sleep(uint8_t mode)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -323,7 +357,7 @@ enum Result esp32_set_sleep(uint8_t mode)
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -366,7 +400,7 @@ enum Result esp32_connect_ap(char * id, char * password)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -386,7 +420,7 @@ enum Result esp32_connect_ap(char * id, char * password)
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -433,7 +467,7 @@ enum Result esp32_set_cipmode(uint8_t mode)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -453,7 +487,7 @@ enum Result esp32_set_cipmode(uint8_t mode)
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 	
@@ -497,7 +531,7 @@ enum Result esp32_connect_network(char * service_type, char * IP_address, uint16
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -517,7 +551,7 @@ enum Result esp32_connect_network(char * service_type, char * IP_address, uint16
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -560,7 +594,7 @@ enum Result esp32_query_id_signal(char * ID, int * RSSI)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -592,7 +626,7 @@ enum Result esp32_query_id_signal(char * ID, int * RSSI)
 			// 发送日志
 			Log_Printf_Debug("返回: %d\r\n", AT_result_length());
 			Log_SendArray_Debug(AT_result(), AT_result_length());
-			result = failed(); // 失败
+			result = failed(2); // 失败
 		}
 			
 	}
@@ -635,7 +669,7 @@ enum Result esp32_close_network(void)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -706,7 +740,7 @@ enum Result esp32_autoconnect_ap(uint8_t mode)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -726,7 +760,7 @@ enum Result esp32_autoconnect_ap(uint8_t mode)
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -767,7 +801,7 @@ enum Result esp32_close_ap(void)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -787,7 +821,7 @@ enum Result esp32_close_ap(void)
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
@@ -813,7 +847,7 @@ enum Result esp32_close_ap_sync(void)
 
 
 /******************************************************************************
-* 26.查询WiFi信号强度
+* 24.查询WiFi信号强度
 * param1: RSSI信号强度值
 *
 *******************************************************************************/
@@ -832,7 +866,7 @@ enum Result esp32_query_signal(int * RSSI)
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -865,7 +899,7 @@ enum Result esp32_query_signal(int * RSSI)
 				// 发送日志
 				Log_Printf_Debug("返回: %d\r\n", AT_result_length());
 				Log_SendArray_Debug(AT_result(), AT_result_length());
-				result = failed(); // 失败
+				result = failed(2); // 失败
 			}
 		
 	}
@@ -874,12 +908,12 @@ enum Result esp32_query_signal(int * RSSI)
 		// 发送日志
 		Log_Printf_Debug("返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
 
-//26.查询WiFi信号强度-同步
+//25.查询WiFi信号强度-同步
 enum Result esp32_query_signal_sync(int * RSSI)
 {
 
@@ -898,7 +932,7 @@ enum Result esp32_query_signal_sync(int * RSSI)
 }
 
 /******************************************************************************
-* 29.模块是否重启
+* 26.模块是否重启
 *
 *******************************************************************************/
 enum Result esp32_ready(void)
@@ -923,6 +957,7 @@ enum Result esp32_ready(void)
 	return result;
 }
 
+// 27.模块是否重启
 enum Result esp32_ready_sync(void)
 {
 
@@ -941,7 +976,7 @@ enum Result esp32_ready_sync(void)
 }
 
 /******************************************************************************
-* 30.数据处理
+* 28.数据处理
 *
 *******************************************************************************/
 enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length)
@@ -959,7 +994,7 @@ enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_
 	else if(getStatus() != Status_Sending) 		  		// 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
 	{
 		Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
-		result = failed();		// 失败
+		result = failed(1);		// 失败
 	}
 	else if(getTimerMs() > time) 						// 正在发送状态。判断超时
 	{
@@ -1029,11 +1064,11 @@ enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_
 		// 发送日志
 		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
 		Log_SendArray_Debug(AT_result(), AT_result_length());
-		result = failed(); // 失败
+		result = failed(2); // 失败
 	}
 	return result;
 }
-
+//29.数据处理-同步
 enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length)
 {
 
@@ -1051,6 +1086,65 @@ enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, ui
 	return result;
 }
 
+/******************************************************************************
+* 30.判断模块是否正常启动
+*
+*******************************************************************************/
+enum Result esp32_recv_ready(void)
+{
+	// 设置AT为使用中,防止被其他程序占用
+	AT_Set_Status(AT_Status_Using);
+	enum Result result = Result_None;
+	// 校验参数
+	char cmp[20];
+	sprintf(cmp, "ready"); // 拼接AT指令
+	// 判断是否接收到
+	if(strstr((char * )AT_result(), cmp) != NULL)
+	{
+		// 发送日志
+		Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
+		Log_SendArray_Debug(AT_result(), AT_result_length());
+		// 成功
+		result = Result_Success;
+		// 清理一下AT返回结果缓存
+		AT_Clear_Result();
+	}
+	return result;
+}
+//31.判断模块是否正常启动+等待时间
+enum Result esp32_recv_ready_with_time(uint32_t time_out)
+{
+	enum Result result = Result_None;
+	int activeID = 99, time = time_out; // 活动ID, 超时时间
+	// 校验ID
+	if(!verifyActiveID(activeID)){ return Result_Failed; }
+	// 判断状态
+	if(getStatus() == Status_None) // 空闲状态
+	{
+		setStatus(Status_Sending);
+	}
+	else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
+	{
+		result = failed(1); // 失败
+	}
+	else if(getTimerMs() > time) // 正在发送状态。判断超时
+	{
+		result = overtime(); // 超时
+	}
+	else
+	{
+		// 接收数据
+		result = esp32.recv_ready();
+		if(result == Result_Success)
+		{
+			result = success_no_log(); // 成功
+		}
+	}
+	return result;
+}
+
+
+
 ///***************************************** 测试用*****************************************/
 //enum Result esp32_at(void)
 //{
@@ -1146,6 +1240,8 @@ struct ESP32_Struct esp32=
 	.ready_sync = esp32_ready_sync,
 	.handle_data = esp32_handle_data,
 	.handle_data_sync = esp32_handle_data_sync,
+	.recv_ready = esp32_recv_ready,
+	.recv_ready_with_time = esp32_recv_ready_with_time,
 	
 };
 			

+ 9 - 6
Drivers/Modules/esp32/esp32.h

@@ -62,13 +62,16 @@ struct ESP32_Struct
 	enum Result (* close_ap)(void);					//22.关闭AP连接
 	enum Result (* close_ap_sync)(void);			//23.关闭AP连接-同步
 
-	enum Result (* query_signal)(int * RSSI);		//27.查询已连接WiFi的信号强度
-	enum Result (* query_signal_sync)(int * RSSI);	//28.查询已连接WiFi的信号强度-同步
-	enum Result (* ready)(void);					//29.模块是否启动
-	enum Result (* ready_sync)(void);
+	enum Result (* query_signal)(int * RSSI);		//24.查询已连接WiFi的信号强度
+	enum Result (* query_signal_sync)(int * RSSI);	//25.查询已连接WiFi的信号强度-同步
+	enum Result (* ready)(void);					//26.模块是否异常启动
+	enum Result (* ready_sync)(void);				//27.模块是否启动-同步
 	
-	enum Result (* handle_data)(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);	//30.处理数据(数据发送+等待发送结果)
-	enum Result (* handle_data_sync)(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);
+	enum Result (* handle_data)(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length);	//28.处理数据(数据发送+等待发送结果)
+	enum Result (* handle_data_sync)(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length); //29.处理数据(数据发送+等待发送结果)-同步
+	
+	enum Result (* recv_ready)(void);							//30.判断模块是否正常启动
+	enum Result (* recv_ready_with_time)(uint32_t time_out);	//31.判断模块是否正常启动+等待时间
 	
 };