需要有mwrf_bj.dll
Imports System.Runtime.InteropServices Module mwrf_dll <DllImport("mwrf_bj.dll")> Function rf_beep(ByVal icdev As Integer, ByVal Msec As UInteger) As Byte End Function <DllImport("mwrf_bj.dll")> Function Open_Device(ByVal port As Integer, ByVal baud As UInteger) As Integer End Function <DllImport("mwrf_bj.dll")> Function Close_Device(ByVal icdev As Integer) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_authentication(ByVal icdev As Integer, ByVal Mode As Byte, ByVal SecNr As Byte) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_load_key(ByVal icdev As Integer, ByVal Mode As Byte, ByVal SecNr As Byte, ByVal NKey As IntPtr) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_load_key_hex(ByVal icdev As Integer, ByVal Mode As Byte, ByVal SecNr As Byte, ByRef NKey As String) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_halt(ByVal icdev As Integer) As Byte End Function '<DllImport("mwrf_bj.dll")> 'Function rf_request(ByVal icdev As Integer, ByVal Mode As Byte, ByRef Type As UInteger) As Byte 'End Function '<DllImport("mwrf_bj.dll")> 'Function rf_anticoll(ByVal icdev As Integer, ByVal Bcnt As Byte, ByRef Snr As ULong) As Byte 'End Function '<DllImport("mwrf_bj.dll")> 'Function rf_select(ByVal icdev As Integer, ByRef Snr As UInteger, ByRef size As Byte) As Byte 'End Function '<DllImport("mwrf_bj.dll")> 'Function rf_HL_authentication(ByVal icdev As Integer, ByVal reqmode As Byte, ByVal snr As ULong, ByVal authmode As Byte, ByVal secnr As Byte) As Byte 'End Function '<DllImport("mwrf_bj.dll")> 'Function rf_HL_read(ByVal icdev As Integer, ByVal Mode As Byte, ByVal Adr As Byte, ByVal snr As ULong, ByVal Data As IntPtr, ByRef NSnr As ULong) As Byte 'End Function <DllImport("mwrf_bj.dll")> Function rf_read(ByVal icdev As Integer, ByVal Adr As Byte, ByVal Data As IntPtr) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_write(ByVal icdev As Integer, ByVal Adr As Byte, ByVal Data As IntPtr) As Byte End Function <DllImport("mwrf_bj.dll")> Function rf_card(ByVal icdev As Integer, ByVal Mode As Byte, ByRef Snr As ULong) As Byte End Function End Module Class mwrf Implements IDisposable Dim icdev As Integer Dim snr As ULong Sub New(ByVal port As Integer, Optional ByVal baud As Integer = 115200) icdev = Open_Device(port, baud) If icdev < 0 Then Throw New Exception("Open_Device Error") End If End Sub Sub Beep(ByVal ms As Integer) rf_beep(icdev, ms / 10) End Sub Sub CheckErr(ByVal no As Integer) If no = 0 Then Exit Sub End If Dim errs = Split(My.Resources.Err, vbCrLf) Dim des = "" For i = 0 To errs.Length - 1 If no.ToString = errs(i) Then des = errs(i + 1) Exit For End If Next Throw New Exception("#" & no.ToString & " " & des) End Sub Sub Close() CheckErr(Close_Device(icdev)) End Sub Sub Halt() CheckErr(rf_halt(icdev)) End Sub Sub InitCard(ByVal Adr As Integer, ByVal key() As Byte) Dim k As IntPtr = Marshal.UnsafeAddrOfPinnedArrayElement(key, 0) CheckErr(rf_load_key(icdev, 0, CInt(Adr / 4), k)) CheckErr(rf_card(icdev, 1, snr)) CheckErr(rf_authentication(icdev, 0, CInt(Adr / 4))) End Sub Function Read(ByVal Adr As Integer, ByVal key() As Byte) As Byte() InitCard(Adr, key) Dim data(15) As Byte Dim d = Marshal.AllocHGlobal(16) Dim ret = rf_read(icdev, Adr, d) CheckErr(ret) Marshal.Copy(d, data, 0, 16) Return data End Function Sub Write(ByVal Adr As Integer, ByVal data() As Byte, ByVal key() As Byte) InitCard(Adr, key) Dim ret = rf_write(icdev, Adr, Marshal.UnsafeAddrOfPinnedArrayElement(data, 0)) CheckErr(ret) End Sub Sub Dispose() Implements IDisposable.Dispose Close() End Sub End Class
测试代码:
Using dev As New mwrf(3)
Do While True
Try
dev.Write(8, {&H22, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H22}, {&HFF, &HFF, &HFF, &HFF, &HFF, &HFF})
dev.Beep(10)
Dim x = dev.Read(0, {&HFF, &HFF, &HFF, &HFF, &HFF, &HFF})
dev.Beep(10)
dev.Halt()
Catch ex As Exception
‘ MsgBox(ex.ToString, MsgBoxStyle.Critical, “”)
dev.Beep(1000)
End Try
Loop
End Using
发表评论