⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsmenu.c

📁 mtk1389L latest sourcecode enjoy
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********************************************************************/
/***************    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 + -