Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Hallo allerseits,
ich habe ein medizinisches Messgerät, welches beim Anschluss über USB an meinen Debian - Rechner eine serielle Schnittstelle (hier /dev/ttyACM0) darstellt, über welche mit Gerät kommuniziert werden kann.
Ausgangspunkt ist nun, dass ein Programm gestartet worden ist, welche die Schnittstelle /dev/ttyACM0 öffnet, initialisiert und über diese Schnittstelle mit dem Messgerät lesend und schreibend kommuniziert.
Soweit funktioniert das auch einwandfrei !
Mein Wunsch ist nun, den seriellen Datenstrom welcher von und zu dem Gerät geht (Lese- und Schreibrichtung) mitloggen zu können, ohne das Programm, welches mit dem Messgerät bereits kommuniziert, in der Kommunikation zu stören.
Ich möchte dazu ein C - Programm schreiben, welches gewissermaßen als Datenlogger wirkt und den gesamten Datenverkehr über diese oben genannte Schnittstelle ausgibt, getrennt nach Lese- und Schreibrichtung.
Dieses soll aber ausdrücklich nicht dazu führen, dass der Datenverkehr des oben genannten, bereits gestarteten Programmes in irgendeiner Form gestört wird.
Mein Programm soll lediglich an der Schnittstelle in Lese- und Schreibrichtung mithören, niemals aber in die Kommunikation in irgendeiner Form eingreifen, weder lesend noch schreibend.
Ich habe dazu mir mal das Programm CuteCom mal gedownloaded und festgestellt, dass dieses Programm nach dem Öffnen der oben genannten Schnittstelle das bereits kommunizierende Programm entkoppelt von der Schnittstelle und die Steuerung selber übernimmt.
Ich stelle mir vor dass mit der open() Funktion ein Filedescriptor zum Lesen und Schreiben auf /dev/ttyACM0 im nicht blockierenden Modus erstellt wird. Das Erzeugen dieses Filedescriptors führt aber dazu, dass
mein Logger Programm die Steuerung der Schnittstelle übernimmt und das bereits oben laufende Programm von der Schnittstelle entkoppelt. Wie kann man nun erreichen, dass diese Entkopplung nicht stattfindet ?
Bin offen für alle Vorschläge diesbezüglich und bedanke mich im Voraus für Vorschläge !
Ich arbeite auf einem Debian Bullseye System mit allen installierten verfügbaren Updates und der Kernelversion 6.08.
ich habe ein medizinisches Messgerät, welches beim Anschluss über USB an meinen Debian - Rechner eine serielle Schnittstelle (hier /dev/ttyACM0) darstellt, über welche mit Gerät kommuniziert werden kann.
Ausgangspunkt ist nun, dass ein Programm gestartet worden ist, welche die Schnittstelle /dev/ttyACM0 öffnet, initialisiert und über diese Schnittstelle mit dem Messgerät lesend und schreibend kommuniziert.
Soweit funktioniert das auch einwandfrei !
Mein Wunsch ist nun, den seriellen Datenstrom welcher von und zu dem Gerät geht (Lese- und Schreibrichtung) mitloggen zu können, ohne das Programm, welches mit dem Messgerät bereits kommuniziert, in der Kommunikation zu stören.
Ich möchte dazu ein C - Programm schreiben, welches gewissermaßen als Datenlogger wirkt und den gesamten Datenverkehr über diese oben genannte Schnittstelle ausgibt, getrennt nach Lese- und Schreibrichtung.
Dieses soll aber ausdrücklich nicht dazu führen, dass der Datenverkehr des oben genannten, bereits gestarteten Programmes in irgendeiner Form gestört wird.
Mein Programm soll lediglich an der Schnittstelle in Lese- und Schreibrichtung mithören, niemals aber in die Kommunikation in irgendeiner Form eingreifen, weder lesend noch schreibend.
Ich habe dazu mir mal das Programm CuteCom mal gedownloaded und festgestellt, dass dieses Programm nach dem Öffnen der oben genannten Schnittstelle das bereits kommunizierende Programm entkoppelt von der Schnittstelle und die Steuerung selber übernimmt.
Ich stelle mir vor dass mit der open() Funktion ein Filedescriptor zum Lesen und Schreiben auf /dev/ttyACM0 im nicht blockierenden Modus erstellt wird. Das Erzeugen dieses Filedescriptors führt aber dazu, dass
mein Logger Programm die Steuerung der Schnittstelle übernimmt und das bereits oben laufende Programm von der Schnittstelle entkoppelt. Wie kann man nun erreichen, dass diese Entkopplung nicht stattfindet ?
Bin offen für alle Vorschläge diesbezüglich und bedanke mich im Voraus für Vorschläge !
Ich arbeite auf einem Debian Bullseye System mit allen installierten verfügbaren Updates und der Kernelversion 6.08.
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Ich habe natürlich beim Öffnen der Schnittstelle diese richtig initialisiert (Baudrate [...]).
Ich habe vergessen, das zu erwähnen. Sorry dafür ...
Ich habe vergessen, das zu erwähnen. Sorry dafür ...
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Wahrscheinlich liege ich mal wieder völlig falsch, aber ...
Bei meinen kürzlichen Versuche mit Netzwerkprogrammierung ist mir klar geworden, was der Spruch "alles ist eine Datei" bedeutet.
Von daher ist mein erster Gedanke, dass hier dup() helfen könnte. Die Beispiele, die ich dazu gefunden habe, sind allerdings alle im Umfeld von fork(). Und wie man die Sende- und Empfangsrichtung auseinander halten kann, ist mir auch nicht klar.
Aber vielleicht bringt mein Gedanke jemand anderes auf die Lösung.
Bei meinen kürzlichen Versuche mit Netzwerkprogrammierung ist mir klar geworden, was der Spruch "alles ist eine Datei" bedeutet.
Von daher ist mein erster Gedanke, dass hier dup() helfen könnte. Die Beispiele, die ich dazu gefunden habe, sind allerdings alle im Umfeld von fork(). Und wie man die Sende- und Empfangsrichtung auseinander halten kann, ist mir auch nicht klar.
Aber vielleicht bringt mein Gedanke jemand anderes auf die Lösung.
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Besten Dank für Deine Idee !
Ich werde das mal versuchen. Melde mich wieder ..
Ich werde das mal versuchen. Melde mich wieder ..
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Von C und der entsprechenden Programmierebene habe ich jetzt eher wenig Ahnung, aber wäre es nicht möglich eine fifo davor zu schalten. Ein selbst zu schreibendes Programm liest,loggt und schreibt in ttyACM0 und in Gegenrichtung genau umgekehrt.
- schorsch_76
- Beiträge: 2594
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Kannst du den Devicenamen in der Software des Gerätes konfigurieren?
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Nein, das kann ich nicht leider konfigurieren.
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Hinter den Nutzen dieser Idee komme ich jetzt irgendwie nicht so richtig ...heisenberg hat geschrieben:18.11.2022 16:10:16Von C und der entsprechenden Programmierebene habe ich jetzt eher wenig Ahnung, aber wäre es nicht möglich eine fifo davor zu schalten. Ein selbst zu schreibendes Programm liest,loggt und schreibt in ttyACM0 und in Gegenrichtung genau umgekehrt.
Das Datenlogger - Programm soll absolut nur mithören beim Datenverkehr in beiden Datenrichtungen.
Es soll niemals auch nur ein Byte, was gesendet oder empfangen wurde, irgendwie manipulieren oder gar aus dem Datenstrom entfernen.
Es soll auch niemals irgendwelche Daten senden, sondern einzig und allein nur den RxD- und TxD Datenstrom mitlesen und dann ausgeben zu Dokumentationszwecken.
Mein Programm soll nur als Datenlogger, niemals aber als Datenquelle dienen.
Nichts weiter.
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Ist das nix für ne Logic Analyzer? Saleae oder andere ....Testos hat geschrieben:25.11.2022 18:10:29Das Datenlogger - Programm soll absolut nur mithören beim Datenverkehr in beiden Datenrichtungen.
Es soll niemals auch nur ein Byte, was gesendet oder empfangen wurde, irgendwie manipulieren oder gar aus dem Datenstrom entfernen.
Gruß KH
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Ne konkrete Lösung kann ich nicht beitragen. Aber wenn es nicht zwangsläufig etwas selbst implementiertes sein muss, kann man socat wohl für diesen Zweck benutzen. Ein Beispielthema auf SO als Anregung dazu: https://stackoverflow.com/questions/388 ... t-sniffing
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Schau dir mal das Projekt an: https://github.com/geoffmeyers/interceptty
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Das macht wohl genau das, was ich mir oben überlegt habe: Es setzt sich zwischen Steuerungsprogramm und Gerät. In diesem Programm könnte man dann das logging durchführen.bluestar hat geschrieben:25.11.2022 21:07:09Schau dir mal das Projekt an: https://github.com/geoffmeyers/interceptty
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Hallo allerseits,
das von Nutzer*in namens bluestar dargestellt Projekt löst genau das Problem, welches ich beschrieben und nach einer Lösung gesucht habe.
Besten Dank nochmal an alle an der Diskussion beteiligten Nutzer*innen !
das von Nutzer*in namens bluestar dargestellt Projekt löst genau das Problem, welches ich beschrieben und nach einer Lösung gesucht habe.
Besten Dank nochmal an alle an der Diskussion beteiligten Nutzer*innen !
Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken
Du kannst auch einfach Wireshark nehmen und den USB-Datenverkehr aufzeichnen. Der zeigt dir dann schon an, welcher Teil der Daten die der seriellen Schnittstellen sind. Das sollte also ausreichen. Habe selbst gestern USB-Datenverkehr damit aufgezeichnet.
Ob man auch ttyACM0 mitschneiden kann, weiß ich nicht. Aber wie gesagt, sollte USB eigentlich genügen.
Ob man auch ttyACM0 mitschneiden kann, weiß ich nicht. Aber wie gesagt, sollte USB eigentlich genügen.