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

📄 usb.c

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

#include "general.h"
#include "osdshow.h"
#include "../fslist/flcomm.h"
#ifdef UNICODE_SUPPORT_COPY
#include "../fslist/flspec.h"
#endif

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

#pragma NOAREGS

#ifdef UNICODE_SUPPORT_COPY
#ifdef SUPPORT_USB_COPY
//#define TRICK_USB_DEV
#ifdef TRICK_USB_DEV
// the trick usb valide device for ui debug
xdata BYTE _bTrickUsbDev = 0;
#endif

// the max valide device
xdata BYTE _bValidDevNum = 0;

// device button display array
xdata BYTE _bDevDisplayArray[6];

// button array
xdata strucUSBCopyBtn _sUSBCopyBtn[12];

// the max valide device
xdata BYTE _bDevSel;

code BYTE bUSBCopyDevID[6]=
{
  DEV_USB_SLOT_1, 
  DEV_USB_SLOT_2, 
  DEV_USB_SLOT_3, 
  DEV_USB_SLOT_4, 
  DEV_USB_SLOT_5, 
  DEV_USB_SLOT_6, 
};

// notify the USB copy module, valide device number
BYTE bUSBCpChkDevNum(void) large
{
  BYTE i;
  BYTE bAttach;
  BYTE bNs = 0;
  
//modify by msz00107 for multiple partition support
#ifdef SUPPORT_MULTI_PARTITION_FAT
  #ifdef TRICK_USB_DEV
  bAttach = _bTrickUsbDev;
  #else
  bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                     (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));
  #endif
  
  for(i = 0; i < 6; i++)
  {
    if(bAttach & (0x01 << i))
    {
      bNs++;
    }
  }
#else
  #ifdef TRICK_USB_DEV
  bAttach = _bTrickUsbDev;
  #else
  bAttach = bSharedInfo(SI_EMD_ATTACH);
  #endif

  for(i = 0; i < 6; i++)
  {
    if(bAttach & (0x01 << i))
    {
      bNs++;
    }
  }
#endif   //mod end

  return bNs;
}

// check the device valide
void vUSBCpCheckDev (void) large
{
  BYTE i;
  BYTE bAttach;

  // check usb
  //modify by msz00107 for multiple partition support
  #ifdef SUPPORT_MULTI_PARTITION_FAT
  #ifdef TRICK_USB_DEV
  bAttach = _bTrickUsbDev;
  #else
  bAttach = ((bSharedInfo(SI_EMD_DRIVE_0) >> SV_MCR_TOTAL_NS) | 
                    (bSharedInfo(SI_EMD_DRIVE_1) << SV_MCR_TOTAL_NS));
  #endif
  #else
  #ifdef TRICK_USB_DEV
  bAttach = _bTrickUsbDev;
  #else
  bAttach = bSharedInfo(SI_EMD_ATTACH);
  #endif  
  #endif   //mod end
  
  for (i = HILI_USB_SLOT1; i <= HILI_USB_SLOT6; i++)
  {
    if (bAttach & (0x01 << (i-HILI_USB_SLOT1)))
    {
      _sUSBCopyBtn[i].bBtnState |= USB_COPY_BTN_ENABLE;
    }
    else
    {
      _sUSBCopyBtn[i].bBtnState &= USB_COPY_BTN_DISABLE;
    }
  }

  return;
}

WORD wUSBCpGetNextFileAbsIdx (void) large
{
  BYTE i,j;
  BYTE bTmp;
  WORD wTmp;

  if(!_wUSBCpRmnNs)
  {
    return (0xffff);
  }
  
  for(i=(_wUSBCpNxtNo/8); i < (USB_COPY_MAX_NUM/8); i++)
  {
    bTmp = bSharedInfo(SI_USB_COPY_GRP_1_ST + i);
	
    if(bTmp)
    {
      for(j=(_wUSBCpNxtNo%8); j < 8; j++)
      {
        if(bTmp & ((0x01) << j))
        {
          _wUSBCpRmnNs --;
		  
          _wUSBCpNxtNo = 8*i + j +1;

          wTmp = 8*i + j;

	   return (wTmp);
        }
      }
    }
  }
  	
  return (0xffff);
}

// *********************************************************************
// Function : vUSBCpHiliBtn()  
// Description : highlight button
// Parameter :  bBtnID
// Return    :  none
// *********************************************************************
void vUSBCpHiliBtn(BYTE bBtnID) large
{
  // set the button's color
  vSetMsgCol4(FSMENU_OSD_WBIDX_BASIC, 15, 15, 15, ENTRY_COL_WHITE);
  vSetBtnCol(FSMENU_OSD_WBIDX_BASIC, 15, 0, ENTRY_COL_WHITE, ENTRY_COL_BLACK);
  vSelButton(FSMENU_OSD_WBIDX_BASIC, bBtnID); 

  // return to the default color set
  vSetMsgCol4(FSMENU_OSD_WBIDX_BASIC, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_WHITE, ENTRY_COL_BLACK);
}

// *********************************************************************
// Function : vUSBCpUnHiliBtn()  
// Description : unhighlight button
// Parameter :  bBtnID
// Return    :  none
// *********************************************************************
void vUSBCpUnHiliBtn(BYTE bBtnID) large
{
  // set the button's 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);
  vUnselButton(FSMENU_OSD_WBIDX_BASIC, bBtnID);

  // USB copy menu's color chang(YELLOW --> BACK GROUND)
  _wStartX = COPY_MENU_START_X;
  _wEndX   = COPY_MENU_END_X;
  _wStartY = COPY_MENU_START_Y;
  _wEndY   = COPY_MENU_START_Y + 5*33 + 28;

  vChgColRep(FSMENU_OSD_WBIDX_BASIC, 15, ENTRY_COL_BG);
}

void vUSBCpShowChkBox (BYTE bIdx, BOOL fgSelected) large
{
  vSetMsgCol4(FSMENU_OSD_WBIDX_BASIC, ENTRY_COL_GRAY, ENTRY_COL_BG, ENTRY_COL_BG, ENTRY_COL_BLACK);
  vSetStartEndXY(COPY_MENU_START_X, COPY_MENU_START_Y + 6 + (FLMN_ITEM_H+FLMN_ITEM_INT) * bIdx, COPY_MENU_START_X+25, COPY_MENU_START_Y + (FLMN_ITEM_H+FLMN_ITEM_INT) * bIdx + FLMN_ITEM_H);

  if(fgSelected)
  {
    vPasteBmp(FSMENU_OSD_WBIDX_BASIC,BMP_HOOK);//BMP_USB_HOOK
  }
  else
  {
    vRectangle(FSMENU_OSD_WBIDX_BASIC, 0, 0, 1, 0);
  }
}

void vUSBCpShowAllChkbox (void) large
{
  BYTE i;
  BYTE bTmp1;
  BYTE bValidItemNs;
  WORD widx;
  
  //clear chk box area
  vSetStartEndXY(COPY_MENU_START_X, COPY_MENU_START_Y, COPY_MENU_START_X+25, COPY_MENU_START_Y + (FLMN_ITEM_H+FLMN_ITEM_INT) * 5 + FLMN_ITEM_H);
  vRectangle(FSMENU_OSD_WBIDX_BASIC, 0, 0, 1, 0);

  if(_bFlMnItemNs > 6)
    bValidItemNs = 6;
  else
    bValidItemNs = _bFlMnItemNs;
  
  for(i=0;i<bValidItemNs;i++)
  {
    widx = wFlGetItemIdx(i);
    bTmp1 = bSharedInfo(SI_USB_COPY_GRP_1_ST + widx/8);

    if(bTmp1 & ((0x01) << (widx%8)))
    {
      vUSBCpShowChkBox(i,TRUE);
    }
  }
  return;
}

// show the file copy number
void vUSBCpShowNum(void) large
{
  BYTE  pbStr[10];
  BYTE  bCharNum;
  WORD  wTmp;

  // 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);

  _wStartX = COPY_MENU_START_X;
  _wStartY = COPY_MENU_START_Y +50;

  //clear this region first
  //_wEndX = COPY_MENU_END_X;
  //_wEndY = _wStartY +30;
  //vRectangle(FSMENU_OSD_WBIDX_BASIC, 0, 0, TRUE, ENTRY_COL_BG);

  //show current number
  wTmp = _wUSBCpTtlNs-_wUSBCpRmnNs;
  if(wTmp >= 1000)
  {
    bCharNum = 4;

    pbStr[0] = 4;
    pbStr[1] = (wTmp)/1000 + '0';
    pbStr[2] = (wTmp%1000)/100 + '0';
    pbStr[3] = (wTmp%100)/10 + '0';
    pbStr[4] = wTmp%10 + '0';
  }
  else if(wTmp >= 100)
  {
    bCharNum = 3;
	
    pbStr[0] = 3;
    pbStr[1] = (wTmp)/100 + '0';
    pbStr[2] = (wTmp%100)/10 + '0';
    pbStr[3] = wTmp%10 + '0';
  }
  else if(wTmp >= 10)
  {
    bCharNum = 2;

    pbStr[0] = 2;
    pbStr[1] = (wTmp)/10 + '0';
    pbStr[2] = wTmp%10 + '0';
  }
  else
  {
    bCharNum = 1;

    pbStr[0] = 1;
    pbStr[1] = wTmp + '0';
  }

  //show "/"
  pbStr[0] ++;
  pbStr[bCharNum + 1] = '/';

  //show total number
  wTmp = _wUSBCpTtlNs;
  if(wTmp >= 1000)
  {
    pbStr[0] += 4;
    pbStr[bCharNum + 2] = (wTmp)/1000 + '0';
    pbStr[bCharNum + 3] = (wTmp%1000)/100 + '0';
    pbStr[bCharNum + 4] = (wTmp%100)/10 + '0';
    pbStr[bCharNum + 5] = wTmp%10 + '0';
  }
  else if(wTmp >= 100)
  {	
    pbStr[0] += 3;
    pbStr[bCharNum + 2] = (wTmp)/100 + '0';
    pbStr[bCharNum + 3] = (wTmp%100)/10 + '0';
    pbStr[bCharNum + 4] = wTmp%10 + '0';
  }
  else if(wTmp >= 10)
  {
    pbStr[0] += 2;
    pbStr[bCharNum + 2] = (wTmp)/10 + '0';
    pbStr[bCharNum + 3] = wTmp%10 + '0';
  }
  else
  {
    pbStr[0] += 1;
    pbStr[bCharNum + 2] = wTmp + '0';
  }

  vOsdShowStr(FSMENU_OSD_WBIDX_BASIC, pbStr);

  return;
}

// show the file copy percent
void vUSBCpShowProgress(BOOL fgDone) large
{
  BYTE  pbStr[4];
  BYTE  bPercent = bSharedInfo(SI_FMV_PERCENT);

  // 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);
  
  // set the start x,y
  _wStartX = COPY_MENU_START_X;
  _wStartY = COPY_MENU_START_Y +90;

  if (fgDone)
  {
    pbStr[0] = 4;
    pbStr[1] = '1';
    pbStr[2] = '0';
    pbStr[3] = '0';
    pbStr[4] = '%';
  }
  else if ((bPercent >= 0) && (bPercent < 100))
  {
    pbStr[0] = 4;
    pbStr[1] = bPercent / 10 + '0';
    pbStr[2] = bPercent % 10 + '0';
    pbStr[3] = '%';
    pbStr[4] = ' ';
  }
  else
  {
    pbStr[0] = 4;
    pbStr[1] = '0';
    pbStr[2] = '0';
    pbStr[3] = '%';
    pbStr[4] = ' ';
  }
  vOsdShowStr(FSMENU_OSD_WBIDX_BASIC, pbStr);

  return;
}

void vUSBCpDevSelShowBtn(void) large
{
  BYTE i;
  BYTE bBtnID;

  // draw device button
  // highlight the first one.
  for (i = 0; i < _bValidDevNum; i++)
  {
    bBtnID = _bDevDisplayArray[i];
	
    // set the x,y
    vSetStartEndXY(COPY_MENU_OPT_START_X, COPY_MENU_START_Y + 32 * (i), COPY_MENU_OPT_START_X+115, COPY_MENU_START_Y + 32 * (i) + 30);
  
    // 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);
  
    // create button
    vCreateMsgButton(FSMENU_OSD_WBIDX_BASIC, bBtnID, 4, OSD_MSG_USB_SLOT1 + (bBtnID - HILI_USB_SLOT1), 0xFFFF, 0);
    vUnselButton(FSMENU_OSD_WBIDX_BASIC, bBtnID);
  }

  return;
}

// *********************************************************************
// Function : vUSBCpDevSelShowMenu
// Description : Show device select menu
// Parameter :  fgInit
// Return    :  none
// *********************************************************************
void vUSBCpDevSelShowMenu(BOOL fgInit) large
{
  BYTE bTmp = 0;
  BYTE bCount = 0;

  if(fgInit)
  {
    // delete all item sel buttons
    for (bTmp = HILI_ALL_SEL; bTmp <= HILI_EXIT; bTmp++)
    {
      vDelButton(FSMENU_OSD_WBIDX_BASIC, bTmp);  
    }
  }
  else
  {
    // delete all dev sel buttons
    for (bTmp = HILI_USB_SLOT1; bTmp <= HILI_USB_SLOT6; bTmp++)
    {
      vDelButton(FSMENU_OSD_WBIDX_BASIC, bTmp);  
    }
  }

  // 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);

  // check the device valide
  vUSBCpCheckDev();

  // clear the valide device array first
  _bValidDevNum = 0;
  for (bTmp = 0; bTmp < 6; bTmp++)
  {
    _bDevDisplayArray[bTmp] = 0;
  }
  
  // fill the valide device array
  for (bTmp = HILI_USB_SLOT1; bTmp <= HILI_USB_SLOT6; bTmp++)
  {    
    if ((_sUSBCopyBtn[bTmp].bBtnState & USB_COPY_BTN_ENABLE) == USB_COPY_BTN_ENABLE)
    {
      _bDevDisplayArray[bCount] = _sUSBCopyBtn[bTmp].bBtnID;
      bCount++;
      _bValidDevNum = bCount;
    }
  }

  if(_bValidDevNum == 0)  //pull out usb dev in dev sel menu
  {
    vUSBCopyStateExit(FALSE,FALSE);
    return;
  }
  
  // set the highlight flag
  _bUSBCpCurHili = _bDevDisplayArray[0];

  // set highlight button info
  _bDevSel = 0;

  // draw device button, and highlight the first one.
  vUSBCpDevSelShowBtn();
  
  // highlight the button (first)
  vUSBCpHiliBtn(_bUSBCpCurHili);
   
  return;
}

void vUSBCpDevSelRefresh(void) large
{
  BYTE bDevNum = bUSBCpChkDevNum();

  // if the valide device number have chang, redraw the device select menu.
  if (bDevNum != (_bValidDevNum))
  {
    vUSBCpDevSelShowMenu(FALSE);
  }

  return;
}

// *********************************************************************
// Function : vUSBCpConfirmShowMenu
// Description : Show device select menu
// Parameter :  fgInit
// Return    :  none
// *********************************************************************
void vUSBCpConfirmShowMenu(void) large
{
  WORD wRmnSize;
  BYTE pbString[8];
  	
  if((bSharedInfo(SI_FAT_ERR_CODE) == SV_FAT_E_MBR_ERROR) || (bSharedInfo(SI_FAT_ERR_CODE) == SV_FAT_E_NOT_SUPPORT))
  {
    // draw the "BACK" button

⌨️ 快捷键说明

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