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

📄 flmain.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************/
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/***************  $Modtime:: 08-05-22 13:39    $       ****************/
/***************  $Revision:: 1                $       ****************/
/***************                                       ****************/
/***************   Description : File List             ****************/
/***************                 Main Module           ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Jacob Lin             ****************/
/**********************************************************************/

/**
 *          $(PROJ_HOME)/8032/custom/demo/fslist/flmain.c
 *
 *          Bundle of the basic and common functions used to manipulate the
 *          component "FILE BROWSER".
 */

#define __FLMAIN_C_

#include "../general.h"
#include "flcomm.h"
#include "fslist.h"
#include "flcmd.h"

#pragma NOAREGS

void DRS232LogS(char *pcStr);
void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);

#ifdef PLAYER_FLMENU

typedef void (code *vRedrawFunc) (void) large;

// PRIVATE GLOBAL VARIABLES
//  on focus object

//xdata WORD _wCurrItem;
// EXTERNAL INERFACES

/**
 * Internal functions
 */

static BOOL fgFlOnInit(void);
extern void vWorkAreaMove(BOOL fgToFront) large;

/**
 * Init the menu and create the necessary component "FS LIST".
 */
void vFsMenuInit(BOOL fgInit) large
{
  if (fgInit)
  {
    // - totally init (init whole file browser module)
    vFlClRls();

    //  1. init each object "file list menu, file list jpeg viewer,
    //      and mpeg player"
#ifdef MP3_LYRICS_V2_SUPPORT
    if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
    {
      if (!fgFlLrcInit() || !fgFlJvInit() || !fgFlMpInit())
      {
        // - TODO: error handling
        return;
      }
    }
    else
#endif
    {
    if (
       !fgFlMnInit() || !fgFlJvInit()
#ifdef DDISC_FTYPE_MPG_SUPPORT
       || !fgFlMpInit()
#endif
       )
    {
      // - TODO: error handling
      return;
    }
#ifdef SUPPORT_USB_COPY
#ifdef USB_COPY_DEBUG
    DBGLogB(bSharedInfo(SI_DEVICE_ID),_bUSBSavToEnter,0x66,0x66);
#endif
#ifdef SUPPORT_MULTI_PARTITION_FAT //simon mul
    if((bSharedInfo(SI_DEVICE_ID) != SV_DEVID_CDVDROM) && (_bUSBSavToEnter == TRUE))
#else
    if((bSharedInfo(SI_DEVICE_ID) == _bSaveToDev)&&(bSharedInfo(SI_DEVICE_ID)!=SV_DEVID_CDVDROM)\
        &&(_bUSBSavToEnter==TRUE))
#endif
    _bUSBSwitchSuccess = TRUE;
#endif
    }

    //  2. init shared info for configuration    
    // PL00004039 : Modified from original vSetSharedInfo(SI_DDISC_ACTIVE_PB_MODULE_MODE, SV_OFF);
    vSetSharedInfo(SI_DDISC_ACTIVE_PB_MODULE_MODE, SV_ON); 
    
     // 3. init control flags
    _bFlPbMode = bSharedInfo(SI_DDISC_DEF_PMODE);
    _bFlWaitUopRet = 0xFF;
    _bFlUopRetJob = 0xFF;
    _fgFlMdChg = FALSE;

    //  4. init the command target as "FL_CMD_TARGET_NONE" for init
    //      state
    _bFlCmdTarget = FL_CMD_TARGET_NONE;
  }
  else
  {
    // - partial init (init the module of current command target)
    switch (_bFlCmdTarget)
    {
      case FL_CMD_TARGET_MENU:
      #ifdef MP3_LYRICS_V2_SUPPORT
        if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) != SV_ID_MATCH)
      #endif
        {
        #if 1//def JPG_INFO
        vOsdPosClear(OSD_POS_FS_INFO_BAR);
        #endif
        }
        break;
      case FL_CMD_TARGET_JPEG:
        //vSendUopCmd(UOP_PAUSE, 0x01, 0x02, 0x00);
        break;
      case FL_CMD_TARGET_MPEG:
        break;
      case FL_CMD_TARGET_HELP:
        break;
    }
    vFlRecover();
  }

  return;
}

/**
 * Set the foregournd module as given one.
 *
 * DEF: The foregournd module means the module which the UOPs be dispatched.
 */
void vFlCtrlSetFg(BYTE bMd) large
{
  // PL00004039 : Removed for fixing bug.
  // if (bSharedInfo(SI_DDISC_PB_MODULE) == bMd)
  //   return;

  vSetSharedInfo(SI_DDISC_PB_MODULE, bMd);
  vNotifySharedInfo(SI_DDISC_PB_MODULE, 0x0, 0x0);

  return;
}


/**
 * Set the current command target as the given one.
 *
 * DES:
 *  1. Leave the state object of the current target module.
 *  2. Enter the state object of the next one.
 */
void vFlCmdTargetLeave(BYTE bSrcTgt, BYTE bDesTgt) large
{
  switch(bSrcTgt)
  {
    case FL_CMD_TARGET_MENU:
    
#ifdef MP3_LYRICS_V2_SUPPORT
      if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
      {
        _wCurrItem = wFlLrcLeave(FALSE);
      }
      else
#endif
      {
      _wCurrItem = wFlMnLeave(FALSE);
      }
      break;
    case FL_CMD_TARGET_JPEG:
      if (bDesTgt == FL_CMD_TARGET_HELP)
        _wCurrItem = wFlJvLeave(FALSE);
      else
        _wCurrItem = wFlJvLeave(TRUE);
      break;
#ifdef DDISC_FTYPE_MPG_SUPPORT
    case FL_CMD_TARGET_MPEG:
      _wCurrItem = wFlMpLeave(FALSE);
      break;
#endif
#ifdef JPEG_DDISC_DIGEST_ENABLE
    case FL_CMD_TARGET_HELP:
      _wCurrItem= wFlHpLeave(FALSE);
      break;
#endif
    default:
      // - the current target is invalid or none
      _wCurrItem = 0x0;
      break;
  }
}

void vFlCmdTargetEnter(BYTE bTarget) large
{
  switch(bTarget)
  {
    case FL_CMD_TARGET_MENU:
#ifdef MP3_LYRICS_V2_SUPPORT
      if (bSharedInfo(SI_MP3_KARA_DISC_TYPE) == SV_ID_MATCH)
      {
        vFlLrcEnter(_wCurrItem);
      }
      else
#endif
      {
      vFlMnEnter(_wCurrItem);
      }
      break;
    case FL_CMD_TARGET_JPEG:
      vFlJvEnter(_wCurrItem);
      break;
#ifdef DDISC_FTYPE_MPG_SUPPORT
    case FL_CMD_TARGET_MPEG:
      vFlMpEnter(_wCurrItem);
      break;
#endif
#ifdef JPEG_DDISC_DIGEST_ENABLE
    case FL_CMD_TARGET_HELP:
      vFlHpEnter(_wCurrItem);
      break;
#endif
    default:
      // - TODO: exception handling (thie case should not happen)
      break;
  }

  _wCurrItem = 0xFFFF;
}

void vFlSetCmdTarget(BYTE bTarget) large
{
//  WORD wItem;
  BYTE  bPrevTarget;

  bPrevTarget = _bFlCmdTarget;
  if (_bFlCmdTarget != bTarget)
  {
#ifdef WB_ALLOC_MIN
    if (bTarget == FL_CMD_TARGET_MENU)
      _fgFlMdChg = TRUE;
#endif
    // - we should switch the state object
    //  1. leave current
    vFlCmdTargetLeave(_bFlCmdTarget, bTarget);
    _bFlCmdTarget = bTarget;

    //  2. enter next
    if (fgFlClIsLock())
    {
      switch (bFlClPath())
      {
        case FL_CMDPATH_SEL_1:
          if ( (bSharedInfo(SI_JPG_STT) == JPEGSTT_DEC_STRT) && (bPrevTarget == FL_CMD_TARGET_JPEG) )
          {
            _bFlWaitUopRet = UOP_STOP;
            _bFlUopRetJob = UOP_RET_PL_JPG;
          }
          else
          {
            vFlCmdTargetEnter(_bFlCmdTarget);
            fgSetPlayPostKey(IR_CMD_DONE);
          }

          break;
      //#ifdef ISO_AUTO_PLAY
      //  case FL_CMDPATH_INIT_1:
      //#else
      //  case FL_CMDPATH_INIT_0:
      //#endif
      #if defined(MP3_LYRICS_V2_SUPPORT)
        case FL_CMDPATH_INIT_1:
        case FL_CMDPATH_INIT_0:
      #elif defined(ISO_AUTO_PLAY)
        case FL_CMDPATH_INIT_1:
      #else
        case FL_CMDPATH_INIT_0:
      #endif
        case FL_CMDPATH_CHG_CMDTGT:
          vFlCmdTargetEnter(_bFlCmdTarget);
          break;
      }
    }
    else
    {
      vFlCmdTargetEnter(_bFlCmdTarget);
    }
    /*
    else if (_bFlWaitUopRet != UOP_STOP)
    {
      vFlCmdTargetEnter(_bFlCmdTarget);
    }
    */
  }
  else if (fgFlClIsLock())
  {
    switch (bFlClPath())
    {
      case FL_CMDPATH_SEL_1:
       _rFlCmdLock.fgLeap = TRUE;
       fgSetPlayPostKey(IR_CMD_DONE);
       break;
     }
  }

  return;
}

/**
 * Dispatch the event to the on focus object.
 */
BOOL fgFsMenuState(void) large
{
  BOOL fgIsGrabbed = FALSE;
  WORD wPos, wIdx;  // tmp


#if 0
  if (!fgFlCmdIsOK())
  {
    // - the command module is not ready for next one,
    //  waiting for command ack, and pass IR_CMD_DONE only
    if (_bIRKey != IR_CMD_DONE)
    {
      //vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
      return TRUE;
    }
  }
#endif
  // - main loop to relay message to each state machine

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -