/*
*********************************************************************************************************
*                                       IAR Development Kits
*                                              on the
*
*                                    Nano100
*
* Filename      : dwin_form.h
* Version       : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/

#ifndef  USER_DIWN_FORM_PRESENT
#define  USER_DIWN_FORM_PRESENT

#include "type.h"

// 初始化
void Form_Open();

// 显示任务主体
void Form_Task(void *p_arg);
// 按键任务主体
void Key_Task(void *p_arg);

// 允许匿名结构
#pragma anon_unions
#pragma pack(push, 1)

// 显示刷屏队列
typedef struct	// size = 64
{
	uint8_t		oper;			// 操作：0x82写，0x83读
	uint16_t	Addr;			// 首地址
	uint16_t	count;			// 长度（以word为单位）
	union						// 内容
	{
		char		str[100];
		uint8_t		byte[100];
		uint16_t	word[50];
		uint32_t	dword[25];
	};
} form_data_t;

typedef struct
{
	int16_t		rowCount;			// 记录条数
	uint16_t	hdrAddr;			// 表头显示地址
	uint16_t	rowPtr[10];			// 各行显示地址
	uint16_t	rowDesc[10];		// 各行描述地址
	char		rowStr[10][100];	// 各行显示内容
	uint8_t		bufIdx;				// 双缓冲序号
	int32_t		topPtr;				// 分页查询起始位置
} form_grid_t;

typedef struct
{
	int16_t		rowCount;			// 记录条数
	uint16_t	hdrAddr;			// 表头显示地址
	uint16_t	rowPtr[30];			// 各行显示地址
	uint16_t	rowDesc[30];		// 各行描述地址
	char		rowStr[30][30];	// 各行显示内容
	uint8_t		bufIdx;				// 双缓冲序号
	int32_t		topPtr;				// 分页查询起始位置
} form_grid2_t;

typedef struct
{
	uint8_t func;	// 查询功能（1-储罐，2-数据，3-曲线）
	
	// 以下为输入的条件标志
	unsigned tgguFlag : 1;
	unsigned psnFlag : 1;
	unsigned dateFlag: 1;
	unsigned : 5;
	
	// 以下为输入的条件值
	char TGGU[12];	// 罐箱号
	uint8_t PSN[6];
	int16_t normal;	// 是否选择正常状态
	int16_t fault;	// 是否选择故障状态
	int16_t warn;	// 是否选择报警状态
	int16_t offline;// 是否选择离线状态
	int32_t date;	// 起始日期
	int16_t days;	// 查询天数
} form_query_t;

#pragma pack(pop)

// 首页表格，报警页表格，查询表格
extern form_grid_t gridAll, gridWarn, gridQuery, girdAbout;

// 记录查询功能(储罐、数据或曲线)和查询条件
extern form_query_t formQuery;

// 清除表格内容
void Form_ClearGrid(form_grid_t *grid);
// 刷新表格
void Form_RefreshGrid(form_grid_t *grid);
// 滚动表格
void Form_ScrollGrid(form_grid_t *grid);

#endif
