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

📄 fllrc.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:
    return FALSE;
  }

  // - check the type of the given item
  wPos = FL_ITEM_FIELD(bItemIdx);

  // - parse the full path
  _bFlMnMemLock = TRUE;
  vLrcParseFolderName(bItemIdx, bGetStackTop());

  // - get the base dir index and set the list to it
  bLoByte(wBsDir) = bSharedInfo(wPos + 12);
  bHiByte(wBsDir) = bSharedInfo(wPos + 13);
  wPos = FL_LIST_FIELD(_bFlMnListId);
  vFlCmdClickItem(_bFlMnListId, wFlGetItemIdx(bItemIdx));

  return TRUE;
}


//
// Enter this object (called when we try to move in the focus).
//
/**
 * Operation to make the focus enter the object "file list menu".
 *
 * DES:
 *  1. Show the basic visial component
 *  2. Set shared info config for "file list menu" control
 *  3. Display the run-time infor of MP3 (audio files) playback if necessary
 *  4. Get item for redraw or enter the current item
 *  5. Set the current module as the foreground module
 */
void vFlLrcEnter(WORD wItem) large
{
  WORD  wTmp;
  BYTE  bTmp;

  _bFlMnMemLock = FALSE;

  if (_fgFlMdChg)
  {
    vFlLrcSyncState();
  }

//  vFlClRls();
#ifndef MT1379_MANUFACTURE_TEST
  vOsdShowWb(OSD_WB_FULL_SCR);
#endif

#if 0
  if (_wCurrItem != 0xFFFF)
  {
    wItem = _wCurrItem;
  }
  else
#endif
  if (wItem == 0xFFFF)
  {
    wItem = wFlGetItemIdx(_bFlMnCurItemIdx);
  }

  _bFlMnCurItemIdx = wItem % FLMP3LRCMN_ITEM_N;

  if (_fgFlMdChg)
  {
    vFlLrcDrawPage();
    _fgFlMdChg = FALSE;
  }

  _rOsdStateCtx.bTimeType = _bFlMnTimeType;
    //vSetSharedInfo(SI_JPG_DIGEST_BG, 0x2);
  vSetSharedInfo(SI_PREVIEW_MODE, TRUE);
  vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, FL_JPEG_SLIDESHOW_INTERVAL);
  // - set shared info to config RISC
  //_bPreview = PREVIEW_STATE_IDLE;

  // - set the MP3 player as the foreground module
  vFlCtrlSetFg(FLMD_MP3_PLAYER);
  while(bSharedInfo(SI_DDISC_PB_MODULE) != SV_DDISC_MODULE_MP3);

  if (_rFlCmdLock.bPath != FL_CMDPATH_SEL_1)
  {
    vFlClRls();
  }

  // - redraw page if necessary or get into the current item
  if (!_bFlMnItemNs ||  // - list don't ready yet
      (wItem <= wFlGetItemIdx(0x0)) ||
      (wItem >= wFlGetItemIdx(FLMP3LRCMN_ITEM_N)) ||
      (wItem >= wFlGetItemIdx(_bFlMnItemNs - 1)))
  {
    // - out boundary redraw
    _bFlMnCurItemIdx = wItem % FLMP3LRCMN_ITEM_N;
    if (fgFlClLock(FL_CMDPATH_REDRAW))
    {
      _wFlFirstIdx = wItem - (WORD)_bFlMnCurItemIdx;
      fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx);
    }
  }
  else
  {
    // - in boundary, enter current item
    fgFlLrcEntItem((BYTE)(wItem - wFlGetItemIdx(0x0)));
    for (bTmp = 0; (bTmp < _bFlMnItemNs) && (bTmp < FLMP3LRCMN_ITEM_N); bTmp++)
    {
      if (fgFlLrcIsCurrPlayItem(bTmp))
      {
          vFlLrcHiliOnIdx(bTmp);
      }
    }
  }

  vFlUpdateVfd(TRUE);

  return;
}


//
// Leave this object (called when we try to move away the focus).
//
WORD wFlLrcLeave(BOOL bSuicide) large
{
  // - snuff out hilight, and turn off the hili select mode
  vFlLrcHiliItem(_bFlMnCurItemIdx, FALSE);
  vSetSharedInfo(SI_HLI_STATE, SV_OFF);

  //_bPreview = PREVIEW_STATE_IDLE;

  // - disable the whiteboard
  vDisableWB(MP3LRC_MENU_WB);
  // vDisableWB(MP3LRC_MENU_WB);

  return (bSharedInfo(SI_MP3_ITEM_IDX_HI)*256 +
          bSharedInfo(SI_MP3_ITEM_IDX_LO));
}


///////////////////////////////////////////////////////////////////////////////
// Play List

/**
 * Handle IR_MARK to add the current item to playlist.
 */
static BOOL fgFlLrcPlMark(void) large
{
  if (fgFlClIsLock())
  {
    LRC_DBGLogS("Add to Play List, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }

  if (_bFlMnItemType == FTYPE_AUDIO)  // Changed by Hiker Hauk - a stronger condition than != FTYPE_FOLDER
  {
    //added by msz00049 for CR PL00105822
    if(!fgFlClLock(FL_CMDPATH_ADDTO_PLAYLIST))
    {
      return TRUE;
    }
    //added end
    LRC_DBGLogS("A song is to be added to Play List, sending cmd");
    vFlCmdAddToPl(_bFlMnListId, wFlGetItemIdx(_bFlMnCurItemIdx), 0xFFFF);
  }

  return TRUE;
}

#ifdef MP3_LYRICS_PL_15_SONGS
static BOOL fgFlLrcPlRemove(void) large
{
  WORD  wPos;
  WORD  wIdx;

  if (fgFlClIsLock())
  {
    LRC_DBGLogS("IR_ANGLE, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }

  wIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
  _bFlMnPLNs = bSharedInfo(SI_FS_PLLISTNS);

  #ifdef MP3_LYRICS_PL_15_SONGS
  if(_fgIsInPlayList)
  #endif
  {
  if ((bSharedInfo(SI_MP3_STT) == MP3STT_PB_STRT) && (FL_MP3_ITEM_IDX == wIdx))
  {
      //wPos = FL_ITEM_FIELD(_bFlMnListId);
      //if ((bSharedInfo(wPos + 4) == 0) && (bSharedInfo(wPos + 5) == 0))
      if(_bFlMnPLNs == 1)
      {
        if(_fgIsInPlayList)
        {
          fgFlLrcOnIrLeft();
        }      
      vFlSendUopCmd(UOP_STOP, 0, UOP_RET_PL_RM_LAST);
      }
    else
      {
      vFlSendUopCmd(UOP_STOP, 0, UOP_RET_PL_RM);
  }
    }
  else
  {
    vFlCmdRmFromPl(wIdx);
  }
  }

  return TRUE;
}
#endif
static BOOL fgFlLrcTimeShow(void) large
{
  if(_fgIsTimeShowOn)
  {
    _fgIsTimeShowOn = FALSE;
    vOsdPosClear(OSD_POS_TIME_RIGHT);
  }
  else
  {
    _fgIsTimeShowOn = TRUE;
  }
  return TRUE;
}

static BOOL fgFlLrcPlClear(void) large
{
  vFlCmdRmAllFromPl(_bFlPlListId);

  return TRUE;
}


/**
 * Read in the list info from proper shared info group.
 */
static void vFlLrcRdListInfo(BYTE bId) large
{
  BYTE bIncItemType;
  WORD wBsDir, wPos;

  if (bId >= FL_MAX_LIST_NS)
    return;

  wPos = FL_LIST_FIELD(bId);
  _bFlMnListType =  bSharedInfo(wPos);//061208 xinzhen modify for CQ(PL00103667)
  bIncItemType = bSharedInfo(wPos + 1);
  bLoByte(wBsDir) = bSharedInfo(wPos + 2);
  bHiByte(wBsDir) = bSharedInfo(wPos + 3);

  bLoByte(_wFlMnListLen) = bSharedInfo(wPos + 4);
  bHiByte(_wFlMnListLen) = bSharedInfo(wPos + 5);

  return;
}

#if 0
static BOOL fgFlLrcChgListType(void) large
{
  return TRUE;
}
#endif

/**
 * Handle the notification of MP3 playback status change.
 *
 * NOTE: In order to avoid the racing condition, check the parameters
 *  of notification instead of shared info slot.
 */
static void vFlLrcChgMp3State(BYTE bStt) large
{
  BYTE  bIdx;
  WORD  wItemIdx, wIdx;

  // - the current item of MP3 module
  bLoByte(wItemIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
  bHiByte(wItemIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);

  bStt = bSharedInfo(SI_MP3_STT);

  switch (bStt)
  {
    case MP3STT_PB_ENB:
      // - playback enabled
      break;
    case MP3STT_PB_STRT:
      // - playback starts

      if (_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId))
      {
        _wFlCurAdoIdx = wItemIdx;
        wIdx = wFlGetItemIdx(0);

        if ((_wFlCurAdoIdx != wFlGetItemIdx(_bFlMnCurItemIdx)) &&
            (wItemIdx >= wIdx) && (wItemIdx < wIdx + FLMP3LRCMN_ITEM_N))
        {
          bIdx = _wFlCurAdoIdx % FLMP3LRCMN_ITEM_N;
        }
      }

      break;
    case MP3STT_PB_FSH:
	 _bFlMnPLNs = bSharedInfo(SI_FS_PLLISTNS);
        if(_bFlMnPLNs > 0)
        {
          _bFlMnPLNs--;
#ifdef MP3_LYRICS_PL_15_SONGS
	   if(!_bFlMnPLNs)
	   {
            _fgFlRedrawPlPlay = TRUE;
	   }
#endif
          vFlCmdRmFromPl(0);
        }
        if(_bFlMnPLNs == 0)
        {
          _fgFlRedrawPlPlay = FALSE;
          if (_fgIsMp3LrcMnOn)
          {
#if 0//def MP3_LYRICS_PL_15_SONGS
            if(_fgIsInPlayList)
            {
              fgFlLrcOnIrLeft();
            }
#endif
            vFlLrcClrPlList();
#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
            vFlLrcDrawMp3Intro();
#endif
          }
          else
          {
            fgSetPlayPostKey(IR_ROOT_MENU);
          }
        }
        else
        {
          _fgFlRedrawPlPlay = TRUE;
        }
	 if (!_fgIsMp3LrcMnOn)
	 {
	   vOsdPosClear(OSD_POS_TIME_RIGHT);
	 }
        break;

      // - playback finishes
      // break;
    case MP3STT_PB_ABT:
      // - playback is aborted
      // break;
    case MP3STT_PB_ERR:
     // - temp solution
      // - some playback erro occurs
      if (_wFlCurAdoDir == wFlMnGetListBaseDir(_bFlMnListId))
      {
        _wFlCurAdoIdx = 0xFFFF;
      }
      if (_bFlIpState == IP_STATE_PANEL_1)
      {
        _wStartX = FS_EQ_X;
        _wStartY = 32;
      }
      break;
    default:
      // - error occurs
      break;
  }

  return;
}


static void vFlLrcSyncState(void) large
{
  bLoByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_LO);
  bHiByte(_wFlCurAdoIdx) = bSharedInfo(SI_MP3_ITEM_IDX_HI);

  return;
}


void vFlLrcHandleUopRet(BYTE bUopId) large
{
  BYTE bSpeed;
  BYTE pbStr[3];
  switch (bUopId)
  {
    case UOP_STOP:
      break;
    case UOP_REPEAT:
      break;
    // Added by Hiker Hauk, September 28, 2007, for CR(PL00108440) : Begin
    case UOP_FORWARD:
      bSpeed = bSharedInfo(SI_PBC_SPEED);
      bSpeed = pbFastTbl[bSpeed];
      pbStr[0] = 2;
      if (bSpeed > 9)
      {
        pbStr[1] = (bSpeed / 10) % 10 + '0';
        pbStr[2] = bSpeed % 10 + '0';
      }
      else
      {
        pbStr[1] = ' ';
        pbStr[2] = bSpeed % 10 + '0';
      }
      vOsdPosShowArg(OSD_POS_PLAY_STATUS, OSD_MSG_ICON_FFX, OSD_NO_DISAPPEAR, pbStr);
      break;
    case UOP_REVERSE:
      bSpeed = bSharedInfo(SI_PBC_SPEED);
      bSpeed = pbSlowTbl[bSpeed];
      pbStr[0] = 2;
      if (bSpeed > 9)
	  {
	    pbStr[1] = (bSpeed / 10) % 10 + '0';
	    pbStr[2] = bSpeed % 10 + '0';
	  }
	  else
	  {
	    pbStr[1] = ' ';
	    pbStr[2] = bSpeed % 10 + '0';
	  }
	  vOsdPosShowArg(OSD_POS_PLAY_STATUS, OSD_MSG_ICON_FRX, OSD_NO_DISAPPEAR, pbStr);
      break;
    // Added by Hiker Hauk, September 28, 2007, for CR(PL00108440) : End
    default:
      break;
  }

  if (_bFlWaitUopRet == bUopId)
  {
    switch(bUopId)
    {
      case UOP_STOP:
        switch (_bFlUopRetJob)
        {
          case UOP_RET_PL_RM:
          case UOP_RET_PL_RM_LAST:
            vFlCmdRmFromPl(wFlGetItemIdx(_bFlMnCurItemIdx));//, FLCMD_RET_OP_CMDACK);
            break;
        }
        break;
    }
    _bFlWaitUopRet = 0xFF;
  }
}

////////////////////////////////////////////////////////////////////////////////
//
// IR Key Handlers
//

static BOOL fgFlMp3LrcKeyFilter(BYTE bIsMp3LrcMnOn, BYTE bIrKey) large
{
  if(bIsMp3LrcMnOn)
  {
    switch(bIrKey)
    {
      case IR_POWER:
      case IR_EJECT:
      case IR_ROOT_MENU:
      case IR_UP:
      case IR_DOWN:
      case IR_LEFT:
      case IR_RIGHT:
      case IR_NEXT:
      case IR_PREV:
      case IR_PLAY:
      case IR_ENTER:
      case IR_PLAY_ENTER:
      case IR_STOP:
      case IR_PLAYLIST_CLEAN:
      case IR_CMD_DONE:
      case IR_PLAY_PAUSE:
#ifdef MP3_LYRICS_PL_15_SONGS
      case IR_ANGLE:
#endif
        return TRUE;
      default:
        return FALSE;
    }
  }
  else
  {
    switch(bIrKey)
    {
      case IR_POWER:
      case IR_EJECT:
      case IR_FF:
      case IR_FR:
      case IR_PAUSE:
      case IR_PLAY:
      case IR_ENTER:
      case IR_PLAY_ENTER:
      case IR_STOP:
      case IR_ROOT_MENU:
      case IR_CMD_DONE:
      case IR_PREV:
      case IR_NEXT:
      case IR_DISPLAY:
        return TRUE;
      default:
        return FALSE;
    }
  }
  return TRUE;
}

/**
 * Event handler of the object "file list menu".
 */
BOOL fgFlOnLrc(void) large
{
  BOOL fgIsGrabbed = FALSE;
  BYTE i;

  // Hiker Hauk: Block these two keys (IR_SF & IR_SR). CR(PL00108573)
  // Hiker Hauk: Also block IR_SUB_TITLE. CR(PL00109283) - Dec 19, 2007
  if ((_bIRKey == IR_SF) || (_bIRKey == IR_SR) || (_bIRKey == IR_SUB_TITLE))
  {
    return TRUE;
  }
  
  if(fgFlMp3LrcKeyFilter(_fgIsMp3LrcMnOn, _bIRKey))
  {
    for (i = 0; i < sizeof(_rFlMp3LrcIrHandler) / sizeof(_rFlMp3LrcIrHandler[0]); i++)
    {
      if (_bIRKey == _rFlMp3LrcIrHandler[i].bIrKey)
      {
        fgIsGrabbed = _rFlMp3LrcIrHandler[i].pHandler();
        return fgIsGrabbed;
      }
    }
  }

  return fgIsGrabbed;
}

⌨️ 快捷键说明

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