線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3144
推到 Plurk!
推到 Facebook!

USB讀寫問題?

答題得分者是:bio
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-13 17:22:10 IP:220.130.xxx.xxx 未訂閱
請問各位: USB是要如何做,才能讀寫? RS232是利用createfile(),writefile(),readfile()來進行,,, 那USB是如可用呢? 望有範例解說.
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-14 02:10:30 IP:203.204.xxx.xxx 未訂閱
Hi~kenbcb 參考這篇對岸的範例吧~ http://www.cppfans.com/articles/system/bcb_usb_a.asp
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-14 08:45:50 IP:61.66.xxx.xxx 未訂閱
參考一下    【分享】偵測USB裝置插入哪一個USB Port插槽  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59211
bio
一般會員


發表:42
回覆:36
積分:20
註冊:2003-03-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-14 13:57:51 IP:210.68.xxx.xxx 未訂閱
kenbcb 您好 之前有研究過USB,你若要對USB做讀寫動作,要先了解File System喔,而且還包括有FAT12,FAT16,FAT32的區別喔,相信你搜尋一下站內資源應該會找到相關的,在假設你也了解FAT,若只是要做讀和寫動作 我是這樣做,會用到這些function: 先要取得device的handle  
 
HANDLE DISC_device_select(char deviceNo)
{
    ULONG accessMode = 0, shareMode = 0;
    ULONG length = 0,
    errorCode = 0,
    returned = 0,
    sectorSize = 512;
    UCHAR string[25];
    sprintf((char *)(string),"\\\\.\\%c:",deviceNo);
    shareMode  = FILE_SHARE_READ | FILE_SHARE_WRITE;  // default
    accessMode = GENERIC_WRITE | GENERIC_READ;       // default
    sectorSize = 512;        fileFATHandle = CreateFile( (char *)  string,accessMode,shareMode,NULL,OPEN_EXISTING,0,NULL);        if (fileFATHandle == INVALID_HANDLE_VALUE) 
        {
                printf("Error opening %s. Error: %d\n",
                        string, errorCode = GetLastError());
                //        PrintError(errorCode);
                return NULL;
        }
        return fileFATHandle;
}
接下來就是將USB裡的data讀進來
void HD_read_sector_lba(UCHAR *tmpbuff,int Lba,int nBlock)
{
 memset(tmpbuff,0,2048*nBlock);
 int addr;
 addr = Lba*512;
 FindBuffLen = nBlock*512;
 setfilepointer(addr);
 ReadFile(
                        fileFATHandle,                // handle to file           
                        tmpbuff,                      // data buffer
                        FindBuffLen,                  // number of bytes to read
                        &nNumberOfBytesRead,          // number of bytes read
                        NULL // lpOverlapped          // overlapped buffer
                        );
 
}
//-----------------------------------------------------------------
void setfilepointer(ULONG address)
{
 SetFilePointer
 (
                fileFATHandle,     // handle to file
                address,       // bytes to move pointer
                NULL,                        // bytes to move pointer
                FILE_BEGIN      // starting point
 );
}
 
至於寫的動作
void FATWriteBuff(int address,UCHAR *tmpbuff,int length)
{
  DWORD dwPos;
  dwPos = SetFilePointer(fileFATHandle,address,NULL,FILE_BEGIN);
  LockFile(fileFATHandle,dwPos,0,dwPos nNumberOfBytesRead,0);
  WriteFile(
           fileFATHandle,                // handle tofile           
           tmpbuff,                      // data buffer
           length,                      // number of bytes to read
           &nNumberOfBytesRead,          // number of bytes read
           NULL  // lpOverlapped         // overlapped buffer
          );
  UnlockFile(fileFATHandle,dwPos,0,dwPos nNumberOfBytesRead,0);
}
 
這裡我只要表達如何使用createfile(),writefile(),readfile() 至於USB要如何用,你要說明是應用在何處,才能幫你阿
系統時間:2024-04-29 23:54:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!