serielle Schnittstelle direkt Ansteuern

Übersicht BlitzBasic DLLs und Userlibs

Neue Antwort erstellen

PowerProgrammer

Betreff: serielle Schnittstelle direkt Ansteuern

BeitragSa, Apr 15, 2006 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ich hoffe ich hab das richtig geposten (bin neu hier)! Jedenfalls habe ich einen VB-Code nach BlitzBasic importiert: Ein Proggi zum direkten Ansteuern der Pinne der seriellen Schnittstelle ohne eine externe DLL, nur mit dem Windows-API-Zeug!

Die Ausgänge kann man schon Ansteuern, aber geht das auch mit den Eingängen? Das bekomme ich net hin! Habt ihr Ideen?

BlitzBasic: [AUSKLAPPEN]
Const INC_MS_CTS_ON       = $10
Const INC_MS_DSR_ON = $20
Const INC_MS_RING_ON = $40
Const INC_MS_RLSD_ON = $80

Const INC_SETXOFF = 1
Const INC_SETXON = 2
Const INC_SETRTS = 3
Const INC_CLRRTS = 4
Const INC_SETDTR = 5
Const INC_CLRDTR = 6
Const INC_RESETDEV = 7
Const INC_SETBREAK = 8
Const INC_CLRBREAK = 9

Const INC_GENERIC_READ = $80000000
Const INC_GENERIC_WRITE = $40000000
Const INC_OPEN_EXISTING = 3

; Grundfunktionen

Function INC_OpenCom%(lpDef$)
nCid = api_CreateFile(Left(lpDef$, 4), INC_GENERIC_READ Or INC_GENERIC_WRITE, 0, 0, INC_OPEN_EXISTING, 0, 0)
If nCid > 0 Then OPENCOM = nCid Else OPENCOM = 0
Return OPENCOM
End Function

Function INC_CloseCom(nCid)
api_CloseHandle(nCid)
End Function

; Ausgangsfunktionen

Function INC_DTR(nCid,Status)
If Status = 1 Then
api_EscapeCommFunction nCid, INC_SETDTR
Else
api_EscapeCommFunction nCid, INC_CLRDTR
EndIf
End Function

Function INC_RTS(nCid,Status)
If Status = 1 Then
api_EscapeCommFunction nCid, INC_SETRTS
Else
api_EscapeCommFunction nCid, INC_CLRRTS
EndIf
End Function

Function INC_TXD(nCid,Status)
If Status = 1 Then
api_EscapeCommFunction(nCid, INC_SETBREAK)
Else
api_EscapeCommFunction nCid, INC_CLRBREAK
EndIf
End Function


Achso, die LIBs:
Code: [AUSKLAPPEN]
.lib "kernel32.dll"    ;<-- Jetzt hab ichs

api_CreateFile%(FileName$, DesiredAccess%, ShareMode%, pSecurrityAttribute%, CreationDistribution%, FlagsAndAttributes%, TemplateFile%) : "CreateFileA"
api_CloseHandle% (hObject%) : "CloseHandle"
api_EscapeCommFunction% (nCid%, nFunc%) : "EscapeCommFunction"
  • Zuletzt bearbeitet von PowerProgrammer am So, Apr 16, 2006 12:34, insgesamt einmal bearbeitet

Goodjee

BeitragSa, Apr 15, 2006 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Achso, die LIBs:
Code:
api_CreateFile%(FileName$, DesiredAccess%, ShareMode%, pSecurrityAttribute%, CreationDistribution%, FlagsAndAttributes%, TemplateFile%) : "CreateFileA"
api_CloseHandle% (hObject%) : "CloseHandle"
api_EscapeCommFunction% (nCid%, nFunc%) : "EscapeCommFunction"

also doch mit libs.... Wink
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

BlitzBasic303

Betreff: RE:

BeitragSa, Apr 15, 2006 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Er hat ja auch gesagt, das man keine DLL braucht. Er hat nicht gesagt ohne UserLib... Außerdem liegt die LIB ja nicht im Programmverzeichnis, sondern in dem Userlib ordner. Also braucht man keine Dateien im Programmverzeichnis haben,um die serielle Schnittstelle anzusteuern....

skey-z

BeitragSa, Apr 15, 2006 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ist für mich zwar nicht gerade interessent, aber:

Zitat:

Achso, die LIBs:
Code:
api_CreateFile%(FileName$, DesiredAccess%, ShareMode%, pSecurrityAttribute%, CreationDistribution%, FlagsAndAttributes%, TemplateFile%) : "CreateFileA"
api_CloseHandle% (hObject%) : "CloseHandle"
api_EscapeCommFunction% (nCid%, nFunc%) : "EscapeCommFunction"


Tja, stellt sich nur die frage zu welcher lib es gehört?
user32?
gdi?
kernel?
etc...
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

BlitzChecker

BeitragSa, Apr 15, 2006 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist für die kernel32.decls Wink


tja, ich kann halt gedanke lesen ne, kleiner scherz, PowerProgrammer ist mein Freund und der sitzt grad neben mir Laughing
www.xairro.com
  • Zuletzt bearbeitet von BlitzChecker am So, Apr 30, 2006 18:45, insgesamt einmal bearbeitet

PowerProgrammer

BeitragSo, Apr 16, 2006 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, tut mir Leid, nehmts mir nicht übel! Ich meine die "kernel32.dll". Aber schließlich sind all die Hardwarefunktionen in der Kernel (glaub ich), also dürfte das klar sein Wink

PowerProgrammer

BeitragSo, Apr 23, 2006 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte ja gefragt, wie ich das mit den Eingangsfunktionen lösen kann. Vielleich kann mir jemand helfen, wenn ihr den ursprünglichen VB-Code seht.

Die Funktion, die mich zum Verzweifeln bringen, findet ihr ganz unten.

Im folgenden Code fehlen die Konstanten, aber die stehen ja im BB-Code ganz oben.

Code: [AUSKLAPPEN]
' Die VB-Libs
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal NOlpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function EscapeCommFunction Lib "kernel32" (ByVal nCid As Long, ByVal nFunc As Long) As Long
Declare Function GetCommModemStatus Lib "kernel32" (ByVal hFile As Long, lpModemStat As Long) As Long

Dim nCid As Long


'///////////////////////////////////////////////////
'///Diese Funktionen waren kein Problem/////////////
'///////////////////////////////////////////////////
Function OPENCOM(ByVal lpDef As String) As Integer
  nCid = CreateFile(Left(lpDef, 4), INC_GENERIC_READ Or INC_GENERIC_WRITE, 0, 0, INC_OPEN_EXISTING, 0, 0)
  If nCid > 0 Then OPENCOM = nCid Else OPENCOM = 0
End Function
Sub CLOSECOM()
   x = CloseHandle(nCid)
End Sub

Sub DTR(Status As Integer)
  If Status = 1 Then EscapeCommFunction nCid, INC_SETDTR Else: EscapeCommFunction nCid, INC_CLRDTR
End Sub
Sub RTS(Status As Integer)
  If Status = 1 Then EscapeCommFunction nCid, INC_SETRTS Else: EscapeCommFunction nCid, INC_CLRRTS
End Sub
Sub TXD(Status As Integer)
  If Status = 1 Then EscapeCommFunction nCid, INC_SETBREAK Else: EscapeCommFunction nCid, INC_CLRBREAK
End Sub


'///////////////////////////////////////////////////
'///Hier beginnen die Eingangsfunktionen////////////
'///////////////////////////////////////////////////
Function CTS() As Integer
  Dim mask As Long
  GetCommModemStatus nCid, mask
  If (mask And INC_MS_CTS_ON) = INC_MS_CTS_ON Then CTS = 1 Else CTS = 0
End Function
Function DSR() As Integer
  Dim mask As Long
  GetCommModemStatus nCid, mask
  If (mask And INC_MS_DSR_ON) = INC_MS_DSR_ON Then DSR = 1 Else DSR = 0
End Function
Function RI() As Integer
  Dim mask As Long
  GetCommModemStatus nCid, mask
  If (mask And INC_MS_RING_ON) = INC_MS_RING_ON Then RI = 1 Else RI = 0
End Function
Function DCD() As Integer
  Dim mask As Long
  GetCommModemStatus nCid, mask
  If (mask And INC_MS_RLSD_ON) = INC_MS_RLSD_ON Then DCD = 1 Else DCD = 0
End Function
Function Inputs() As Integer
  Dim mask As Long
  GetCommModemStatus nCid, mask
  Inputs = (Int(mask / 16)) And 15
End Function


@Moderatoren: Ich weiß, dass ihr den forenfremden Code nicht gerne hier seht, aber sorry, das musste sein, sonst hilft mir wohl kaum einer! So den Thread bitte nicht trashen, danke!

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group