USB-Zugriff bewirkt Neustart

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Stephan

Betreff: USB-Zugriff bewirkt Neustart

BeitragSo, Sep 23, 2007 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

Ich habe mir dieses USB-Interface gekauft.

Dazu war eine CD mit Treibern und einem Beispielcode in Visual Basic.
Mit VB funktioniert alles super und absolut problemfrei.

Nun habe ich die Funktionsdeclarationen von VB in eine .decls geschrieben und einige Funktionen in BB-Code geschrieben.
Beim ausführen startet aber jedes mal mein Rechner neu. Weiß jemand wie man das verhindern kann?

Vielen Dank
Stephan

VB Code:
Zitat:
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
ByVal lpSecurityAttributes As Long, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long
Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, _
lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, _
ByVal nOutBufferSize As Long, lpBytesReturned As Long, _
lpOverlapped As Any) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Const GENERIC_READ = &H80000000 'Public hinzugefügt, damit ich auch in Form1 damit spielen kann
Public Const GENERIC_WRITE = &H40000000
Public Const FILE_SHARE_WRITE = &H2
Public Const FILE_SHARE_READ = &H1
Public Const OPEN_EXISTING = &H3


Dim sFileName As String
Dim htemp As Long
Dim lIn As Long, lInSize As Long, lOut As Long, lOutSize As Long, lSize As Long
Dim lTemp As Long
Sub USB_IO()
sFileName = "\\.\CompuLABusb_0"
hgDrvrHnd = CreateFile(sFileName, GENERIC_WRITE Or GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0)
lTemp = DeviceIoControl(hgDrvrHnd, 4&, lIn, lInSize, lOut, lOutSize, lSize, gOverlapped)
htemp = CloseHandle(hgDrvrHnd)
End Sub

Function RdPort0() As Integer
lIn = 0 * 256 + 20
lInSize = 2
lOutSize = 2
USB_IO
RdPort0 = (lOut / 256) And 255
End Function

Function RdPort1() As Integer
lIn = 1 * 256 + 20
lInSize = 2
lOutSize = 2
USB_IO
RdPort1 = (lOut / 256) And 255
End Function

Sub WrPort0(Wert)
lIn = 65536 * Wert + 0 * 256 + 21
lInSize = 3
lOutSize = 1
USB_IO
End Sub

Sub WrPort1(Wert)
lIn = 65536 * Wert + 1 * 256 + 21
lInSize = 3
lOutSize = 1
USB_IO
End Sub




Meine .decls:
Code: [AUSKLAPPEN]
.lib "kernel32.dll"
API_CreateFileA%(lpFileName$,dwDesiredAccess%,dwShareMode%,lpSecurityAttributes%,dwCreationDisposition%,dwFlagsAndAttributes%,hTemplateFile%):"CreateFileA"
API_DeviceIoControl%(hDevice%,dwIoControlCode%,lpInBuffer,nInBufferSize%,lpOutBuffer,nOutBufferSize%,lpBytesReturned%,lpOverlapped%):"DeviceIoControl"
API_CloseHandle%(hObject%):"CloseHandle"


Mein Programm hat es beim letzten Ausführen durch den Neustart gelöscht. Crying or Very sad Crying or Very sad Aber ich werde es wenn ich mich von dem Shock erholt habe neu machen und nachreichen.[/code]
ICQ: 252-242-607

pixelshooter

BeitragSo, Sep 23, 2007 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kann dir leider nicht helfen, aber ich such grad n günstigen controller, und der sieht nett aus. Würdest du den empfehlen? (Jetzt halt nit mit blitz^^)
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc
 

Stephan

BeitragMo, Sep 24, 2007 6:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, der ist absolut super. Ich hab schon einige Andere probiert und die haben nich so toll funktioniert. Da brauchte man erst große Schaltungen usw.. Hier benötigt man nur einen 6MHz Quartz, einen 7.5K Widerstand und einen 100n Kondensator und alles funzt perfekt XD. Naja, auser die Ansteuerung mit BB, aber ich arbeite an einer Lösung.
ICQ: 252-242-607

Markus2

BeitragMo, Sep 24, 2007 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn in VB kein ByVal vor dem Parameter steht ist es ByRef

Vertex

BeitragSa, Sep 29, 2007 2:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs damit:
Code: [AUSKLAPPEN]
.lib "kernel32.dll"
apiCreateFile%(lpFileName$, dwDesiredAccess%, dwShareMode%, lpSecurityAttributes%, dwCreationDisposition%, dwFlagsAndAttributes%, hTemplateFile%) : "CreateFileA"
apiDeviceIOControl%(hDevice%, dwIOControlCode%, lpInBuffer*, nInBufferSize%, lpOutBuffer*, nOutBufferSize%, lpBytesReturned*, lpOverlapped*) : "DeviceIoControl"
apiCloseHandle%(hObject%) : "CloseHandle"


Code: [AUSKLAPPEN]
Const DEVICE_NAME          = "\\.\CompuLABusb_0"

Const INVALID_HANDLE_VALUE = -1
Const GENERIC_READ         = $80000000
Const GENERIC_WRITE        = $40000000
Const FILE_SHARE_WRITE     = $2
Const FILE_SHARE_READ      = $1
Const OPEN_EXISTING        = $3

Global Driver%
Global InBuffer%, OutBuffer%, BytesReturned%, Overlapped%

Driver = apiCreateFile(DEVICE_NAME, GENERIC_WRITE Or GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0)
If Driver = INVALID_HANDLE_VALUE Then
   DebugLog("Unable to load driver")
   End
EndIf

InBuffer      = CreateBank(3)
OutBuffer     = CreateBank(2)
BytesReturned = CreateBank(4)
Overlapped    = CreateBank(4)

Print("Read  Port0: " + ReadPort0())
Print("Read  Port1: " + ReadPort1())
Print("Write Port0: " + WritePort0(123))
Print("Write Port1: " + WritePort1(123))

apiCloseHandle(Driver)
End

Function ReadPort0%()
   Local Success%

   PokeByte(InBuffer, 1, 0)
   PokeByte(InBuffer, 0, 20)

   Success = apiDeviceIOControl(Driver, 4, InBuffer, 2, OutBuffer, 2, BytesReturned, Overlapped)
   If Success = 0 Then Return -1

   Return PeekByte(OutBuffer, 1)
End Function

Function ReadPort1%()
   Local Success%

   PokeByte(InBuffer, 1, 1)
   PokeByte(InBuffer, 0, 20)

   Success = apiDeviceIOControl(Driver, 4, InBuffer, 2, OutBuffer, 2, BytesReturned, Overlapped)
   If Success = 0 Then Return -1
   
   Return PeekByte(OutBuffer, 1)
End Function

Function WritePort0%(Value%)
   PokeByte(InBuffer, 2, Value)
   PokeByte(InBuffer, 1, 0)
   PokeByte(InBuffer, 0, 21)

   Success = apiDeviceIOControl(Driver, 4, InBuffer, 3, OutBuffer, 1, BytesReturned, Overlapped)
   If Success = 0 Then Return -1

   Return 0
End Function

Function WritePort1%(Value%)
   PokeByte(InBuffer, 2, Value)
   PokeByte(InBuffer, 1, 1)
   PokeByte(InBuffer, 0, 21)

   Success = apiDeviceIOControl(Driver, 4, InBuffer, 3, OutBuffer, 1, BytesReturned, Overlapped)
   If Success = 0 Then Return -1

   Return 0
End Function


Problem bei Blitz ist, dass man bei Pointer nicht Null übergeben kann. Bspw. kann ich an lpSecurityAttributes* nicht Null übergeben, sondenr muss lpSecurityAttributes% mit 0 nutzen.
vertex.dreamfall.at | GitHub

Plasma

Betreff: ui

BeitragSa, Sep 29, 2007 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
das sieht ja erstmal nett aus , schreib mal ob es klappt <- interesse zeig

Christoph

BeitragSa, Sep 29, 2007 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, ich habe eben mit Blitzbasic auf einen USB-stick zugegriffen, auf den zunächst in einer Schleife gewartet wird (mittels Filetype). Programm gestartet, USB stick reingesteckt, Neustart...

Hatte aber keine .dlls oder sonstiges^^

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group