Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 12.11.2022 16:19:25

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.

Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 12.11.2022 16:40:25

Ich habe natürlich beim Öffnen der Schnittstelle diese richtig initialisiert (Baudrate [...]).
Ich habe vergessen, das zu erwähnen. Sorry dafür ...

dakuan
Beiträge: 107
Registriert: 28.04.2011 22:09:39

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von dakuan » 14.11.2022 19:11:03

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.

Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 18.11.2022 14:57:34

Besten Dank für Deine Idee !

Ich werde das mal versuchen. Melde mich wieder ..

Benutzeravatar
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

Beitrag von heisenberg » 18.11.2022 16:10:16

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.

Benutzeravatar
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

Beitrag von schorsch_76 » 19.11.2022 09:23:47

Kannst du den Devicenamen in der Software des Gerätes konfigurieren?

Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 25.11.2022 17:54:39

Nein, das kann ich nicht leider konfigurieren.

Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 25.11.2022 18:10:29

heisenberg hat geschrieben: ↑ zum Beitrag ↑
18.11.2022 16:10:16
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.
Hinter den Nutzen dieser Idee komme ich jetzt irgendwie nicht so richtig ...

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.

Benutzeravatar
kalle123
Beiträge: 3026
Registriert: 28.03.2015 12:27:47
Wohnort: Mönchengladbach

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von kalle123 » 25.11.2022 20:28:34

Testos hat geschrieben: ↑ zum Beitrag ↑
25.11.2022 18:10:29
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.
Ist das nix für ne Logic Analyzer? Saleae oder andere ....

Gruß KH

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von JTH » 25.11.2022 20:36:29

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.

Benutzeravatar
bluestar
Beiträge: 2418
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von bluestar » 25.11.2022 21:07:09

Schau dir mal das Projekt an: https://github.com/geoffmeyers/interceptty

Benutzeravatar
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

Beitrag von heisenberg » 25.11.2022 23:21:21

bluestar hat geschrieben: ↑ zum Beitrag ↑
25.11.2022 21:07:09
Schau dir mal das Projekt an: https://github.com/geoffmeyers/interceptty
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.

Testos
Beiträge: 25
Registriert: 27.12.2021 19:48:03

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von Testos » 16.12.2022 17:05:15

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 ! :THX:

DaCoda
Beiträge: 172
Registriert: 09.07.2019 21:58:10

Re: Öffnen einer seriellen Schnittstelle nur zu Logging - Zwecken

Beitrag von DaCoda » 21.12.2022 21:46:33

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.

Antworten