|
|
|
|
|
#include "meg.h"
|
|
|
#include "pit.h"
|
|
|
#include "sys.h"
|
|
|
#include "pit32_drv.h"
|
|
|
#include "UI_H.h"
|
|
|
|
|
|
static uint8_t comm_package_sequence = 0;
|
|
|
|
|
|
DEVICE_WORK_STATUS_T device_working_status_buff_now;
|
|
|
DEVICE_WORK_STATUS_T device_working_status_buff_ago;
|
|
|
DEVICE_WORK_STATUS_T device_working_status_buff;
|
|
|
|
|
|
uint8_t uart1_idle_flag = 0;
|
|
|
uint8_t uart3_idle_flag = 0;
|
|
|
|
|
|
unsigned char all_flag = 0;
|
|
|
unsigned short all_flag_time = 0 ; //500
|
|
|
|
|
|
unsigned char status_flag =0;
|
|
|
unsigned short status_flag_time = 0;
|
|
|
|
|
|
uint8_t lt_buf[RECEIVE_MCU_PACKAGE_LENGTH]={0};
|
|
|
uint8_t lt_buf_length = 0 ;
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************/
|
|
|
|
|
|
void PIT2_Init(UINT16 arr)
|
|
|
{
|
|
|
// NVIC_Init(2, 0, PIT2_IRQn, 2);
|
|
|
|
|
|
// PIT2->PCSR &= (~PCSR_EN);
|
|
|
// PIT2->PCSR = (5 << 8) | PCSR_OVW | PCSR_PIE | PCSR_RLD | PCSR_PDBG; // 75mhz/1 Interrupt mode
|
|
|
// PIT2->PMR = arr - 1;
|
|
|
// PIT2->PCSR &= ~PCSR_EN;
|
|
|
NVIC_Init(2, 0, PIT2_IRQn, 2);
|
|
|
|
|
|
PIT2->PCSR &= (~PCSR_EN);
|
|
|
PIT2->PCSR = (5 << 8) | PCSR_OVW | PCSR_PIE | PCSR_RLD | PCSR_PDBG; // 75mhz/32 Interrupt mode
|
|
|
#if OSC_Frequency
|
|
|
PIT2->PMR = arr-1;//23437;
|
|
|
// 10ms
|
|
|
|
|
|
#else
|
|
|
PIT2->PMR = 18749; // 10ms
|
|
|
|
|
|
#endif
|
|
|
|
|
|
PIT2->PCSR |= PCSR_EN;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void PIT2_IRQHandler(void)
|
|
|
{
|
|
|
PIT2->PCSR |= (1 << 2); // clear PIF interrupt flag
|
|
|
|
|
|
all_flag_time ++;
|
|
|
static unsigned char wifi_time =0;
|
|
|
static unsigned short adj_touch_time =0;
|
|
|
if(all_flag_time == DEBUG_FLAG_TIME)
|
|
|
{
|
|
|
all_flag_time = 0;
|
|
|
all_flag = 1;
|
|
|
}
|
|
|
|
|
|
status_flag_time++;
|
|
|
if(all_flag_time == DEBUG_STATUS_TIME)
|
|
|
{
|
|
|
status_flag_time = 0;
|
|
|
status_flag = 1;
|
|
|
}
|
|
|
|
|
|
/**********************************/
|
|
|
|
|
|
// 按键计时
|
|
|
if((Adj_flag1==1) || (Adj_flag==1))
|
|
|
{
|
|
|
adj_touch_time++;
|
|
|
if(adj_touch_time ==300)
|
|
|
{
|
|
|
adj_touch_time = 0;
|
|
|
long_touch_flag = 1;
|
|
|
printf("\r\n***pit-IR***\r\n");
|
|
|
}
|
|
|
}
|
|
|
else if((Adj_flag1==0) || (Adj_flag==0))
|
|
|
{
|
|
|
adj_touch_time = 0;
|
|
|
}
|
|
|
// WIFI 闪烁
|
|
|
if(device_working_status_buff.wifi_status == 1)
|
|
|
{
|
|
|
wifi_time++;
|
|
|
if(wifi_time == 50*2) //慢闪 1S/次 500ms执行一次 10ms进一次中断
|
|
|
{
|
|
|
|
|
|
wifi_time=0;
|
|
|
var[2 * (WIFI_ADDRESS + 0)] =~var[2 * (WIFI_ADDRESS + 0)];
|
|
|
var[2 * (WIFI_ADDRESS + 0) + 1]=~var[2 * (WIFI_ADDRESS + 0)+1];
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
else if(device_working_status_buff.wifi_status == 2)
|
|
|
{
|
|
|
wifi_time++;
|
|
|
if(wifi_time == 25*2) // 慢闪 0.5S/次 250ms执行一次 10ms进一次中断
|
|
|
{
|
|
|
wifi_time=0;
|
|
|
|
|
|
var[2 * (WIFI_ADDRESS + 0)] =~var[2 * (WIFI_ADDRESS + 0)];
|
|
|
var[2 * (WIFI_ADDRESS + 0) + 1]=~var[2 * (WIFI_ADDRESS + 0)+1];
|
|
|
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
if (device_working_status_buff.wifi_status != 0)
|
|
|
{
|
|
|
wifi_time++;
|
|
|
if(device_working_status_buff.wifi_status == 1)
|
|
|
{
|
|
|
if(wifi_time == 50) //慢闪 1S/次 500ms执行一次 10ms进一次中断
|
|
|
{
|
|
|
wifi_time=0;
|
|
|
}
|
|
|
}
|
|
|
else if (device_working_status_buff.wifi_status == 2)
|
|
|
{
|
|
|
if(wifi_time == 25) //慢闪 1S/次 500ms执行一次 10ms进一次中断
|
|
|
{
|
|
|
wifi_time=0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
//打印标志位 10S 观察
|
|
|
void debug_flag(void)
|
|
|
{
|
|
|
printf("\r\n*********************************************\r\n");
|
|
|
printf("button_Press_flag =%d \r\n",button_Press_flag);
|
|
|
printf("button_Press_flag1 =%d \r\n",button_Press_flag1);
|
|
|
printf("button_Press_flag2 =%d \r\n",button_Press_flag2);
|
|
|
printf("Basci_flag =%d \r\n",Basci_flag);
|
|
|
printf("Basci_flag1 =%d \r\n",Basci_flag1);
|
|
|
printf("switch_flag =%d \r\n",switch_flag);
|
|
|
printf("breath_flag =%d \r\n",breath_flag);
|
|
|
printf("Adj_flag =%d \r\n",Adj_flag);
|
|
|
printf("Adj_flag1 =%d \r\n",Adj_flag1);
|
|
|
printf("clound_flag =%d \r\n",wind_flag);
|
|
|
printf("model_flag =%d \r\n",model_flag);
|
|
|
printf("dehumidify_flag =%d \r\n",dehumidify_flag);
|
|
|
printf("one_two =%d \r\n",one_two);
|
|
|
printf("help_flag =%d \r\n",help_flag);
|
|
|
printf("Basic_help_flag =%d \r\n",Basic_help_flag);
|
|
|
printf("Adj_help_flag =%d \r\n",Adj_help_flag);
|
|
|
printf("*********************************************\r\n");
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//打印温湿度等数据 20S
|
|
|
|
|
|
void debug_status(void)
|
|
|
{
|
|
|
printf("debug_hum=%d\r\n",device_working_status_buff_now.humidity_t);
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/****************MCU****************/
|
|
|
//封装MUC数据包+发送 用于LT 发送 数据 至 mcu
|
|
|
|
|
|
uint8_t send_mcu_package(uint8_t * buf ,uint8_t cmd , uint16_t adress ,uint16_t * data , uint8_t data_amount)
|
|
|
{
|
|
|
|
|
|
// 0x5a 0xa5 长度(1+2+n*2+2) 指令码(1) 变量地址(2) 写入数据(n*2) CRC(2)
|
|
|
|
|
|
MCU_PACKAGE * mcu_package;
|
|
|
|
|
|
mcu_package = (MCU_PACKAGE *) buf;
|
|
|
|
|
|
uint8_t mcu_package_part_length = sizeof(MCU_PACKAGE);
|
|
|
|
|
|
memset((void *)mcu_package ,0 ,sizeof(MCU_PACKAGE));
|
|
|
|
|
|
mcu_package->mcu_head_package[0]=SEND_MCU_PACKAGE_FIRST;
|
|
|
mcu_package->mcu_head_package[1]=SEND_MCU_PACKAGE_SECOND;
|
|
|
mcu_package->cmd = cmd;
|
|
|
mcu_package->address = ((adress&0xFF00)>>8)|((adress&0x00FF)<<8);
|
|
|
|
|
|
for(uint8_t i =0 ; i < data_amount; i ++ )
|
|
|
{
|
|
|
// 0x1314
|
|
|
// 0x14 0x13
|
|
|
buf[mcu_package_part_length+i*2+1] = (uint8_t)(data[i]&0x00FF);//(uint8_t)((0xFF00 & data[i])>>8);
|
|
|
buf[mcu_package_part_length+i*2] = (uint8_t)((data[i]&0xFF00)>>8);//(uint8_t)0x00FF & data[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
//***************校验码******************
|
|
|
|
|
|
uint8_t len = mcu_package_part_length + data_amount * 2 - 3;
|
|
|
|
|
|
LT_SendData_CRC_Frame(buf, len);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
//拆解MCU数据包
|
|
|
int recev_mcu_package()
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 面板变量变化 及时发送通知mcu(与mcu同步)
|
|
|
uint8_t inform_mcu()
|
|
|
{
|
|
|
static DEVICE_WORK_STATUS_T device_working_status_pre;
|
|
|
// 对比pre 和 buf 如果不一致 则 更新pre 同时发送数据 同步 mcu; pre:当前的状态 buf:实时的状态
|
|
|
#if 0
|
|
|
if()
|
|
|
{
|
|
|
|
|
|
send_mcu_package;
|
|
|
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
// 收到mcu的数据后 先判断是LT 的数据包 还是 模组的数据包
|
|
|
|
|
|
uint8_t analysis_mcu_package(uint8_t * buf )
|
|
|
{
|
|
|
if(buf[0])
|
|
|
{
|
|
|
|
|
|
|
|
|
}
|
|
|
else if(buf[0])
|
|
|
{
|
|
|
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
//用串口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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
//拆解模组数据包
|
|
|
#if 0
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
//用串口3发送数据包给模组 //用于转发mcu的数据给模组
|
|
|
int send_mes_wifi(uint8_t * mes_buf , char mes_length)
|
|
|
{
|
|
|
char mes_number = 0;
|
|
|
|
|
|
for(mes_number=0; mes_number < mes_length ; mes_number++)
|
|
|
{
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
|
|
|
/*******************************************************************************************/
|
|
|
|
|
|
/* 写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);
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|