@TOC
索引頁面
索引頁面主要功能:
- 創(chuàng)建26個(gè)字母按鈕作為首字母索引進(jìn)入交互口
- 創(chuàng)建頁面后通過按鍵移動聚焦源哩,查找對應(yīng)的字符串添加到虛擬頁面層2顯示出來
/**
* @file GW_ItemIndex.c
*
* @date 2020/5/19
*
* @author aron566
*
* @copyright None
*
* @brief 參數(shù)列表索引展示
*
* @details 文件編碼使用UTF-8 無BOM
*
* @version V1.0
*/
#ifdef __cplusplus ///<use C compiler
extern "C" {
#endif
/** Includes -----------------------------------------------------------------*/
/* Private includes ----------------------------------------------------------*/
#include "GW_ItemIndex.h"
#include "DRV_LcdPar.h"
/** Private typedef ----------------------------------------------------------*/
/** Private macros -----------------------------------------------------------*/
#define ITEMINDEX_ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ITEMINDEX_ID_TITLE_L (GUI_ID_USER + 1)
#define ITEMINDEX_ID_TITLE_M (GUI_ID_USER + 2)
#define ITEMINDEX_ID_TITLE_R (GUI_ID_USER + 3)
/*常用字段9個(gè)*/
#define ITEMINDEX_ID_ORIGIN_VA1_FIELD (GUI_ID_USER + 4)/**< 起始控件ID*/
#define ITEMINDEX_VAL_FIELD_NUM_MAX (9)/**< 最大控件數(shù)量*/
#define ITEMINDEX_ID_VAL_MAX (ITEMINDEX_ID_ORIGIN_VA1_FIELD+ITEMINDEX_VAL_FIELD_NUM_MAX-1)/**< 尾部控件ID*/
/*26個(gè)字母索引控件起始資源ID*/
#define ITEMINDEX_ID_ORIGIN_KEY_FIELD (ITEMINDEX_ID_VAL_NUM_MAX + 1)/**< 起始控件ID*/
#define ITEMINDEX_KEY_FIELD_NUM_MAX (26)/**< 最大控件數(shù)量*/
#define ITEMINDEX_ID_KEY_NUM_MAX (ITEMINDEX_ID_ORIGIN_KEY_FIELD+ITEMINDEX_KEY_FIELD_NUM_MAX-1)/**< 尾部控件ID*/
/*層級信息*/
#define ITEMINDEX_KEY_LAYER (0U)/**< 字段層*/
#define ITEMINDEX_VALUE_LAYER (ITEMINDEX_KEY_LAYER+1U)/**< 結(jié)果層*/
#define ITEMINDEX_PAGE_LAYER_MAX (2U)/**< 頁面最大層級*/
/** Private constants --------------------------------------------------------*/
/** Public variables ---------------------------------------------------------*/
/** Private variables --------------------------------------------------------*/
static WM_HWIN MAINWin = 0;
/*多層級頁面信息*/
static ItemIndexPage_Typedef ItemIndexPage[ITEMINDEX_PAGE_LAYER_MAX];
/** Private function prototypes ----------------------------------------------*/
static void ItemIndexPage_Init(void);
static WM_HWIN CreateitemsChSearchWindow(void);
static void Mainwidow_Init(WM_MESSAGE *pMsg); /**< 初始化主窗口*/
static void CreateTittle(WM_MESSAGE *pMsg); /**< 建立標(biāo)題控件*/
static void CreateTimer(WM_MESSAGE *pMsg); /**< 建立時(shí)間控件*/
static void CreateButton(WM_MESSAGE *pMsg); /**< 建立按鈕控件*/
static void cbDialog(WM_MESSAGE *pMsg); /**< 初始化索引頁面*/
static void WidgetFocusUpdate(void); /**< 更新控件聚焦*/
static uint32_t Get_FocusWidgetOffset(void); /**< 獲取已聚焦控件偏移*/
static char Get_Search_Char(void); /**< 獲取需索引的字段*/
static const char *Get_IndexStr(uint32_t index);
static const char *Get_WidgetStr(char ch ,uint32_t index);
static uint32_t Get_CurrentPage_Button_Num(void);
static void ItemIndexPage_ResLayerUpdate(void);
static uint32_t Calc_CurrentPage_WidgetNum(void);
static uint32_t Calc_CurrentWidgetOffsetInLayer(void);
static void ItemIndexPage_Forward(void); /**< 頁面右翻頁*/
static void ItemIndexPage_Back(void); /**< 頁面左翻頁*/
static void ItemIndexPage_Reload(void); /**< 主窗口重繪*/
static void ItemIndexPage_Down(void); /**< 下移*/
static void ItemIndexPage_Up(void); /**< 上移*/
/** Private user code --------------------------------------------------------*/
/** Private application code -------------------------------------------------*/
/*******************************************************************************
*
* Static code
*
********************************************************************************
*/
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "WINDOW", ITEMINDEX_ID_WINDOW_0, 0, 0, UI_MAINWINDOW_WIDTH, UI_MAINWINDOW_HEIGHT, 0, 0x0, 0 }
};
/**
******************************************************************
* @brief 建立主窗口
* @param [in]None
* @retval 窗口句柄
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
static WM_HWIN CreateitemsChSearchWindow(void)
{
return GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), cbDialog, WM_HBKWIN, 0, 0);
}
/**
******************************************************************
* @brief 初始化索引頁面
* @param [in]WM_MESSAGE 窗口管理消息指針
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
static void cbDialog(WM_MESSAGE * pMsg)
{
WM_EnableMemdev(pMsg->hWin);
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
/*初始化主窗口*/
Mainwidow_Init(pMsg);
/*創(chuàng)建標(biāo)題*/
CreateTittle(pMsg);
/*創(chuàng)建按鈕*/
CreateButton(pMsg);
/*創(chuàng)建定時(shí)器*/
WM_CreateTimer(pMsg->hWin, 0, PAGE_TIMER_PERIOD, 0);
break;
case WM_NOTIFY_PARENT:
break;
case GW_WM_KEY:
case WM_KEY:
break;
case WM_TIMER:
CreateTimer(pMsg);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/**
******************************************************************
* @brief 初始化索引頁面定時(shí)器
* @param [in]WM_MESSAGE 窗口管理消息指針
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
static void CreateTimer(WM_MESSAGE * pMsg)
{
WM_EnableMemdev(pMsg->hWin);
/*重啟定時(shí)器*/
WM_RestartTimer(pMsg->Data.v, PAGE_TIMER_PERIOD);
/*顯示時(shí)間*/
WM_HWIN hItem = WM_GetDialogItem(pMsg->hWin, ITEMINDEX_ID_TITLE_R);
WM_EnableMemdev(hItem);
char timeStr[10];
TEXT_SetFont(hItem,GUI_FONT_16_1);
GDT_get_current_time(timeStr);
TEXT_SetText(hItem, timeStr);
}
/**
******************************************************************
* @brief 頁面信息初始化
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Init(void)
{
memset(ItemIndexPage ,0 ,ITEMINDEX_PAGE_LAYER_MAX*sizeof(ItemIndexPage_Typedef));
/*層1作為9個(gè)常用字段+26個(gè)字母索引層*/
ItemIndexPage[ITEMINDEX_KEY_LAYER].PageType = ITEMINDEX_KEY_LAYER;
ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Num = (ARRAYNUM(Key_Search_Map))+ITEMINDEX_VAL_FIELD_NUM_MAX;
ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].PageNum = (ARRAYNUM(Key_Search_Map)+ITEMINDEX_VAL_FIELD_NUM_MAX-1)/ITEM_INDEX_PAGE_BUTTON_NUM_MAX;/**<減1防止控件數(shù)量正好1頁而錯(cuò)誤的計(jì)算為2頁*/
ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;/**< 默認(rèn)當(dāng)前層激活*/
/*層2作為索引結(jié)果層*/
ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageType = ITEMINDEX_VALUE_LAYER;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Num = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Offset = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
}
/**
******************************************************************
* @brief 初始化主窗口
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
static void Mainwidow_Init(WM_MESSAGE * pMsg)
{
WM_HWIN hItem = pMsg->hWin;
WM_EnableMemdev(hItem);
/*do something ...*/
}
/**
******************************************************************
* @brief 初始化索引頁面標(biāo)題
* @param [in]WM_MESSAGE 窗口管理消息指針
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void CreateTittle(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
WM_EnableMemdev(pMsg->hWin);
/*左側(cè)標(biāo)題*/
hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_DEVICE_STATE_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_DEVICE_STATE_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_L ,"");
WM_EnableMemdev(hItem);
TEXT_SetBkColor(hItem, GUI_BK_TITLE);
/*中部標(biāo)題*/
hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_TITLE_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_TITLE_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_M ,"字段表");
WM_EnableMemdev(hItem);
TEXT_SetBkColor(hItem, GUI_BK_TITLE);
/*右側(cè)標(biāo)題*/
hItem = TEXT_CreateEx(ITEM_INDEX_PAGE_CLOCK_START_X, ITEM_INDEX_PAGE_TITLE_START_Y, ITEM_INDEX_PAGE_CLOCK_END_X, ITEM_INDEX_PAGE_TITLE_END_Y,
pMsg->hWin, WM_CF_SHOW, GUI_TA_VCENTER|GUI_TA_HCENTER ,ITEMINDEX_ID_TITLE_R ,"");
WM_EnableMemdev(hItem);
TEXT_SetBkColor(hItem, GUI_BK_TITLE);
}
/**
******************************************************************
* @brief 初始化索引頁面按鈕
* @param [in]WM_MESSAGE 窗口管理消息指針
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void CreateButton(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
WM_EnableMemdev(pMsg->hWin);
/*判斷當(dāng)前頁面可創(chuàng)建按鈕數(shù)目*/
int ButtonNum = Get_CurrentPage_Button_Num();
/*循環(huán)創(chuàng)建字母索引字段按鈕*/
for(int i = 0; i < ButtonNum;i++)
{
/*建立按鈕*/
hItem = BUTTON_CreateEx(ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_H_X(i),ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_Y_X(i), ITEM_INDEX_PAGE_BUTTON_WIDTH, ITEM_INDEX_PAGE_BUTTON_END_Y,
pMsg->hWin, WM_CF_SHOW, 0,ITEMINDEX_ID_ORIGIN_VA1_FIELD+i);
WM_EnableMemdev(hItem);
/*取消3D色*/
BUTTON_SetSkinClassic(hItem);
/*設(shè)定背景色*/
BUTTON_SetBkColor(hItem ,BUTTON_CI_UNPRESSED ,Key_Search_Map[i%ITEMINDEX_KEY_FIELD_NUM_MAX].Color);
/*設(shè)定前景色*/
BUTTON_SetTextColor(hItem ,BUTTON_CI_UNPRESSED ,GUI_WHITE);
/*設(shè)置聚焦虛線色*/
if(Key_Search_Map[i%ITEMINDEX_KEY_FIELD_NUM_MAX].Color == GUI_RED)
{
BUTTON_SetFocusColor(hItem ,GUI_BLACK);
}
else
{
BUTTON_SetFocusColor(hItem ,GUI_RED);
}
/*設(shè)置顯示內(nèi)容*/
BUTTON_SetText(hItem, Get_IndexStr(i));
}
/*設(shè)定初始聚焦*/
WidgetFocusUpdate();
}
/**
******************************************************************
* @brief 更新頁面控件聚焦
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-21
******************************************************************
*/
static void WidgetFocusUpdate(void)
{
/*判斷主窗口已建立*/
if(MAINWin != 0)
{
WM_HWIN hItem = WM_GetDialogItem(MAINWin, ITEMINDEX_ID_ORIGIN_VA1_FIELD + Get_FocusWidgetOffset());
WM_EnableMemdev(hItem);
WM_SetFocus(hItem);
}
}
/**
******************************************************************
* @brief 獲取上次聚焦的索引字段踪蹬,轉(zhuǎn)換為首字符
* @param [in]None
* @retval 首字符
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static char Get_Search_Char(void)
{
char ch = 'A';
uint32_t CurrentPage = ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum;
uint32_t CurrentPageWidgetOffset = ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset;
/*打開字段索引層激活狀態(tài)*/
uint32_t temp = ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive;
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;
uint32_t Widget_OffsetInLayer = Calc_CurrentWidgetOffsetInLayer();
/*恢復(fù)狀態(tài)*/
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = temp;
uint32_t Offset = 0;
if(Widget_OffsetInLayer >= ITEMINDEX_VAL_FIELD_NUM_MAX)
{
Offset = CurrentPageWidgetOffset+((CurrentPage-1)*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ITEM_INDEX_PAGE_BUTTON_NUM_MAX-ITEMINDEX_VAL_FIELD_NUM_MAX;
ch += Offset;
return ch;
}
return ch;
}
/**
******************************************************************
* @brief 獲取當(dāng)前頁面,指定偏移控件所在字符串
* @param [in]ch 索引首部字段
* @param [in]index 當(dāng)前頁面所在偏移
* @retval 字符串所在地址
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static const char *Get_WidgetStr(char ch ,uint32_t index)
{
/*計(jì)算當(dāng)前控件在全部頁面的索引值*/
uint32_t IN_ALLPAGE_WidgetIndex = ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum==0?index:ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX+index;
/*獲取指定字段拳喻,指定索引號的 字符串地址*/
return Get_Special_Ch_Str(ch ,IN_ALLPAGE_WidgetIndex);
}
/**
******************************************************************
* @brief 獲取當(dāng)前頁面,指定控件的字符串
* @param [in]在當(dāng)前頁面的控件號
* @retval 字符串地址
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static const char *Get_IndexStr(uint32_t index)
{
uint32_t CurrentPage = 0;
/*字段層激活*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum == 0)
{
if(index < ITEMINDEX_VAL_FIELD_NUM_MAX)
{
return Get_Special_Index_Str(index+1);
}
else
{
return Key_Search_Map[index-ITEMINDEX_VAL_FIELD_NUM_MAX].Str;
}
}
else
{
CurrentPage = ItemIndexPage[ITEMINDEX_KEY_LAYER].CurrentPageNum;
return Key_Search_Map[index+((CurrentPage-1)*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ITEM_INDEX_PAGE_BUTTON_NUM_MAX-ITEMINDEX_VAL_FIELD_NUM_MAX].Str;
}
}
/*索引結(jié)果層激活*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
/*獲取索引的字段*/
char ch = Get_Search_Char();
return Get_WidgetStr(ch ,index);
}
return "";
}
/**
******************************************************************
* @brief 獲取當(dāng)前層,當(dāng)前頁面秕豫,需繪制的按鈕總數(shù)
* @param [in]None
* @retval 當(dāng)頁按鈕總數(shù)
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static uint32_t Get_CurrentPage_Button_Num(void)
{
/*判斷當(dāng)前激活層*/
/*字段層激活*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
return Calc_CurrentPage_WidgetNum();
}
/*索引結(jié)果層激活*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
/*更新索引層*/
ItemIndexPage_ResLayerUpdate();
return Calc_CurrentPage_WidgetNum();
}
return 0;
}
/**
******************************************************************
* @brief 更新索引結(jié)果層,可創(chuàng)建控件數(shù)目抗愁,總頁數(shù)
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_ResLayerUpdate(void)
{
static char Last_SerachCh = 0;
/*獲取索引的字段*/
char ch = Get_Search_Char();
/*上次查詢不一致則重置當(dāng)前頁面號*/
if(ch != Last_SerachCh)
{
Last_SerachCh = ch;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum = 0;
}
/*更新該字段在當(dāng)前層中數(shù)目*/
ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Num = Get_Special_Ch_Num(ch);
/*更新該字段總頁數(shù)*/
ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum = (Get_Special_Ch_Num(ch)-1)/ITEM_INDEX_PAGE_BUTTON_NUM_MAX;
}
/**
******************************************************************
* @brief 計(jì)算當(dāng)前頁可建立控件數(shù)目
* @param [in]None
* @retval 可創(chuàng)建數(shù)目
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static uint32_t Calc_CurrentPage_WidgetNum(void)
{
uint32_t WidgetNum = 0;
uint8_t CurrentLayer = 0;
/*獲取當(dāng)前激活層*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
else if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷當(dāng)前頁面是否是最首頁*/
if(0 == ItemIndexPage[CurrentLayer].CurrentPageNum)
{
WidgetNum = ItemIndexPage[CurrentLayer].Widget_Num>ITEM_INDEX_PAGE_BUTTON_NUM_MAX?ITEM_INDEX_PAGE_BUTTON_NUM_MAX:ItemIndexPage[CurrentLayer].Widget_Num;
}
else
{
/*不是首頁則判斷馁蒂,剩余頁呵晚,剩余數(shù)目*/
/*獲取剩余控件數(shù)蜘腌,包含當(dāng)前頁*/
WidgetNum = ItemIndexPage[CurrentLayer].Widget_Num-ItemIndexPage[CurrentLayer].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX;
/*限制繪制控件數(shù)目*/
WidgetNum = WidgetNum>ITEM_INDEX_PAGE_BUTTON_NUM_MAX?ITEM_INDEX_PAGE_BUTTON_NUM_MAX:WidgetNum;
}
return WidgetNum;
}
return 0;
}
/**
******************************************************************
* @brief 計(jì)算控件在當(dāng)前層中的偏移索引號
* @param [in]None
* @retval 索引號
* @author aron566
* @version V1.0
* @date 2020-5-22
******************************************************************
*/
static uint32_t Calc_CurrentWidgetOffsetInLayer(void)
{
uint32_t ret = 0;
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
else if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
else
{
return ret;
}
return (ItemIndexPage[CurrentLayer].CurrentPageNum*ITEM_INDEX_PAGE_BUTTON_NUM_MAX)+ItemIndexPage[CurrentLayer].Widget_Offset;
}
/**
******************************************************************
* @brief 獲取當(dāng)前已激活層,當(dāng)前頁面聚焦控件所在偏移
* @param [in]None
* @retval 聚焦控件在當(dāng)前頁面偏移
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static uint32_t Get_FocusWidgetOffset(void)
{
/*字段層激活*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
return ItemIndexPage[ITEMINDEX_KEY_LAYER].Widget_Offset;
}
/*索引結(jié)果層*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
return ItemIndexPage[ITEMINDEX_VALUE_LAYER].Widget_Offset;
}
return 0;
}
/**
******************************************************************
* @brief 左翻頁處理,或左移處理
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Back(void)
{
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
#if USE_NEXT_PAGE
/*判斷是否是索引結(jié)果層*/
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷是否是首頁,則不可翻頁*/
if(ItemIndexPage[CurrentLayer].CurrentPageNum == 0)
{
return;
}
else
{
ItemIndexPage[CurrentLayer].CurrentPageNum -= 1;
/*主窗口重繪*/
ItemIndexPage_Reload();
}
}
#else
/*字段層或索引層激活*/
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷是否可以繼續(xù)左移*/
if(ItemIndexPage[CurrentLayer].Widget_Offset >= ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)
{
ItemIndexPage[CurrentLayer].Widget_Offset -= ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX;
/*更新聚焦*/
WidgetFocusUpdate();
return;
}
else
{
/*判斷是否是一頁,則不可翻頁*/
if(ItemIndexPage[CurrentLayer].CurrentPageNum == 0)
{
/*改為上移動*/
ItemIndexPage_Up();
/*更新聚焦*/
WidgetFocusUpdate();
return;
}
else
{
if(ItemIndexPage[CurrentLayer].CurrentPageNum > 0)
{
/*向左翻頁*/
ItemIndexPage[CurrentLayer].CurrentPageNum -= 1;
/*控件聚焦到最右側(cè)*/
ItemIndexPage[CurrentLayer].Widget_Offset += ((ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX-1)*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX);
/*限制超出可聚焦控件數(shù)*/
uint32_t temp = Get_CurrentPage_Button_Num();
ItemIndexPage[CurrentLayer].Widget_Offset = temp>ItemIndexPage[CurrentLayer].Widget_Offset?ItemIndexPage[CurrentLayer].Widget_Offset:temp;
}
}
}
/*主窗口重繪*/
ItemIndexPage_Reload();
}
#endif
}
/**
******************************************************************
* @brief 右翻頁處理饵隙,或右移處理
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Forward(void)
{
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
#if USE_NEXT_PAGE
/*判斷是否是索引結(jié)果層*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
/*判斷是否是尾頁,則不可翻頁*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum == ItemIndexPage[ITEMINDEX_VALUE_LAYER].PageNum)
{
return;
}
else
{
ItemIndexPage[ITEMINDEX_VALUE_LAYER].CurrentPageNum += 1;
/*主窗口重繪*/
ItemIndexPage_Reload();
}
}
#else
/*字段層或索引層激活*/
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷是否可以繼續(xù)右移*/
if((ItemIndexPage[CurrentLayer].Widget_Offset+ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX) <= (Get_CurrentPage_Button_Num()-1))
{
ItemIndexPage[CurrentLayer].Widget_Offset += ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX;
/*更新聚焦*/
WidgetFocusUpdate();
return;
}
else
{
/*判斷是否是最后頁,則不可翻頁*/
if(ItemIndexPage[CurrentLayer].CurrentPageNum == ItemIndexPage[CurrentLayer].PageNum)
{
/*改為下移動*/
ItemIndexPage_Down();
/*更新聚焦*/
WidgetFocusUpdate();
return;
}
else
{
if(ItemIndexPage[CurrentLayer].CurrentPageNum < ItemIndexPage[CurrentLayer].PageNum)
{
/*向右翻頁*/
ItemIndexPage[CurrentLayer].CurrentPageNum += 1;
/*控件聚焦到最左側(cè)*/
ItemIndexPage[CurrentLayer].Widget_Offset -= ((ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX-1)*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX);
/*限制超出可聚焦控件數(shù)*/
uint32_t temp = Get_CurrentPage_Button_Num();
ItemIndexPage[CurrentLayer].Widget_Offset = temp>ItemIndexPage[CurrentLayer].Widget_Offset?ItemIndexPage[CurrentLayer].Widget_Offset:temp;
}
}
}
/*主窗口重繪*/
ItemIndexPage_Reload();
}
#endif
}
/**
******************************************************************
* @brief 上鍵處理撮珠,單頁循環(huán)聚焦
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Up(void)
{
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
/*字段層或索引層激活*/
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷是否是當(dāng)前頁面首個(gè)控件,則不可移動*/
if(ItemIndexPage[CurrentLayer].Widget_Offset == 0)
{
if(ItemIndexPage[CurrentLayer].Widget_Num >= ITEM_INDEX_PAGE_BUTTON_NUM_MAX)
{
ItemIndexPage[CurrentLayer].Widget_Offset = Get_CurrentPage_Button_Num()-1;
}
else
{
ItemIndexPage[CurrentLayer].Widget_Offset = ItemIndexPage[CurrentLayer].Widget_Num-1;
}
}
else
{
ItemIndexPage[CurrentLayer].Widget_Offset--;
}
}
/*更新聚焦*/
WidgetFocusUpdate();
}
/**
******************************************************************
* @brief 下鍵處理金矛,單頁循環(huán)聚焦
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Down(void)
{
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
/*字段層或索引層激活*/
if(ItemIndexPage[CurrentLayer].IsActive)
{
/*判斷是否是當(dāng)前頁面最后一個(gè)控件芯急,則不可移動*/
if(ItemIndexPage[CurrentLayer].Widget_Offset == (ItemIndexPage[CurrentLayer].Widget_Num-1) ||
ItemIndexPage[CurrentLayer].Widget_Offset == (Get_CurrentPage_Button_Num()-1))
{
ItemIndexPage[CurrentLayer].Widget_Offset = 0;
}
else
{
ItemIndexPage[CurrentLayer].Widget_Offset++;
}
}
/*更新聚焦*/
WidgetFocusUpdate();
}
/**
******************************************************************
* @brief OK鍵處理
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Ok(void)
{
/*字段層激活-->進(jìn)入當(dāng)前字段索引結(jié)果層或選中常用字符時(shí)完成索引退出*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
if(Calc_CurrentWidgetOffsetInLayer() < ITEMINDEX_VAL_FIELD_NUM_MAX)
{
/*已選中常用字段*/
/*判斷索引結(jié)果*/
ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 1;
if(ItemIndexWindowGetResult() != NULL)
{
ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 1;
}
else
{
ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult = 0;
}
ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
/*隱藏刪除窗口*/
ItemIndexWindowHide();
}
else
{
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 1;
}
ItemIndexPage_Reload();
return;
}
/*索引結(jié)果層-->確認(rèn)選擇*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
/*判斷索引結(jié)果*/
ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 1;
if(ItemIndexWindowGetResult() != NULL)
{
ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 1;
}
else
{
ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult = 0;
}
/*已完成索引-->窗口全部失效*/
ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
/*隱藏刪除窗口*/
ItemIndexWindowHide();
return;
}
}
/**
******************************************************************
* @brief 返回鍵處理
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Return(void)
{
/*字段層激活*/
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive)
{
ItemIndexWindowHide();
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 0;
ItemIndexPage_Reload();
return;
}
/*索引結(jié)果層*/
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive = 0;
ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive = 1;
ItemIndexPage_Reload();
return;
}
}
/**
******************************************************************
* @brief 主窗口重新繪制
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
static void ItemIndexPage_Reload(void)
{
/*窗口失效-->重新繪制*/
if(MAINWin != 0)
{
WM_InvalidateWindow(MAINWin);
WM_DeleteWindow(MAINWin);
MAINWin = CreateitemsChSearchWindow();
}
}
/** Public application code --------------------------------------------------*/
/*******************************************************************************
*
* Public code
*
********************************************************************************
*/
/**
******************************************************************
* @brief 獲取運(yùn)行結(jié)果狀態(tài)
* @param [in]None
* @retval 1 成功
* @retval 0 失敗
* @author aron566
* @version V1.0
* @date 2020-5-21
******************************************************************
*/
uint32_t ItemIndexWindowGetTaskResult(void)
{
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult || ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult)
{
return 1;
}
else
{
return 0;
}
}
/**
******************************************************************
* @brief 字段索引窗口,已索引到數(shù)據(jù)獲取
* @param [in]None
* @retval 索引結(jié)果字符串地址
* @author aron566
* @version V1.0
* @date 2020-5-21
******************************************************************
*/
const char *ItemIndexWindowGetResult(void)
{
uint32_t temp;
uint8_t CurrentLayer = 0;
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].TaskResult)
{
CurrentLayer = ITEMINDEX_KEY_LAYER;
}
if(ItemIndexPage[ITEMINDEX_VALUE_LAYER].TaskResult)
{
CurrentLayer = ITEMINDEX_VALUE_LAYER;
}
if(ItemIndexPage[CurrentLayer].TaskResult)
{
temp = ItemIndexPage[CurrentLayer].IsActive;
/*激活當(dāng)前需獲取數(shù)據(jù)的層*/
ItemIndexPage[CurrentLayer].IsActive = 1;
const char *ret = Get_IndexStr(ItemIndexPage[CurrentLayer].Widget_Offset);
ItemIndexPage[CurrentLayer].IsActive = temp;
return ret;
}
return NULL;
}
/**
******************************************************************
* @brief 字段索引窗口驶俊,狀態(tài)獲取
* @param [in]None
* @retval 1 窗口顯示中
* @retval 0 窗口已失效
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
uint8_t ItemIndexWindowGetState(void)
{
if(ItemIndexPage[ITEMINDEX_KEY_LAYER].IsActive || ItemIndexPage[ITEMINDEX_VALUE_LAYER].IsActive)
{
return 1;
}
else
{
return 0;
}
}
/**
******************************************************************
* @brief 字段索引窗口按鍵處理
* @param [in]Key
* @retval 當(dāng)前窗口狀態(tài):1顯示 0關(guān)閉
* @author aron566
* @version V1.0
* @date 2020-5-20
******************************************************************
*/
uint8_t ItemIndexWindowSendKey(int key)
{
/*判斷窗口是否處于激活狀態(tài)則下發(fā)按鍵*/
if(ItemIndexWindowGetState())
{
switch(key)
{
case GUI_KEY_UP:
ItemIndexPage_Up();
break;
case GUI_KEY_DOWN:
ItemIndexPage_Down();
break;
case GUI_KEY_LEFT:
ItemIndexPage_Back();
break;
case GUI_KEY_RIGHT:
ItemIndexPage_Forward();
break;
case GUI_KEY_ENTER:
ItemIndexPage_Ok();
break;
case GUI_KEY_ESCAPE:
ItemIndexPage_Return();
break;
default:
break;
}
}
/*返回當(dāng)前窗口狀態(tài)*/
return ItemIndexWindowGetState();
}
/**
******************************************************************
* @brief 字段索引窗口顯示
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
void ItemIndexWindowShow(void)
{
if(MAINWin == 0)
{
/*重置窗口資源*/
ItemIndexPage_Init();
MAINWin = CreateitemsChSearchWindow();
}
}
/**
******************************************************************
* @brief 字段索引窗口隱藏
* @param [in]None
* @retval None
* @author aron566
* @version V1.0
* @date 2020-5-18
******************************************************************
*/
void ItemIndexWindowHide(void)
{
if(MAINWin)
{
WM_DeleteWindow(MAINWin);
MAINWin = 0;
}
}
#ifdef __cplusplus ///<end extern c
}
#endif
索引頁面頭文件
/**
* @file GW_ItemIndex.h
*
* @date 2020/5/19
*
* @author aron566
*
* @brief 參數(shù)列表索引展示 文件編碼使用UTF-8 無BOM
*
* @version V1.0
*/
#ifndef GW_ITEMINDEX_H
#define GW_ITEMINDEX_H
#ifdef __cplusplus ///<use C compiler
extern "C" {
#endif
/** Includes -----------------------------------------------------------------*/
#include <stdint.h> /**< nedd definition of uint8_t */
#include <stddef.h> /**< need definition of NULL */
//#include <stdbool.h>/**< need definition of BOOL */
#include <stdio.h> /**< if need printf */
#include <stdlib.h>
#include <string.h>
/** Private includes ---------------------------------------------------------*/
/** Private defines ----------------------------------------------------------*//** Exported typedefines -----------------------------------------------------*/
/*索引表建立*/
typedef enum
{
GL_SEARCH_CHAR_A = 0,/**< 參數(shù)字段首字母索引*/
GL_SEARCH_CHAR_B,
GL_SEARCH_CHAR_C,
GL_SEARCH_CHAR_D,
GL_SEARCH_CHAR_E,
GL_SEARCH_CHAR_F,
GL_SEARCH_CHAR_G,
GL_SEARCH_CHAR_H,
GL_SEARCH_CHAR_I,
GL_SEARCH_CHAR_J,
GL_SEARCH_CHAR_K,
GL_SEARCH_CHAR_L,
GL_SEARCH_CHAR_M,
GL_SEARCH_CHAR_N,
GL_SEARCH_CHAR_O,
GL_SEARCH_CHAR_P,
GL_SEARCH_CHAR_Q,
GL_SEARCH_CHAR_R,
GL_SEARCH_CHAR_S,
GL_SEARCH_CHAR_T,
GL_SEARCH_CHAR_U,
GL_SEARCH_CHAR_V,
GL_SEARCH_CHAR_W,
GL_SEARCH_CHAR_X,
GL_SEARCH_CHAR_Y,
GL_SEARCH_CHAR_Z,}IndexKey_Typedef;
/** 索引頁面控件屬性*/
typedef struct
{
IndexKey_Typedef WidgetIndex; /**< 控件屬性所在索引號*/
char Str[32]; /**< 控件對應(yīng)的字符串描述*/
uint32_t Color; /**< 背景色*/
}ItemIndexWidget_Typedef;
/** 索引頁面結(jié)構(gòu)體*/
typedef struct
{
uint32_t PageType; /**< 該頁面類型娶耍。eg:根據(jù)頁面類型查找填入該寫入的參數(shù)*/
uint32_t Widget_Num; /**< 該頁面類型全部控件總數(shù)*/
uint32_t Widget_Offset; /**< 該頁面已聚焦控件偏移數(shù)*/
uint32_t PageNum; /**< 該類型頁面總數(shù)。eg:根據(jù)預(yù)設(shè)單頁顯示控件數(shù)宏饼酿,與頁面控件總數(shù)榕酒,轉(zhuǎn)換為頁數(shù)*/
uint32_t CurrentPageNum; /**< 當(dāng)前顯示頁面號*/
uint32_t IsActive; /**< 該頁面是否激活狀態(tài)*/
uint32_t TaskResult; /**< 該頁面功能運(yùn)行結(jié)果*/
}ItemIndexPage_Typedef;
/** Exported constants -------------------------------------------------------*/
ItemIndexWidget_Typedef Key_Search_Map[] =
{
{GL_SEARCH_CHAR_A, "A字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(254, 67, 101))},
{GL_SEARCH_CHAR_B, "B字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(252, 157, 154))},
{GL_SEARCH_CHAR_C, "C字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(249, 205, 173))},
{GL_SEARCH_CHAR_D, "D字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(200, 200, 169))},
{GL_SEARCH_CHAR_E, "E字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(131, 175, 155))},
{GL_SEARCH_CHAR_F, "F字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(178, 200, 187))},
{GL_SEARCH_CHAR_G, "G字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 69, 137, 148))},
{GL_SEARCH_CHAR_H, "H字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(117, 121, 74))},
{GL_SEARCH_CHAR_I, "I字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(114, 83, 52))},
{GL_SEARCH_CHAR_J, "J字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(130, 57, 53))},
{GL_SEARCH_CHAR_K, "K字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(137, 190, 178))},
{GL_SEARCH_CHAR_L, "L字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(201, 186, 131))},
{GL_SEARCH_CHAR_M, "M字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(222, 211, 140))},
{GL_SEARCH_CHAR_N, "N字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(222, 156, 83))},
{GL_SEARCH_CHAR_O, "O字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 36, 33, 28))},
{GL_SEARCH_CHAR_P, "P字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(172, 81, 24))},
{GL_SEARCH_CHAR_Q, "Q字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(159, 125, 80))},
{GL_SEARCH_CHAR_R, "R字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(160, 191, 124))},
{GL_SEARCH_CHAR_S, "S字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 3, 35, 14))},
{GL_SEARCH_CHAR_T, "T字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(224, 160, 158))},
{GL_SEARCH_CHAR_U, "U字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 0, 0, 0))},
{GL_SEARCH_CHAR_V, "V字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(117, 36, 35))},
{GL_SEARCH_CHAR_W, "W字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(161, 47, 47))},
{GL_SEARCH_CHAR_X, "X字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 30, 41, 61))},
{GL_SEARCH_CHAR_Y, "Y字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888(173, 137, 118))},
{GL_SEARCH_CHAR_Z, "Z字段" ,TL_CV_RGB888_SWAP(TL_GET_RGB888( 38, 188, 213))},
};
/** Exported macros-----------------------------------------------------------*//** Exported variables -------------------------------------------------------*/
/** Exported functions prototypes --------------------------------------------*/
void ItemIndexWindowHide(void);
void ItemIndexWindowShow(void);
void ItemIndexWindowSendKey(int key);
uint8_t ItemIndexWindowGetState(void);
const char *ItemIndexWindowGetResult(void);
uint32_t ItemIndexWindowGetTaskResult(void);
#ifdef __cplusplus ///<end extern c
}
#endif
#endif
/******************************** End of file *********************************/
通用頁面布局
通用頁面布局主要功能:
- 實(shí)現(xiàn)通過設(shè)置頁面的像素自動整定各個(gè)控件的相對位置區(qū)域
- 具備通用label位置/edit位置/button位置/標(biāo)題位置
- 通過設(shè)置控件行數(shù)列數(shù),排列方式故俐,垂直間隙想鹰,水平間隙自動計(jì)算控件大小,及每個(gè)控件的相對位置
/*
* FILE: DRV_LcdPar.c
*
* Created on: 2020/4/24
*
* Author: aron566
*
* DESCRIPTION:--
*/
#ifdef __cplusplus //use C compiler
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "DRV_LcdPar.h"
/* Private macros-------------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/*運(yùn)行時(shí)間*/
static volatile uint32_t userOS_TimeMS = 0;
static volatile uint32_t OS_TimeSec = 0;
/* Private function prototypes -----------------------------------------------*/
/* Private user code ---------------------------------------------------------*/
/* Public variables ----------------------------------------------------------*/
/*******************************************************************************
*
* Static code
*
********************************************************************************
*/
/*******************************************************************************
*
* Public code
*
********************************************************************************
*/
/* 放入1ms中斷 */
void millsec_IRQ_handler(void)
{
static uint16_t cnt_ms = 0;
userOS_TimeMS++;
if (++cnt_ms >= 1000)
{
OS_TimeSec++;
cnt_ms = 0;
}
}/**
******************************************************************
* @brief 獲取ms計(jì)數(shù)
* @param None
* @retval userOS_TimeMS
* @author aron566
* @version v1.0
* @date 2020/5/6
******************************************************************
*/
uint32_t get_time_ms(void)
{
return userOS_TimeMS;
}/**
******************************************************************
* @brief 獲取秒計(jì)數(shù)
* @param None
* @retval OS_TimeSec
* @author aron566
* @version v1.0
* @date 2020/5/6
******************************************************************
*/
uint32_t get_time_sec(void)
{
return OS_TimeSec;
}
#ifdef __cplusplus //end extern c
}
#endif
/******************************** End of file *********************************/
/*
* FILE: DRV_LcdPar.h
*
* Created on: 2020/4/24
*
* Author: aron566
*
* DESCRIPTION:--
*/
#ifndef DRV_LCDPAR_H
#define DRV_LCDPAR_H
#ifdef __cplusplus //use C compiler
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h> /*nedd definition of uint8_t*/
#include <stddef.h> /*need definition of NULL*/
#include <stdbool.h>/*need definition of BOOL*/
#include <stdio.h> /*if need printf*/
#include <stdlib.h>
#include <string.h>
/* Private includes ----------------------------------------------------------*/
#include "ipa.h"
/* Private defines -----------------------------------------------------------*/
#define GUI_GRAY_C8 TL_CV_RGB888_SWAP(TL_GET_RGB888(157, 255, 255)) /**< 菜單按鈕界面標(biāo)題欄色彩設(shè)置 */
#define GUI_GRAY_E7 GUI_WHITE
#define GUI_GRAY_9A GUI_WHITE
#define EDIT_EnableInversion(item,value) do{}while(0)
#define EDIT_CI_CURSOR EDIT_CI_ENABLED
#define GUI_MAKE_COLOR(ARGB) (ARGB)
/*圖形最大顯示區(qū)域設(shè)定药版,單位:像素*/
#define UI_MAINWINDOW_WIDTH (480U)
#define UI_MAINWINDOW_HEIGHT (320U)
/*狀態(tài)欄高度設(shè)定*/
#define TITLE_START_Y (0U) /*標(biāo)題欄起始Y*/
#define TITLE_END_Y (UI_MAINWINDOW_HEIGHT/10) /*標(biāo)題欄高度Y*/
#define BOTTOM_START_Y (UI_MAINWINDOW_HEIGHT*9/10) /*底部狀態(tài)欄起始Y*/
#define BOTTOM_END_Y (UI_MAINWINDOW_HEIGHT-BOTTOM_START_Y) /*底部狀態(tài)欄高度Y*/
#define TITLE2_START_Y TITLE_END_Y /*第二個(gè)標(biāo)題起始Y*/
#define TITLE2_END_Y (25U) /*第二個(gè)標(biāo)題欄高度Y*/
/*狀態(tài)欄寬度辑舷,位置設(shè)定*/
/*upper*/
#define PAGE_DEVICE_STATE_START_X (0U) /*設(shè)備狀態(tài)起始X*/
#define PAGE_DEVICE_STATE_END_X (UI_MAINWINDOW_WIDTH*2/10U) /*設(shè)備狀態(tài)長度X*/
#define PAGE_TITLE_START_X PAGE_DEVICE_STATE_END_X /*頁面標(biāo)題起始X*/
#define PAGE_TITLE_END_X (UI_MAINWINDOW_WIDTH*6/10U) /*頁面標(biāo)題長度X*/
#define PAGE_CLOCK_START_X (UI_MAINWINDOW_WIDTH*8/10U) /*頁面時(shí)鐘起始X*/
#define PAGE_CLOCK_END_X (UI_MAINWINDOW_WIDTH-PAGE_CLOCK_START_X) /*頁面時(shí)鐘長度X*/
/*bottom*/
#define PAGE_TIPS_OPT_START_X (0U) /*頁面操作提示起始X*/
#define PAGE_TIPS_OPT_END_X (UI_MAINWINDOW_WIDTH*9/10U) /*頁面操作提示長度X*/
#define PAGE_TIPS_PAGENUM_START_X PAGE_TIPS_OPT_END_X /*頁面數(shù)目提示起始X*/
#define PAGE_TIPS_PAGENUM_END_X (UI_MAINWINDOW_WIDTH-PAGE_TIPS_OPT_END_X) /*頁面數(shù)目提示長度X*/
/*設(shè)定下拉框?qū)傩?/
#define PAGE_COMBO_BOX_START_X (UI_MAINWINDOW_WIDTH*6/10U) /*下拉框起始X*/
#define PAGE_COMBO_BOX_END_X (UI_MAINWINDOW_WIDTH*37/100U) /*下拉框長度X*/
#define PAGE_COMBO_BOX_NUM_MAX (8U) /*下拉框列表最大數(shù)量*/
#define PAGE_MULTI_COMBO_BOX_V_GAP (10U) /*下拉框垂直間隙*/
#define PAGE_COMBO_BOX_ORIGIN_Y TITLE_END_Y /*下拉框起始Y*/
/*通過計(jì)算下拉框允許高度Y*/
#define PAGE_COMBO_BOX_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_COMBO_BOX_V_GAP*(PAGE_COMBO_BOX_NUM_MAX+1)))/PAGE_COMBO_BOX_NUM_MAX)
/*計(jì)算多個(gè)下拉框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define PAGE_MULTI_COMBO_BOX_V_Y(X) (PAGE_COMBO_BOX_ORIGIN_Y+PAGE_MULTI_COMBO_BOX_V_GAP*(X+1)+PAGE_COMBO_BOX_HEIGHT*X)
/*設(shè)定通用多按鈕 垂直分布 屬性*/
#define PAGE_BUTTON_START_X (UI_MAINWINDOW_WIDTH*1/10U) /*按鈕起始X*/
#define PAGE_BUTTON_END_X (UI_MAINWINDOW_WIDTH*8/10U) /*按鈕長度X*/
#define PAGE_MULTI_BUTTON_V_GAP (5U) /*按鈕垂直間隙*/
#define PAGE_BUTTON_V_NUM_MAX (8U) /*最大允許按鈕數(shù)目*/
#define PAGE_BUTTON_ORIGIN_Y TITLE_END_Y /*按鈕起始Y*//*通過計(jì)算按鈕允許高度Y*/
#define PAGE_BUTTON_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_BUTTON_V_GAP*(PAGE_BUTTON_V_NUM_MAX+1)))/PAGE_BUTTON_V_NUM_MAX)
/*計(jì)算多個(gè)按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1槽片,高度x不變*/
#define PAGE_MULTI_BUTTON_V_Y(X) (PAGE_BUTTON_ORIGIN_Y+PAGE_MULTI_BUTTON_V_GAP*(X+1)+PAGE_BUTTON_HEIGHT*X)
/*設(shè)定通用多按鈕 水平分布 屬性*/
#define PAGE_BUTTON_START_Y (UI_MAINWINDOW_WIDTH*1/10U) /*按鈕起始Y*/
#define PAGE_BUTTON_END_Y (UI_MAINWINDOW_WIDTH*1/10U) /*按鈕高度Y*/
#define PAGE_MULTI_BUTTON_X_GAP (10U) /*按鈕水平間隙*/
#define PAGE_BUTTON_H_NUM_MAX (4U) /*最大允許按鈕數(shù)目*/
#define PAGE_BUTTON_LEFT_INVALID_LEN (0U) /*左邊不可用長度*/
#define PAGE_BUTTON_RIGHT_INVALID_LEN (0U) /*右邊不可用長度*/
#define PAGE_BUTTON_ORIGIN_X PAGE_BUTTON_LEFT_INVALID_LEN /*按鈕起始X*/
/*通過計(jì)算按鈕允許寬度X*/
#define PAGE_BUTTON_WIDTH \
((UI_MAINWINDOW_WIDTH-PAGE_BUTTON_LEFT_INVALID_LEN-PAGE_BUTTON_RIGHT_INVALID_LEN-(PAGE_MULTI_BUTTON_X_GAP*(PAGE_BUTTON_H_NUM_MAX+1)))/PAGE_BUTTON_H_NUM_MAX)
/*計(jì)算多個(gè)按鈕X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1何缓,高度x不變*/
#define PAGE_MULTI_BUTTON_H_X(X) (PAGE_BUTTON_ORIGIN_X+PAGE_MULTI_BUTTON_X_GAP*(X+1)+PAGE_BUTTON_WIDTH*X)
/*設(shè)定顯示框?qū)傩?/
#define PAGE_DISPLAY_BOX_START_X (UI_MAINWINDOW_WIDTH*6/10U) /*顯示框起始X*/
#define PAGE_DISPLAY_BOX_END_X (UI_MAINWINDOW_WIDTH*37/100U) /*顯示框長度X*/
#define PAGE_MULTI_DISPLAY_BOX_V_GAP (10U) /*顯示框垂直間隙*/
#define PAGE_DISPLAY_BOX_V_NUM_MAX (8U) /*最大允許顯示框數(shù)目*/
#define PAGE_DISPLAY_BOX_ORIGIN_Y TITLE_END_Y /*顯示框起始Y*/
/*通過計(jì)算顯示框允許高度Y*/
#define PAGE_DISPLAY_BOX_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_DISPLAY_BOX_V_GAP*(PAGE_DISPLAY_BOX_V_NUM_MAX+1)))/PAGE_DISPLAY_BOX_V_NUM_MAX)
/*計(jì)算多個(gè)顯示框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1肢础,高度x不變*/
#define PAGE_MULTI_DISPLAY_BOX_V_Y(X) (PAGE_DISPLAY_BOX_ORIGIN_Y+PAGE_MULTI_DISPLAY_BOX_V_GAP*(X+1)+PAGE_DISPLAY_BOX_HEIGHT*X)
/*設(shè)定編輯框?qū)傩?/
#define PAGE_EDIT_BOX_START_X (UI_MAINWINDOW_WIDTH*6/10U) /*編輯框起始X*/
#define PAGE_EDIT_BOX_END_X (UI_MAINWINDOW_WIDTH*37/100U) /*編輯框長度X*/
#define PAGE_MULTI_EDIT_BOX_V_GAP (10U) /*編輯框垂直間隙*/
#define PAGE_EDIT_BOX_NUM_MAX (8U) /*最大允許編輯框數(shù)目*/
#define PAGE_EDIT_BOX_ORIGIN_Y TITLE_END_Y /*編輯框起始Y*/
/*通過計(jì)算編輯框允許高度Y*/
#define PAGE_EDIT_BOX_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_EDIT_BOX_V_GAP*(PAGE_EDIT_BOX_NUM_MAX+1)))/PAGE_EDIT_BOX_NUM_MAX)
/*計(jì)算多個(gè)編輯框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define PAGE_MULTI_EDIT_BOX_V_Y(X) (PAGE_EDIT_BOX_ORIGIN_Y+PAGE_MULTI_EDIT_BOX_V_GAP*(X+1)+PAGE_EDIT_BOX_HEIGHT*X)
/*設(shè)定通用標(biāo)簽屬性*/
#define PAGE_LABEL_START_X (UI_MAINWINDOW_WIDTH*4/100U) /*標(biāo)簽起始X*/
#define PAGE_LABEL_END_X (UI_MAINWINDOW_WIDTH*55/100U) /*標(biāo)簽長度X*/
#define PAGE_MULTI_LABEL_V_GAP (10U) /*標(biāo)簽垂直間隙*/
#define PAGE_LABEL_NUM_MAX (8U) /*最大允許標(biāo)簽數(shù)目*/
#define PAGE_LABEL_ORIGIN_Y TITLE_END_Y /*標(biāo)簽起始Y*/
/*通過計(jì)算標(biāo)簽允許高度Y*/
#define PAGE_LABEL_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(PAGE_MULTI_LABEL_V_GAP*(PAGE_LABEL_NUM_MAX+1)))/PAGE_LABEL_NUM_MAX)
/*計(jì)算多個(gè)標(biāo)簽Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1碌廓,高度x不變*/
#define PAGE_MULTI_LABEL_V_Y(X) (PAGE_LABEL_ORIGIN_Y+PAGE_MULTI_LABEL_V_GAP*(X+1)+PAGE_LABEL_HEIGHT*X) /*設(shè)定對話框顯示區(qū)域*/
#define PAGE_DIGLOG_BOX_START_X (UI_MAINWINDOW_WIDTH*2/10U) /*對話框起始X*/
#define PAGE_DIGLOG_BOX_END_X (UI_MAINWINDOW_WIDTH*6/10U) /*對話框長度X*/
#define PAGE_DIGLOG_BOX_START_Y (UI_MAINWINDOW_HEIGHT*3/10U) /*對話框起始Y*/
#define PAGE_DIGLOG_BOX_END_Y (UI_MAINWINDOW_HEIGHT*4/10U) /*對話框高度Y*/
#define PAGE_DIGLOG_BOX_TEXT_START_X (5U) /*對話框文本相對起始X*/
#define PAGE_DIGLOG_BOX_TEXT_END_X (PAGE_DIGLOG_BOX_END_X-5U) /*對話框文本長度X*/
#define PAGE_DIGLOG_BOX_TEXT_START_Y (10U) /*對話框文本相對起始Y*/
#define PAGE_DIGLOG_BOX_TEXT_END_Y (20U) /*對話框文本高度Y*/
#define PAGE_DIGLOG_BOX_BUTTON1_START_X (PASSWD_DIGLOG_BOX_END_X*2/10) /*對話框按鈕相對起始X*/
#define PAGE_DIGLOG_BOX_BUTTON1_END_X (PASSWD_DIGLOG_BOX_END_X*3/10) /*對話框按鈕長度X*/
#define PAGE_DIGLOG_BOX_BUTTON1_START_Y (PASSWD_DIGLOG_BOX_END_Y*4/10) /*對話框按鈕相對起始Y*/
#define PAGE_DIGLOG_BOX_BUTTON1_END_Y (25U) /*對話框按鈕高度Y*/
#define PAGE_DIGLOG_BOX_BUTTON2_START_X (PASSWD_DIGLOG_BOX_END_X*5/10) /*對話框按鈕相對起始X*/
#define PAGE_DIGLOG_BOX_BUTTON2_END_X (PASSWD_DIGLOG_BOX_END_X*3/10) /*對話框按鈕長度X*/
#define PAGE_DIGLOG_BOX_BUTTON2_START_Y (PASSWD_DIGLOG_BOX_END_Y*4/10) /*對話框按鈕相對起始Y*/
#define PAGE_DIGLOG_BOX_BUTTON2_END_Y (25U) /*對話框按鈕高度Y*/
/*===============================特殊指定坐標(biāo)=================================*/
/*===尋參界面參數(shù)坐標(biāo)===*/
/*設(shè)定標(biāo)簽屬性*/
#define PARA_LABEL_START_X (UI_MAINWINDOW_WIDTH*4/100U) /*標(biāo)簽起始X*/
#define PARA_LABEL_END_X (UI_MAINWINDOW_WIDTH*55/100U) /*標(biāo)簽長度X*/
#define PARA_MULTI_LABEL_V_GAP (10U) /*標(biāo)簽垂直間隙*/
#define PARA_LABEL_NUM_MAX (8U) /*最大允許標(biāo)簽數(shù)目*/
#define PARA_LABEL_ORIGIN_Y (TITLE_END_Y+TITLE2_END_Y) /*標(biāo)簽起始Y*/
/*通過計(jì)算標(biāo)簽允許高度Y*/
#define PARA_LABEL_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-TITLE2_END_Y-BOTTOM_END_Y-(PARA_MULTI_LABEL_V_GAP*(PARA_LABEL_NUM_MAX+1)))/PARA_LABEL_NUM_MAX)
/*計(jì)算多個(gè)標(biāo)簽Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1乔妈,高度x不變*/
#define PARA_MULTI_LABEL_V_Y(X) (PARA_LABEL_ORIGIN_Y+PARA_MULTI_LABEL_V_GAP*(X+1)+PARA_LABEL_HEIGHT*X) /*設(shè)定顯示框?qū)傩?/
#define PARA_DISPLAY_BOX_START_X (UI_MAINWINDOW_WIDTH*6/10U) /*顯示框起始X*/
#define PARA_DISPLAY_BOX_END_X (UI_MAINWINDOW_WIDTH*37/100U) /*顯示框長度X*/
#define PARA_MULTI_DISPLAY_BOX_V_GAP (10U) /*顯示框垂直間隙*/
#define PARA_DISPLAY_BOX_V_NUM_MAX (8U) /*最大允許顯示框數(shù)目*/
#define PARA_DISPLAY_BOX_ORIGIN_Y (TITLE_END_Y+TITLE2_END_Y) /*顯示框起始Y*/
/*通過計(jì)算顯示框允許高度Y*/
#define PARA_DISPLAY_BOX_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-TITLE2_END_Y-BOTTOM_END_Y-(PARA_MULTI_DISPLAY_BOX_V_GAP*(PARA_DISPLAY_BOX_V_NUM_MAX+1)))/PARA_DISPLAY_BOX_V_NUM_MAX)
/*計(jì)算多個(gè)顯示框Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define PARA_MULTI_DISPLAY_BOX_V_Y(X) (PARA_DISPLAY_BOX_ORIGIN_Y+PARA_MULTI_DISPLAY_BOX_V_GAP*(X+1)+PARA_DISPLAY_BOX_HEIGHT*X)
/*進(jìn)度條屬性設(shè)置*/
#define PROGBAR_START_X (0U)
#define PROGBAR_END_X UI_MAINWINDOW_WIDTH
#define PROGBAR_START_Y BOTTOM_START_Y
#define PROGBAR_END_Y BOTTOM_END_Y
/*===重置參數(shù)坐標(biāo)===*/
#define PAGE_RESET_LABEL_START_X (0U) /*重置提示起始X*/
#define PAGE_RESET_LABEL_END_X UI_MAINWINDOW_WIDTH /*重置提示長度X*/
#define PAGE_RESET_LABEL_START_Y (TITLE_START_Y+TITLE_END_Y) /*重置提示起始Y*/
#define PAGE_RESET_LABEL_END_Y (UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y)
#define PAGE_RESET_BUTTON_START_X (UI_MAINWINDOW_WIDTH*2/10U) /*重置按鈕起始X*/
#define PAGE_RESET_BUTTON_END_X (UI_MAINWINDOW_WIDTH*6/10U) /*重置按鈕長度X*/
#define PAGE_RESET_BUTTON_START_Y BOTTOM_START_Y /*重置按鈕起始Y*/
#define PAGE_RESET_BUTTON_END_Y BOTTOM_END_Y /*重置按鈕高度Y*/
/*===設(shè)定實(shí)時(shí)界面坐標(biāo)===*/
/*設(shè)定通道數(shù)量顯示區(qū)域?qū)傩?/
#define REALTIME_CHANNEL_NUMBER_START_X (UI_MAINWINDOW_WIDTH/2U) /*實(shí)時(shí)頁面通道數(shù)量起始X*/
#define REALTIME_CHANNEL_NUMBER_START_Y (UI_MAINWINDOW_WIDTH*1/100U) /*實(shí)時(shí)頁面通道數(shù)量起始Y*/
/*設(shè)定時(shí)間顯示區(qū)域?qū)傩?/
#define REALTIME_CLOCK_START_X (UI_MAINWINDOW_WIDTH*75/100U) /*實(shí)時(shí)頁面時(shí)間起始X*/
#define REALTIME_CLOCK_END_X UI_MAINWINDOW_WIDTH /*實(shí)時(shí)頁面時(shí)間終點(diǎn)X*/
#define REALTIME_CLOCK_START_Y (0U) /*實(shí)時(shí)頁面時(shí)間起始Y*/
#define REALtime_CLOCK_END_Y TITLE_END_Y
/*設(shè)定鎖屏狀態(tài)區(qū)域*/
#define REALTIME_LOCK_START_X (UI_MAINWINDOW_WIDTH*7/10U) /*實(shí)時(shí)頁面鎖屏起始X*/
#define REALTIME_LOCK_END_X (REALTIME_LOCK_START_X+10U) /*實(shí)時(shí)頁面鎖屏終點(diǎn)X*/
#define REALTIME_LOCK_START_Y (0U) /*實(shí)時(shí)頁面鎖屏起始Y*/
#define REALTIME_LOCK_END_Y TITLE_END_Y /*實(shí)時(shí)頁面鎖屏終點(diǎn)Y*/
/*設(shè)定報(bào)警狀態(tài)顯示區(qū)域*/
#define REALTIME_ALARM_STATE_START_X (UI_MAINWINDOW_WIDTH*12/100U) /*實(shí)時(shí)頁面報(bào)警狀態(tài)起始X*/
#define REALTIME_ALARM_STATE_START_Y (4U) /*實(shí)時(shí)頁面報(bào)警狀態(tài)起始Y*/
/*報(bào)警通道號*/
#define REALTIME_ALARM_CHANNEL_NUM_START_X (UI_MAINWINDOW_WIDTH*23/100U) /*實(shí)時(shí)頁面報(bào)警通道起始X*/
#define REALTIME_ALARM_CHANNEL_NUM_START_Y (UI_MAINWINDOW_WIDTH*3/100U) /*實(shí)時(shí)頁面報(bào)警通道起始Y*/
/*設(shè)定鏈接狀態(tài)顯示*/
#define REALTIME_CONNECT_STATE_START_X (6U) /*實(shí)時(shí)頁面鏈接狀態(tài)起始X*/
#define REALTIME_CONNECT_STATE_START_Y (6U) /*實(shí)時(shí)頁面鏈接狀態(tài)起始Y*/
/*設(shè)定電池圖標(biāo)*/
#define REALTIME_BATTERY_START_X (2U) /*實(shí)時(shí)頁面電池圖標(biāo)顯示起始X*/
#define REALTIME_BATTERY_END_X (8U) /*實(shí)時(shí)頁面電池圖標(biāo)顯示起始Y*/
/*設(shè)定不支持類型信息區(qū)域*/
#define BOARD_NOSUPPORT_START_X (UI_MAINWINDOW_WIDTH/2U) /*實(shí)時(shí)頁面不支持類型信息起始X*/
#define BOARD_NOSUPPORT_START_Y (UI_MAINWINDOW_HEIGHT*3/10U) /*實(shí)時(shí)頁面不支持類型信息起始Y*/
/*設(shè)定支持類型信息區(qū)域*/
#define BOARD_SUPPORT_START_X (UI_MAINWINDOW_WIDTH/2U) /*實(shí)時(shí)頁面支持類型信息起始X*/
#define BOARD_SUPPORT_START_Y (UI_MAINWINDOW_HEIGHT*45/100U) /*實(shí)時(shí)頁面支持類型信息起始Y*/
/*----------------------通道塊狀顯示------------------*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP (2U) /*實(shí)時(shí)頁面矩形水平間隙*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP (2U) /*實(shí)時(shí)頁面矩形垂直間隙*/
#define REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX (3U) /*實(shí)時(shí)頁面最大允許每行矩形數(shù)目*/
#define REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX (2U) /*實(shí)時(shí)頁面最大允許矩形行數(shù)目*/
#define REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN (0U) /*實(shí)時(shí)頁面左邊不可用長度*/
#define REALTIME_BLOCKSTYLE_RECT_RIGHT_INVALID_LEN (0U) /*實(shí)時(shí)頁面右邊不可用長度*/
#define REALTIME_BLOCKSTYLE_RECT_START_Y (TITLE_START_Y+TITLE_END_Y) /*實(shí)時(shí)頁面矩形起始Y*/
#define REALTIME_BLOCKSTYLE_RECT_ORIGIN_X REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN /*實(shí)時(shí)頁面矩形起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCKSTYLE_RECT_WIDTH \
((UI_MAINWINDOW_WIDTH-REALTIME_BLOCKSTYLE_RECT_LEFT_INVALID_LEN-REALTIME_BLOCKSTYLE_RECT_RIGHT_INVALID_LEN-(REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCKSTYLE_RECT_END_Y \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCKSTYLE_RECT_V_NUM_MAX) /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算多個(gè)通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1氓皱,高度x不變*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_H_X(X) (REALTIME_BLOCKSTYLE_RECT_ORIGIN_X+REALTIME_BLOCKSTYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCKSTYLE_RECT_WIDTH*(X%REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX))
/*計(jì)算多個(gè)通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1路召,高度x不變*/
#define REALTIME_BLOCKSTYLE_MULTI_RECT_Y_X(X) (REALTIME_BLOCKSTYLE_RECT_START_Y+REALTIME_BLOCKSTYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCKSTYLE_RECT_END_Y*(X/REALTIME_BLOCKSTYLE_RECT_H_NUM_MAX))
/*設(shè)定塊狀線條*/
#define REALTIME_BLOCKSTYLE_LINE_START_X (REALTIME_UNIT_START_X+REALTIME_UNIT_END_X+5U) /*實(shí)時(shí)頁面線條起始X*/
#define REALTIME_BLOCKSTYLE_LINE_END_X (UI_MAINWINDOW_WIDTH-REALTIME_LINE_START_X-REALTIME_SLIP_START_X) /*實(shí)時(shí)頁面線條長度X*/
#define REALTIME_BLOCKSTYLE_LINE_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_SLIP_HEIGHT/2U) /*實(shí)時(shí)頁面線條起始Y*/
#define REALTIME_BLOCKSTYLE_LINE_END_Y (0U)
/*設(shè)定塊狀通道編號*/
/*設(shè)定塊狀濃度值*/
/*設(shè)定塊狀單位*/
/*設(shè)定塊狀報(bào)警鈴*/
/*設(shè)定塊狀報(bào)警時(shí)間*/
/*氣體類型化學(xué)式*/
/*氣體類型中文*/
/*----設(shè)定1通道塊狀高度----*/
#define REALTIME_BLOCK_1_STYLE_RECT_START_Y (TITLE_START_Y+TITLE_END_Y) /*塊狀1通道顯示起始Y*/
#define REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP (5U) /*塊狀1通道水平間隙*/
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP (5U) /*塊狀1通道垂直間隙*/
#define REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX (1U) /*塊狀1通道水平數(shù)量*/
#define REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX (1U) /*塊狀1通道放置行數(shù)以1開始*/
#define REALTIME_BLOCK_1_STYLE_RECT_ORIGIN_X (0U) /*塊狀1通道顯示起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCK_1_STYLE_RECT_WIDTH \
((UI_MAINWINDOW_WIDTH-(REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCK_1_STYLE_RECT_END_Y \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCK_1_STYLE_RECT_V_NUM_MAX) /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算2通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_H_X(X) (REALTIME_BLOCK_1_STYLE_RECT_ORIGIN_X+REALTIME_BLOCKS_1_TYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_1_STYLE_RECT_WIDTH*(X%REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX))
/*計(jì)算2通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1波材,高度x不變*/
#define REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_X(X) (REALTIME_BLOCK_1_STYLE_RECT_START_Y+REALTIME_BLOCK_1_STYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_1_STYLE_RECT_END_Y*(X/REALTIME_BLOCK_1_STYLE_RECT_H_NUM_MAX))
/*----設(shè)定2通道塊狀高度----*/
#define REALTIME_BLOCK_2_STYLE_RECT_START_Y (TITLE_START_Y+TITLE_END_Y) /*塊狀2通道顯示起始Y*/
#define REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP (5U) /*塊狀2通道水平間隙*/
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP (5U) /*塊狀2通道垂直間隙*/
#define REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX (2U) /*塊狀2通道水平數(shù)量*/
#define REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX (1U) /*塊狀2通道放置行數(shù)以1開始*/
#define REALTIME_BLOCK_2_STYLE_RECT_ORIGIN_X (0U) /*塊狀2通道顯示起始X*/
/*通過計(jì)算每通道矩形允許寬度X*/
#define REALTIME_BLOCK_2_STYLE_RECT_WIDTH \
((UI_MAINWINDOW_WIDTH-(REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP*(REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX+1)))/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)
/*通過計(jì)算每通道矩形允許高度Y*/
#define REALTIME_BLOCK_2_STYLE_RECT_END_Y \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP*(REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX+1)))/REALTIME_BLOCK_2_STYLE_RECT_V_NUM_MAX) /*實(shí)時(shí)頁面矩形寬度Y*/
/*計(jì)算2通道矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1股淡,高度x不變*/
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_H_X(X) (REALTIME_BLOCK_2_STYLE_RECT_ORIGIN_X+REALTIME_BLOCKS_2_TYLE_MULTI_RECT_X_GAP*((X%REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_2_STYLE_RECT_WIDTH*(X%REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX))
/*計(jì)算2通道矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_X(X) (REALTIME_BLOCK_2_STYLE_RECT_START_Y+REALTIME_BLOCK_2_STYLE_MULTI_RECT_Y_GAP*((X/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX)+1)+REALTIME_BLOCK_2_STYLE_RECT_END_Y*(X/REALTIME_BLOCK_2_STYLE_RECT_H_NUM_MAX))
/*-------------------------通道條狀顯示-------------------*/
#define REALTIME_SLIP_START_X (2U) /*實(shí)時(shí)頁面通道條狀起始X*/
#define REALTIME_SLIP_END_X (UI_MAINWINDOW_WIDTH-REALTIME_SLIP_START_X*2U) /*實(shí)時(shí)頁面通道條狀長度X*/
#define REALTIME_MULTI_SLIP_V_GAP (4U) /*實(shí)時(shí)頁面通道條狀垂直間隙*/
#define REALTIME_SLIP_V_NUM_MAX (4U) /*最大允許實(shí)時(shí)頁面通道條狀數(shù)目*/
#define REALTIME_SLIP_ORIGIN_Y TITLE_END_Y /*實(shí)時(shí)頁面通道條狀起始Y*/
#define REALTIME_ROUND_VALUE (6U) /*設(shè)定倒角*/
/*通過計(jì)算條狀顯示允許高度Y*/
#define REALTIME_SLIP_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-BOTTOM_END_Y-(REALTIME_MULTI_SLIP_V_GAP*(REALTIME_SLIP_V_NUM_MAX+1)))/REALTIME_SLIP_V_NUM_MAX)
/*計(jì)算多個(gè)條狀顯示Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1廷区,高度x不變*/
#define REALTIME_MULTI_SLIP_V_Y(X) (REALTIME_SLIP_ORIGIN_Y+REALTIME_MULTI_SLIP_V_GAP*(X+1)+REALTIME_SLIP_HEIGHT*X)
/*設(shè)定通道編號顯示區(qū)域*/
#define REALTIME_CHANNEL_NUM_START_X (REALTIME_SLIP_START_X+2U) /*實(shí)時(shí)頁面編號顯示起始X*/
#define REALTIME_CHANNEL_NUM_END_X (32U) /*實(shí)時(shí)頁面編號顯示長度X*/
#define REALTIME_CHANNEL_NUM_GAP_V (2U) /*實(shí)時(shí)頁面編號顯示垂直間隙*/
#define REALTIME_CHANNEL_NUM_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_CHANNEL_NUM_GAP_V) /*實(shí)時(shí)頁面編號起始Y*/
#define REALTIME_CHANNEL_NUM_END_Y (REALTIME_SLIP_HEIGHT-REALTIME_UNIT_GAP_V*2) /*實(shí)時(shí)頁面編號高度Y*/
/*設(shè)定報(bào)警鈴顯示區(qū)域*/
#define REALTIME_ICO_START_X (REALTIME_CHANNEL_NUM_START_X+REALTIME_CHANNEL_NUM_END_X+4U) /*實(shí)時(shí)頁面圖標(biāo)顯示起始X*/
#define REALTIME_ICO_END_X (32U) /*實(shí)時(shí)頁面圖標(biāo)顯示長度X*/
#define REALTIME_ICO_GAP_V (2U) /*實(shí)時(shí)頁面圖標(biāo)顯示垂直間隙*/
#define REALTIME_ICO_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_ICO_GAP_V) /*實(shí)時(shí)頁面圖標(biāo)顯示起始Y*/
#define REALTIME_ICO_END_Y (REALTIME_SLIP_HEIGHT-REALTIME_ICO_GAP_V*2U) /*實(shí)時(shí)頁面圖標(biāo)顯示高度Y*/
/*設(shè)定濃度顯示區(qū)域*/
#define REALTIME_VALUE_START_X (REALTIME_ICO_START_X+REALTIME_ICO_END_X+4U) /*實(shí)時(shí)頁面濃度值起始X*/
#define REALTIME_VALUE_END_X (160U) /*實(shí)時(shí)頁面濃度值長度X*/
#define REALTIME_VALUE_GAP_V (2U) /*實(shí)時(shí)頁面濃度顯示垂直間隙*/
#define REALTIME_VALUE_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_VALUE_GAP_V)/*實(shí)時(shí)頁面濃度值起始Y*/
#define REALTIME_VALUE_END_Y (REALTIME_SLIP_HEIGHT-REALTIME_VALUE_GAP_V*2U) /*實(shí)時(shí)頁面濃度值高度Y*/
/*設(shè)定單位顯示區(qū)域*/
#define REALTIME_UNIT_START_X (REALTIME_VALUE_START_X+REALTIME_VALUE_END_X+2U) /*實(shí)時(shí)頁面單位顯示起始X*/
#define REALTIME_UNIT_END_X (32U) /*實(shí)時(shí)頁面單位顯示長度X*/
#define REALTIME_UNIT_GAP_V (2U) /*實(shí)時(shí)頁面單位顯示垂直間隙*/
#define REALTIME_UNIT_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_UNIT_GAP_V) /*實(shí)時(shí)頁面單位顯示起始Y*/
#define REALTIME_UNIT_END_Y (REALTIME_SLIP_HEIGHT-REALTIME_UNIT_GAP_V*2U) /*實(shí)時(shí)頁面單位顯示高度Y*/
/*設(shè)定線條顯示區(qū)域*/
#define REALTIME_LINE_START_X (REALTIME_UNIT_START_X+REALTIME_UNIT_END_X+5U) /*實(shí)時(shí)頁面線條起始X*/
#define REALTIME_LINE_END_X (UI_MAINWINDOW_WIDTH-REALTIME_LINE_START_X-REALTIME_SLIP_START_X) /*實(shí)時(shí)頁面線條長度X*/
#define REALTIME_LINE_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_SLIP_HEIGHT/2U) /*實(shí)時(shí)頁面線條起始Y*/
#define REALTIME_LINE_END_Y (0U) /*實(shí)時(shí)頁面線條高度Y*/
/*設(shè)定氣體類型顯示區(qū)域*/
#define REALTIME_GASTYPE_START_X (REALTIME_LINE_START_X+REALTIME_LINE_END_X-36*3U) /*實(shí)時(shí)頁面氣體類型起始X*/
#define REALTIME_GASTYPE_END_X (UI_MAINWINDOW_WIDTH-REALTIME_GASTYPE_START_X-REALTIME_SLIP_START_X)/*實(shí)時(shí)頁面氣體類型長度X*/
#define REALTIME_GASTYPE_GAP_V (2U) /*實(shí)時(shí)頁面氣體類型垂直間隙*/
#define REALTIME_GASTYPE_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_GASTYPE_GAP_V) /*實(shí)時(shí)頁面氣體類型顯示起始Y*/
#define REALTIME_GASTYPE_END_Y (REALTIME_SLIP_HEIGHT/2U-REALTIME_GASTYPE_GAP_V*2U) /*實(shí)時(shí)頁面氣體類型高度Y*/
/*設(shè)定氣體名稱顯示區(qū)域----bottom*/
#define REALTIME_GASNAME_START_X REALTIME_GASTYPE_START_X /*實(shí)時(shí)頁面氣體名稱起始X*/
#define REALTIME_GASNAME_END_X (UI_MAINWINDOW_WIDTH-REALTIME_GASTYPE_START_X-REALTIME_SLIP_START_X)/*實(shí)時(shí)頁面氣體名稱程度X*/
#define REALTIME_GASNAME_GAP_V (2U) /*實(shí)時(shí)頁面氣體名稱垂直間隙*/
#define REALTIME_GASNAME_START_Y(X) (REALTIME_LINE_START_Y(X)+REALTIME_GASNAME_GAP_V) /*實(shí)時(shí)頁面氣體名稱顯示起始Y*/
#define REALTIME_GASNAME_END_Y (REALTIME_SLIP_HEIGHT/2U-REALTIME_GASNAME_GAP_V*2U) /*時(shí)頁面氣體名稱高度Y*/
/*設(shè)定報(bào)警時(shí)間顯示區(qū)域----upper*/
#define REALTIME_ALARMTIME_START_X REALTIME_LINE_START_X /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示起始X*/
#define REALTIME_ALARMTIME_END_X (REALTIME_LINE_END_X/2U) /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示長度X*/
#define REALTIME_ALARMTIME_GAP_V (2U) /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示垂直間隙*/
#define REALTIME_ALARMTIME_START_Y(X) (REALTIME_MULTI_SLIP_V_Y(X)+REALTIME_ALARMTIME_GAP_V) /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示起始Y*/
#define REALTIME_ALARMTIME_END_Y (REALTIME_SLIP_HEIGHT/2U-REALTIME_ALARMTIME_GAP_V*2U) /*實(shí)時(shí)頁面報(bào)警時(shí)間顯示高度Y*/
/*設(shè)定房間名稱顯示區(qū)域----bottom*/
#define REALTIME_ROOM_START_X REALTIME_ALARMTIME_START_X /*實(shí)時(shí)頁面房間名稱顯示起始X*/
#define REALTIME_ROOM_END_X (REALTIME_LINE_END_X/2U) /*實(shí)時(shí)頁面房間名稱顯示長度X*/
#define REALTIME_ROOM_GAP_V (2U) /*實(shí)時(shí)頁面房間名稱顯示垂直間隙*/
#define REALTIME_ROOM_START_Y(X) (REALTIME_LINE_START_Y(X)+REALTIME_ROOM_GAP_V) /*實(shí)時(shí)頁面房間名稱顯示起始Y*/
#define REALTIME_ROOM_END_Y (REALTIME_SLIP_HEIGHT/2U-REALTIME_ALARMTIME_GAP_V*2U) /*實(shí)時(shí)頁面房間名稱顯示高度Y*/
/*===菜單 按鈕最小間隙設(shè)定===*/
#define MENU_TITLE_START_Y (0U) /*菜單標(biāo)題欄起始Y*/
#define MENU_TITLE_END_Y (UI_MAINWINDOW_HEIGHT*12/100) /*菜單標(biāo)題欄高度Y*/
#define MENU_BOTTOM_START_Y (UI_MAINWINDOW_HEIGHT*9/10) /*菜單底部狀態(tài)欄起始Y*/
#define MENU_BOTTOM_END_Y (UI_MAINWINDOW_HEIGHT-BOTTOM_START_Y) /*菜單底部狀態(tài)欄高度Y*/
/*upper*/
#define MENU_DEVICE_STATE_START_X (0U) /*菜單設(shè)備狀態(tài)起始X*/
#define MENU_DEVICE_STATE_END_X (UI_MAINWINDOW_WIDTH/4) /*菜單設(shè)備狀態(tài)長度X*/
#define MENU_TITLE_START_X MENU_DEVICE_STATE_END_X /*菜單標(biāo)題起始X*/
#define MENU_TITLE_END_X (UI_MAINWINDOW_WIDTH/2) /*菜單標(biāo)題長度X*/
#define MENU_CLOCK_START_X (UI_MAINWINDOW_WIDTH*3/4) /*菜單時(shí)鐘起始X*/
#define MENU_CLOCK_END_X (UI_MAINWINDOW_WIDTH-MENU_CLOCK_START_X) /*菜單時(shí)鐘長度X*/
/*bottom*/
#define MENU_TIPS_OPT_START_X (0U) /*菜單操作提示起始X*/
#define MENU_TIPS_OPT_END_X (UI_MAINWINDOW_WIDTH*3/10U) /*菜單操作提示長度X*/
#define MENU_TIPS_PAGENUM_START_X MENU_TIPS_OPT_END_X /*菜單數(shù)目提示起始X*/
#define MENU_TIPS_PAGENUM_END_X (UI_MAINWINDOW_WIDTH-MENU_TIPS_OPT_END_X) /*菜單數(shù)目提示長度X*/
/*菜單 按鈕屬性*/
#define MENU_BUTTON_START_X (UI_MAINWINDOW_WIDTH*3/10) /*菜單按鈕起始X*/
#define MENU_BUTTON_END_X (UI_MAINWINDOW_WIDTH*4/10) /*菜單按鈕長度X*/
#define MENU_BUTTON_V_NUM_MAX (5U) /*菜單最大允許按鈕數(shù)目*/
#define MENU_V_GAP_MIN (5U) /*菜單按鈕垂直間隙*/
#define MENU_BUTTON_ORIGIN_Y MENU_TITLE_END_Y /*菜單按鈕起始Y*//*通過計(jì)算菜單按鈕允許高度Y*/
#define MENU_BUTTON_HEIGHT \
((UI_MAINWINDOW_HEIGHT-MENU_TITLE_END_Y-MENU_BOTTOM_END_Y-(MENU_V_GAP_MIN*(MENU_BUTTON_V_NUM_MAX+1)))/MENU_BUTTON_V_NUM_MAX)
/*計(jì)算多個(gè)菜單按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1唯灵,高度*x不變*/
#define MENU_MULTI_BUTTON_V_Y(X) (MENU_BUTTON_ORIGIN_Y+MENU_V_GAP_MIN*(X+1)+MENU_BUTTON_HEIGHT*X)
/*===設(shè)定產(chǎn)品名稱區(qū)域===*/
#define LOGO_PRODUCT_MAME_START_X (UI_MAINWINDOW_WIDTH/2U) /*產(chǎn)品名稱起始X*/
#define LOGO_PRODUCT_MAME_START_Y (UI_MAINWINDOW_HEIGHT*3/10U) /*產(chǎn)品名稱起始Y*//*設(shè)定版本號區(qū)域*/
#define LOGO_VERSION_NUM_START_X (UI_MAINWINDOW_WIDTH/2U) /*版本號起始X*/
#define LOGO_VERSION_NUM_START_Y (UI_MAINWINDOW_HEIGHT*45/100U) /*版本號起始Y*//*產(chǎn)品開發(fā)進(jìn)展區(qū)域*/
#define DEVELOPING_STATE_START_X (UI_MAINWINDOW_WIDTH/2U) /*開發(fā)進(jìn)展起始X*/
#define DEVELOPING_STATE_START_Y (UI_MAINWINDOW_HEIGHT*3/10U) /*開發(fā)進(jìn)展起始Y*/
/*===設(shè)定密碼輸入對話框區(qū)域===*/
#define PASSWD_DIGLOG_BOX_START_X (UI_MAINWINDOW_WIDTH*2/10U) /*密碼輸入框起始X*/
#define PASSWD_DIGLOG_BOX_END_X (UI_MAINWINDOW_WIDTH*6/10U) /*密碼輸入框長度X*/
#define PASSWD_DIGLOG_BOX_START_Y (UI_MAINWINDOW_HEIGHT*3/10U) /*密碼輸入框起始Y*/
#define PASSWD_DIGLOG_BOX_END_Y (UI_MAINWINDOW_HEIGHT*4/10U) /*密碼輸入框高度Y*/
#define PASSWD_DIGLOG_BOX_TEXT_START_X (5U) /*密碼輸入框文本相對起始X*/
#define PASSWD_DIGLOG_BOX_TEXT_END_X (150U) /*密碼輸入框文本長度X*/
#define PASSWD_DIGLOG_BOX_TEXT_START_Y (10U) /*密碼輸入框文本相對起始Y*/
#define PASSWD_DIGLOG_BOX_TEXT_END_Y (20U) /*密碼輸入框文本高度Y*/
#define PASSWD_DIGLOG_BOX_EDIT_START_X (PASSWD_DIGLOG_BOX_END_X*3/10) /*密碼輸入框編輯相對起始X*/
#define PASSWD_DIGLOG_BOX_EDIT_END_X (PASSWD_DIGLOG_BOX_END_X*4/10) /*密碼輸入框編輯長度X*/
#define PASSWD_DIGLOG_BOX_EDIT_START_Y (PASSWD_DIGLOG_BOX_END_Y*5/10) /*密碼輸入框編輯相對起始Y*/
#define PASSWD_DIGLOG_BOX_EDIT_END_Y (25U) /*密碼輸入框編輯高度Y*/
/*===設(shè)定電流環(huán)校準(zhǔn)頁面文本及按鈕區(qū)域===*/
#define CURRENTLOOP_BUTTON_START_X (UI_MAINWINDOW_WIDTH*2/10U) /*校準(zhǔn)按鈕起始X*/
#define CURRENTLOOP_BUTTON_END_X (UI_MAINWINDOW_WIDTH*6/10U) /*校準(zhǔn)按鈕長度X*/
#define CURRENTLOOP_BUTTON_START_Y (BOTTOM_START_Y-2U) /*校準(zhǔn)按鈕起始Y*/
#define CURRENTLOOP_BUTTON_END_Y BOTTOM_END_Y /*校準(zhǔn)按鈕高度Y*/
#define CURRENTLOOP_TEXT_START_X (UI_MAINWINDOW_WIDTH*4/100U) /*校準(zhǔn)文本起始X*/
#define CURRENTLOOP_TEXT_END_X (UI_MAINWINDOW_WIDTH*92/100U) /*校準(zhǔn)按鈕長度X*/
#define CURRENTLOOP_MULTI_TEXT_V_GAP (5U) /*文本垂直間隙*/
#define CURRENTLOOP_TEXT_NUM_MAX (4U) /*最大允許文本數(shù)目*/
#define CURRENTLOOP_TEXT_ORIGIN_Y TITLE_END_Y /*文本起始Y*//*通過計(jì)算校準(zhǔn)頁面文本允許高度Y*/
#define CURRENTLOOP_TEXT_HEIGHT \
((UI_MAINWINDOW_HEIGHT-TITLE_END_Y-CURRENTLOOP_BUTTON_END_Y-(CURRENTLOOP_MULTI_TEXT_V_GAP*(CURRENTLOOP_TEXT_NUM_MAX+1)))/CURRENTLOOP_TEXT_NUM_MAX)
/*計(jì)算多個(gè)文本Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1,高度x不變*/
#define CURRENTLOOP_MULTI_TEXT_V_Y(X) (CURRENTLOOP_TEXT_ORIGIN_Y+CURRENTLOOP_MULTI_TEXT_V_GAP*(X+1)+CURRENTLOOP_TEXT_HEIGHT*X)
/*===設(shè)定歷史數(shù)據(jù)表格及轉(zhuǎn)動圓區(qū)域===*/
#define HISTRORY_CIRCLE_START_X (UI_MAINWINDOW_WIDTH/2U) /*圓心在X的起點(diǎn)*/
#define HISTRORY_CIRCLE_START_Y (UI_MAINWINDOW_HEIGHT/2U) /*圓心在Y的起點(diǎn)*/
#define HISTRORY_CIRCLE_R_SIZE (UI_MAINWINDOW_HEIGHT/10U) /*設(shè)定圓的半徑*/
#define HISTRORY_CIRCLE_ANGLE_START (0) /*設(shè)定圓的起始角度--通過增大實(shí)現(xiàn)轉(zhuǎn)動*/
#define HISTRORY_CIRCLE_ANGLE_END (330) /*設(shè)定圓的終點(diǎn)角度*/
#define HISTRORY_REDRAW_RECT_START_X (HISTRORY_CIRCLE_START_X-HISTRORY_CIRCLE_R_SIZE-1) /*重繪區(qū)域起始X*/
#define HISTRORY_REDRAW_RECT_END_X (HISTRORY_REDRAW_RECT_START_X+HISTRORY_CIRCLE_R_SIZE*2+1) /*重繪區(qū)域終點(diǎn)X*/
#define HISTRORY_REDRAW_RECT_START_Y (HISTRORY_CIRCLE_START_Y-HISTRORY_CIRCLE_R_SIZE-1) /*重繪區(qū)域起始Y*/
#define HISTRORY_REDRAW_RECT_END_Y (HISTRORY_REDRAW_RECT_START_Y+HISTRORY_CIRCLE_R_SIZE*2+1) /*重繪區(qū)域終點(diǎn)Y*/
#define HISTRORY_LISTVIEW_COLUMN_1_SIZE (UI_MAINWINDOW_WIDTH*2/10U) /*表格寬度*/
#define HISTRORY_LISTVIEW_COLUMN_2_SIZE (UI_MAINWINDOW_WIDTH*4/10U) /*表格寬度*/
#define HISTRORY_LISTVIEW_COLUMN_3_SIZE (UI_MAINWINDOW_WIDTH-HISTRORY_LISTVIEW_COLUMN_1_SIZE-HISTRORY_LISTVIEW_COLUMN_2_SIZE) /*表格寬度*/
#define HISTRORY_LISTVIEW_HEAD_HEIGHT (25U) /*表格標(biāo)題高度*/
#define HISTRORY_LISTVIEW_V_NUM_MAX (8U) /*表格最大允許行數(shù)目*/
#define HISTRORY_LISTVIEW_ORIGIN_Y (HISTRORY_LISTVIEW_HEAD_HEIGHT+MENU_TITLE_END_Y)/*表格內(nèi)容起始Y*/
/*通過計(jì)算表格允許高度Y*/
#define HISTRORY_LISTVIEW_ROW_HEIGHT \
((UI_MAINWINDOW_HEIGHT-HISTRORY_LISTVIEW_ORIGIN_Y)/HISTRORY_LISTVIEW_V_NUM_MAX)
/*===設(shè)定通道搜索頁面文本顯示屬性===*/
#define CHANNELSEARCH_LABEL_START_X (UI_MAINWINDOW_WIDTH*2/100U) /*通道搜索標(biāo)簽起始X*/
#define CHANNELSEARCH_LABEL_END_X (UI_MAINWINDOW_WIDTH*14/100U) /*通道搜索標(biāo)簽長度X*/
#define CHANNELSEARCH_LABEL_START_Y (UI_MAINWINDOW_HEIGHT*38/100U) /*通道搜索標(biāo)簽起始Y*/
#define CHANNELSEARCH_LABEL_END_Y (UI_MAINWINDOW_HEIGHT*6/100U) /*通道搜索標(biāo)簽高度Y*/
#define CHANNELSEARCH_TIPS_START_X (0U) /*通道搜索提示起始X*/
#define CHANNELSEARCH_TIPS_END_X (UI_MAINWINDOW_WIDTH-CHANNELSEARCH_TIPS_START_X*2U) /*通道搜索提示長度X*/
#define CHANNELSEARCH_TIPS_START_Y (CHANNELSEARCH_LABEL_START_Y+CHANNELSEARCH_LABEL_END_Y)/*通道搜索提示起始Y*/
#define CHANNELSEARCH_TIPS_END_Y (UI_MAINWINDOW_HEIGHT-CHANNELSEARCH_TIPS_START_Y) /*通道搜索提示高度Y*/
/*搜索結(jié)果 正方形屬性*/
#define CHANNELSEARCH_RECT_START_Y (CHANNELSEARCH_LABEL_START_Y+CHANNELSEARCH_LABEL_END_Y+2) /*矩形起始Y*/
#define CHANNELSEARCH_MULTI_RECT_X_GAP (2U) /*矩形水平間隙*/
#define CHANNELSEARCH_MULTI_RECT_Y_GAP (2U) /*矩形垂直間隙*/
#define CHANNELSEARCH_RECT_H_NUM_MAX (12U) /*最大允許矩形數(shù)目*/
#define CHANNELSEARCH_RECT_LEFT_INVALID_LEN (0U) /*左邊不可用長度*/
#define CHANNELSEARCH_RECT_RIGHT_INVALID_LEN (0U) /*右邊不可用長度*/
#define CHANNELSEARCH_RECT_ORIGIN_X CHANNELSEARCH_RECT_LEFT_INVALID_LEN /*矩形起始X*/
/*通過計(jì)算矩形允許寬度X*/
#define CHANNELSEARCH_RECT_WIDTH \
((UI_MAINWINDOW_WIDTH-CHANNELSEARCH_RECT_LEFT_INVALID_LEN-CHANNELSEARCH_RECT_RIGHT_INVALID_LEN-(CHANNELSEARCH_MULTI_RECT_X_GAP*(CHANNELSEARCH_RECT_H_NUM_MAX+1)))/CHANNELSEARCH_RECT_H_NUM_MAX)
#define CHANNELSEARCH_RECT_END_Y (CHANNELSEARCH_RECT_WIDTH) /*矩形寬度Y*/
/*計(jì)算多個(gè)矩形X坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1隙轻,高度x不變*/
#define CHANNELSEARCH_MULTI_RECT_H_X(X) (CHANNELSEARCH_RECT_ORIGIN_X+CHANNELSEARCH_MULTI_RECT_X_GAP*((X%CHANNELSEARCH_RECT_H_NUM_MAX)+1)+CHANNELSEARCH_RECT_WIDTH*(X%CHANNELSEARCH_RECT_H_NUM_MAX))
/*計(jì)算多個(gè)矩形Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1埠帕,高度x不變*/
#define CHANNELSEARCH_MULTI_RECT_Y_X(X) (CHANNELSEARCH_RECT_START_Y+CHANNELSEARCH_MULTI_RECT_Y_GAP*((X/CHANNELSEARCH_RECT_H_NUM_MAX)+1)+CHANNELSEARCH_RECT_END_Y*(X/CHANNELSEARCH_RECT_H_NUM_MAX))
/*通道參數(shù)設(shè)置頁面按鈕文字空格,用于居中文字*/
#define CHANNEL_ADDSPACE_NUM_MAX 17U /*按鈕標(biāo)簽文本添加空格數(shù),應(yīng) < 20 */
/*===設(shè)定氣體類型索引頁面顯示屬性===*/
#define ITEM_INDEX_PAGE_START_X (0U) /*氣體類型參數(shù)索引頁面起始X*/
#define ITEM_INDEX_PAGE_END_X UI_MAINWINDOW_WIDTH /*氣體類型參數(shù)索引頁面長度X*/
#define ITEM_INDEX_PAGE_START_Y (0U) /*氣體類型參數(shù)索引頁面起始Y*/
#define ITEM_INDEX_PAGE_END_Y UI_MAINWINDOW_HEIGHT /*氣體類型參數(shù)索引頁面長度Y*/
/*頁面標(biāo)題*/
#define ITEM_INDEX_PAGE_DEVICE_STATE_START_X ITEM_INDEX_PAGE_START_X /*氣體類型參數(shù)索引頁面設(shè)備狀態(tài)起始X*/
#define ITEM_INDEX_PAGE_DEVICE_STATE_END_X (ITEM_INDEX_PAGE_END_X*2/10U) /*氣體類型參數(shù)索引頁面設(shè)備狀態(tài)長度X*/
#define ITEM_INDEX_PAGE_TITLE_START_X (ITEM_INDEX_PAGE_DEVICE_STATE_START_X+ITEM_INDEX_PAGE_DEVICE_STATE_END_X) /*氣體類型參數(shù)索引頁面頁面標(biāo)題起始X*/
#define ITEM_INDEX_PAGE_TITLE_END_X (ITEM_INDEX_PAGE_END_X*6/10U) /*氣體類型參數(shù)索引頁面頁面標(biāo)題長度X*/
#define ITEM_INDEX_PAGE_CLOCK_START_X (ITEM_INDEX_PAGE_TITLE_START_X+ITEM_INDEX_PAGE_TITLE_END_X) /*氣體類型參數(shù)索引頁面頁面時(shí)鐘起始X*/
#define ITEM_INDEX_PAGE_CLOCK_END_X (ITEM_INDEX_PAGE_END_X-PAGE_CLOCK_START_X) /*氣體類型參數(shù)索引頁面時(shí)鐘長度X*/
#define ITEM_INDEX_PAGE_TITLE_START_Y ITEM_INDEX_PAGE_START_Y /*氣體類型參數(shù)索引頁面標(biāo)題欄起始Y*/
#define ITEM_INDEX_PAGE_TITLE_END_Y (ITEM_INDEX_PAGE_END_Y/10) /*氣體類型參數(shù)索引頁面標(biāo)題欄高度Y*/
/*索引頁面按鈕,垂直布局*/
#define ITEM_INDEX_PAGE_BUTTON_START_Y (ITEM_INDEX_PAGE_TITLE_START_Y+ITEM_INDEX_PAGE_TITLE_END_Y) /*氣體類型參數(shù)索引頁面按鈕顯示起始Y*/
#define ITEM_INDEX_PAGE_BUTTON_X_GAP (10U) /*氣體類型參數(shù)索引頁面按鈕水平間隙*/
#define ITEM_INDEX_PAGE_BUTTON_Y_GAP (10U) /*氣體類型參數(shù)索引頁面按鈕垂直間隙*/
#define ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX (5U) /*氣體類型參數(shù)索引頁面按鈕水平數(shù)量*/
#define ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX (6U) /*氣體類型參數(shù)索引頁面按鈕放置行數(shù)以1開始*/
#define ITEM_INDEX_PAGE_BUTTON_ORIGIN_X (ITEM_INDEX_PAGE_START_X+0U) /*氣體類型參數(shù)索引頁面按鈕顯示起始X*/
/*通過計(jì)算每個(gè)頁面最多按鈕數(shù)目*/
#define ITEM_INDEX_PAGE_BUTTON_NUM_MAX (ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX*ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)
/*通過計(jì)算個(gè)按鈕允許寬度X*/
#define ITEM_INDEX_PAGE_BUTTON_WIDTH \
((ITEM_INDEX_PAGE_END_X-ITEM_INDEX_PAGE_BUTTON_ORIGIN_X-(ITEM_INDEX_PAGE_BUTTON_X_GAP*(ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX+1)))/ITEM_INDEX_PAGE_BUTTON_H_NUM_MAX)
/*通過計(jì)算個(gè)按鈕允許高度Y*/
#define ITEM_INDEX_PAGE_BUTTON_END_Y \
((ITEM_INDEX_PAGE_END_Y-ITEM_INDEX_PAGE_TITLE_END_Y-(ITEM_INDEX_PAGE_BUTTON_Y_GAP*(ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX+1)))/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX) /*索引頁面按鈕寬度Y*/
/*計(jì)算按鈕X坐標(biāo)起點(diǎn),數(shù)目從0開始,則垂直數(shù)目未到情況下X起點(diǎn)不變玖绿,每列滿則向X增大一個(gè)寬度*/
#define ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_H_X(X) (ITEM_INDEX_PAGE_BUTTON_ORIGIN_X+ITEM_INDEX_PAGE_BUTTON_X_GAP*((X/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)+1)+ITEM_INDEX_PAGE_BUTTON_WIDTH*(X/ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX))
/*計(jì)算按鈕Y坐標(biāo)起點(diǎn),數(shù)目從0開始則間隙X需+1敛瓷,高度x不變*/
#define ITEM_INDEX_PAGE_BUTTON_MULTI_RECT_Y_X(X) (ITEM_INDEX_PAGE_BUTTON_START_Y+ITEM_INDEX_PAGE_BUTTON_Y_GAP*((X%ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX)+1)+ITEM_INDEX_PAGE_BUTTON_END_Y*(X%ITEM_INDEX_PAGE_BUTTON_V_NUM_MAX))
/* Exported typedefines ------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macros------------------------------------------------------------*/
#define ARRAYNUM(arr_name) (uint32_t)(sizeof(arr_name)/sizeof(*(arr_name)))
/* Exported functions prototypes ---------------------------------------------*/
void millsec_IRQ_handler(void);
uint32_t get_time_ms(void);
uint32_t get_time_sec(void);#ifdef __cplusplus //end extern c
}
#endif
#endif
/******************************** End of file *********************************/