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

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

?? fat_ioct.c

?? at91rm9200硬盤的接口代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
  }
#if (FS_FAT_NOFAT32==0)
  else {
    /* FAT32 */
    /* FATSz32 */
    buffer[36]  = (char)(bpb.FATSz32 & 0xff);
    buffer[37]  = (char)((FS_u32)(bpb.FATSz32 & 0x0000ff00UL) >> 8);
    buffer[38]  = (char)((FS_u32)(bpb.FATSz32 & 0x00ff0000UL) >> 16);
    buffer[39]  = (char)((FS_u32)(bpb.FATSz32 & 0xff000000UL) >> 24);
    /* EXTFlags */
    buffer[40]  = (char)(bpb.ExtFlags & 0xff);
    buffer[41]  = (char)((unsigned int)(bpb.ExtFlags & 0xff00) >> 8);
    /* FSVer = 0:0 */
    buffer[42]  = 0x00;
    buffer[43]  = 0x00;
    /* RootClus */
    buffer[44]  = (char)(bpb.RootClus & 0xff);
    buffer[45]  = (char)((FS_u32)(bpb.RootClus & 0x0000ff00UL) >> 8);
    buffer[46]  = (char)((FS_u32)(bpb.RootClus & 0x00ff0000UL) >> 16);
    buffer[47]  = (char)((FS_u32)(bpb.RootClus & 0xff000000UL) >> 24);
    /* FSInfo */
    buffer[48]  = (char)(bpb.FSInfo & 0xff);
    buffer[49]  = (char)((unsigned int)(bpb.FSInfo & 0xff00) >> 8);
    /* BkBootSec = 0x0006; */
    buffer[50]  = 0x06;
    buffer[51]  = 0x00;
    /* Reserved */
    for (i = 52; i < 64; i++) {
      buffer[i] = (char)0x00;
    }
    /* DrvNum = 0x00 (floppy) */
    buffer[64]  = (char)0x00;
    /* Reserved1 = 0x00 (floppy) */
    buffer[65]  = (char)0x00;
    /* BootSig = 0x00 (next three fields are not 'present') */
    buffer[66]  = (char)0x00;
    /* VolID = 0x00000000 (serial number, e.g. date/time) */
    for (i = 67; i < 71; i++) {
      buffer[i] = (char)0x00;
    }
    /* VolLab = ' ' */
    for (i = 71; i < 82; i++) {
      buffer[i] = (char)0x20;
    }
    /* FilSysType = 'FAT12' */
    FS__CLIB_strncpy(&buffer[82], "FAT32   ", 8);
  }
#endif /* FS_FAT_NOFAT32==0 */
  /* Signature = 0xAA55 */
  buffer[510] = (char)0x55;
  buffer[511] = (char)0xaa;
  /* Write BPB to media */
  i = FS__lb_write(pDriver, Unit, 0, (void*)buffer);
  if (i < 0) {
    FS__fat_free(buffer);
    return -1;
  }
  if (FSysType == 2) {
    /* Write backup BPB */
    i = FS__lb_write(pDriver, Unit, 6, (void*)buffer);
    if (i<0) {
      FS__fat_free(buffer);
      return -1;
    }
  }
  /*  Init FAT 1 & 2   */
  FS__CLIB_memset(buffer, 0x00, (FS_size_t)FS_FAT_SEC_SIZE);
  for (sector = 0; sector < 2 * (bpb.FATSz16 + bpb.FATSz32); sector++) {
    value = sector % (bpb.FATSz16 + bpb.FATSz32);
    if (value != 0) {
      i = FS__lb_write(pDriver, Unit, bpb.RsvdSecCnt + sector, (void*)buffer);
      if (i<0) {
        FS__fat_free(buffer);
        return -1;
      }
    }
  }
  buffer[0] = (char)Media;
  buffer[1] = (char)0xff;
  buffer[2] = (char)0xff;
  if (FSysType != 0) {
    buffer[3] = (char)0xff;
  }
#if (FS_FAT_NOFAT32==0)
  if (FSysType == 2) {
    buffer[4]   = (char)0xff;
    buffer[5]   = (char)0xff;
    buffer[6]   = (char)0xff;
    buffer[7]   = (char)0x0f;
    buffer[8]   = (char)0xff;
    buffer[9]   = (char)0xff;
    buffer[10]  = (char)0xff;
    buffer[11]  = (char)0x0f;
  }
#endif /* FS_FAT_NOFAT32==0 */
  for (i = 0; i < 2; i++) {
    j = FS__lb_write(pDriver, Unit, (FS_u32)bpb.RsvdSecCnt + i * ((FS_u32)bpb.FATSz16+bpb.FATSz32), (void*)buffer);
    if (j < 0) {
      FS__fat_free(buffer);
      return -1;
    }	// two fat table
  }
  /* Init root directory area */
  FS__CLIB_memset(buffer, 0x00, (FS_size_t)FS_FAT_SEC_SIZE);
  if (bpb.RootEntCnt != 0) {
    /* FAT12/FAT16 */
    n = (((FS_u32)bpb.RootEntCnt * 32) / (FS_u32)512);	//n show the sectors accupied by root directory entries
    for (i = 0; i < n; i++) {
      j = FS__lb_write(pDriver, Unit, bpb.RsvdSecCnt + 2 * bpb.FATSz16 + i, (void*)buffer);	//reserved sectors under fat12/16 is 1
      if (j < 0) {
        FS__fat_free(buffer);
        return -1;
      }
    }
  }
#if (FS_FAT_NOFAT32==0)
  else {
    /* FAT32 */
    n = bpb.SecPerClus;
    for (i = 0; i < n; i++) {
      j = FS__lb_write(pDriver, Unit, bpb.RsvdSecCnt + 2 * bpb.FATSz32 + (bpb.RootClus - 2) * n + i, (void*)buffer);
      if (j < 0) {
        FS__fat_free(buffer);
        return -1;
      }
    }
  }
#endif /* FS_FAT_NOFAT32==0 */
#if (FS_FAT_NOFAT32==0)
  if (FSysType == 2) {
    /* Init FSInfo */
    FS__CLIB_memset(buffer, 0x00, (FS_size_t)FS_FAT_SEC_SIZE);
    /* LeadSig = 0x41615252 */
    buffer[0]     = (char)0x52;
    buffer[1]     = (char)0x52;
    buffer[2]     = (char)0x61;
    buffer[3]     = (char)0x41;
    /* StructSig = 0x61417272 */
    buffer[484]   = (char)0x72;
    buffer[485]   = (char)0x72;
    buffer[486]   = (char)0x41;
    buffer[487]   = (char)0x61;
    /* Invalidate last known free cluster count */
    buffer[488]   = (char)0xff;
    buffer[489]   = (char)0xff;
    buffer[490]   = (char)0xff;
    buffer[491]   = (char)0xff;
    /* Give hint for free cluster search */
    buffer[492]   = (char)0xff;
    buffer[493]   = (char)0xff;
    buffer[494]   = (char)0xff;
    buffer[495]   = (char)0xff;
    /* TrailSig = 0xaa550000 */
    buffer[508]   = (char)0x00;
    buffer[509]   = (char)0x00;
    buffer[510]   = (char)0x55;
    buffer[511]   = (char)0xaa;
    i = FS__lb_write(pDriver, Unit, bpb.FSInfo, (void*)buffer);
    if (i < 0) {
      FS__fat_free(buffer);
      return -1;
    }
  }
#endif /* FS_FAT_NOFAT32==0 */
  FS__fat_free(buffer);
  return 0;
}


/*********************************************************************
*
*             _FS_FAT_AutoFormat
*
  Description:
  FS internal function. Get information about the media from the 
  device driver. Based on that informaton, calculate parameters for
  formatting that media and call the format routine.

  Parameters:
  Idx         - Index of device in the device information table 
                referred by FS__pDevInfo.
  Unit        - Unit number.
  
  Return value:
  >=0         - Media has been formatted.
  <0          - An error has occured.
*/

static int _FS_FAT_AutoFormat(int Idx, FS_u32 Unit) {
  struct {
    FS_u32 hiddennum;
    FS_u32 headnum;
    FS_u32 secnum;
    FS_u32 partsize;
  } devinfo;
  FS_u32 rootentcnt;
  FS_u32 fatsz;
  FS_u32 rootdirsectors;
  FS_u32 tmpval1;
  FS_u32 tmpval2;
  FS_u32 fatsz32;
  FS_u32 totsec32;
  FS_u32 resvdseccnt;
  FS_u16 totsec16;
  FS_u16 fatsz16;
  int i;
  unsigned char secperclust;
  char fsystype;

  /* Get info from device */
  devinfo.hiddennum = 0x00001111UL;
  devinfo.headnum   = 0x00002222UL;
  devinfo.secnum    = 0x00003333UL;
  devinfo.partsize  = 0x00004444UL;
  i = FS__lb_ioctl(FS__pDevInfo[Idx].devdriver, Unit, FS_CMD_GET_DEVINFO, 0, (void*)&devinfo);
  if (i) {
    return -1;
  }
  /* Check if the driver really supports FS_CMD_GET_DEVINFO */
  if (devinfo.hiddennum == 0x00001111UL) {
    if (devinfo.headnum == 0x00002222UL) {
      if (devinfo.secnum == 0x00003333UL) {
        if (devinfo.partsize == 0x00004444UL) {
          return -1;
        }
      }
    }
  }
  if (devinfo.partsize <= 1048576UL) {
    fsystype = 1;   /* FAT16 */
  }
#if (FS_FAT_NOFAT32==0)
  else {
    fsystype = 2;   /* FAT32 */
  }
#else
  else {
    /* FAT32 disabled */
    return -1;
  }
#endif /* FS_FAT_NOFAT32==0 */

  /* Set correct RootEntCnt & ResvdSecCnt */ 
  if (fsystype != 2) {
    /* FAT16 */
    i = 0;
    while (_FS_auto_rootcnt[i].SecNum < devinfo.partsize) {
      i++;
    }
    rootentcnt = (FS_u16)_FS_auto_rootcnt[i].Num;
    resvdseccnt = 1;
  }
#if (FS_FAT_NOFAT32==0)
  else {
    /* FAT32 */
    rootentcnt = 0;
    resvdseccnt = 0x20;
  }
#endif /* FS_FAT_NOFAT32==0 */

  /* Determinate SecPerClust */
  i = 0;
  while (_FS_auto_secperclust[i].SecNum < devinfo.partsize) {
    i++;
  }
  secperclust = (unsigned char) _FS_auto_secperclust[i].Num;
  /* 
     FAT16/FAT32 FAT size calculation 
     The formula used is following the Microsoft specification
     version 1.03 very closely. Therefore the calculated FAT
     size can be up to 8 sectors bigger than required for the 
     media. This is a waste of up to 8 sectors, but not a problem
     regarding correctness of the media's data.
  */
  rootdirsectors = ((rootentcnt * 32 ) + 511) / 512;
  tmpval1 = devinfo.partsize - (resvdseccnt + rootdirsectors);
  tmpval2 = (256 * secperclust) + 2;
#if (FS_FAT_NOFAT32==0)
  if (fsystype == 2) {
    tmpval2 = tmpval2 / 2;
  }
#endif /* FS_FAT_NOFAT32==0 */
  fatsz = (tmpval1 + (tmpval2 - 1)) / tmpval2;
  if (fsystype != 2) {
    fatsz16 = (FS_u16)fatsz;
    fatsz32 = 0;
  }
#if (FS_FAT_NOFAT32==0)
  else {
    fatsz16 = 0;
    fatsz32 = fatsz;
  }
#endif /* FS_FAT_NOFAT32==0 */

  /* Number of total sectors (512 byte units) of the media
     This is independent of FAT type (FAT12/FAT16/FAT32) */
  if (devinfo.partsize < 0x10000UL) {
    totsec16 = (FS_u16)devinfo.partsize;
    totsec32 = 0;
  }
  else {
    totsec16 = 0;
    totsec32 = devinfo.partsize;
  }
  /* Format media using calculated values */
  i = _FS_fat_format(FS__pDevInfo[Idx].devdriver,
                        Unit,
                        secperclust,
                        (FS_u16)rootentcnt,
                        totsec16,
                        totsec32,
                        (char)0xf8,
                        fatsz16,
                        fatsz32,
                        (FS_u16)devinfo.secnum,
                        (FS_u16)devinfo.headnum,
                        devinfo.hiddennum,
                        fsystype);
  return i;
}

#endif /* FS_FAT_NOFORMAT==0 */


#if FS_FAT_DISKINFO

/*********************************************************************
*
*             _FS_fat_GetTotalFree
*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av网站在线观看免费| 欧美精品一二三| 老司机午夜精品| 成人妖精视频yjsp地址| 在线欧美一区二区| 亚洲色图.com| 国产日韩欧美一区二区三区乱码 | 一区二区欧美国产| 国产一区二区三区久久久| 欧美色视频在线观看| 中文字幕乱码一区二区免费| 午夜国产不卡在线观看视频| 99这里只有久久精品视频| 久久精品免视看| 日韩电影免费在线| 99麻豆久久久国产精品免费| 精品99一区二区| 天堂在线一区二区| 色综合久久久久网| 欧美国产精品v| 国产成人综合精品三级| 欧美成va人片在线观看| 亚洲精品国产一区二区精华液| 韩国毛片一区二区三区| 欧美一级二级三级乱码| 亚洲妇女屁股眼交7| 91极品视觉盛宴| 国产精品成人在线观看| 久久99精品国产麻豆婷婷| 91精品久久久久久久久99蜜臂| 亚洲一区二区视频在线观看| 一本久道中文字幕精品亚洲嫩| 国产精品萝li| 成人精品鲁一区一区二区| 久久九九久精品国产免费直播| 韩国午夜理伦三级不卡影院| 久久久久久久综合日本| 国产成人精品三级| 国产丝袜美腿一区二区三区| 国产精品456露脸| 久久久久久久久久久久久久久99| 美女视频第一区二区三区免费观看网站| 欧美丝袜丝nylons| 亚洲成av人片在线| 欧美色精品在线视频| 亚洲国产日韩a在线播放| 日本韩国欧美一区二区三区| 亚洲成人资源在线| 欧美一激情一区二区三区| 另类小说图片综合网| 久久久美女毛片 | 一区二区三区波多野结衣在线观看| 成人一区二区三区中文字幕| 国产精品国产三级国产aⅴ原创| 丁香激情综合国产| 亚洲精品乱码久久久久久| 欧美日韩你懂的| 久久精品国产99| 国产精品国产三级国产专播品爱网| 国产盗摄视频一区二区三区| 亚洲欧美日韩中文播放| 欧美精品777| 国产成人一区二区精品非洲| 亚洲精品日韩综合观看成人91| 在线播放中文一区| 高清免费成人av| 亚洲成人免费看| 久久亚洲一级片| 欧美日韩一二三| 九九热在线视频观看这里只有精品| 欧美激情在线一区二区| 欧美日韩国产在线观看| 精品一区二区三区免费观看| 亚洲欧美另类在线| 欧美草草影院在线视频| 91女神在线视频| 蜜桃av一区二区在线观看| 在线电影欧美成精品| 国产一区二区三区久久悠悠色av| 一区二区三区中文免费| 久久精品一区二区三区不卡牛牛| 色诱亚洲精品久久久久久| 激情成人午夜视频| 亚洲国产精品天堂| 国产精品福利影院| 亚洲精品在线三区| 色婷婷久久一区二区三区麻豆| 国产一区二区精品在线观看| 日韩中文字幕91| 亚洲色图欧洲色图婷婷| 国产日韩欧美麻豆| 日韩丝袜美女视频| 欧美性色黄大片| 99re这里只有精品6| 国产在线精品一区二区不卡了| 亚洲国产日韩精品| 亚洲日本欧美天堂| 中文字幕欧美激情| 国产亚洲精品资源在线26u| 欧美日本高清视频在线观看| 91蜜桃在线免费视频| 国产成人综合在线观看| 国内成人自拍视频| 另类成人小视频在线| 天天av天天翘天天综合网| 亚洲影院免费观看| 亚洲精品国产高清久久伦理二区| 国产亚洲1区2区3区| 久久综合久久99| 欧美xxxxxxxxx| 日韩欧美国产一区二区三区| 7777精品久久久大香线蕉| 欧美日韩色一区| 欧美日韩一级视频| 欧美日韩另类国产亚洲欧美一级| 色综合久久久久| 视频一区二区中文字幕| 精品久久99ma| 色综合久久久久综合| 极品美女销魂一区二区三区| 亚洲欧美另类小说| 精品国产一区二区在线观看| 色偷偷成人一区二区三区91| 国产一区二区三区国产| 日韩精品电影在线观看| 伊人婷婷欧美激情| 欧美激情一区三区| 欧美精品一区二区三区视频| 欧美日韩dvd在线观看| 色狠狠桃花综合| 一本色道久久综合狠狠躁的推荐| www.日韩精品| www.亚洲激情.com| 欧美亚洲国产一区在线观看网站| 成人网在线播放| 色8久久人人97超碰香蕉987| 波多野结衣91| 欧美一级黄色大片| 精品美女一区二区三区| 国产成人小视频| 日本成人在线视频网站| 亚洲一区二区三区国产| 亚洲一区二区精品久久av| 懂色中文一区二区在线播放| 中文字幕第一区综合| 国产一本一道久久香蕉| 国产日韩影视精品| 国产精品久久久久久久久晋中| 亚洲女子a中天字幕| 亚洲bt欧美bt精品| 精品亚洲porn| av成人动漫在线观看| 欧美综合亚洲图片综合区| 日韩一区二区精品| 亚洲国产岛国毛片在线| 性欧美大战久久久久久久久| 国产一区二区三区免费播放| 91麻豆视频网站| 欧美mv和日韩mv国产网站| 日韩一区在线免费观看| 日本视频一区二区三区| 国产mv日韩mv欧美| 精品视频一区三区九区| 久久无码av三级| 亚洲国产综合色| 国产成人综合亚洲91猫咪| 在线免费不卡电影| 欧美激情资源网| 日韩黄色免费电影| 91小视频在线| 国产情人综合久久777777| 天堂一区二区在线免费观看| jlzzjlzz欧美大全| 精品噜噜噜噜久久久久久久久试看 | 成人免费av网站| 日韩视频免费观看高清完整版| 亚洲精选在线视频| 国产精品中文字幕欧美| 在线不卡一区二区| 亚洲一区成人在线| www.亚洲人| 亚洲国产经典视频| 韩国精品主播一区二区在线观看 | 国产大陆亚洲精品国产| 日韩一区二区影院| 亚洲成av人片| 91啪在线观看| 国产精品国产三级国产| 国产一区视频在线看| 欧美成人官网二区| 日本欧美在线观看| 69精品人人人人| 日韩精彩视频在线观看| 欧美日本一道本| 午夜欧美2019年伦理| 欧美日韩一区二区不卡| 亚洲国产成人va在线观看天堂| 日本丶国产丶欧美色综合| 一区二区三区四区视频精品免费 | 亚洲精品视频在线|