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

📄 usb.c

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

BOOL fgUSBCpCopyingEnterKey(void) large
{
  BOOL fgRet = TRUE;

  vFlMnUSBCpCancel();
  
  return(fgRet);
}

void vUSBCopyStateInit(void) large
{
  BYTE i;
  WORD wMsg;
  	
  // init all the button's state
  for (i = 0; i <= HILI_USB_SLOT6; i++)
  {
    _sUSBCopyBtn[i].bBtnID = i;

    _sUSBCopyBtn[i].bBtnState = 0;
    _sUSBCopyBtn[i].bBtnState |= (USB_COPY_BTN_ENABLE);
  }

  // init all chk box and total checked number
  vSetSharedInfo(SI_USB_COPY_GRP_1_ST, 0x00);
  for (i = 1; i < (USB_COPY_MAX_NUM + 7)/8; i++)
  {
    vWriteNextSharedItem(0x00);
  }

  _wUSBCpNxtNo = 0;  //set polling index to zero
  _wUSBCpRmnNs = 0;    //set remain number zero
  _wUSBCpTtlNs = 0;    //set total number to zero

  // set color
  vSetMsgCol4(FSMENU_OSD_WBIDX_BASIC, ENTRY_COL_GRAY, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BLACK);
  vSetBtnCol(FSMENU_OSD_WBIDX_BASIC, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_WHITE, ENTRY_COL_BLACK);

  // draw opt button
  for (i = HILI_ALL_SEL; i <= HILI_EXIT; i++)
  {    
    switch (i)
    {
      case HILI_ALL_SEL:
        wMsg = OSD_MSG_ALL_SELECT;
        break;
      case HILI_ALL_UNSEL:
        wMsg = OSD_MSG_ALL_UNSEL;
        break;
      case HILI_COPY_DEL:
        if(bSharedInfo(SI_DEVICE_ID) == SV_DEVID_CDVDROM)
          wMsg = OSD_MSG_COPY;
        else
          wMsg = OSD_MSG_DEL;
        break;
      case HILI_EXIT:
        wMsg = OSD_MSG_EXIT;
        break;
      default:
        break;
    }

    vSetStartEndXY(COPY_MENU_OPT_START_X, COPY_MENU_START_Y + 24 + 38 * (i-HILI_ALL_SEL), COPY_MENU_OPT_START_X+115, COPY_MENU_START_Y + 24 + 38 * (i-HILI_ALL_SEL) + 30);
    vCreateMsgButton(FSMENU_OSD_WBIDX_BASIC, i, 4, wMsg, 0xFFFF, 0);
    vUnselButton(FSMENU_OSD_WBIDX_BASIC, i);
  }

  _bUSBCopyState = USB_COPY_STATE_ITEM_SEL;
  _bUSBCpCurHili = HILI_FILEMENU;  
  
#ifdef USB_COPY_FORCE_ABORT
    vSetSharedInfo(SI_DDISC_COPY_ABORT, FALSE);
#endif

  return;
}

BOOL fgUSBCopyState(void) large
{
  BOOL fgRet = TRUE;

  switch(_bIRKey)
  {
    case IR_USB_COPY_DEL:
      if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        vFlMnUSBCpCancel();
      }
      else
      {
        vUSBCopyStateExit(FALSE,FALSE);
      }
      break;

    case IR_UP:
      if(_bUSBCopyState == USB_COPY_STATE_ITEM_SEL)
      {
        fgRet = fgUSBCpItemSelUpKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
      {
        fgRet = fgUSBCpDevSelUpKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        //do nothing here
      }
      break;
    case IR_DOWN:
      if(_bUSBCopyState == USB_COPY_STATE_ITEM_SEL)
      {
        fgRet = fgUSBCpItemSelDownKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
      {
        fgRet = fgUSBCpDevSelDownKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        //do nothing here
      }
      break;
    case IR_LEFT:
      if(_bUSBCopyState == USB_COPY_STATE_ITEM_SEL)
      {
        fgRet = fgUSBCpItemSelLeftKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
      {
        //do nothing here
      }
      else if(_bUSBCopyState == USB_COPY_STATE_CONFIRM)
      {
        fgRet = fgUSBCpConfirmLeftKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        //do nothing here
      }
      break;
    case IR_RIGHT:
      if(_bUSBCopyState == USB_COPY_STATE_ITEM_SEL)
      {
        fgRet = fgUSBCpItemSelRightKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
      {
        //do nothing here
      }
      else if(_bUSBCopyState == USB_COPY_STATE_CONFIRM)
      {
        fgRet = fgUSBCpConfirmRightKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        //do nothing here
      }
      break;
    case IR_PLAY:
    case IR_ENTER:
    case IR_PLAY_ENTER:
      if(_bUSBCopyState == USB_COPY_STATE_ITEM_SEL)
      {
        fgRet = fgUSBCpItemSelEnterKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
      {
        fgRet = fgUSBCpDevSelEnterKey();
      }
      else if(_bUSBCopyState == USB_COPY_STATE_CONFIRM)
      {
        fgRet = fgUSBCpConfirmEnterKey();
      }	  
      else if(_bUSBCopyState == USB_COPY_STATE_COPYING)
      {
        fgRet = fgUSBCpCopyingEnterKey();
      }
      break;

    default:  //should not happen
      break;
  }

  return(fgRet);
}

//in current state, data Var space is so limit, So change the Var type to BYTE
//fgReload only set TRUE in the case of exit from USB delete function
void vUSBCopyStateExit(BYTE fgReload, BYTE fgInit) large
{
  BYTE i;

  //PL00113703, if usb copy exit by Exception, it need release file list lock
  vFlCmdDone();
  vFlClRls();

  // del all buttons
  for (i = 0; i <= HILI_CANCEL; i++)
  {
    vDelButton(FSMENU_OSD_WBIDX_BASIC, i);  
  }

  // clear the area of menu
  vSetStartEndXY(COPY_MENU_START_X, COPY_MENU_START_Y, COPY_MENU_END_X, COPY_MENU_END_Y);
  vRectangle(FSMENU_OSD_WBIDX_BASIC, 0, 0, TRUE, ENTRY_COL_BG);
  _bUSBCopyState = USB_COPY_STATE_NONE;

  // default the color
  vSetMsgCol4(FSMENU_OSD_WBIDX_BASIC, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_WHITE, ENTRY_COL_BLACK);

  if(fgReload)
  {
    //current usb copy function may delete folder, and maybe it need load new folder information
    //so we need reload EMD device after delete file/folder
    //it will send cmd to risc to reload current EMD device here

    vDeleteWB(FL_MENU_WB);
    vDeleteWB(FL_INFO_WB);

    vFlCmdSync();
  }
  else
    vFsMenuInit(fgInit);

  return;
}

void vUSBCopyException(BYTE bErrCode) large
{
  WORD wErrMsg = 0;
  BOOL fgExit = TRUE;
  
  switch(bErrCode)
  {
    case SV_FMV_ERR_DEVICEFULL:
      wErrMsg = OSD_MSG_ERR_DEVICE_FULL;      
      break;
      
    case SV_FMV_ERR_CREATEFILEFAILS:
      wErrMsg = OSD_MSG_ERR_CREATE_FILE_FAIL;      
      break;
      
    case SV_FMV_ERR_DEVWRITEFAILS:
      wErrMsg = OSD_MSG_ERR_DEV_WRITE_FAIL;      
      break;
      
    case SV_FMV_ERR_FILE_LENGTH_ZERO:     //simon add it, if the length of file to copy is zero, finish work.
      wErrMsg = OSD_MSG_ERR_FILE_LENGTH_ZERO;      
      break;

    case SV_FMV_ERR_DEV_WRITE_PROTECT:   //write_protect_support
       wErrMsg = OSD_MSG_ERR_WRITE_PROTECT;  
        break;
        
    default:
      fgExit = FALSE;
      // wErrMsg = 
      break;
  }

  // exit the USB copy menu
  if (fgExit)
  {
#ifdef  RS232_LOG
  DBGLogS("vUSBCopyException xx1");
  DBGLogB(bErrCode, 0xff, 0xff, 0xff);
#endif
    // exit the menu
    vUSBCopyStateExit(FALSE,FALSE);
    
    // print the error message
    _wStartX = 45;    
    _wStartY = 280;
    vOsdPosShow(OSD_POS_FS_INFO_BAR,wErrMsg,8);  //PL00113703, show msg with timeout
  }

  return;
}

void vUSBCopyTimer(void) large
{
  if((_bUSBCopyState > USB_COPY_STATE_ITEM_SEL) && (_bUSBCopyState < USB_COPY_STATE_MAX))
  {
    if(_bUSBCopyState == USB_COPY_STATE_DEV_SEL)
    {
      vUSBCpDevSelRefresh();
    }
    else if(_bUSBCopyState == USB_COPY_STATE_CONFIRM)
    {
      //if current device pull out, exit usb copy function
      if(!(bSharedInfo(SI_EMD_ATTACH) & (0x01 << bSharedInfo(SI_LUN_ID))))
      {
        vUSBCopyStateExit(FALSE,FALSE);
      }
    }
    else if (_bUSBCopyState == USB_COPY_STATE_COPYING)
    {
      //show the copy process
      if (_bUSBCpCnt == 0)
      {
        if (bSharedInfo(SI_FMV_PERCENT) == 100)
        {
          vUSBCpShowProgress(TRUE);
        }
        else
        {
          vUSBCpShowProgress(FALSE);
        }

        _bUSBCpCnt = 5;
      }

      //handle Exceptions
      vUSBCopyException(bSharedInfo(SI_FMV_ERR_CODE));
	  
      _bUSBCpCnt--;
    }
  }
}
#else
code BYTE bUSBCopyDevID[1];
#endif
#else

#ifdef SUPPORT_USB_COPY

static xdata WORD _wEffact;

static code strucUSBItem _prUSBItem[USB_TOTAL_ITEM] =
{
  { STUSB_USB_SLOT1,OSD_MSG_USB_SLOT1},
  { STUSB_USB_SLOT2,OSD_MSG_USB_SLOT2},  
  { STUSB_USB_SLOT3,OSD_MSG_USB_SLOT3},
  { STUSB_USB_SLOT4,OSD_MSG_USB_SLOT4},
  { STUSB_USB_SLOT5,OSD_MSG_USB_SLOT5},
  { STUSB_USB_SLOT6,OSD_MSG_USB_SLOT6},
 
};


void vUSBChkSlot1(void) large
{
#ifdef SUPPORT_MULTI_PARTITION_FAT     //simon mul
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x01))
  _wEffact &= ~0x01;


#else
if(!(bSharedInfo(SI_EMD_ATTACH)& 0x01))
  _wEffact &= ~0x01;

#endif
  return;
}

void vUSBChkSlot2(void) large
{
#ifdef SUPPORT_MULTI_PARTITION_FAT
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x02))
     _wEffact &= ~0x02;


#else

if(!(bSharedInfo(SI_EMD_ATTACH)&0x02))
  _wEffact &= ~0x02;
#endif
  return;
}

void vUSBChkSlot3(void) large
{
#ifdef SUPPORT_MULTI_PARTITION_FAT
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x04))
  _wEffact &= ~0x04;


#else


if(!(bSharedInfo(SI_EMD_ATTACH)&0x04))
  _wEffact &= ~0x04;
#endif


  return;
}

void vUSBChkSlot4(void) large
{

#ifdef SUPPORT_MULTI_PARTITION_FAT
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x08))
  _wEffact &= ~0x08;


#else

if(!(bSharedInfo(SI_EMD_ATTACH)&0x08))
  _wEffact &= ~0x08;

#endif
  return;
}

void vUSBChkSlot5(void) large
{
#ifdef SUPPORT_MULTI_PARTITION_FAT
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x10))
     _wEffact &= ~0x10;


#else


if(!(bSharedInfo(SI_EMD_ATTACH)&0x10))
  _wEffact &= ~0x10;
#endif

  return;
}

void vUSBChkSlot6(void) large
{
#ifdef SUPPORT_MULTI_PARTITION_FAT
 BYTE bAttach;
 bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));

 if(!(bAttach & 0x20))
  _wEffact &= ~0x20;


#else


if(!(bSharedInfo(SI_EMD_ATTACH)&0x20))
  _wEffact &= ~0x20;

#endif
  return;
}



void vUSBChkValid(BYTE bType) large
{

   switch(bType)
   	{
     case STUSB_USB_SLOT1:
     	vUSBChkSlot1();
     	break;
     
     case STUSB_USB_SLOT2:
     	vUSBChkSlot2();
     	break;

     case STUSB_USB_SLOT3:
        vUSBChkSlot3();
     	break;
     case STUSB_USB_SLOT4:
        vUSBChkSlot4();
     	break;
     case STUSB_USB_SLOT5:
        vUSBChkSlot5();
     	break;
     case STUSB_USB_SLOT6:
     	vUSBChkSlot6();
     	break;	

     default:
     	 break;
   	}

}


// *********************************************************************
// Function : void vChangeWBColor(BYTE bWBIdx,WORD wSX,WORD wSY,WORD wEX,WORD wEY,BYTE bOldCol,BYTE bNewCol) large
// Description : 
// Parameter : None
// Return    : None
// *********************************************************************

static void vChangeWBColor(BYTE bWBIdx,WORD wSX,WORD wSY,WORD wEX,WORD wEY,BYTE bOldCol,BYTE bNewCol) large

⌨️ 快捷键说明

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