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

📄 rip.c

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

#include "general.h"
//#include ".\module\SmsMenu.h"
#pragma NOAREGS

#ifdef SUPPORT_RIP
#include "..\..\common\dsp\dspshm.h"
#include "..\..\common\dsp\dsp_uop.h"
extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
extern void DRS232LogS(char * pcStr);


/************************************************************************
Function :
Description :
Parameter :
Return    :
************************************************************************/
BYTE bRipGetEmdMcrId(BYTE bLogicId) large
{
  BYTE i;
  BYTE bAttach;
  BYTE bIdTmp = 0xFF; // Notice!

  bAttach = bSharedInfo(SI_EMD_ATTACH);
  for(i = 0; (i < 6) && (bAttach != 0); i++, bAttach >>= 1)
  {
    if(bAttach & 0x01)
    {
      bIdTmp++;
      if(bIdTmp == bLogicId)
      {
        return(i);
      }
    }
  }

  bAttach = bSharedInfo(SI_MCR_ATTACH);
  for(i = 0; (i < 6) && (bAttach != 0); i++, bAttach >>= 1)
  {
    if(bAttach & 0x01)
    {
      bIdTmp++;
      if(bIdTmp == bLogicId)
      {
        return(i + 6);
      }
    }
  }

  return 0xFF;
}


BYTE bRipGetUsbNs(void) large
{
  BYTE bAttach;
  BYTE bUsbNs = 0;
  BYTE i = 0;

  bAttach = bSharedInfo(SI_EMD_ATTACH);
  for(i = 0; i < 8; i++)
  {
    if(bAttach & (0x01 << i))
      bUsbNs++;
  }
  return bUsbNs;
}


BOOL fgRipSlotValid(BYTE bIcId) large
{
  BYTE i = 0;

  for(i = 0; i < 6; i++)
  {
    if(bRipGetEmdMcrId(i) == bIcId)
      return TRUE;
  }
  return FALSE;
}


void vSetDevice(void)large
{
  BYTE i = _bRipSlot, j = 0;

  if(i == 6)
    i = 0;
  while(!fgRipSlotValid(i))
  {
    i++;
    j++;

    if(i == 6)
      i = 0;

    if(j == 8)
      break;
  }

  if(j < 8)
  {
    vSetRipXY(RIP_CENTER_X - 100, RIP_CENTER_X - 26, RIP_ENTRY_LEFT_Y + 120, RIP_ENTRY_LEFT_Y + 148);
    if(_bRipEntry == ENTRY_USB)
    {
      vRectangle(WB_RIP_MENU, 0, RIP_BG_HILI_COL, 1, RIP_BG_HILI_COL);
      vSetMsgCol4(WB_RIP_MENU, RIP_BG_HILI_COL, RIP_BG_HILI_COL, RIP_BG_HILI_COL, RIP_COL_BLUE);
    }
    else
    {
      vRectangle(WB_RIP_MENU, 0, RIP_COL_AMETHYST, 1, RIP_COL_AMETHYST);
      vSetMsgCol4(WB_RIP_MENU, RIP_COL_AMETHYST, RIP_COL_AMETHYST, RIP_COL_AMETHYST, RIP_COL_BLACK);
    }

    _bRipSlot = SV_DEVID_USB_SLOT_1 + i;
    vSetSharedInfo(SI_CD_RIP_DEVICE, _bRipSlot);

    _wStartX = RIP_CENTER_X - 100;
    _wStartY = RIP_ENTRY_LEFT_Y + 119;
    vOsdMsgPaste(WB_RIP_MENU, OSD_MSG_USB_SLOT1 + _bRipSlot);
  }
  else
  {
    vSetRipXY(RIP_CENTER_X - 100, RIP_CENTER_X - 28, RIP_ENTRY_LEFT_Y + 120, RIP_ENTRY_LEFT_Y + 148);
    if(_bRipEntry == ENTRY_USB)
    {
      vRectangle(WB_RIP_MENU, 0, RIP_BG_HILI_COL, 1, RIP_BG_HILI_COL);
      vSetMsgCol4(WB_RIP_MENU, RIP_BG_HILI_COL, RIP_BG_HILI_COL, RIP_BG_HILI_COL, RIP_BG_GRAY_COL);
    }
    else
    {
      vRectangle(WB_RIP_MENU, 0, RIP_COL_AMETHYST, 1, RIP_COL_AMETHYST);
      vSetMsgCol4(WB_RIP_MENU, RIP_COL_AMETHYST, RIP_COL_AMETHYST, RIP_COL_AMETHYST, RIP_BG_GRAY_COL);
    }
    _bRipSlot = 0;
    _wStartX = RIP_CENTER_X - 100;
    _wStartY = RIP_ENTRY_LEFT_Y + 119;
    vOsdMsgPaste(WB_RIP_MENU, OSD_MSG_RIP_NONE);
    vSetSharedInfo(SI_CD_RIP_DEVICE, SV_DEVID_CDVDROM);
  }
  _wStartX = RIP_ENTRY_LEFT_X + 13;
  _wStartY = RIP_ENTRY_LEFT_Y + 119;
  vOsdMsgPaste(WB_RIP_MENU, OSD_MSG_RIP_USB_DEVICE);
}


void vSetRipXY(WORD wStartX, WORD wEndX, WORD wStartY, WORD wEndY)large
{
  _wStartX = wStartX;
  _wEndX   = wEndX;
  _wStartY = wStartY;
  _wEndY   = wEndY;
}


void vShowMsg(BYTE bWbIdx, WORD wMsgIndex, WORD wStartX, WORD wStartY, BYTE BGCol, BYTE WordCol) large
{
  _wStartX = wStartX;
  _wStartY = wStartY;
  vSetMsgCol4(bWbIdx, BGCol, BGCol, BGCol, WordCol);
  vOsdMsgPaste(bWbIdx, wMsgIndex);
}


WORD wGetHasRipSec(void)large
{
  WORD wtime = 0, wtime2 = 0;
  BYTE i = 0, j = 0;

  if(_bHasRipNum == 0)
    return 0;
  for(i = 1; i <= MAX_TRACK_NUM; i++)
  {
    if(fgReadSelectedTrackFlag(i))
    {
      j++;
      if(j > _bHasRipNum)
        break;
      else
      {
        wtime2 = wGetTrackTime(i);
        wtime += bHiByte(wtime2) * 60 + bLoByte(wtime2);
      }
    }
  }
  return  wtime;
}


WORD wGetSelectedTotalSec(void)large
{
  BYTE i = 0;
  WORD wSec = 0, wtime = 0;

  if(_bpRipTrkNum[0] == 0)
    return 0;
  for(i = 1; i <= MAX_TRACK_NUM; i++)
  {
    if(fgReadSelectedTrackFlag(i))
    {
      wtime = wGetTrackTime(i);
      wSec += bHiByte(wtime) * 60 + bLoByte(wtime);
    }
  }
  return wSec;
}


void vWriteSelectedTrackFlag(BYTE tracknum)large
{
  BYTE i = 0;
  BYTE tmptrack;
  BYTE tmpBit = tracknum % 8, btrack = 0x01;

  if(tmpBit == 0)
  {
    btrack = 0x80;
    _bpRipTrkNum[tracknum / 8] ^= btrack;
  }
  else
  {
    btrack = btrack << (tmpBit - 1);
    _bpRipTrkNum[tracknum / 8 + 1] ^= btrack;
  }
}


BOOL fgReadSelectedTrackFlag(BYTE tracknum)large
{
  BYTE i = 0;
  BYTE tmptrack;
  BYTE tmpBit = tracknum % 8;

  if(tmpBit == 0)
  {
    tmptrack = _bpRipTrkNum[tracknum / 8];
    if(tmptrack & 0x80)
      return TRUE;
    else
      return FALSE;
  }
  else
  {
    tmptrack = _bpRipTrkNum[tracknum / 8 + 1];
    if((tmptrack >> (tmpBit - 1)) & 0x01)
      return TRUE;
    else
      return FALSE;
  }
}


void vNewRipInit(void) large
{
  BYTE i = 0;

  vSetKeyState(KEY_RIP);
  stct_rip.fgHighSpeed = FALSE;
  stct_rip.bRipBitrate = RIP_BITRATE_128kbps;
  stct_rip.fgRipID3 = TRUE;
  stct_rip.bRipError = NO_ERROR;
  vSetSharedInfo(SI_CD_RIP_PROGRESS, 0);
  vSetSharedInfo(SI_CD_RIP_PAUSE, SV_ON);
  vSetSharedInfo(SI_CD_RIP_BITRATE, SV_CD_RIP_128K);
  vWriteDspSharedBInfo(B_ENC_BITRATE, SV_CD_RIP_128K);
  vSetSharedInfo(SI_CD_RIP_ID3, TRUE);
  //vSetSharedInfo(SI_CD_RIP_DEVICE, SV_DEVID_USB_SLOT_1);
 // _bRipSlot = SV_DEVID_USB_SLOT_1;
  //if(_fgSvr == EV_ON)
  //fgEepromWriteByte(SCR_SAVER_POSITION, EV_OFF);
}


WORD wGetTrackTime(BYTE tracknum)large
{
  WORD wTrackTime = 0, wNextTrackTime = 0, wTrackTimeSec = 0, wNextTrackTimeSec = 0;
  DWRD addr, dwTmpAddr;

  bLoByte(wLoWord(addr)) = bSharedInfo(SI_CD_RIP_TRACKTIME1);
  bHiByte(wLoWord(addr)) = bSharedInfo(SI_CD_RIP_TRACKTIME1 + 1);
  bLoByte(wHiWord(addr)) = bSharedInfo(SI_CD_RIP_TRACKTIME1 + 2);
  bHiByte(wHiWord(addr)) = bSharedInfo(SI_CD_RIP_TRACKTIME1 + 3);
  if(tracknum > 0)// track time
  {
    dwTmpAddr = addr + tracknum * 6 + 3;
    bHiByte(wTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));
    dwTmpAddr += 1;
    bLoByte(wTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));
    dwTmpAddr = addr + (tracknum + 1) * 6 + 3;
    bHiByte(wNextTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));
    dwTmpAddr += 1;
    bLoByte(wNextTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));

    // change min into sec
    wTrackTimeSec = bHiByte(wTrackTime) * 60 + bLoByte(wTrackTime);
    wNextTrackTimeSec = bHiByte(wNextTrackTime) * 60 + bLoByte(wNextTrackTime);
    wTrackTimeSec = wNextTrackTimeSec - wTrackTimeSec;
  }
  else  // disc total time
  {
    tracknum = 1;
    dwTmpAddr = addr + tracknum * 6 + 3;
    bHiByte(wTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));
    dwTmpAddr += 1;
    bLoByte(wTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));

    tracknum = MAX_TRACK_NUM;
    dwTmpAddr = addr + (tracknum + 1) * 6 + 3;
    bHiByte(wNextTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));
    dwTmpAddr += 1;
    bLoByte(wNextTrackTime) = bReadDRAMTbl(bLoByte(wHiWord(dwTmpAddr)), wLoWord(dwTmpAddr));

    // change min into sec
    wTrackTimeSec = bHiByte(wTrackTime) * 60 + bLoByte(wTrackTime);
    wNextTrackTimeSec = bHiByte(wNextTrackTime) * 60 + bLoByte(wNextTrackTime);
    wTrackTimeSec = wNextTrackTimeSec - wTrackTimeSec;
  }
  bHiByte(wTrackTime) = wTrackTimeSec / 60;
  bLoByte(wTrackTime) = wTrackTimeSec % 60;
  return wTrackTime;
}


void vReDrawTrackList(BYTE bPageNum, BOOL fgDir) large
{
  BYTE bfirstnum = 7 + (bPageNum - 1) * 6;
  BYTE btmp = 0;
  BYTE i, bpStr[8], bpStr_trknum[3] = {2, ' ', '0'};
  BYTE bpTimeStr[6] = {5, '0', '0', ':', '0', '0'};
  WORD wTime, wtmpy = 0;

  bpStr[0] = 7;
  bpStr[1] = 't';
  bpStr[2] = 'r';
  bpStr[3] = 'a';
  bpStr[4] = 'c';
  bpStr[5] = 'k';

  vSetRipXY(RIP_CENTER_X + 2, RIP_MENU_ENDX - 6,
            RIP_LINE3_STARTY + 2, RIP_LINE6_STARTY - 2);
  vRectangle(WB_RIP_MENU, 0, RIP_COL_BLUE, 1, RIP_MENU_COL_BG);

  if(bPageNum != 1)
  {
    vOsdPasteBmpXY(RIP_ENTRY_RIGHT_X + 75, RIP_ENTRY_RIGHT_Y + 2, WB_RIP_MENU, BMP_RIP_UP);
    btmp = 1;

    if(fgDir == FALSE)
    {
      _bRipEntry = ENTRY_TRACK1;
      vSetRipXY(RIP_CENTER_X + 2, RIP_MENU_ENDX - 6,
                RIP_LINE3_STARTY + 5, RIP_LINE3_STARTY + 35);
      vChgColRep(WB_RIP_MENU, RIP_MENU_COL_BG, RIP_BG_HILI_COL);
      vChgColRep(WB_RIP_MENU, RIP_COL_BLACK, RIP_COL_BLUE);
    }
  }

  for(i = 7; (i >  btmp); i --)
  {
    if(bfirstnum + i - 7 >  MAX_TRACK_NUM)
      continue;

    bpStr[6] = ((bfirstnum + i - 7) / 10) ? (bfirstnum + i - 7) / 10 + '0' : '0';
    bpStr[7] = (bfirstnum + i - 7) % 10 + '0';
    vSetMsgCol4(WB_RIP_MENU, RIP_MENU_COL_BG, RIP_MENU_COL_BG, RIP_MENU_COL_BG, RIP_COL_BLACK);
    vOsdShowStrXY(RIP_ENTRY_RIGHT_X, RIP_ENTRY_RIGHT_Y + (i - 1) * 35,
                  WB_RIP_MENU, bpStr);
    wTime = wGetTrackTime(bfirstnum + i - 7);
    bpTimeStr[1] = bHiByte(wTime) / 10 ? bHiByte(wTime) / 10 + '0':'0';
    bpTimeStr[2] = bHiByte(wTime) % 10 + '0';
    bpTimeStr[4] = bLoByte(wTime) / 10 ? bLoByte(wTime) / 10 + '0':'0';
    bpTimeStr[5] = bLoByte(wTime) % 10 + '0';
    vSetMsgCol4(WB_RIP_MENU, RIP_MENU_COL_BG, RIP_MENU_COL_BG, RIP_MENU_COL_BG, RIP_COL_BLACK);
    vOsdShowStrXY(RIP_ENTRY_RIGHT_X + 110, RIP_ENTRY_RIGHT_Y + (i - 1) * 35,
                  WB_RIP_MENU, bpTimeStr);
    if(fgReadSelectedTrackFlag(bfirstnum + i - 7))
    {
      wtmpy = RIP_ENTRY_RIGHT_Y + (i - 1) * 35 + 8;
      if(wtmpy % 2 != 0)
        wtmpy -= 1;
      vOsdPasteBmpXY(RIP_CENTER_X + 30, wtmpy, WB_RIP_MENU, BMP_HOOK);
    }
  }

  if(fgDir == TRUE)
  {
    vOsdPasteBmpXY(RIP_ENTRY_RIGHT_X + 75, RIP_ENTRY_RIGHT_Y + 7 * 35 + 5,

⌨️ 快捷键说明

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