?? smsmenu.c
字號:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/06/07 4:19p $ ****************/
/*************** $Revision:: 13 $ ****************/
/*************** ****************/
/*************** Description : ****************/
/*************** ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Bright_liu ****************/
/**********************************************************************/
#define _SMSMENU_C_
#pragma NOAREGS
#include "general.h"
#ifdef SUPPORT_MODE_SWITCH_MENU //yan 070409
// #define _SMS_DEBUG_
// #define _SMS_ASSERT_
// #define _SMS_TEST_
extern void DRS232LogS(char *pcStr);
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
#ifdef _SMS_DEBUG_
#define SMS_DBGLogB(b1, b2, b3, b4) DRS232LogB(b1, b2, b3, b4)
#define SMS_DBGLogW(wTemp) DRS232LogB(0, 0, bHiByte(wTemp), bLoByte(wTemp))
#define SMS_DBGLogDW(dwTemp) DRS232LogB(bHiByte(wHiWord(dwTemp)), bLoByte(wHiWord(dwTemp)), bHiByte(wLoWord(dwTemp)), bLoByte(wLoWord(dwTemp)))
#define SMS_DBGLogS(s) DRS232LogS(s)
#else
#define SMS_DBGLogB(b1, b2, b3, b4)
#define SMS_DBGLogW(wTemp)
#define SMS_DBGLogDW(dwTemp)
#define SMS_DBGLogS(s)
#endif
#ifdef _SMS_ASSERT_
#define SMS_ASSERT(fgAssert) \
do \
{ \
if(!(fgAssert)) \
{ \
DRS232LogS("\nAssert Error!"); \
DRS232LogS(#fgAssert); \
DRS232LogS("\n"); \
} \
}while(0)
#else
#define SMS_ASSERT(fgAssert)
#endif
code WORD _wSmsMainItemMsg[SMS_MAIN_ITEM_NS] =
{
OSD_MSG_DVD,
OSD_MSG_DVBT,
OSD_MSG_TV_IN,
OSD_MSG_AUDIO_IN,
OSD_MSG_REMOVABLE,
};
#define SMS_SUB_ITEM_NS 16
code WORD _wSmsSubItemMsg[SMS_SUB_ITEM_NS]=
{
OSD_MSG_USB_SLOT1,
OSD_MSG_USB_SLOT2,
OSD_MSG_USB_SLOT3,
OSD_MSG_USB_SLOT4,
OSD_MSG_USB_SLOT5,
OSD_MSG_USB_SLOT6,
OSD_MSG_NUM_07,
OSD_MSG_NUM_08,
OSD_MSG_MS,
OSD_MSG_SD,
OSD_MSG_SM,
OSD_MSG_CF,
OSD_MSG_NUM_13,
OSD_MSG_NUM_14,
OSD_MSG_NUM_15,
OSD_MSG_NUM_16
};
#define SMS_MARK_NUMBER 4
code WORD _wSmsMarkMsg[SMS_MARK_NUMBER]=
{
OSD_MSG_DVB_ICON_REMAP_UP,
OSD_MSG_DVB_ICON_REMAP_DOWN,
OSD_MSG_JPG_ROTATE_CCLKW, // left
OSD_MSG_JPG_ROTATE_CLKW // right
};
code BYTE _bSmsDevItemVal[SMS_MAIN_ITEM_NS] =
{
CDVDROM_MENU_ITEM,
DVBT_MENU_ITEM,
TVD_MENU_ITEM,
AUDIOIN_MENU_ITEM,
(USB_MENU_ITEM | MCR_MENU_ITEM)
};
code BYTE _bSmsMainItemUop[SMS_MAIN_ITEM_NS]=
{
SV_DEVID_CDVDROM,
SV_DEVID_DVBT,
SV_DEVID_TVD,
SV_DEVID_AUDIOIN,
SV_DEVID_INVALID
};
code BYTE _bSmsSubItemUop[ SMS_SUB_ITEM_NS]=
{
SV_DEVID_USB_SLOT_1,
SV_DEVID_USB_SLOT_2,
SV_DEVID_USB_SLOT_3,
SV_DEVID_USB_SLOT_4,
SV_DEVID_USB_SLOT_5,
SV_DEVID_USB_SLOT_6,
SV_DEVID_INVALID,
SV_DEVID_INVALID,
SV_DEVID_MS_CARD,
SV_DEVID_SD_CARD,
SV_DEVID_SM_CARD,
SV_DEVID_CF_CARD,
SV_DEVID_INVALID,
SV_DEVID_INVALID,
SV_DEVID_INVALID,
SV_DEVID_INVALID
};
extern BYTE xdata _bEjectCMDStatus; //lemon
#ifdef SMS_MENU_PAUSE_PLAY //yan 070409
xdata BYTE _fgDeviceCHG = FALSE;
#endif
xdata BYTE _bSmsDisplay = 1;//anthony
xdata BYTE _bSmsStat;
xdata BYTE _bSmsItem;
xdata BYTE _bEmdAttachBuf;
xdata BYTE _bMcrAttachBuf;
xdata BYTE _bSmsReflashTime;
#define SMS_REFLASH_TIME 10 // 200ms
xdata BYTE _bMainMenuItemNs;
xdata BYTE _bSubMenuItemNs;
xdata BYTE _bSubMenuShowItem1st;
xdata BYTE _bItemUop;
xdata WORD _wSmsViewStartY;
xdata WORD _wSmsViewEndY;
#ifdef SMS_MENU_TIMER_DISAPPEAR //yan 070409
xdata BYTE _bSmsCounter;
xdata BYTE _fgSmsMoveCur;
#define SMS_COUNTER_NUM 250 // 5S
#endif
#define vSetSmsStat(bSmsStat) _bSmsStat = (_bSmsStat & 0xF0) | (bSmsStat & 0x0F)
#define vSetSmsItem(bSmsItem) _bSmsItem = (_bSmsItem & 0xF0) | (bSmsItem & 0x0F)
#define vSavSmsStat() _bSmsStat = (_bSmsStat << 4) & 0xF0
#define vSavSmsItem() _bSmsItem = (_bSmsItem << 4) & 0xF0
#define vRstSmsStat() _bSmsStat = (_bSmsStat >> 4) & 0x0F
#define vRstSmsItem() _bSmsItem = (_bSmsItem >> 4) & 0x0F
#define bGetSmsStat() (_bSmsStat & 0x0F)
#define bGetSmsItem() (_bSmsItem & 0x0F)
#define fgChkSmsStat(bSmsStat) (bGetSmsStat() == (bSmsStat))
#define fgChkSmsMainItem(bSmsItem) (bGetDevId(bGetSmsItem()) == (bSmsItem))
///////////////////////////////////////////////////////////////////////////////
//add by msz00107 for bug PL00103538 on 07/02/06
//#ifdef SMSUI_FOR_MULTI_PARTITION_FAT
static BYTE bGetCurHardDiscNs(void) large
{
BYTE i;
BYTE bAttach;
BYTE bNs = 0;
bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) |
(bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bNs++;
}
}
return bNs;
}
static BYTE bGetDevItemNs(void) large
{
BYTE i;
BYTE bDevItem;
BYTE bNs = 0;
bDevItem = bSharedInfo(SI_DEVMNG_MENU_ITEM);
for(i = 0; i < SMS_MAIN_ITEM_NS; i++)
{
if(bDevItem & _bSmsDevItemVal[i])
{
bNs++;
}
}
return bNs;
}
static BYTE bGetEmdMcrNs(WORD wEmdMcr) large
{
BYTE i;
BYTE bAttach;
BYTE bNs = 0;
bAttach = bSharedInfo(wEmdMcr);
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bNs++;
}
}
return bNs;
}
static BYTE bGetDevId(BYTE bLogicId) large
{
BYTE i;
BYTE bDevItem;
BYTE bIdTmp = 0xFF; // Notice!
bDevItem = bSharedInfo(SI_DEVMNG_MENU_ITEM);
for(i = 0; i < SMS_MAIN_ITEM_NS; i++)
{
if(bDevItem & _bSmsDevItemVal[i])
{
bIdTmp++;
if(bIdTmp == bLogicId)
{
return(i);
}
}
}
return 0xFF;
}
static BYTE bGetEmdMcrId(BYTE bLogicId) large
{
BYTE i;
BYTE bAttach;
BYTE bIdTmp = 0xFF; // Notice!
//mod by msz00107 for bug PL00103538 on 07/02/06
bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) |
(bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));
if(bAttach != 0)
{
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bIdTmp++;
if(bIdTmp == bLogicId)
{
return(i);
}
}
}
}
else
{
bAttach = bSharedInfo(SI_EMD_ATTACH);
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bIdTmp++;
if(bIdTmp == bLogicId)
{
return(i);
}
}
}
}
bAttach = bSharedInfo(SI_MCR_ATTACH);
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bIdTmp++;
if(bIdTmp == bLogicId)
{
return(i + 8);
}
}
}
#ifdef SMSUI_FOR_MULTI_PARTITION_FAT
bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) |
(bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));
for(i = 0; (i < 8) && (bAttach != 0); i++, bAttach >>= 1)
{
if(bAttach & 0x01)
{
bIdTmp++;
if(bIdTmp == bLogicId)
{
return(i + 0x10);
}
}
}
#endif
return 0xFF;
}
static BYTE bGetDevLogicId(BYTE bDevId) large
{
BYTE i;
BYTE bDevItem;
BYTE bTempId = 0xFF; // Notice!
bDevItem = bSharedInfo(SI_DEVMNG_MENU_ITEM);
for(i = 0; i <= bDevId; i++)
{
if(bDevItem & _bSmsDevItemVal[i])
{
bTempId++;
}
}
return bTempId;
}
static void vSmsGetPosi(void) large
{
WORD wTemp;
wTemp = (SMS_ITEM_LINE_H + SMS_ITEM_SPACE) * _bMainMenuItemNs - SMS_ITEM_SPACE;
wTemp += SMS_VIEW_HEAD_H + SMS_VIEW_TAIL_H;
#ifdef SMS_MENU_TIMER_DISAPPEAR //yan 070409
if( (bEepromReadByte(SW_MENU_TIME_SW_POSITION) == SV_ON) && (_bSmsPower1stOn < 2) && !_fgSmsMoveCur)
{
wTemp += SMS_VIEW_TAIL_H;
}
#endif
_wSmsViewStartY = (SETUP_ITEM_H - wTemp) / 8 * 4;
_wSmsViewEndY = _wSmsViewStartY + wTemp;
}
static void vGetLRIconStartY(WORD *pwStartY) large
{
WORD wTemp;
wTemp = bGetDevLogicId(SMS_MAIN_ITEM_RVMEDIA);
wTemp *= (SMS_ITEM_LINE_H + SMS_ITEM_SPACE);
*pwStartY = _wSmsViewStartY + SMS_VIEW_HEAD_H + wTemp;
}
static void vGetUpIconStartY(WORD *pwStartY) large
{
*pwStartY = _wSmsViewStartY + ((SMS_VIEW_HEAD_H - SMS_ITEM_LINE_H ) / 4) * 2;
}
static void vGetDownIconStartY(WORD *pwStartY) large
{
WORD wTemp;
wTemp = (SMS_ITEM_LINE_H + SMS_ITEM_SPACE) * _bMainMenuItemNs - SMS_ITEM_SPACE;
*pwStartY = _wSmsViewStartY + SMS_VIEW_HEAD_H + wTemp;
}
#ifdef SMS_MENU_TIMER_DISAPPEAR //yan 070409
static void bGetTimerStartY(WORD *pwStartY) large
{
WORD wTemp;
wTemp = (SMS_ITEM_LINE_H + SMS_ITEM_SPACE) * _bMainMenuItemNs - SMS_ITEM_SPACE;
*pwStartY = _wSmsViewStartY + SMS_VIEW_HEAD_H + SMS_VIEW_TAIL_H + wTemp;
}
#endif
static void vSmsClrMark(WORD wMarkX, WORD wMarkY) large
{
vSetStartEndXY(wMarkX, wMarkY, wMarkX + SMS_MARK_W, wMarkY + SMS_MARK_H);
vRectangle(WB_SETUP_ITEM, 0, 0, TRUE, ENTRY_COL_7);
}
static void vSmsDrawMainMenu(void) large
{
BYTE i;
BYTE bDevId;
WORD wStartY;
WORD wEndY;
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_WHITE);
vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_YELLOW, ENTRY_COL_GRAY, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
for(i = 0; i < _bMainMenuItemNs; i++)
{
bDevId = bGetDevId(i);
wStartY = _wSmsViewStartY + SMS_VIEW_HEAD_H + (SMS_ITEM_LINE_H + SMS_ITEM_SPACE) * i;
wEndY = wStartY + SMS_ITEM_LINE_H;
vSetStartEndXY(SMS_MM_ITEM_START_X, wStartY, SMS_MM_ITEM_END_X, wEndY - 1);
vCreateMsgButton(WB_SETUP_ITEM, i, 4, _wSmsMainItemMsg[bDevId], 0xFFFF, 0);
vUnselButton(WB_SETUP_ITEM, i);
}
}
static void vSmsDrawSubMenu(void) large
{
BYTE i;
BYTE bValue;
WORD wTemp;
WORD wStartY0;
WORD wStartY;
WORD wEndY;
//mod by msz00107 for bug PL00103538 on 07/02/06
#ifdef SMSUI_FOR_MULTI_PARTITION_FAT
_bSubMenuItemNs = bGetEmdMcrNs(SI_MCR_ATTACH) + bGetCurHardDiscNs();
#else
_bSubMenuItemNs = bGetEmdMcrNs(SI_EMD_ATTACH) + bGetEmdMcrNs(SI_MCR_ATTACH);
#endif
if(_bSubMenuItemNs == 0)
{
vGetLRIconStartY(&wStartY);
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_7, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
vOsdPasteMsgXY(SMS_SUBM_ITEM_START_X, wStartY, WB_SETUP_ITEM, OSD_MSG_NO_REMOVABLE);
return;
}
else if(_bSubMenuItemNs < _bMainMenuItemNs)
{
wTemp = _bMainMenuItemNs - _bSubMenuItemNs;
wTemp *= (SMS_ITEM_LINE_H + SMS_ITEM_SPACE);
wStartY0 = _wSmsViewStartY + SMS_VIEW_HEAD_H + wTemp;
}
else
{
wStartY0 = _wSmsViewStartY + SMS_VIEW_HEAD_H;
}
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_GRAY, ENTRY_COL_WHITE);
vSetBtnCol(WB_SETUP_ITEM, ENTRY_COL_YELLOW, ENTRY_COL_GRAY, ENTRY_COL_BLACK, ENTRY_COL_WHITE);
for(i = _bSubMenuShowItem1st; ((i < _bSubMenuItemNs) && (i < (_bSubMenuShowItem1st + _bMainMenuItemNs))); i++)
{
bValue = bGetEmdMcrId(i);
if(0xFF == bValue)
{
break;
}
wTemp = (i - _bSubMenuShowItem1st);
wTemp *= (SMS_ITEM_LINE_H + SMS_ITEM_SPACE);
wStartY = wStartY0 + wTemp;
wEndY = wStartY + SMS_ITEM_LINE_H;
vSetStartEndXY(SMS_SUBM_ITEM_START_X, wStartY, SMS_SUBM_ITEM_END_X - 1, wEndY - 1);
vCreateMsgButton(WB_SETUP_ITEM, bValue + (SMS_MAIN_ITEM_RVMEDIA << 4), 4, _wSmsSubItemMsg[bValue], 0xFFFF, 0);
vUnselButton(WB_SETUP_ITEM, bValue + (SMS_MAIN_ITEM_RVMEDIA << 4));
}
vSetMsgCol4(WB_SETUP_ITEM, ENTRY_COL_GRAY, ENTRY_COL_7, ENTRY_COL_WHITE, ENTRY_COL_WHITE);
vGetDownIconStartY(&wStartY);
if(_bSubMenuItemNs > (_bSubMenuShowItem1st + _bMainMenuItemNs))
{
vOsdPasteMsgXY(SMS_MARK_UPDOWN_START_X, wStartY, WB_SETUP_ITEM, _wSmsMarkMsg[SMS_MARK_DOWN]);
}
else
{
vSmsClrMark(SMS_MARK_UPDOWN_START_X, wStartY);
}
vGetUpIconStartY(&wStartY);
if(_bSubMenuShowItem1st > 0)
{
vOsdPasteMsgXY(SMS_MARK_UPDOWN_START_X, wStartY, WB_SETUP_ITEM, _wSmsMarkMsg[SMS_MARK_UP]);
}
else
{
vSmsClrMark(SMS_MARK_UPDOWN_START_X, wStartY);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -