actuator/screen/cmd_process.h

183 lines
6.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* \file hmi_driver.h
* \brief 指令分类处理
* \version 1.0
* \date 2012-2018
* \copyright 广州大彩光电科技有限公司
*/
#ifndef _CMD_PROCESS_H
#define _CMD_PROCESS_H
#include "hmi_driver.h"
#include "main.h"
#define NOTIFY_TOUCH_PRESS 0X01 //触摸屏按下通知
#define NOTIFY_TOUCH_RELEASE 0X03 //触摸屏松开通知
#define NOTIFY_WRITE_FLASH_OK 0X0C //写FLASH成功
#define NOTIFY_WRITE_FLASH_FAILD 0X0D //写FLASH失败
#define NOTIFY_READ_FLASH_OK 0X0B //读FLASH成功
#define NOTIFY_READ_FLASH_FAILD 0X0F //读FLASH失败
#define NOTIFY_MENU 0X14 //菜单事件通知
#define NOTIFY_TIMER 0X43 //定时器超时通知
#define NOTIFY_CONTROL 0XB1 //控件更新通知
#define NOTIFY_READ_RTC 0XF7 //读取RTC时间
#define MSG_GET_CURRENT_SCREEN 0X01 //画面ID变化通知
#define MSG_GET_DATA 0X11 //控件数据通知
#define PTR2U16(PTR) ((((uint8_t *)(PTR))[0]<<8)|((uint8_t *)(PTR))[1]) //从缓冲区取16位数据
#define PTR2U32(PTR) ((((uint8_t *)(PTR))[0]<<24)|(((uint8_t *)(PTR))[1]<<16)|(((uint8_t *)(PTR))[2]<<8)|((uint8_t *)(PTR))[3]) //从缓冲区取32位数据
enum CtrlType
{
kCtrlUnknown=0x0,
kCtrlButton=0x10, //按钮
kCtrlText, //文本
kCtrlProgress, //进度条
kCtrlSlider, //滑动条
kCtrlMeter, //仪表
kCtrlDropList, //下拉列表
kCtrlAnimation, //动画
kCtrlRTC, //时间显示
kCtrlGraph, //曲线图控件
kCtrlTable, //表格控件
kCtrlMenu, //菜单控件
kCtrlSelector, //选择控件
kCtrlQRCode, //二维码
};
#pragma pack(push)
#pragma pack(1) //按字节对齐
typedef struct
{
uint8_t cmd_head; //帧头
uint8_t cmd_type; //命令类型(UPDATE_CONTROL)
uint8_t ctrl_msg; //CtrlMsgType-指示消息的类型
uint16_t screen_id; //产生消息的画面ID
uint16_t control_id; //产生消息的控件ID
uint8_t control_type; //控件类型
uint8_t param[256]; //可变长度参数最多256个字节
uint8_t cmd_tail[4]; //帧尾
}CTRL_MSG,*PCTRL_MSG;
#pragma pack(pop)
/*!
* \brief 消息处理流程
* \param msg 待处理消息
* \param size 消息长度
*/
void ProcessMessage( PCTRL_MSG msg, uint16_t size );
/*!
* \brief 画面切换通知
* \details 当前画面改变时(或调用GetScreen),执行此函数
* \param screen_id 当前画面ID
*/
void NotifyScreen(uint16_t screen_id);
/*!
* \brief 触摸坐标事件响应
* \param press 1按下触摸屏3松开触摸屏
* \param x x坐标
* \param y y坐标
*/
void NotifyTouchXY(uint8_t press,uint16_t x,uint16_t y);
/*!
* \brief 按钮控件通知
* \details 当按钮状态改变(或调用GetControlValue)时,执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param state 按钮状态0弹起1按下
*/
void NotifyButton(uint16_t screen_id, uint16_t control_id, uint8_t state);
/*!
* \brief 文本控件通知
* \details 当文本通过键盘更新(或调用GetControlValue)时,执行此函数
* \details 文本控件的内容以字符串形式下发到MCU如果文本控件内容是浮点值
* \details 则需要在此函数中将下发字符串重新转回浮点值。
* \param screen_id 画面ID
* \param control_id 控件ID
* \param str 文本控件内容
*/
void NotifyText(uint16_t screen_id, uint16_t control_id, uint8_t *str);
/*!
* \brief 进度条控件通知
* \details 调用GetControlValue时执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param value 值
*/
void NotifyProgress(uint16_t screen_id, uint16_t control_id, uint32_t value);
/*!
* \brief 滑动条控件通知
* \details 当滑动条改变(或调用GetControlValue)时,执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param value 值
*/
void NotifySlider(uint16_t screen_id, uint16_t control_id, uint32_t value);
/*!
* \brief 仪表控件通知
* \details 调用GetControlValue时执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param value 值
*/
void NotifyMeter(uint16_t screen_id, uint16_t control_id, uint32_t value);
/*!
* \brief 菜单控件通知
* \details 当菜单项按下或松开时,执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param item 菜单项索引
* \param state 按钮状态0松开1按下
*/
void NotifyMenu(uint16_t screen_id, uint16_t control_id, uint8_t item, uint8_t state);
/*!
* \brief 选择控件通知
* \details 当选择控件变化时,执行此函数
* \param screen_id 画面ID
* \param control_id 控件ID
* \param item 当前选项
*/
void NotifySelector(uint16_t screen_id, uint16_t control_id, uint8_t item);
/*!
* \brief 定时器超时通知处理
* \param screen_id 画面ID
* \param control_id 控件ID
*/
void NotifyTimer(uint16_t screen_id, uint16_t control_id);
/*!
* \brief 读取用户FLASH状态返回
* \param status 0失败1成功
* \param _data 返回数据
* \param length 数据长度
*/
void NotifyReadFlash(uint8_t status,uint8_t *_data,uint16_t length);
/*!
* \brief 写用户FLASH状态返回
* \param status 0失败1成功
*/
void NotifyWriteFlash(uint8_t status);
/*!
* \brief 读取RTC时间注意返回的是BCD码
* \param year 年BCD
* \param month 月BCD
* \param week 星期BCD
* \param day 日BCD
* \param hour 时BCD
* \param minute 分BCD
* \param second 秒BCD
*/
void NotifyReadRTC(uint8_t year,uint8_t month,uint8_t week,uint8_t day,uint8_t hour,uint8_t minute,uint8_t second);
#endif