亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fat_ioct.c

?? at91rm9200硬盤的接口代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
  Description:
  FS internal function. Store information about used/unused clusters
  in a FS_DISKFREE_T data structure.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  pDiskData   - Pointer to a FS_DISKFREE_T data structure.
  
  Return value:
  ==0         - Information is stored in pDiskData.
  <0          - An error has occured.
*/

static int _FS_fat_GetTotalFree(int Idx, FS_u32 Unit, FS_DISKFREE_T *pDiskData) {
  FS_u32 freeclust;
  FS_u32 usedclust;
  FS_u32 totclust;
  FS_u32 fatentry;
  FS_u32 fatsize;
  FS_i32 fatoffs;
  FS_i32 bytespersec;
  FS_i32 cursec;
  FS_i32 fatsec;
  FS_i32 lastsec;
  FS_i32 fatindex;
  int fattype;
  int err;
  char *buffer;
  unsigned char a;
  unsigned char b;
#if (FS_FAT_NOFAT32==0)
  unsigned char c;
  unsigned char d;
#endif
  
  if (!pDiskData) {
    return -1;  /* No pointer to a FS_DISKFREE_T structure */
  }
  buffer = FS__fat_malloc(FS_FAT_SEC_SIZE);
  if (!buffer) {
    return -1;
  }
  fattype = FS__fat_which_type(Idx, Unit);
#if (FS_FAT_NOFAT32!=0)
  if (fattype == 2) {
    FS__fat_free(buffer);
    return -1;
  }
#endif /* FS_FAT_NOFAT32!=0 */
  fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz16;
  if (fatsize == 0) {
    fatsize = FS__FAT_aBPBUnit[Idx][Unit].FATSz32;
  }
  bytespersec = (FS_i32)FS__FAT_aBPBUnit[Idx][Unit].BytesPerSec;
  /* Calculate total allocation units on disk */
  totclust = FS__FAT_aBPBUnit[Idx][Unit].TotSec16;
  if (!totclust) {
    totclust = FS__FAT_aBPBUnit[Idx][Unit].TotSec32;
  }
  totclust  -= FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt;
  totclust  -= 2*fatsize;
  usedclust  = FS__FAT_aBPBUnit[Idx][Unit].RootEntCnt;
  usedclust *= 0x20;
  usedclust /= bytespersec;
  totclust  -= usedclust;
  totclust  /= FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
  /* Scan FAT for free and used entries */
  cursec     = 0;
  fatsec     = 0;
  lastsec    = -1;
  fatentry   = 0xffffUL;
  freeclust  = 0;
  usedclust  = 0;
  while (1) {
    if (cursec >= (FS_i32)totclust) {
      break;  /* Last cluster reached */
    }
    if (fatsec >= (FS_i32)fatsize + FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt) {
      break;  /* End of FAT reached */
    }
    if (fattype == 1) {
      fatindex = (cursec + 2) + ((cursec + 2) / 2);    /* FAT12 */
    }
    else if (fattype == 2) {
      fatindex = (cursec + 2) * 4;               /* FAT32 */
    }
    else {
      fatindex = (cursec + 2) * 2;               /* FAT16 */
    }
    fatsec = FS__FAT_aBPBUnit[Idx][Unit].RsvdSecCnt + (fatindex / bytespersec);
    fatoffs = fatindex % bytespersec;
    if (fatsec != lastsec) {
      err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
      if (err < 0) {
        err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec, (void*)buffer);
        if (err < 0) {
          FS__fat_free(buffer);
          return -1;
        }
        /* Try to repair original FAT sector with contents of copy */
        FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec, (void*)buffer);
      }
      lastsec = fatsec;
    }
    if (fattype == 1) {
      if (fatoffs == (bytespersec - 1)) {
        a = buffer[fatoffs];
        err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsec+1, (void*)buffer);
        if (err < 0) {
          err = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, fatsize + fatsec + 1, (void*)buffer);
          if (err < 0) {
            FS__fat_free(buffer);
            return -1;
          }
          /* Try to repair original FAT sector with contents of copy */
          FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, fatsec + 1, (void*)buffer);
        }
        lastsec = fatsec + 1;
        b = buffer[0];
      }
      else {
        a = buffer[fatoffs];
        b = buffer[fatoffs + 1];
      }
      if (cursec & 1) {
        fatentry = ((a & 0xf0) >> 4 ) + 16 * b;
      }
      else {
        fatentry = a + 256 * (b & 0x0f);
      }
      fatentry &= 0x0fff;
    }
#if (FS_FAT_NOFAT32==0)
    else if (fattype == 2) {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      c = buffer[fatoffs + 2];
      d = buffer[fatoffs + 3];
      fatentry = a + 0x100UL * b + 0x10000UL * c + 0x1000000UL * d;
      fatentry &= 0x0fffffffUL;
    }
#endif /* FS_FAT_NOFAT32==0 */
    else {
      a = buffer[fatoffs];
      b = buffer[fatoffs + 1];
      fatentry = a + 256 * b;
      fatentry &= 0xffffUL;
    }
    cursec++;
    if (fatentry == 0) {
      freeclust++;
    }
    else {
      usedclust++;
    }
  }
  FS__fat_free(buffer);
  pDiskData->total_clusters      = totclust;
  pDiskData->avail_clusters      = freeclust;
  pDiskData->sectors_per_cluster = FS__FAT_aBPBUnit[Idx][Unit].SecPerClus;
  pDiskData->bytes_per_sector    = (FS_u16)bytespersec;
  return 0;
}

#endif /* FS_FAT_DISKINFO */


/*********************************************************************
*
*             Global functions
*
**********************************************************************
*/

/*********************************************************************
*
*             FS__fat_ioctl
*
  Description:
  FS internal function. Execute device command. The FAT layer checks
  first, if it has to process the command (e.g. format). Any other
  command is passed to the device driver.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  Cmd         - Command to be executed.
  Aux         - Parameter depending on command.
  pBuffer     - Pointer to a buffer used for the command.
  
  Return value:
  Command specific. In general a negative value means an error.
*/

int FS__fat_ioctl(int Idx, FS_u32 Unit, FS_i32 Cmd, FS_i32 Aux, void *pBuffer) {
  int x;
#if ((FS_SUPPORT_SEC_ACCESS) || (FS_FAT_NOFORMAT==0))
  int i;
#endif
#if (FS_FAT_NOFORMAT==0)
  int j;
#endif

  FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_INC_BUSYCNT, 0, (void*)0);  /* Turn on busy signal */
#if (FS_FAT_NOFORMAT==0)
  if (Cmd == FS_CMD_FORMAT_MEDIA) {
    j = 0;
    while (1) {
      if (j >= FS_KNOWNMEDIA_NUM) {
        break;  /* Not a known media */
      }
      if (_FS_wd_format_media_table[j].media_id == Aux) {
        break;  /* Media found in the list */
      }
      j++;
    }	//find the right media
    if (j >= FS_KNOWNMEDIA_NUM) {	//can't find the right media
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
      return -1;
    }
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);	//get status of device, if ok return 1
    if (i >= 0) {
      x = _FS_fat_format(FS__pDevInfo[Idx].devdriver,
                          Unit,
                          _FS_wd_format_media_table[j].secperclus,
                          _FS_wd_format_media_table[j].rootentcnt,
                          _FS_wd_format_media_table[j].totsec16,
                          _FS_wd_format_media_table[j].totsec32,
                          _FS_wd_format_media_table[j].media,
                          _FS_wd_format_media_table[j].fatsz16,
                          0,
                          _FS_wd_format_media_table[j].secpertrk,
                          _FS_wd_format_media_table[j].numheads,
                          _FS_wd_format_media_table[j].hiddsec,
                          _FS_wd_format_media_table[j].fsystype);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
      else {
        /* Invalidate BPB */
        for (i = 0; i < (int)FS__maxdev; i++) {
          for (j = 0; j < (int)FS__fat_maxunit; j++) {
              FS__FAT_aBPBUnit[i][j].Signature = 0x0000;
          }
        }
      }
    }
    else {
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
      return -1;
    }
  }
  else if (Cmd == FS_CMD_FORMAT_AUTO) {
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);
    if (i >= 0) {
      x = _FS_FAT_AutoFormat(Idx, Unit);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_FAT_NOFORMAT==0 */
  if (Cmd == FS_CMD_FORMAT_MEDIA) {
    x = -1;  /* Format command is not supported */
  }
#endif /* FS_FAT_NOFORMAT==0 */
#if FS_FAT_DISKINFO
  else if (Cmd == FS_CMD_GET_DISKFREE) {
    i = FS__fat_checkunit(Idx, Unit);
    if (i > 0) {
      x = _FS_fat_GetTotalFree(Idx, Unit, (FS_DISKFREE_T*)pBuffer);
      i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_FLUSH_CACHE, 0, (void*)0);
      if (i < 0) {
        x = i;
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_FAT_DISKINFO==0 */
  else if (Cmd == FS_CMD_GET_DISKFREE) {
    x = -1; /* Diskinfo command not supported */
  }
#endif /* FS_FAT_DISKINFO */
#if FS_SUPPORT_SEC_ACCESS
  else if ((Cmd == FS_CMD_READ_SECTOR) || (Cmd == FS_CMD_WRITE_SECTOR)) {
    if (!pBuffer) {
      FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);
      return -1;
    }
    i = FS__lb_status(FS__pDevInfo[Idx].devdriver, Unit);
    if (i >= 0) {
      if (Cmd == FS_CMD_READ_SECTOR) {
        x = FS__lb_read(FS__pDevInfo[Idx].devdriver, Unit, Aux, pBuffer);
      }
      else {
        x = FS__lb_write(FS__pDevInfo[Idx].devdriver, Unit, Aux, pBuffer);
      }
    }
    else {
      x = -1;
    }
  }
#else /* FS_SUPPORT_SEC_ACCESS */
  else if ((Cmd == FS_CMD_READ_SECTOR) || (Cmd == FS_CMD_WRITE_SECTOR)) {
    FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);
    return -1;
  }
#endif /* FS_SUPPORT_SEC_ACCESS */
  else {
    /* Maybe command for driver */
    x = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, Cmd, Aux, (void*)pBuffer);
  }
  FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_DEC_BUSYCNT, 0, (void*)0);  /* Turn off busy signal */
  return x;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产**网站演员| 欧美电影免费观看完整版| 国产日韩一级二级三级| 日韩精品亚洲专区| 欧美日韩一区不卡| 夜夜嗨av一区二区三区网页| 国产福利一区二区三区在线视频| 在线视频欧美精品| 亚洲狼人国产精品| 欧洲生活片亚洲生活在线观看| 亚洲色图视频网| 日本伦理一区二区| 一区二区三区四区亚洲| 欧美伊人精品成人久久综合97 | 亚洲乱码日产精品bd| 色综合一个色综合亚洲| 亚洲视频中文字幕| 欧美午夜一区二区三区免费大片| 久久精品视频免费观看| 成人永久看片免费视频天堂| 综合自拍亚洲综合图不卡区| 在线亚洲+欧美+日本专区| 日韩专区一卡二卡| 久久久久久久久久电影| 99视频超级精品| 亚洲123区在线观看| 久久日一线二线三线suv| 成人av资源下载| 亚洲第一电影网| 国产精品素人视频| 欧美精品v国产精品v日韩精品| 裸体歌舞表演一区二区| 亚洲欧美在线另类| 日韩一区二区三区三四区视频在线观看| 久久成人免费电影| 一区二区欧美视频| 国产欧美日韩精品a在线观看| 欧美性三三影院| 高清在线成人网| 蜜臀av国产精品久久久久| 国产精品网曝门| 国产欧美一区视频| 欧美猛男男办公室激情| 97久久超碰国产精品电影| 久热成人在线视频| 亚洲一区二区中文在线| 亚洲丝袜另类动漫二区| 久久毛片高清国产| 2020国产精品| 日韩久久精品一区| 欧美美女网站色| 欧美日韩aaaaa| 日本道精品一区二区三区| 91丨九色丨蝌蚪丨老版| 国产99久久久国产精品| 丁香亚洲综合激情啪啪综合| 老鸭窝一区二区久久精品| 日韩精品亚洲一区二区三区免费| 一区二区三区日韩精品视频| 一区二区三区日本| 亚洲一本大道在线| 亚洲成av人片www| 午夜精品福利一区二区三区av | 日本午夜一区二区| 奇米色一区二区| 狠狠色丁香久久婷婷综| 黑人巨大精品欧美一区| 国产成人在线免费| 成人福利视频在线看| 色婷婷综合激情| 欧美色综合网站| 日韩西西人体444www| 26uuu久久综合| 亚洲欧美电影院| 免费在线观看一区二区三区| 国产激情一区二区三区| 在线观看亚洲精品| 精品国产亚洲在线| 久99久精品视频免费观看| 成人免费高清在线| 久久精品99国产精品日本| 免费不卡在线视频| 国产精品自拍毛片| 日韩av高清在线观看| 久久国产三级精品| 91在线看国产| 国产福利精品一区| 欧美在线999| 国产欧美日韩麻豆91| 亚洲成人av一区二区三区| 国产成人av福利| 日韩一级片在线观看| 亚洲一区二区偷拍精品| www.日韩在线| 欧美激情在线一区二区| 日韩电影一区二区三区四区| av在线综合网| 51精品秘密在线观看| 亚洲女女做受ⅹxx高潮| 国产91色综合久久免费分享| 日韩一区二区精品| 免费人成网站在线观看欧美高清| 色婷婷久久久久swag精品| 国产精品全国免费观看高清| 狠狠色丁香婷综合久久| 精品久久久网站| 亚洲成人午夜电影| 欧美日韩一区二区在线观看视频| 亚洲曰韩产成在线| 欧美乱妇一区二区三区不卡视频| 亚洲高清免费观看 | 国产精品理论片在线观看| 国产福利电影一区二区三区| 中文字幕在线不卡一区二区三区 | 国产成人啪免费观看软件| 国产婷婷一区二区| 色综合视频在线观看| 午夜欧美电影在线观看| 精品日本一线二线三线不卡| 韩国三级电影一区二区| 国产精品国产精品国产专区不蜜| a在线播放不卡| 日韩黄色在线观看| 亚洲国产精品精华液2区45| 欧美亚洲日本国产| 精品一区二区精品| 国产精品成人网| 欧美久久一区二区| 91网站在线播放| 国产一区二区h| 午夜精品久久久久影视| 国产欧美日产一区| 欧美一级高清大全免费观看| 成人高清免费观看| 狠狠色狠狠色合久久伊人| 亚洲成人免费观看| 亚洲视频 欧洲视频| 国产亚洲欧美激情| 欧美一级免费大片| 欧美三级电影在线看| 菠萝蜜视频在线观看一区| 天堂一区二区在线| 一个色综合网站| 欧美国产成人精品| 2023国产精品自拍| 51精品久久久久久久蜜臀| 成人在线视频一区| 国产成人亚洲综合a∨婷婷图片| 日韩成人av影视| 亚洲日本在线视频观看| 中文字幕高清不卡| 国产精品午夜在线观看| 国产欧美一区在线| 欧美成人在线直播| 日韩视频一区二区三区| 91精品国产一区二区三区蜜臀 | 成人高清在线视频| 成人av在线资源网| av中文字幕在线不卡| 成人免费看的视频| av电影在线观看不卡 | 丝袜美腿一区二区三区| 亚洲最新视频在线观看| 亚洲一区国产视频| 日韩精品每日更新| 久久精品久久99精品久久| 国产一区二区三区国产| 国产成人综合自拍| 92国产精品观看| 91精品国产一区二区人妖| 91精品国产综合久久香蕉麻豆| 日韩视频永久免费| 中文字幕制服丝袜一区二区三区 | 精品国产乱码久久久久久久| 国产午夜精品福利| 又紧又大又爽精品一区二区| 日韩中文字幕av电影| 国内成人精品2018免费看| 国产电影精品久久禁18| 波多野结衣中文一区| 欧美一区二区三区婷婷月色| 精品国产露脸精彩对白| 亚洲欧美另类小说| 精品一区二区三区欧美| 91小视频免费观看| 日韩视频一区二区三区| 一区二区三区在线影院| 成人激情动漫在线观看| 日韩视频在线你懂得| 亚洲国产成人av网| 99精品在线观看视频| 国产肉丝袜一区二区| 另类小说图片综合网| 欧美挠脚心视频网站| 亚洲免费在线看| 99re亚洲国产精品| 精品国内二区三区| 老鸭窝一区二区久久精品| 欧美日韩成人综合天天影院 | 五月天久久比比资源色|