⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 windrvr.bas

📁 用VB通过并口控制I2C总线
💻 BAS
📖 第 1 页 / 共 4 页
字号:

Global Const WD_ACTIONS_POWER = &H3FF0
Global Const WD_ACTIONS_ALL = &H3FF3

Global Const WD_ACKNOWLEDGE = &H1
Global Const WD_REENUM = &H2

Type WD_EVENT
    handle As Long
    dwAction As Long ' WD_EVENT_ACTION
    dwStatus As Long ' EVENT_STATUS
    dwEventId As Long
    dwCardType As Long 'WD_BUS_PCI or WD_BUS_USB
    hKernelPlugIn As Long
    dwOptions As Long ' WD_EVENT_OPTION
    dwVendorID As Long
    dwProductID As Long ' dwDeviceId for PCI cards
    ' for PCI card
    ' dw1 - dwBus
    ' dw2 - dwSlot
    ' dw3 - dwFunction
    ' for USB device
    ' dw1 - dwUniqueID
    dw1 As Long
    dw2 As Long
    dw3 As Long
    dwEventVer As Long
    dwNumMatchTables As Long
    matchTables(1) As WDU_MATCH_TABLE
End Type

Global Const WD_USB_HARD_RESET = 1

Private IOCTL_WD_USB_RESET_PIPE         As Long
Private IOCTL_WD_USB_RESET_DEVICE       As Long
Private IOCTL_WD_USB_RESET_DEVICE_EX    As Long
Private IOCTL_WD_USB_SCAN_DEVICES       As Long
Private IOCTL_WD_USB_SCAN_DEVICES_V432  As Long
Private IOCTL_WD_USB_TRANSFER           As Long
Private IOCTL_WD_USB_DEVICE_REGISTER    As Long
Private IOCTL_WD_USB_DEVICE_UNREGISTER  As Long
Private IOCTL_WD_USB_GET_CONFIGURATION  As Long

Dim WinDriverGlobalDW As Long

Global Const WD_TYPE As Long = 38200
Global Const FILE_ANY_ACCESS As Long = 0
Global Const METHOD_NEITHER As Long = 3

'    This is an implementation of a WinIOCTL macro (CTL_CODE)
Function Get_Ctl_Code(Nr As Integer) As Long
Dim lTMP As Long
Const lMaxLong As Long = 2147483647
   lTMP = (WD_TYPE * 2 ^ 15) Or (FILE_ANY_ACCESS * 2 ^ 13) + ((Nr * 4) Or (METHOD_NEITHER)) \ 2
   Get_Ctl_Code = 0 - (lMaxLong - lTMP) * 2 - 1
End Function ' Get_Ctl_Code

Function WD_Open() As Long
  Static WD_Initialized As Integer

  If (WD_Initialized = 0) Then
    WD_Initialize
    WD_Initialized = 1
  End If

  WD_Open = CreateFile("\\.\WINDRVR6", GENERIC_READ, _
     FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, _
     OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
End Function

Sub WD_Close(ByVal hWD As Long)
  CloseHandle hWD
End Sub

Function WD_Debug(ByVal hWD As Long, ByRef Debug_parm As WD_Debug)
   DeviceIoControl hWD, IOCTL_WD_DEBUG, Debug_parm, _
                  LenB(Debug_parm), WD_Debug, 4, WinDriverGlobalDW, 0
End Function ' WD_Debug

Function WD_DebugDump(ByVal hWD As Long, ByRef DebugDump As WD_DEBUG_DUMP)
  DeviceIoControl hWD, IOCTL_WD_DEBUG_DUMP, DebugDump, _
                  LenB(DebugDump), WD_DebugDump, 4, WinDriverGlobalDW, 0
End Function ' WD_DebugDump

Function WD_Transfer(ByVal hWD As Long, ByRef Transfer As WD_Transfer)
  DeviceIoControl hWD, IOCTL_WD_TRANSFER, Transfer, _
                  LenB(Transfer), WD_Transfer, 4, WinDriverGlobalDW, 0
End Function ' WD_Transfer

Function WD_MultiTransfer(ByVal hWD As Long, ByRef TransferArray As WD_Transfer, ByVal dwNumTransfers As Integer)
  DeviceIoControl hWD, IOCTL_WD_MULTI_TRANSFER, TransferArray, _
                  LenB(TransferArray) * dwNumTransfers, WD_MultiTransfer, _
                  4, WinDriverGlobalDW, 0
End Function ' WD_MultiTransfer

Function WD_DMALock(ByVal hWD As Long, ByRef Dma As WD_DMA)
  DeviceIoControl hWD, IOCTL_WD_DMA_LOCK, Dma, LenB(Dma), WD_DMALock, 4, _
                  WinDriverGlobalDW, 0
End Function ' WD_DMALock

Function WD_DMAUnlock(ByVal hWD As Long, ByRef Dma As WD_DMA)
  DeviceIoControl hWD, IOCTL_WD_DMA_UNLOCK, Dma, LenB(Dma), WD_DMAUnlock, _
                  4, WinDriverGlobalDW, 0
End Function ' WD_DMAUnlock

Function WD_IntEnable(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
  DeviceIoControl hWD, IOCTL_WD_INT_ENABLE, TheInterrupt, _
                  LenB(TheInterrupt), WD_IntEnable, 4, WinDriverGlobalDW, 0
End Function ' WD_IntEnable

Function WD_IntDisable(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
  DeviceIoControl hWD, IOCTL_WD_INT_DISABLE, TheInterrupt, _
                  LenB(TheInterrupt), WD_IntDisable, 4, WinDriverGlobalDW, 0
End Function ' WD_IntDisable

Function WD_IntCount(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
  DeviceIoControl hWD, IOCTL_WD_INT_COUNT, TheInterrupt, _
                  LenB(TheInterrupt), WD_IntCount, 4, WinDriverGlobalDW, 0
End Function ' WD_IntCount

Function WD_IntWait(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
Dim h As Long
  h = WD_Open()
  DeviceIoControl h, IOCTL_WD_INT_WAIT, TheInterrupt, _
                  LenB(TheInterrupt), WD_IntWait, 4, WinDriverGlobalDW, 0
  WD_Close h
End Function ' WD_IntWait

Function WD_IsapnpScanCards(ByVal hWD As Long, ByRef IsapnpScanCards As WD_ISAPNP_SCAN_CARDS)
  DeviceIoControl hWD, IOCTL_WD_ISAPNP_SCAN_CARDS, IsapnpScanCards, _
                  LenB(IsapnpScanCards), WD_IsapnpScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpScanCards

Function WD_IsapnpGetCardInfo(ByVal hWD As Long, ByRef IsapnpGetCardInfo As WD_ISAPNP_CARD_INFO)
  DeviceIoControl hWD, IOCTL_WD_ISAPNP_GET_CARD_INFO, IsapnpGetCardInfo, _
                  LenB(IsapnpGetCardInfo), WD_IsapnpGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpGetCardInfo

Function WD_IsapnpConfigDump(ByVal hWD As Long, ByRef IsapnpConfigDump As WD_ISAPNP_CONFIG_DUMP)
  DeviceIoControl hWD, IOCTL_WD_ISAPNP_CONFIG_DUMP, IsapnpConfigDump, _
                  LenB(IsapnpConfigDump), WD_IsapnpConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpConfigDump

Function WD_PcmciaScanCards(ByVal hWD As Long, ByRef PcmciaScanCards As WD_PCMCIA_SCAN_CARDS)
  DeviceIoControl hWD, IOCTL_WD_PCMCIA_SCAN_CARDS, PcmciaScanCards, _
                                  LenB(PcmciaScanCards), WD_PcmciaScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaScanCards

Function WD_PcmciaGetCardInfo(ByVal hWD As Long, ByRef PcmciaCardInfo As WD_PCMCIA_CARD_INFO)
  DeviceIoControl hWD, IOCTL_WD_PCMCIA_GET_CARD_INFO, PcmciaCardInfo, _
                                  LenB(PcmciaCardInfo), WD_PcmciaGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaGetCardInfo

Function WD_PcmciaConfigDump(ByVal hWD As Long, ByRef PcmciaConfigDump As WD_PCMCIA_CONFIG_DUMP)
  DeviceIoControl hWD, IOCTL_WD_PCMCIA_CONFIG_DUMP, PcmciaConfigDump, _
                          LenB(PcmciaConfigDump), WD_PcmciaConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaConfigDump

Function WD_Sleep(ByVal hWD As Long, ByRef Sleep As WD_Sleep)
  DeviceIoControl hWD, IOCTL_WD_SLEEP, Sleep, _
                  LenB(Sleep), WD_Sleep, 4, WinDriverGlobalDW, 0
End Function ' WD_Sleep

Function WD_CardRegister(ByVal hWD As Long, ByRef Card As WD_CARD_REGISTER)
   DeviceIoControl hWD, IOCTL_WD_CARD_REGISTER, Card, _
                  LenB(Card), WD_CardRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_CardRegister

Function WD_CardUnregister(ByVal hWD As Long, ByRef Card As WD_CARD_REGISTER)
  DeviceIoControl hWD, IOCTL_WD_CARD_UNREGISTER, Card, _
                  LenB(Card), WD_CardUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_CardUnregister

Function WD_PciScanCards(ByVal hWD As Long, ByRef pciScan As WD_PCI_SCAN_CARDS)
   DeviceIoControl hWD, IOCTL_WD_PCI_SCAN_CARDS, pciScan, _
                  LenB(pciScan), WD_PciScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_PciScanCards

Function WD_PciGetCardInfo(ByVal hWD As Long, ByRef PciCard As WD_PCI_CARD_INFO)
 DeviceIoControl hWD, IOCTL_WD_PCI_GET_CARD_INFO, PciCard, _
                  LenB(PciCard), WD_PciGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_PciGetCardInfo

Function WD_Version(ByVal hWD As Long, ByRef VerInfo As WD_VERSION)
  DeviceIoControl hWD, IOCTL_WD_VERSION, VerInfo, _
                  LenB(VerInfo), WD_Version, 4, WinDriverGlobalDW, 0
End Function ' WD_Version

Function WD_License(ByVal hWD As Long, ByRef License As WD_License)
  DeviceIoControl hWD, IOCTL_WD_LICENSE, License, _
                  LenB(License), WD_License, 4, WinDriverGlobalDW, 0
End Function ' WD_License

Function WD_KernelPlugInOpen(ByVal hWD As Long, ByRef KernelPlugInOpen As WD_KERNEL_PLUGIN)
  DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_OPEN, KernelPlugInOpen, _
                  LenB(KernelPlugInOpen), WD_KernelPlugInOpen, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInOpen

Function WD_KernelPlugInClose(ByVal hWD As Long, ByRef KernelPlugInClose As WD_KERNEL_PLUGIN)
  DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CLOSE, KernelPlugInClose, _
                  LenB(KernelPlugInClose), WD_KernelPlugInClose, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInClose

Function WD_KernelPlugInCall(ByVal hWD As Long, ByRef KernelPlugInCall As WD_KERNEL_PLUGIN_CALL)
  DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CALL, KernelPlugInCall, _
                  LenB(KernelPlugInCall), WD_KernelPlugInCall, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInCall

Function WD_PciConfigDump(ByVal hWD As Long, ByRef PciConfigDump As WD_PCI_CONFIG_DUMP)
  DeviceIoControl hWD, IOCTL_WD_PCI_CONFIG_DUMP, PciConfigDump, _
                  LenB(PciConfigDump), WD_PciConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_PciConfigDump

Function WD_UsbScanDevice(ByVal hWD As Long, ByRef Scan As WD_USB_SCAN_DEVICES)
  DeviceIoControl hWD, IOCTL_WD_USB_SCAN_DEVICES, Scan, _
                  LenB(Scan), WD_UsbScanDevice, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbScanDevice

Function WD_UsbGetConfiguration(ByVal hWD As Long, ByRef Config As WD_USB_CONFIGURATION)
  DeviceIoControl hWD, IOCTL_WD_USB_GET_CONFIGURATION, Config, _
                  LenB(Config), WD_UsbGetConfiguration, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbGetConfiguration

Function WD_UsbDeviceRegister(ByVal hWD As Long, ByRef Dev As WD_USB_DEVICE_REGISTER)
  DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_REGISTER, Dev, _
                  LenB(Dev), WD_UsbDeviceRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbDeviceRegister

Function WD_UsbTransfer(ByVal hWD As Long, ByRef Trans As WD_USB_TRANSFER)
Dim h As Long
  h = WD_Open()
  DeviceIoControl h, IOCTL_WD_USB_TRANSFER, Trans, _
                  LenB(Trans), WD_UsbTransfer, 4, WinDriverGlobalDW, 0
  WD_Close h
End Function ' WD_UsbTransfer

Function WD_UsbDeviceUnregister(ByVal hWD As Long, ByRef Dev As WD_USB_DEVICE_REGISTER)
  DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_UNREGISTER, Dev, _
                  LenB(Dev), WD_UsbDeviceUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbDeviceUnregister

Function WD_UsbResetPipe(ByVal hWD As Long, ByRef ResetPipe As WD_USB_RESET_PIPE)
  DeviceIoControl hWD, IOCTL_WD_USB_RESET_PIPE, ResetPipe, _
                  LenB(ResetPipe), WD_UsbResetPipe, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetPipe

Function WD_UsbResetDevice(ByVal hWD As Long, ByVal hDev As Long)
  DeviceIoControl hWD, IOCTL_WD_USB_RESET_DEVICE, hDev, _
                  LenB(hDev), WD_UsbResetDevice, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetDevice

Function WD_UsbResetDeviceEx(ByVal hWD As Long, ByRef ResetDevice As WD_USB_RESET_DEVICE)
  DeviceIoControl hWD, IOCTL_WD_USB_RESET_DEVICE_EX, ResetDevice, _
                  LenB(ResetDevice), WD_UsbResetDeviceEx, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetDevice_Ex

Function WD_EventRegister(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
  DeviceIoControl hWD, IOCTL_WD_EVENT_REGISTER, wdEvent, _
                  LenB(wdEvent), WD_EventRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_EventRegister

Function WD_EventUnregister(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
  DeviceIoControl hWD, IOCTL_WD_EVENT_UNREGISTER, wdEvent, _
                  LenB(wdEvent), WD_EventUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_EventUnregister

Function WD_EventPull(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
  DeviceIoControl hWD, IOCTL_WD_EVENT_PULL, wdEvent, _
                  LenB(wdEvent), WD_EventPull, 4, WinDriverGlobalDW, 0
End Function ' WD_EventPull

Function WD_EventSend(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
  DeviceIoControl hWD, IOCTL_WD_EVENT_SEND, wdEvent, _
                  LenB(wdEvent), WD_EventSend, 4, WinDriverGlobalDW, 0
End Function ' WD_EventSend

Function WD_DebugAdd(ByVal hWD As Long, ByRef dbg As WD_DEBUG_ADD)
  DeviceIoControl hWD, IOCTL_WD_DEBUG_ADD, dbg, _
                  LenB(dbg), WD_DebugAdd, 4, WinDriverGlobalDW, 0
End Function ' WD_DebugAdd

Sub WD_Initialize()

    IOCTL_WD_DMA_LOCK = Get_Ctl_Code(&H901)
    IOCTL_WD_DMA_UNLOCK = Get_Ctl_Code(&H902)
    IOCTL_WD_TRANSFER = Get_Ctl_Code(&H903)
    IOCTL_WD_MULTI_TRANSFER = Get_Ctl_Code(&H904)
    IOCTL_WD_PCI_SCAN_CARDS = Get_Ctl_Code(&H90E)
    IOCTL_WD_PCI_GET_CARD_INFO = Get_Ctl_Code(&H90F)
    IOCTL_WD_VERSION = Get_Ctl_Code(&H910)
    IOCTL_WD_PCI_CONFIG_DUMP = Get_Ctl_Code(&H91A)
    IOCTL_WD_KERNEL_PLUGIN_OPEN = Get_Ctl_Code(&H91B)
    IOCTL_WD_KERNEL_PLUGIN_CLOSE = Get_Ctl_Code(&H91C)
    IOCTL_WD_KERNEL_PLUGIN_CALL = Get_Ctl_Code(&H91D)
    IOCTL_WD_INT_ENABLE = Get_Ctl_Code(&H91E)
    IOCTL_WD_INT_DISABLE = Get_Ctl_Code(&H91F)
    IOCTL_WD_INT_COUNT = Get_Ctl_Code(&H920)
    IOCTL_WD_ISAPNP_SCAN_CARDS = Get_Ctl_Code(&H924)
    IOCTL_WD_ISAPNP_CONFIG_DUMP = Get_Ctl_Code(&H926)
    IOCTL_WD_SLEEP = Get_Ctl_Code(&H927)
    IOCTL_WD_DEBUG = Get_Ctl_Code(&H928)
    IOCTL_WD_DEBUG_DUMP = Get_Ctl_Code(&H929)
    IOCTL_WD_CARD_UNREGISTER = Get_Ctl_Code(&H92B)
    IOCTL_WD_ISAPNP_GET_CARD_INFO = Get_Ctl_Code(&H92D)
    IOCTL_WD_PCMCIA_SCAN_CARDS = Get_Ctl_Code(&H92F)
    IOCTL_WD_PCMCIA_GET_CARD_INFO = Get_Ctl_Code(&H930)
    IOCTL_WD_PCMCIA_CONFIG_DUMP = Get_Ctl_Code(&H931)
    IOCTL_WD_CARD_REGISTER = Get_Ctl_Code(&H99C)
    IOCTL_WD_INT_WAIT = Get_Ctl_Code(&H94B)
    IOCTL_WD_LICENSE = Get_Ctl_Code(&H952)
    IOCTL_WD_USB_RESET_PIPE = Get_Ctl_Code(&H971)
    IOCTL_WD_USB_RESET_DEVICE = Get_Ctl_Code(&H93F)
    IOCTL_WD_USB_SCAN_DEVICES = Get_Ctl_Code(&H969)
    IOCTL_WD_USB_TRANSFER = Get_Ctl_Code(&H967)
    IOCTL_WD_USB_DEVICE_REGISTER = Get_Ctl_Code(&H968)
    IOCTL_WD_USB_DEVICE_UNREGISTER = Get_Ctl_Code(&H970)
    IOCTL_WD_USB_GET_CONFIGURATION = Get_Ctl_Code(&H974)
    IOCTL_WD_USB_RESET_DEVICE_EX = Get_Ctl_Code(&H973)
    IOCTL_WD_EVENT_REGISTER = Get_Ctl_Code(&H99D)
    IOCTL_WD_EVENT_UNREGISTER = Get_Ctl_Code(&H962)
    IOCTL_WD_EVENT_PULL = Get_Ctl_Code(&H963)
    IOCTL_WD_EVENT_SEND = Get_Ctl_Code(&H97A)
    IOCTL_WD_DEBUG_ADD = Get_Ctl_Code(&H964)

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -