WinIO http://www.internals.com/
【目的】
- 在 WinXP底下直接控制 IO Port ,如 LPT Port。
【安裝】
WinIO第三版下載之後解開,會看到下面幾個檔案,摘錄一下要注意的
- Binaries
- WinIo32.dll/WinIo32.sys 要和執行檔放在同一路徑
- WinIo64.dll/WinIo64.sys 要和執行檔放在同一路徑
- DumpPhys.exe/DumpPort.exe 作者用C#寫的範例
- Source
- Dll/winio.h 給SourceCode include 用的 ,要和程式放在同一路徑
- Drv/winio_nt.h 給SourceCode include 用的 ,要和程式放在同一路徑
- Help
- WinIo.chm 說明文件
- Samples
- DumpPhys/DumpPort 作者用C#寫的範例的原始碼
【使用】
- 第一步先確定你要存取的 io port adress,這邊以 LPT 當例子,目前的IO range 就是 03BC - 03BE。
- 硬體
- Qt 程式
- Include File
#include "winio.h"
- 基本程式: 使用 QLibrary
(注意: 基本上是可以動的,但在 SetPortVal時會有緩衝區滿溢的問題需解決/研究)#include <qlibrary> typedef bool(*InitializeWinIoFunc)(); typedef bool(*ShutdownWinIoFunc)(); typedef bool(*SetPortValFunc)(WORD, DWORD, BYTE); QLibrary mylib("WinIo32"); if(mylib.load()){ //QMessageBox::information(this,tr("info"),tr("WinIo32 Load OK!")); InitializeWinIoFunc InitializeWinIo=(InitializeWinIoFunc)mylib.resolve("InitializeWinIo"); if (InitializeWinIo) { QMessageBox::information(this,tr("info"),tr("InitializeWinIo!"));} bool Result = InitializeWinIo(); if(!Result) {QMessageBox::information(this,tr("info"),tr("InitializeWinIo fail!"));} } if(mylib.isLoaded()){ SetPortValFunc SetPortVal=(SetPortValFunc)mylib.resolve("SetPortVal"); if (SetPortVal) { QMessageBox::information(this,tr("info"),tr("SetPortVal!"));} bool Result = SetPortVal(0x3bc,0x00,1); if(!Result) {QMessageBox::information(this,tr("info"),tr("SetPortVal fail!"));} } if(mylib.isLoaded()){ ShutdownWinIoFunc ShutdownWinIo=(ShutdownWinIoFunc)mylib.resolve("ShutdownWinIo"); if (ShutdownWinIo) { QMessageBox::information(this,tr("info"),tr("ShutdownWinIo!"));} bool Result = ShutdownWinIo(); if(!Result) {QMessageBox::information(this,tr("info"),tr("ShutdownWinIo fail!"));} } if(mylib.isLoaded()){mylib.unload();}
- 使用 Win32 API(程式碼還有改善空間,不過基本上動作沒問題)
typedef bool (CALLBACK* InitializeWinIoFunc)(); typedef bool (CALLBACK* ShutdownWinIoFunc)(); typedef bool (CALLBACK* SetPortValFunc)(WORD, DWORD, BYTE); HINSTANCE hDLL; // Handle to DLL InitializeWinIoFunc lpfnInitializeWinIo; // Function pointer ShutdownWinIoFunc lpfnShutdownWinIo; SetPortValFunc lpfnSetPortVal; bool uReturnVal; hDLL = LoadLibrary(L"WinIo32.dll"); if (hDLL != NULL) { lpfnInitializeWinIo = (InitializeWinIoFunc)GetProcAddress(hDLL,"InitializeWinIo"); lpfnShutdownWinIo = (ShutdownWinIoFunc)GetProcAddress(hDLL,"ShutdownWinIo"); lpfnSetPortVal = (SetPortValFunc)GetProcAddress(hDLL,"SetPortVal"); if ((!lpfnInitializeWinIo) || (!lpfnShutdownWinIo) || (!lpfnSetPortVal)) { // handle the error FreeLibrary(hDLL); QMessageBox::information(this,tr("info"),tr("Load Dll Fail!")); } else { // call the function uReturnVal = lpfnInitializeWinIo(); uReturnVal = lpfnSetPortVal(0x3BC,0x55,1); uReturnVal = lpfnShutdownWinIo(); } FreeLibrary(hDLL); }
- Include File
【待補】
- MFC程式 (用到再補)
【驗證】
- 在驗證你的程式之前,建議先用現成的工具來驗證你的硬體。
- 打開先前寫好的程式,基本上就是看 LED 有無輸出所指定的值。
【備註】
- LPT 接腳目前用到 Data Port http://en.wikipedia.org/wiki/LPT
- USB接腳目前用到 pin1(Vcc)/pin4(Gnd) 作供給電源的動作 http://zh.wikipedia.org/zh-cn/USB
【其他】
- Parallel Port Central
http://www.lvr.com/parport.htm - Getting a handle on usbprint.sys
http://blog.peter.skarpetis.com/archives/2005/04/07/getting-a-handle-on-usbprintsys/ - 請問有沒有usb轉 IEEE1284(Printer Port)的轉接線呢?
http://www.dainau.com/phpBB3/viewtopic.php?f=14&t=4040 - 請問有關於vb.net中開啟COM1、COM2、LPT、 USB的程式
http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/d43b1df5-3e1c-43ef-9825-3481b162004f - PL2303接8051的應用 (檔案下載處)
http://www.dainau.com/phpBB3/viewtopic.php?f=14&t=787
【參考】
- Inpout32.dll(另一個類似功用的dll 檔)
http://logix4u.net/Legacy_Ports/Parallel_Port.html - 並列埠(Parallel Port)函數庫或(DLL)及呼叫規範(使用Inpout32.dll)
http://www.en.ctu.edu.tw/elec/Cht/metagecomp/index.html - CM OS數位比較器結合並列埠之影像二值化處理電路
www.csie.cyut.edu.tw/~cyhfyc/project/93/93_1/93-1.pdf - Direct Hardware Access Under Windows 9x/NT/2000/XP/Vista(說明如何直接存取 io port)
http://biosengineer.blogspot.com/2007/05/direct-hardware-access-under-windows.html - Windows底下gcc以及Qt的DLL文件调用之总结(說明以Win32 API或使用Qt的API來載入 dll 檔)
http://blog.csdn.net/isongzi/archive/2009/06/12/4262711.aspx - PPCtrl Parallel Port I/O Control
http://www.softking.com.tw/soft/clickcount.asp?fid3=18711 - Parallel Port Viewer(GUI設計的不錯)
http://www.freewarebox.com/free_785_parallel-port-viewer-download.html