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

📄 fllrc.c

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


/**
 * Handle IR_CMD_DONE.
 */
static BOOL fgFlLrcIrCmdDoneHdr(void) large
{
  WORD  wTmp;

  if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
  {
    // - "FS LIST" command done, get return command
    BYTE bCmd;

    bCmd = bSharedInfo(FL_CMD_BLK_SA);

    if ((bCmd < sizeof(_prFlCmdProc) / sizeof(_prFlCmdProc[0])) && _prFlCmdProc[bCmd])
    {
      _prFlCmdProc[bCmd]();
    }
    else
    {
      // - TODO: exception handling
    }
  }
  else
  {
    switch(FL_ACK(_dwIrDoneParm))
    {
    case SI_MP3_STT:
      vFlLrcChgMp3State(FL_PARM1(_dwIrDoneParm));
      break;
    case SI_DDISC_PB_MODULE:
      break;
    case SI_MP3_MOD:
      break;
    // tmp solution
    case SI_JPG_STT:
      switch(FL_PARM1(_dwIrDoneParm))
      {
      case JPEGSTT_DEC_FSH:
       // vShowJpegInfo();
        break;
      case JPEGSTT_DEC_ABT:
      case JPEGSTT_DEC_ERR:
        vOsdPosClear(OSD_POS_FS_INFO_BAR);
        break;
      }
      break;
    }
  }

  // - always grab in this case
  return TRUE;
}


static BOOL fgFlLrcOnIrMenu(void) large
{
  if(fgFlClIsLock())
  {
    LRC_DBGLogS("IR_MENU, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }

  // Added by Hiker Hauk on 20071018 for CR(PL00108752)
  // When showing the JEPG, Menu key is blocked.
  // (_bFlMnPLNs > 0) is essential. Added on Dec. 19, 2007
  if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && (_bFlMnPLNs > 0))
  {
    LRC_DBGLogS("Command not ready yet.");
    return TRUE;
  }
  // Hiker Hauk for CR(PL00108752): Added End
  
  if(_fgIsMp3LrcMnOn)
  {
#ifdef MP3_LYRICS_PL_15_SONGS
    if(_fgIsInPlayList)
    {
      fgFlLrcOnIrLeft();  
    }
#endif
    vOsdSetSt(OSD_ST_BURST);
    vDeleteWB(MP3LRC_MENU_WB);
    vCreateWBEx(WB_NORMAL_HEAD1);
    vEnableWB(WB_NORMAL_HEAD1);
    vCreateWBEx(WB_NORMAL_HEAD2);
    vEnableWB(WB_NORMAL_HEAD2);
    vOsdSetSt(OSD_ST_NML);
    if(bSharedInfo(SI_MP3_MOD) == SV_STOP && _bFlMnPLNs == 0)
    {
       _wStartX = 0;
       _wStartY = 0;
       vOsdClearPos(MP3LRC_INTRO_WB, MP3_LRC_INFO_WIDTH, MP3_LRC_INFO_HEIGHT);
    }

    _fgIsMp3LrcMnOn = FALSE;
  }
  else
  {
    vOsdSetSt(OSD_ST_BURST);
    vDeleteWB(WB_NORMAL_HEAD1);
    vDeleteWB(WB_NORMAL_HEAD2);
    vCreateWBEx(MP3LRC_MENU_WB);
    vEnableWB(MP3LRC_MENU_WB);
    vOsdSetSt(OSD_ST_NML);
    vI2CDelay2us(250);
    vI2CDelay2us(250);
    vFlMp3LrcDrawInitPage();
    vFlLrcDrawPage();
    while (bSharedInfo(SI_CMD_CNT));
    vI2CDelay2us(250);
    vI2CDelay2us(250);
    if(_bFlMnPLNs > 0)
    {
      _fgFlRedrawPlPlay = FALSE;
      fgFlMp3LrcRedrawPlList();
    }

#ifdef MP3_LYRICS_SHOW_INTRO_PANEL
    // Modified by Hiker Hauk on 20071018 for CR(PL00108572)
    if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && ((bSharedInfo(SI_FS_PLLISTNS) == 0)))
    {
      vFlLrcDrawMp3Intro();
    }
#endif

    _fgIsMp3LrcMnOn = TRUE;
  }
  return TRUE;
}


/**
 * Handle IR_PLAY, IR_ENTER, IR_RIGHT_ENTER. It acts like "clicking" or "selecting" actually.
 * Function is cleaned up by Hiker Hauk on 20071017.
 * Now only code for FTYPE_FOLDER and FTYPE_AUDIO is left, as other cases should be illegal.
 */
 static BOOL fgFlLrcOnIrPlay(void) large
{
  DWRD  dwAddr;
  WORD  wBaseDir, wIdx;
  BYTE  bLen, bChar;

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

  if(!_fgIsMp3LrcMnOn)
  {
    return FALSE;    //treat as uop_play
  }

  // Added by Hiker Hauk on 20071017 for CR(PL00108776)
  if (_fgIsInPlayList)
  {
    return TRUE;
  }

  // - check the type of the clicked item
  switch(_bFlMnItemType)
  {
    case FTYPE_FOLDER:
      if (_bFlMnMemLock || fgFlClIsLock())
        return TRUE;
      if (!fgFlClLock(FL_CMDPATH_CHG_DIR))
        return TRUE;

      fgFlLrcLeavItem(_bFlMnCurItemIdx);
      LRC_DBGLogS("fgPushStack");
      fgPushStack(wFlMnGetListBaseDir(_bFlMnListId), wFlGetItemIdx(_bFlMnCurItemIdx));
      fgFlLrcEntDir(_bFlMnCurItemIdx, FALSE);
      break;
      
    case FTYPE_AUDIO:
      // Added by Hiker Hauk for CR(PL00108764) on 20071018
      // CR(PL00108764) could be caused by many conditions, this is the mostly occured one.
      // When starting to play, JPEG is showed first.
      // During this somewhat lengthy process, MP3 is not being played.
      // We wait until the MP3 is being played before adding another song,
      // or we have to changed the behavior of adding songs in RISC code.
      // Sometimes, there will be a serious delay (waiting JPEG to be finished, e.g. when adding the first 2 songs).
      // This is the limitation of our hardware system.
      if ((bSharedInfo(SI_MP3_MOD) == SV_STOP) && (bSharedInfo(SI_FS_PLLISTNS) != 0))
      {
        LRC_DBGLogS("Command not ready yet.");
        break;
      }
      // Hiker Hauk for CR(PL00108764): Added end.

      _bFlCurAdoListType = _bFlMnListType;//061208 xinzhen add for CQ(PL00103667)
      _wFlCurAdoDir = wBaseDir;

#ifdef MP3_LYRICS_PL_15_SONGS
      if(_bFlMnPLNs < FLMP3LRCPLLIST_MAX_N)
#else
      if(_bFlMnPLNs < FLMP3LRCMN_ITEM_N)
#endif
      {
        if(bSharedInfo(SI_MP3_MOD) == SV_STOP)
        {
          _wStartX = 0;
          _wStartY = 0;
          vOsdClearPos(MP3LRC_INTRO_WB, MP3_LRC_INFO_WIDTH, MP3_LRC_INFO_HEIGHT);
        }
        _fgFlRedrawPlPlay = TRUE;
        fgFlLrcPlMark();
      }
      else
	  {
        vOsdPosShow(OSD_POS_REMAIN_MSG, OSD_MSG_ERROR, OSD_TIMEOUT);
	  }
      break;
      
    default:
      break;
  }

  return TRUE;
}


/**
 * Handle IR_PAUSE.
 */
static BOOL fgFlLrcOnIrPause(void) large
{
  if (bSharedInfo(SI_MP3_MOD) == SV_PAUSE)
  {
    LRC_DBGLogS("IR_PAUSE 1");
    vSendUopCmd(UOP_PLAY, 0, 0, 0);
  }
  else
  {
    LRC_DBGLogS("IR_PAUSE 2");
    vSendUopCmd(UOP_PAUSE, 0, 0, 0);
  }

  return TRUE;
}


/**
 * Function added by Hiker Hauk, on 20071010
 * Handles IR_STOP. Originally, IR_STOP had no special treatment and was handled in fgISOKeyProc().
 */
static BOOL fgFlLrcOnIrStop(void) large
{
  vSendUopCmd(UOP_STOP, 0, 0, 0);

  return TRUE;
}


/**
 * Handle IR_DIR.
 *  IR_DOWN, move hover item down or move to next page
 *  IR_UP, move hover item up or move to previous page
 *  IR_RIGHT, enter the dir if it is on a dir
 *  IR_LEFT, move the parent dir
 */

/**
 * Handle IR_UP.
 */
static BOOL fgFlLrcOnIrUp(void) large
{
  if (fgFlClIsLock())
  {
    LRC_DBGLogS("IR_UP, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }
  
  if (wFlGetItemIdx(_bFlMnCurItemIdx) &&
      (wFlGetItemIdx(_bFlMnCurItemIdx) != 0xFFFF))
  {
    // - IR_UP is still available
    vMoveSpin(TRUE);
    fgFlLrcLeavItem(_bFlMnCurItemIdx);
    if (!fgFlLrcEntItem(_bFlMnCurItemIdx - 1))
    {
      // - out boundary, change to previous page
      WORD wBIdx;

      wBIdx = wFlGetItemIdx(0x0);
      wBIdx -= (wBIdx >= FLMP3LRCMN_ITEM_N) ? (WORD)FLMP3LRCMN_ITEM_N : wBIdx;
#ifdef MP3_LYRICS_PL_15_SONGS
    if(_fgIsInPlayList)
    {
          if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
            return TRUE;
          _wFlFirstIdx = wBIdx;
          if (fgFlCmdGetItems(_bFlPlListId, _wFlFirstIdx))
          {
            _bFlMnCurItemIdx = FLMP3LRCMN_ITEM_N - 1;
          }
          else
          {
            // - no more next page
            // vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
          }    
    }
    else
#endif
    {
      if (!fgFlClLock(FL_CMDPATH_UP))
        return TRUE;

      _wFlFirstIdx = wBIdx;
      if (fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx))
      {
        _bFlMnCurItemIdx = FLMP3LRCMN_ITEM_N - 1;
      }
      else
      {
        // - no more previous page
        //vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
      }
    }
    }
    else
    {
    }
  }
  else
  {
    // - reach the first item
    //vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
  }
  return TRUE;
}


/**
 * Handle IR_DOWN.
 */
static BOOL fgFlLrcOnIrDown(void) large
{
  if (fgFlClIsLock())
  {
    LRC_DBGLogS("IR_DOWN, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }

  if (wFlGetItemIdx(_bFlMnCurItemIdx) < (_wFlMnListLen - 1))
  {
    // - IR_DOWN is available still
    vMoveSpin(FALSE);
    fgFlLrcLeavItem(_bFlMnCurItemIdx);
    if (!fgFlLrcEntItem(_bFlMnCurItemIdx + 1))
    {
      if (fgFlLrcIsCurrPlayItem(_bFlMnCurItemIdx))
      {
        //vFlLrcHiliItem(_bFlMnCurItemIdx, FALSE);
        //vFlLrcHiliOn(_bFlMnCurItemIdx, FLMN_HILI_PLAY, FLMN_CLR_BG, FLMN_CLR_PLAY);
      }

#ifdef MP3_LYRICS_PL_15_SONGS
    if(_fgIsInPlayList)
    {
          if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
            return TRUE;
          _wFlFirstIdx = wFlGetItemIdx(_bFlMnCurItemIdx + 1);
          if (fgFlCmdGetItems(_bFlPlListId, _wFlFirstIdx))
          {
            _bFlMnCurItemIdx = 0x0;
          }
          else
          {
            // - no more next page
            // vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
          }    
    }
    else
#endif
    {
      // - the next item is not on page, move to next page
      if (!fgFlClLock(FL_CMDPATH_DOWN))
        return TRUE;
      _wFlFirstIdx = wFlGetItemIdx(_bFlMnCurItemIdx + 1);
      if (fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx) )
      {
        _bFlMnCurItemIdx = 0x0;
      }
      else
      {
        // - no more next page
        // vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
      }
    }
  }
  else
  {
    // - reach the lastest item
  }
  	}
  return TRUE;
}


/**
 * Handle IR_LEFT. Go back to upper dir.
 */
BOOL fgFlLrcOnIrLeft(void) large
{
  if (fgFlClIsLock())
  {
    LRC_DBGLogS("IR_LEFT, CmdPath is locked in:");
    LRC_DBGLogB((BYTE)bFlClPath(), 0, 0, 0);
    return TRUE;
  }

#ifdef MP3_LYRICS_PL_15_SONGS
  if(_fgIsInPlayList)
  {
     fgFlLrcLeavItem(_bFlMnCurItemIdx);
    
     if (!fgFlClLock(FL_CMDPATH_RETURN_MENU))
       return TRUE;

     if (fgFlCmdGetItems(_bFlMnListId, _bFlMnMemIdx))
     {
       _bFlMnCurItemIdx = 0x0;
     }	 
     _fgIsInPlayList = FALSE;
	 
  }
  else
#endif
  {
  if (bSharedInfo(FL_LIST_FIELD(_bFlMnListId)) == FLPARM_LIST_FOLDER)
  {
    if (!_bFlMnMemLock)
    {
      if (!fgFlLrcLeavDir())
      {
        // - TODO: show error meessage
      }
    }
  }
  }
  return TRUE;
}


/**
 * Handle IR_RIGHT. Go down a dir level.
 */
static BOOL fgFlLrcOnIrRight(void) large
{
  WORD  wPos, wBaseDir;

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

#ifdef MP3_LYRICS_PL_15_SONGS
  if(!_fgIsInPlayList && _bFlMnPLNs > 0)
  {
     fgFlLrcLeavItem(_bFlMnCurItemIdx);
     _fgIsInPlayList = TRUE;
     _bFlMnMemIdx = wFlGetItemIdx(0);
     _fgFlRedrawPlPlay = FALSE;
     if (!fgFlClLock(FL_CMDPATH_REDRAW_PLAYLIST))
       return TRUE;
     if (fgFlCmdGetItems(_bFlPlListId, 0))
     {
       _bFlMnCurItemIdx = 0x0;
     }	 
  }
#else
  if (_bFlMnItemType == FTYPE_FOLDER)
  {
    if (_bFlMnMemLock)
      return TRUE;
    wPos = FL_LIST_FIELD(_bFlMnListId);
    bLoByte(wBaseDir) = bSharedInfo(wPos + 2);
    bHiByte(wBaseDir) = bSharedInfo(wPos + 3);

    if ((wFlGetItemIdx(_bFlMnCurItemIdx) == 0) && (wBaseDir != 0))
    {
      fgFlLrcLeavItem(_bFlMnCurItemIdx);
      fgFlLrcEntDir(_bFlMnCurItemIdx, TRUE);
    }
    else
    {
      fgPushStack(wFlMnGetListBaseDir(_bFlMnListId), wFlGetItemIdx(_bFlMnCurItemIdx));
      fgFlLrcLeavItem(_bFlMnCurItemIdx);
      fgFlLrcEntDir(_bFlMnCurItemIdx, FALSE);
    }
  }
#endif
  return TRUE;
}


/**
 * Draw next page.
 */

static BOOL fgFlLrcOnIrNext(void) large
{
  WORD  wLastItem;

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

  // Hiker Hauk: Temp solution, might consider to add this function to play list too
  if (_fgIsInPlayList)
  {
    return TRUE;
  }
  
  wLastItem= wFlGetItemIdx(FLMP3LRCMN_ITEM_N - 1);

  if (wLastItem < _wFlMnListLen - 1)
  {
    fgFlLrcLeavItem(_bFlMnCurItemIdx);
    _bFlMnCurItemIdx = 0;
    if (fgFlClLock(FL_CMDPATH_DOWN))
    {
      _wFlFirstIdx = wLastItem + 1;
      fgFlCmdGetItems(_bFlMnListId, _wFlFirstIdx);
    }
  }

  if(bFllrcPlNs() <= 1 && !fgFllrcMenuOn()

⌨️ 快捷键说明

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