機智雲之消息處理的源碼分析

在咱們經過編輯工具打開了咱們的工程之後,咱們須要來看看這些底層代碼都作了什麼樣的操做,直接上源碼
網絡

...
while(1)
	{
		MessageHandle();//今天主要分析這個MessageHandle的操做
		KEY_Handle();		
		IR_Handle();
		DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);
		ReportDevStatusHandle();
	}
...

咱們打開MessageHandle的函數定義,代碼以下:分佈式

void MessageHandle(void)
{
	Pro_HeadPartTypeDef   Recv_HeadPart;//定義接收到的心跳包的通信格式
	memset(&Recv_HeadPart, 0, sizeof(Recv_HeadPart));//設置接收到的心態包內容
	memset(&UART_HandleStruct.Message_Buf, 0, sizeof(16));//設置Message內容
	if(UART_HandleStruct.Package_Flag)//假如完整的接收到一個包
	{
		
		UART_HandleStruct.Message_Len = UART_HandleStruct.UART_Cmd_len + 4;		
		memcpy(&UART_HandleStruct.Message_Buf, UART_HandleStruct.UART_Buf, UART_HandleStruct.Message_Len );					
		memcpy(&Recv_HeadPart, UART_HandleStruct.Message_Buf, sizeof(Recv_HeadPart));
		memset(&UART_HandleStruct.UART_Buf, 0, sizeof(UART_HandleStruct.Message_Buf));		
		UART_HandleStruct.Package_Flag = 0;
		UART_HandleStruct.UART_Count = 0;
		//進行數據包校驗
		if(CheckSum(UART_HandleStruct.Message_Buf, UART_HandleStruct.Message_Len) != UART_HandleStruct.Message_Buf[UART_HandleStruct.Message_Len - 1]) 
		{
			Pro_W2D_ErrorCmdHandle();//假如出錯,就跳轉至處理錯誤的函數
			return ;		
		}
		switch (Recv_HeadPart.Cmd)//假如正確的接收到了包數據之後,根據命令的類型去完成不一樣的操做
		{
			case Pro_W2D_GetDeviceInfo_Cmd://獲取設備信息命令
				Pro_W2D_GetMcuInfo();
				break;
			case Pro_W2D_P0_Cmd://P0操做命令
				Pro_W2D_P0CmdHandle();		 
				break;
			case Pro_W2D_Heartbeat_Cmd://心跳包命令						
				Pro_W2D_CommonCmdHandle();
				printf("Pro_W2D_Heartbeat ...\r\n");	
				break;						
			case Pro_W2D_ReportWifiStatus_Cmd://報告WIFI狀態命令
				Pro_D2W_ReportDevStatusHandle();
				break;
			case Pro_W2D_ErrorPackage_Cmd://包信息錯誤
				Pro_W2D_ErrorCmdHandle();
				break;
			
			default:
				break;
		}	
	}
		
}

以上的這個函數主要作了一下的事情:函數

一、接收到某個包信息,無論這個包信息是來自哪裏,只要可以被機智雲接收到,而且符合機智雲的通信格式就可以被它就收到。當機智雲接收到這個包信息之後,就要開始拆包分析對應的數據。工具

二、從完整的包中拆解除對應的命令,其中命令包括上述的幾種類型。code

三、根據對應的是命令,完成對應的操做信息。源碼

通過這樣三個步驟之後,咱們就完成了對包信息的分析處理,這樣就爲咱們經過機器想雲平臺通信提供了基礎。it

經過上面的分析 咱們可以瞭解到,機器與雲平臺交換的時候,首先是經過咱們的WIFI模塊來經過數據包的形式去連接網絡平臺,當咱們接收到了來自網絡的相關數據包之後,咱們的機器在進行對應的包信息拆解分析,最後,咱們將對應的控制指令分解出來,經過串口的形式去操做咱們本地的硬件設備,如此一來,咱們就完成控制命令的交換,實現了遙控的功能。class


總結一下:基礎

如何來實現設備遠程遙控控制:硬件

一、有統一的通信格式,來搭載着不一樣設備之間交互的數據

二、在統一的通信數據格式的基礎上,進行包分析,分解出對應的控制指令。

三、本地設備來經過串口將對應的數據操做命令傳達到下位機中,而後執行對應的數據操做操做指令。

經過以上的數據信息,咱們就可以在一個雲平臺的位置進行管理各個地方設備的分佈式管理了。同時這樣,咱們的逼格也就上升到了至關高的一個BIG了。

相關文章
相關標籤/搜索