Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

472 rader
8.7 KiB

#include "mes.h"
static uint8_t comm_package_sequence = 0;
DEVICE_WORK_STATUS_T device_working_status_buff;
/*********************************************/
//打印标志位 20S 观察
void debug_flag(void)
{
}
//打印温湿度等数据 20S
void debug_status(void)
{
}
/****************MCU****************/
//封装MUC数据包
int send_mcu_package(char * data , char length)
{
	
	
	
}
//拆解MCU数据包
int recev_mcu_package()
{
	
	
	
}
// 面板变量变化 及时发送通知mcu(与mcu同步)
//用串口1发送数据包给mcu 
int send_mes_mcu(char* mes_buf , char mes_length)
{
	char mes_number = 0;
	
	for(mes_number=0; mes_number < mes_length ;	mes_length++)
	{
			SendData_SCI1(mes_buf[mes_number]);
	}
	
	return 0;
}
/****************模组****************/
//封装模组数据包		返回长度 用于发送传参
//*buf : 缓存地址  length : 数据的长度 (字节)
int send_wifi_package(uint8_t * buf  ,uint8_t type, uint8_t cmd, uint8_t subCmd , char length , uint8_t *data) 
{
	
	WIFI_PACKAGE * wifi_package;
	uint8_t total_msg_len = sizeof(WIFI_PACKAGE)+length+1;
	memset(wifi_package,0,total_msg_len);
	wifi_package = (WIFI_PACKAGE *)buf;
	wifi_package->package_head[0]=SEND_WIFI_PACKAGE_HEAD_FIRST;
	wifi_package->package_head[1]=SEND_WIFI_PACKAGE_HEAD_SECOND;
	wifi_package->package_version=SEND_WIFI_PACKAGE_VERSION;
	wifi_package->package_sequence = comm_package_sequence++;
	wifi_package->package_type = type;
	wifi_package->data_length= length + 2;
	wifi_package->command = cmd;
	wifi_package->sub_command = subCmd;
	
	for(uint8_t data_number=0 ; data_number<length; data_number++)
	{
		//wifi_package[sizeof(WIFI_PACKAGE)+data_number]=*(WIFI_PACKAGE*)data[data_number];
		buf[sizeof(WIFI_PACKAGE)+data_number] = data[data_number];
	}
	
	buf[total_msg_len-1]=comm_message_checksum(buf, total_msg_len);
	
	return total_msg_len;
	
}
//拆解模组数据包
int receive_wifi_analysis(uint8_t * receive_wifi_buf , uint8_t length)
{
	
	uint8_t pkg_seq				= receive_wifi_buf[3];
	uint8_t msg_type			= receive_wifi_buf[4];
	uint8_t data_length 	= receive_wifi_buf[5];
	uint8_t cmd 					= receive_wifi_buf[6];
	uint8_t sub_cmd				= receive_wifi_buf[7];
	uint8_t set_status  	=0;
//判断是否合法
	if( (receive_wifi_buf[0] == RECEIVE_WIFI_PACKAGE_HEAD_FIRST) && (receive_wifi_buf[1] == RECEIVE_WIFI_PACKAGE_HEAD_SECOND) &&(receive_wifi_buf[2]) ==RECEIVE_WIFI_PACKAGE_VERSION)
	{
		
				//打印收到!!
				
	}
	else 
	{
		//接受错误!!
		
		//清空缓存!!
		return -1;
	}
	//判断校验
	if(comm_message_checksum(receive_wifi_buf,length) != receive_wifi_buf[length-1])
	{
			//校验码错误!!
		return -2;
	}
	//	打印	方便观察	hlt_os_printf("type=%d,cmd=%d,sub_cmd=%d.\n", msg_type, cmd, sub_cmd);
	
//*********回应包 0x03*********	
		if(msg_type == PACKAGE_ACK)
		{
			
		}
		
		
		
 
	//*******配置包 0x01*******  
		
		if(msg_type==RECEIVE_WIFI_PACKAGE_CONFIGURATION)
		{
			
							//***心跳包***	 
				if(cmd==WIFI_HEARTBEAT_COMMAND )
				{
						if(sub_cmd==WIFI_HEARTBEAT_SUB_COMMAND)
						{
									//查看数据区{****状态字****};
/*状态字*/							device_working_status_buff.wifi_status = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
/*日期*/										
										
									//ui
							
							
									//上报
							
						}
						else
						{
							//非法数据包
							// 清空缓存	{******}
								return -3;
						}
				}
				
								//***控制包*** 
				
				if(cmd==REVEIVE_WIFI_COMMAND)
				{
					
					
						//开关
						if(sub_cmd==SWITH_SUB_COMMAND)
						{
								device_working_status_buff.power_switch_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET] & SWITCH_MASK_BIT_POWER_ALL;
								//UI 
								
							
								
								//上报MCU
								
								
						}
						
						
						//模式
						else if(sub_cmd==MODE_SUB_COMMAND)
						{
									device_working_status_buff.mode_t  =	receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
								
							
							//UI 
								
							
								
								//上报MCU									
									
						}
						
						//童锁
						else if(sub_cmd==CHILD_LOCK_SUB_COMMAND)
						{
									device_working_status_buff.childlock_switch_t  =	receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];	
								//UI 
								
							
								
								//上报MCU
							
						}
						
						//除菌 uv
						else if(sub_cmd==UV_SUB_COMMAND)
						{
								device_working_status_buff.uv_switch_t	=	receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];	
								//UI 
								
							
								
								//上报MCU							
							
						}
						
						
						//负离子
						else if(sub_cmd==NEGATIVE_ION_SUB_COMMAND)
						{
								device_working_status_buff.anion_switch_t =	receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];	  
								//UI 
								
							
								
								//上报MCU
							
						}	
						
						
						//熄屏
						else if(sub_cmd==SCREEN_OFF_SUB_COMMAND)
						{
								device_working_status_buff.screen_switch_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
								//UI 
								
							
								
								//上报MCU							
							
						}		
						
						
						//按键音
						else if(sub_cmd==KEY_TONE_SUB_COMMAND)
						{
								device_working_status_buff.keytone_switch_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
								//UI 
								
							
								
								//上报MCU							
							
						}
						
						
						//按滤芯状态
						else if(sub_cmd==FILTER_STATUS)
						{
								device_working_status_buff.filter1_alarm_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
										//判断是否  合法 
								if(	(0<=receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET+1]) && (100>=receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET+1]) )
								{
									device_working_status_buff.filter1_life_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET+1];
								}
								else
									{
											//打印!! 清空缓存
											return -3;
									}
								//UI 
								
							
								
								//上报MCU									
									
									
									
								
						}
						
						
						//蜂鸣器
						else if(sub_cmd==BUZZER_SUB_COMMAND)
						{
							//直接发送给mcu 蜂鸣
								//UI 
								
							
								
								//上报MCU							
							
						}
						
						
						
						//档位
						else if(sub_cmd==GEAR_SUB_COMMAND)
						{
								device_working_status_buff.fan_gear_t = receive_wifi_buf[WIFI_CONTROL_DATA_OFFSET];
								//UI 
								
							
								
								//上报MCU
							
						}	
						
						
						else
						{
							//打印失败!! 
							//清空缓存{********}
							return -3;
						}
							
				}
		}
		//*******请求包 0x02 *******
		if(msg_type==RECEIVE_WIFI_PACKAGE_REQUEST)
		{
		
			
		}
		
		//清空缓存  考虑是否打印!!!!
	return 0;
}
// 面板变量变化 及时发送通知模组(与模组同步)
//用串口3发送数据包给模组 
int send_mes_wifi(char* mes_buf , char mes_length)
{
	char mes_number = 0;
	
	for(mes_number=0; mes_number < mes_length ;	mes_length++)
	{
			SendData_SCI3(mes_buf[mes_number]);
	}
	
	return 0;
}
//校验码
uint8_t comm_message_checksum(uint8_t * data, uint16_t len)
{
    int16_t checkSum = 0;
    char *pBuf = (char *)data;
    uint16_t bufLen = len;
    for (int i = 0; i < bufLen; i++){
        checkSum += pBuf[i];
    }
	checkSum = checkSum % (0x100);
	return checkSum;
}
/*******************************************************************************************/
//UI 调整变量
/*
	address 变量地址
	buf  		UI数据包地址
	length	长度
*/
int updata_ui_adj(uint16_t address , uint8_t * buf ,uint8_t length)
{
	
#if 0	
			addr =0x0010; // 童锁
			if (addr <= 0x6FFF) // Variable area
			{
				// Save data 读取变量
						
				for (j = 0; j < len; j++)
				{
					n = var[2 * (addr + j)];
					m = var[2 * (addr + j) + 1];
				}	
				m++;
				m=m%2;	
				len = (Test[0] - 2 - 3) / 2;
				for (j = 0; j < len; j++)
				{					
					var[2 * (addr + j)] =n;//Test[4 + 2 * j];; //Test[4 + 2 * j]; var[2 * (addr + j)];
					var[2 * (addr + j) + 1] = m;//Test[5 + 2 * j];//Test[5 + 2 * j]; var[2 * (addr + j) + 1]++
				}
			}	
#endif
			uint16_t i = 0;
			uint32_t eflash_addr = 0, len = 0;
			//	addr = address; 	//(buf[2] << 8) | buf[3];
				if (CRC_Enable_Flag)
					len = (buf[0] - 2 - 3) / 2;
				else
					len = (buf[0] - 3) / 2;
				if (address <= 0x6FFF) // Variable area
				{
					// Save data
					for (i = 0; i < len; i++)
					{
						var[2 * (address + i)] = buf[4 + 2 * i];
						var[2 * (address + i) + 1] = buf[5 + 2 * i];
					}
				}
					
	/*     写eflash
			if (cmd == 0x61)
			{
				len = (buf[1] << 8) | buf[2];
				eflash_addr = 0x804B000 + ((buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7]);
				EFLASH_Init(g_sys_clk / 1000);
				EFLASH_SetWritePermission();
				temp = EFLASH_Write(eflash_addr,&buf[8],len-7);
				EFLASH_ClrWritePermission();
				
				rebuf[5] = cmd;
				rebuf[6] = buf[4];
				rebuf[7] = buf[5];
				rebuf[8] = buf[6];
				rebuf[9] = buf[7];
				rebuf[10] = 0x4F;
				rebuf[11] = 0x4B;
		
				LT_SendFlashData_CRC_Frame(rebuf, 7);
			}
	*/				
			
					
	return 0 ;
}