机智云之消息处理的源码分析

在咱们经过编辑工具打开了咱们的工程之后,咱们须要来看看这些底层代码都作了什么样的操做,直接上源码
网络

...
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了。

相关文章
相关标签/搜索