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

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

?? wd_misc.c

?? uc/Fs 236,讓uc/os也支持多種文件系統。
?? C
字號:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : wd_misc.c
Purpose     : Device Driver using Windows I/O function for logical sector
              access.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_dev.h" 
#include "fs_lbl.h" 
#include "FS_ConfDefaults.h"        /* FS Configuration */
#include "fs_api.h"
#include "fs_clib.h"

#if FS_USE_WINDRIVE_DRIVER

#ifndef _WIN32
#error Driver requires Windows API
#endif /* _WIN32 */

#include <windows.h>
#include <winioctl.h>

/*********************************************************************
*
*             Local data types
*
**********************************************************************
*/



/*********************************************************************
*
*             Local variables        
*
**********************************************************************
*/

static HANDLE             _hDrive           [FS_WD_MAXDEV];


/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*       _InitMedium
*
*  Description:
*    Initializes the medium.
*    In this driver, this simply means opening the device.
*
*  Parameters:
*    Unit        - Unit number.
* 
*  Return value:
*    
*/
static void _InitMedium(FS_U8 Unit) {
  if (_hDrive[Unit] == INVALID_HANDLE_VALUE) {
    _hDrive[Unit] = CreateFile(Unit ? FS_WD_DEV1NAME : FS_WD_DEV0NAME, 
                                  GENERIC_READ    | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
                                  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  }
}
/*********************************************************************
*
*          _GetStatus
*
*  Description:
*    FS driver function. Get status of the media.
*
*  Parameters:
*    Unit                  - Device number.
* 
*  Return value:
*    FS_MEDIA_STATEUNKNOWN if the state of the media is unknown.
*    FS_MEDIA_ISNOTPRESENT if no card is present.
*    FS_MEDIA_ISPRESENT if a card is present.
*/
static int _GetStatus(FS_U8 Unit) {
  if (_hDrive[Unit] == INVALID_HANDLE_VALUE) {
    _InitMedium(Unit);
  }
  return (_hDrive[Unit] == INVALID_HANDLE_VALUE) ? FS_MEDIA_ISNOTPRESENT : FS_MEDIA_ISPRESENT;
}


/*********************************************************************
*
*       _ReadBurst
*
*  Description:
*    FS driver function. Write sector to the media.
*
*  Parameters:
*    Unit    - Device number.
*    Sector      - Sector to be read from the device.
*    pBuffer     - Pointer to data.
* 
*  Return value:
*    ==0         - Sector has been written to the device.
*    <0          - An error has occured.
*/

static int _ReadBurst(FS_U8 Unit, FS_U32 SectorNo, FS_U32 NumSectors, void *pBuffer) {
  FS_U32 NumBytesTransfered;
  FS_U32 NumBytes;
  LARGE_INTEGER FilePos;

  NumBytes = FS_SEC_SIZE * NumSectors;
  FilePos.QuadPart     = (__int64)SectorNo * (__int64)FS_SEC_SIZE; 

  SetFilePointer(_hDrive[Unit], FilePos.LowPart, &FilePos.HighPart, FILE_BEGIN);
  ReadFile(_hDrive[Unit], pBuffer, NumBytes, &NumBytesTransfered, NULL);
  return (NumBytesTransfered == NumBytes) ? 0 : -1;
}

/*********************************************************************
*
*       _WriteBurst
*
*  Description:
*    FS driver function. Write sector to the media.
*
*  Parameters:
*    Unit    - Device number.
*    Sector      - Sector to be written to the device.
*    pBuffer     - Pointer to data to be stored.
* 
*  Return value:
*    ==0         - Sector has been written to the device.
*    <0          - An error has occured.
*/

static int _WriteBurst(FS_U8 Unit, FS_U32 SectorNo, FS_U32 NumSectors, const void *pBuffer) {
  FS_U32 NumBytesTransfered;
  FS_U32 NumBytes;
  LARGE_INTEGER FilePos;

  NumBytes = FS_SEC_SIZE * NumSectors;
  FilePos.QuadPart     = (__int64)SectorNo * (__int64)FS_SEC_SIZE; 

  SetFilePointer(_hDrive[Unit], FilePos.LowPart, &FilePos.HighPart, FILE_BEGIN);
  WriteFile(_hDrive[Unit], pBuffer, NumBytes, &NumBytesTransfered, NULL);
  return (NumBytesTransfered == NumBytes) ? 0 : -1;
}

/*********************************************************************
*
*       _Read
*
*  Description:
*    FS driver function. Read a sector from the media.
*
*  Parameters:
*    Unit    - Device number.
*    Sector      - Sector to be read from the device.
*    pBuffer     - Pointer to buffer for storing the data.
* 
*  Return value:
*    ==0         - Sector has been read and copied to pBuffer.
*    <0          - An error has occured.
*/

static int _Read(FS_U8 Unit, FS_U32 Sector, void *pBuffer) {
  return _ReadBurst(Unit, Sector, 1, pBuffer);
}


/*********************************************************************
*
*       _Write
*
*  Description:
*    FS driver function. Write sector to the media.
*
*  Parameters:
*    Unit    - Device number.
*    Sector      - Sector to be written to the device.
*    pBuffer     - Pointer to data to be stored.
* 
*  Return value:
*    ==0         - Sector has been written to the device.
*    <0          - An error has occured.
*/
static int _Write(FS_U8 Unit, FS_U32 Sector, void *pBuffer) {
  return _WriteBurst(Unit, Sector, 1, pBuffer);
}

/*********************************************************************
*
*       _IoCtl
*
*  Description:
*    FS driver function. Execute device command.
*
*  Parameters:
*    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.
*/
static int _IoCtl(FS_U8 Unit, FS_I32 Cmd, FS_I32 Aux, void *pBuffer) {
  FS_DEV_INFO *pInfo;
  FS_U32 NumCylinders;
  FS_U32 NumSectors;

  FS_USE_PARA(Aux);
  switch (Cmd) {
  case FS_CMD_GET_DEVINFO:
    if (pBuffer) {
      DISK_GEOMETRY DiskGeometry;
      DWORD Size;
      _InitMedium(Unit);
      Size = sizeof(DiskGeometry);
      DeviceIoControl(_hDrive[Unit], IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &DiskGeometry, Size, &Size, NULL);
      pInfo = (FS_DEV_INFO *)pBuffer;
      NumCylinders = (FS_U32)DiskGeometry.Cylinders.QuadPart;
      if (DiskGeometry.SectorsPerTrack == 63) {
        /* Some media report inaccurate values (MMC/SD).
         * Since we can not read the Number of sectors from the card info structure, we have to estimate: -6%
         */
        NumCylinders = (NumCylinders + 1) & ~1;
        NumSectors = NumCylinders * DiskGeometry.SectorsPerTrack * DiskGeometry.TracksPerCylinder;
        NumSectors = (FS_U32)(((__int64)NumSectors * 94) / 100);
      } else {
        NumSectors = NumCylinders * DiskGeometry.SectorsPerTrack * DiskGeometry.TracksPerCylinder;
      }
      pInfo->NumSectors      = NumSectors;
      pInfo->BytesPerSector  = (FS_U16)DiskGeometry.BytesPerSector;
      pInfo->NumHeads        = (FS_U16)DiskGeometry.TracksPerCylinder;
      pInfo->SectorsPerTrack = (FS_U16)DiskGeometry.SectorsPerTrack;

      return 0;
    }
    break;
  }
  return -1;
}

/*********************************************************************
*
*       _InitDevice
*
*  Description:
*    Initializes the device.
*    In this driver, this simply means marking the handle as invalid.
*
*  Parameters:
*    Unit        - Unit number.
* 
*  Return value:
*    
*/
static int _InitDevice(FS_U8 Unit) {
  _hDrive[Unit] = INVALID_HANDLE_VALUE;
  return 0;
}

/*********************************************************************
*
*             Global variables        
*
**********************************************************************
*/

const FS_DEVICE_TYPE FS__windrive_driver = {
  "windrv",
  FS_WD_MAXDEV,
  _GetStatus,
  _Read,
  _Write,
  _IoCtl,
  _ReadBurst,
  _WriteBurst,
  _InitDevice,
  _InitMedium
};

#endif /* END OF FS_USE_WINDRIVE_DRIVER */

/*************************** End of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品99久久久久久老狼| 色综合天天视频在线观看| 欧美精品一区二区不卡| 91丨九色丨蝌蚪富婆spa| 日韩国产欧美三级| 亚洲乱码国产乱码精品精的特点 | 麻豆91精品视频| 亚洲视频免费观看| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲精品乱码久久久久久黑人| 91精品国产综合久久香蕉麻豆| 成人的网站免费观看| 免费精品99久久国产综合精品| 亚洲欧美一区二区三区极速播放 | 亚洲图片欧美一区| 综合在线观看色| 久久久久成人黄色影片| 91精品国产91综合久久蜜臀| 欧洲精品在线观看| 成人激情电影免费在线观看| 国产一区二区三区四| 蜜桃av一区二区三区电影| 亚洲一区二区三区四区的| 亚洲同性同志一二三专区| 久久久亚洲国产美女国产盗摄| 欧美蜜桃一区二区三区| 色菇凉天天综合网| 91麻豆精品一区二区三区| 国产99精品国产| 国产成人亚洲综合a∨婷婷图片| 美腿丝袜在线亚洲一区| 日本中文字幕一区二区视频| 亚洲电影一区二区| 亚洲一区二区三区中文字幕| 一区二区三区蜜桃| 亚洲人一二三区| 亚洲欧美日韩国产另类专区| 国产精品久99| 亚洲色图欧美在线| 亚洲精品免费看| 亚洲主播在线播放| 亚洲成人av福利| 日韩高清在线电影| 久久精品国产网站| 国产一区二区不卡在线| 成人午夜精品在线| 99在线热播精品免费| 色婷婷综合五月| 精品视频一区二区三区免费| 欧美日本乱大交xxxxx| 欧美一区二区啪啪| www日韩大片| 国产精品久久久久久久久搜平片| 亚洲素人一区二区| 亚洲一二三四久久| 男人的天堂亚洲一区| 国产一区二区三区精品欧美日韩一区二区三区| 激情欧美一区二区三区在线观看| 国产精品一区二区视频| jizz一区二区| 欧美人与z0zoxxxx视频| 欧美电影免费观看完整版| 国产欧美一区在线| 亚洲欧美激情在线| 日本在线不卡视频一二三区| 韩国精品免费视频| 91在线观看成人| 宅男噜噜噜66一区二区66| 久久综合狠狠综合久久综合88| 国产精品久久久久久一区二区三区 | 91麻豆精品91久久久久久清纯 | 中文字幕一区二区三区在线播放 | 亚洲电影欧美电影有声小说| 九色综合狠狠综合久久| 成人午夜电影网站| 欧美男生操女生| 国产日韩欧美一区二区三区综合| 一区二区三区成人在线视频| 久久97超碰国产精品超碰| www.色综合.com| 日韩一卡二卡三卡| 亚洲欧洲精品天堂一级| 日本不卡中文字幕| 丁香激情综合五月| 欧美一区二区三区日韩| 国产精品国产精品国产专区不片| 五月天网站亚洲| 成人三级伦理片| 欧美一区二区免费视频| 亚洲美女精品一区| 国产伦精品一区二区三区免费迷| 色欧美片视频在线观看| 久久香蕉国产线看观看99| 亚洲最快最全在线视频| 国产一区二区精品久久99| 欧洲国产伦久久久久久久| 久久久久久久久久久黄色| 亚洲一区二区三区影院| 成人av免费在线观看| ww亚洲ww在线观看国产| 日韩国产在线一| 日本精品一区二区三区四区的功能| 欧美精品一区二区三| 99国产一区二区三精品乱码| 欧美一区二区三区免费视频| 亚洲欧美区自拍先锋| 高清国产午夜精品久久久久久| 91 com成人网| 亚洲成人一二三| 91美女片黄在线观看91美女| 国产亲近乱来精品视频| 蜜桃精品视频在线观看| 欧美日韩三级一区| 一区二区在线观看av| 成人av在线观| 国产精品区一区二区三区| 国产在线精品视频| 日韩无一区二区| 日本在线不卡一区| 在线不卡欧美精品一区二区三区| 一区二区三区四区国产精品| 成人av网址在线| 国产精品白丝在线| 丰满放荡岳乱妇91ww| 久久久久久97三级| 国产毛片精品国产一区二区三区| 日韩精品一区国产麻豆| 日韩av一二三| 欧美精品三级在线观看| 亚洲v日本v欧美v久久精品| 欧美在线观看一二区| 一区二区在线看| 色伊人久久综合中文字幕| 亚洲男人电影天堂| 91久久国产综合久久| 亚洲综合男人的天堂| 在线观看国产精品网站| 玉米视频成人免费看| 欧美午夜电影网| 天堂成人国产精品一区| 欧美一区国产二区| 久久精品国产澳门| 精品久久久久久久久久久院品网| 国产一区二区三区黄视频 | 夜夜嗨av一区二区三区网页 | 免费成人深夜小野草| 日韩午夜激情av| 黄色日韩网站视频| 欧美国产一区二区| 91蜜桃在线观看| 亚洲第一久久影院| 欧美大片顶级少妇| 懂色av中文字幕一区二区三区| 国产精品白丝在线| 在线观看日韩电影| 免费在线观看不卡| 国产亚洲精品7777| av高清不卡在线| 丝袜亚洲精品中文字幕一区| 精品卡一卡二卡三卡四在线| 成人综合在线观看| 一区二区三区在线免费视频| 51精品秘密在线观看| 国产精品香蕉一区二区三区| 1区2区3区国产精品| 91 com成人网| 国产91色综合久久免费分享| 樱桃国产成人精品视频| 日韩一区二区在线观看视频| 国产成人免费视频精品含羞草妖精| 国产精品麻豆欧美日韩ww| 国产精品夫妻自拍| 69堂成人精品免费视频| 国产精品18久久久久久久久| 亚洲精品视频观看| 欧美成人精精品一区二区频| 成人av综合一区| 奇米精品一区二区三区四区 | 日韩精品一区二区三区在线播放| 高清国产午夜精品久久久久久| 亚洲国产wwwccc36天堂| www成人在线观看| 在线视频观看一区| 国内成人免费视频| 亚洲最大的成人av| 精品日韩一区二区| 欧美系列在线观看| 国产东北露脸精品视频| 日日骚欧美日韩| 中文字幕欧美一区| 日韩精品一区二区三区老鸭窝| 色狠狠桃花综合| 成人午夜大片免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲黄色在线视频| 国产日韩在线不卡| 欧美一二三区在线观看| 色诱亚洲精品久久久久久| 国产精品中文字幕欧美| 日韩精品一二区|