📄 ui_osd.c
字号:
#include "..\INC\SYS_DECLARE.H"
#include "..\INC\SYS_GLOBAL.H"
#include "..\API\INC\API_IIC.H"
#include "..\API\INC\API_REG.H"
#include "..\API\INC\API_OSD.H"
#include "INC\UI_OSD.H"
/****************************************************************************
* Function : UI_OSD_Initial()
***************************************************************************/
void UI_OSD_Initial(void)
{
API_OSD_Initial();
API_OSD_LoadCLUT(OsdCLUT);
UI_OSD_LoadFont();
API_SC_WriteByte(REG_SC_GRAPHIC_STA, 0x27); // GRAPHIC Font START
API_SC_WriteByte(REG_SC_GRAPHIC_END, 0x3E); // GRAPHIC FontEND
API_SC_WriteByte(REG_SC_CLUT_ALPHA, 0x00); // OSD CLUT Alphablending
API_OSD_SetPosition(0x06, 0x00);
API_OSD_Enable(1);
}
/****************************************************************************
* Function : UI_OSD_LoadFont()
***************************************************************************/
void UI_OSD_LoadFont(void)
{
BYTE it;
WORD wOffset;
BYTE code *pData = OsdFontData;
for(it = 0, wOffset = 0; it < 0x3F; it++, wOffset += 24)
API_OSD_LoadFont(it, (pData + wOffset));
}
/****************************************************************************
* Function : UI_OSD_DynamicFontDownload()
***************************************************************************/
void UI_OSD_DynamicFontDownload(BYTE bFontIdx, BYTE bRamAddr)
{
BYTE code *pData = OsdFontData + (WORD)bFontIdx * 24;
API_OSD_LoadFont(bRamAddr, pData);
}
/****************************************************************************
* Function : UI_OSD_SetAreaRowAttr()
***************************************************************************/
void UI_OSD_SetAreaRowAttr(BYTE bStart, BYTE bEnd, BYTE bAttrMsb, BYTE bAttrLsb)
{
BYTE it;
for(it = bStart; it < bEnd; it++)
API_OSD_SetRowAttr(it, bAttrMsb, bAttrLsb);
API_OSD_SetRowAttr(it, bAttrMsb, bAttrLsb + 1);
}
/****************************************************************************
* Function : UI_OSD_DrawFrame()
***************************************************************************/
void UI_OSD_DrawFrame(BYTE VStart, BYTE VEnd, BYTE HStart, BYTE HEnd)
{
BYTE ix, iy;
// draw top side
API_OSD_SetAddress(VStart, HStart);
API_OSD_WriteChar(_FRAME_TL, OSD_BLACK);
for(ix = HStart+1; ix < HEnd; ix++)
API_OSD_WriteChar(_FRAME_TM, OSD_BLACK);
API_OSD_WriteChar(_FRAME_TR, OSD_BLACK);
// draw middle side
for(iy = (VStart + 1); iy < VEnd; iy++)
{
API_OSD_SetAddress(iy, HStart);
API_OSD_WriteChar(_FRAME_ML, OSD_BLACK);
API_OSD_SetAddress(iy, HEnd);
API_OSD_WriteChar(_FRAME_MR, OSD_BLACK);
}
// draw bottom side
API_OSD_SetAddress(VEnd, HStart);
API_OSD_WriteChar(_FRAME_BL, OSD_BLACK);
for(ix = HStart+1; ix < HEnd; ix++)
API_OSD_WriteChar(_FRAME_BM, OSD_BLACK);
API_OSD_WriteChar(_FRAME_BR, OSD_BLACK);
}
/****************************************************************************
* Function : UI_OSD_DrawProgressBar()
***************************************************************************/
void UI_OSD_DrawProgressBar(BYTE bRow, BYTE bCol, BYTE bVal, BOOL fActualVal)
{
BYTE bPercentage = (BYTE)(((WORD)bVal * 100) / 255);
BYTE bScaled = (BYTE)(((WORD)bPercentage * 3) / 10);
BYTE bFull = bScaled / 3;
BYTE bRemain = bScaled % 3;
BYTE it;
API_OSD_SetAddress(bRow, bCol);
for(it = 0; it < bFull; it++)
API_OSD_WriteChar(_BAR12, OSD_BLUE);
if(bFull != 10)
{
if(bRemain == 0) API_OSD_WriteChar(_MINUS, OSD_BLUE);
if(bRemain == 1) API_OSD_WriteChar(_BAR4, OSD_BLUE);
if(bRemain == 2) API_OSD_WriteChar(_BAR8, OSD_BLUE);
for(it = bFull; it < 9; it++)
API_OSD_WriteChar(_MINUS, OSD_BLUE);
}
API_OSD_WriteChar(__, OSD_BLACK);
API_OSD_WriteChar(__, OSD_BLACK);
if(fActualVal) it = bVal;
else it = bPercentage;
UI_OSD_PrintNumber((WORD)it, 0);
}
/****************************************************************************
* Function : UI_OSD_DrawBatteryStatus()
***************************************************************************/
void UI_OSD_DrawBatteryStatus(BYTE bRow, BYTE bCol, BYTE bVal, BYTE bColor)
{
BYTE bPercentage = (((WORD)bVal * 3) / 255);
BYTE bBatteryL;
BYTE bBatteryR;
if(bPercentage == 3)
{
bBatteryL = _BATTERY_L2;
bBatteryR = _BATTERY_R2;
}
else if(bPercentage == 2)
{
bBatteryL = _BATTERY_L2;
bBatteryR = _BATTERY_R1;
}
else if(bPercentage == 1)
{
bBatteryL = _BATTERY_L1;
bBatteryR = _BATTERY_R0;
}
else
{
bBatteryL = _BATTERY_L0;
bBatteryR = _BATTERY_R0;
}
UI_OSD_DynamicFontDownload(bBatteryL, _DYNAMIC_DOWNLOAD_1);
UI_OSD_DynamicFontDownload(bBatteryR, _DYNAMIC_DOWNLOAD_2);
API_OSD_SetAddress(bRow, bCol);
API_OSD_WriteChar(_DYNAMIC_DOWNLOAD_1, bColor);
API_OSD_WriteChar(_DYNAMIC_DOWNLOAD_2, bColor);
}
/****************************************************************************
* Function : UI_OSD_PrintNumber()
***************************************************************************/
void UI_OSD_PrintNumber(WORD wVal, BOOL fHex)
{
BYTE bFactor = 10;
WORD wFactor = 100;
BYTE code *pNumricFont = DecFont;
if(fHex)
{
bFactor = 16;
wFactor = 256;
pNumricFont = HexFont;
}
if(wVal >= wFactor)
{
API_OSD_WriteChar(pNumricFont[wVal / wFactor], OSD_BLACK);
wVal %= wFactor;
}
else
API_OSD_WriteChar(__, OSD_BLACK);
API_OSD_WriteChar(pNumricFont[wVal / bFactor], OSD_BLACK);
API_OSD_WriteChar(pNumricFont[wVal % bFactor], OSD_BLACK);
}
/****************************************************************************
* Data Table
***************************************************************************/
BYTE code DecFont[] = {_0, _1, _2, _3, _4, _5, _6, _7, _8, _9};
BYTE code HexFont[] = {_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _A, _B, _C, _D, _E, _F};
BYTE code LiteralFont[] = {_A, _B, _C, _D, _E, _F, _G, _H, _I, __, __, _L, _M, _N, _O, _P ,__, _R, _S, _T, _U, _V, _X, _Y, _Z};
BYTE code OsdItemWindow[] = {1, 1, 1, 31};
//--------------------------------------------------------------------------
// Color-Look-Up table definition :
// 1.group index
// R G B I index
// -----------------------------
// 0 0 0 0 -- 0, BLACK
// 0 0 0 1 -- 1, BLACK
// 0 0 1 0 -- 2, BLUE
// 0 0 1 1 -- 3, BLUE(I)
// 0 1 0 0 -- 4, GREEN
// 0 1 0 1 -- 5, GREEN(I)
// 0 1 1 0 -- 6, CYAN
// 0 1 1 1 -- 7, CYAN(I)
// 1 0 0 0 -- 8, RED
// 1 0 0 1 -- 9, RED(I)
// 1 0 1 0 -- A, MAGENTA
// 1 0 1 1 -- B, MAGENTA(I)
// 1 1 0 0 -- C, YELLOW
// 1 1 0 1 -- D, YELLOW(I)
// 1 1 1 0 -- E, WHITE
// 1 1 1 1 -- F, WHITE(I)
// ------------------------------
// 2.group position
// RRRR,RGGG,GGaB,BBBB 'a' means Alpha-blending
//--------------------------------------------------------------------------
BYTE code OsdCLUT[] =
{
0x00, 0x00, // R=00 G=00 B=00
0xF8, 0x1F, // R=F8 G=00 B=F8
0x02, 0x10, // R=00 G=40 B=80
0xFF, 0xDF, // R=F8 G=F8 B=F8
0xC6, 0x18, // R=C0 G=C0 B=C0
0xFF, 0xC0, // R=F8 G=F8 B=00
0x00, 0x1F, // R=00 G=00 B=F8
0x00, 0x00, // R=00 G=00 B=00
0xFF, 0xD9+0x20, // R=F8 G=F8 B=C8
0xF8, 0x00, // R=F8 G=00 B=00
0x84, 0x10, // R=80 G=80 B=80
0x42, 0x08, // R=40 G=40 B=40
0xE7, 0x1C, // R=E0 G=E0 B=E0
0x07, 0xC0, // R=00 G=F8 B=00
0x07, 0xDF+0x20, // R=00 G=F8 B=F8
0xFF, 0xD9+0x20, // R=F8 G=F8 B=C8
};
BYTE code OsdFontData[] =
{ /* 24 Bytes in 1 font */
// Font 000,0x000
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -