Serielle Schnittstelle für Funkgerät

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
drahneir
Beiträge: 13
Registriert: 09.08.2006 12:56

Serielle Schnittstelle für Funkgerät

Beitrag von drahneir »

Nachdem ich mich entschlossen hatte, keine Userlibs mehr zu verwenden, musste auch für MVCOM (das bestens funktioniert hat) ein Ersatz her.
Folgenden Code habe ich zusammengestellt, vielleicht kann ihn der eine oder andere gebrauchen.

Code: Alles auswählen

; Serielle Schnittstelle

Global lCommTS2KCtrl.l
Global lCommCWKey.l
Global lRes.l
Global *CommRecBuf.l = AllocateMemory(256)
Global sRigDat.s

Procedure SetCommPort(lCommPort.l, lFlags.l)
  Define.DCB dcb
  Define.COMMTIMEOUTS cto
  GetCommState_(lCommPort, @dcb)
  dcb\BaudRate    = #CBR_57600
  dcb\Parity      = #NOPARITY
  dcb\StopBits    = #ONESTOPBIT
  dcb\ByteSize    = 8
  dcb\fBits = (dcb\fBits & %11111111111111111000000000000000) | lFlags
  SetCommState_(lCommPort, @dcb)
  Delay(1)
  cto\ReadIntervalTimeout         = 100
  cto\ReadTotalTimeoutMultiplier  = 10
  cto\ReadTotalTimeoutConstant    = 100
  cto\WriteTotalTimeoutMultiplier = 100
  cto\WriteTotalTimeoutConstant   = 10
  SetCommTimeouts_(lCommPort, @cto)
  Delay(1)
EndProcedure

Procedure OpenCommPorts()
  Define.s sCommDev1 = "COM2:"
  Define.s sCommDev2 = "COM3:"
  Dim fBits.b(14)
  fBits(0)  = #True                   ; fBinary
  fBits(1)  = #False                  ; fParity
  fBits(2)  = #False                  ; fOutxCtsFlow
  fBits(3)  = #False                  ; fOutxDsrFlow
  fBits(4)  = #DTR_CONTROL_DISABLE    ; fDtrControl
  fBits(6)  = #False                  ; fDsrSensitivity
  fBits(7)  = #False                  ; fTXContinueOnXoff
  fBits(8)  = #False                  ; fOutX
  fBits(9)  = #False                  ; fInX
  fBits(10) = #False                  ; fErrorChar
  fBits(11) = #False                  ; fNull
  fBits(12) = #RTS_CONTROL_ENABLE     ; fRtsControl
  fBits(14) = #False                  ; fAbortOnError
  Define.l lSI, lFlags
  For lSI = 0 To 14
    lFlags + fBits(lSI) * Pow(2, lSI) ; Multipliziert jedes FlagBit mit dem Stellenwert und addiert auf
  Next
  lCommTS2KCtrl = CreateFile_(@sCommDev1, #GENERIC_ALL, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
  If lCommTS2KCtrl
    SetupComm_(lCommTS2KCtrl, 255, 255)
    SetCommPort(lCommTS2KCtrl, lFlags)
  Else
    MessageRequester("", "Comm2 wurde nicht geöffnet")
  EndIf
  
  lCommCWKey = CreateFile_(@sCommDev2, #GENERIC_ALL, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
  If lCommCWKey
    SetupComm_(lCommCWKey, 0, 0)
    lFlags = 0
    fBits(12) = #RTS_CONTROL_DISABLE
    For lSI = 0 To 14
      lFlags + fBits(lSI) * Pow(2, lSI)
    Next
    SetCommPort(lCommCWKey, lFlags)
  Else
    MessageRequester("", "Comm3 wurde nicht geöffnet")
  EndIf
EndProcedure

Procedure CommTS2KCtrlIn()
  Define.l lReadBytes
  ReadFile_(lCommTS2KCtrl, *CommRecBuf, 256, @lReadBytes, 0)
  sRigDat = PeekS(*CommRecBuf, lReadBytes)
  PurgeComm_(lCommTS2KCtrl, #PURGE_RXCLEAR)
  Delay(1)
EndProcedure

Procedure CommTS2KCtrlOut(TXString.s)
  Define.l lWritten
  TxString + ";"
  PurgeComm_(lCommTS2KCtrl, #PURGE_RXCLEAR)
  WriteFile_(lCommTS2KCtrl, @TxString.s, Len(TxString), @lWritten, 0)
  PurgeComm_(lCommTS2KCtrl, #PURGE_TXCLEAR)
  Delay(1)
EndProcedure

Procedure.l CommSetDTR(lDTRState.l)
  If lDTRState
    lRes = EscapeCommFunction_(lCommCWKey, #SETDTR)
  Else
    lRes = EscapeCommFunction_(lCommCWKey, #CLRDTR)
  EndIf
  ProcedureReturn lRes
EndProcedure
Zur Erklärung: CommTS2KCtrl steuert ein Funkgerät, CommCWKey nutzt von der Schnittstelle nur das DTR-Signal zur Ausgabe von Morsezeichen.
Beide sind keine originalen seriellen Schnittstellen, sondern USB/seriell Konverter.
In der Prozedure CommTS2KCtrlOut wird an den zu sendenden String ein ";" angehängt, weil das die Befehlssyntax des Funkgeräts erfordert.
Mit CommTS2KCtrlIn wird die Antwort des Funkgeräts abgefragt und in sRigDat abgelegt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

sowas passt besser ins CT&T-unterforum, habs mal verschoben.

als zehnten Beitrag gleich so nen code, respekt. :allright:

bei der gelegenheit, nachträglich willkommen im board. :D
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Kaeru Gaman hat geschrieben:sowas passt besser ins CT&T-unterforum, habs mal verschoben.

als zehnten Beitrag gleich so nen code, respekt. :allright:

bei der gelegenheit, nachträglich willkommen im board. :D
Sag jetzt nicht, das war in der Hardwareecke :oops: :lol:

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Falko hat geschrieben:Sag jetzt nicht, das war in der Hardwareecke :oops: :lol:

Gruß Falko
Da es wohl nur mit Anpassungen normal nutzbar ist, würde ich sagen:
Ergänzen mit Infos zum Funkgerät und dann in die Hardwareecke, dann ist
es in jedemfall eindeutig :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich habs dann in die Hardwareecke verschoben und den Schatten gelassen . :lol:

Gruß ..Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten