Am Dienstag, den 06.12.2005, 08:34 +0100 schrieb Bernhard Schiffner:
On Tuesday 06 December 2005 01:18, Alexander Tomisch wrote:
Ein per RS232 angeschlossener Thermodrucker soll durch einen Nadeldrucker (Protokolldrucker) abgelöst werden. Die verschiedenen (unwichtigen) Formatierungsfunktionen des Thermodruckers werden durch diverse Steuerzeichen bzw. Zeichen jenseits des ASCII-Standards (Codetabelle unbekannt) ausgegeben. Direkt durchgereicht druckt der Nadeldrucker wild vorsich hin - allerdings nichts, was man lesen könnte.
Da am Ende sowieso nur der Text wichtig ist, soll jetzt alles andere (Steuerzeichen außer LF und alles jenseits ASCII) auf dem Weg von /dev/ttyS0 nach /dev/lp0 rausgeschmissen werden.
...
Mfg, Alexander Tomisch
Wenn der Stream erst mal auf einem Device ist (a la /dev/ttyS0) kommt nur noch der Kernel an Daten ran. Speziell auf der ttyS* laufen Versuche mit cat / tee / dd .. daneben, weil sie zum Teil die Schnittstelle beeinflussen.
Wie sieht die Beeinflussung aus / könnte sie aussehen?
Momentan hab ich noch nicht ganz aufgegeben und experiementiere damit:
cat /dev/ttyS0 | tr -dc "\012 -~"
Sende ich jetzt von einem zweiten Rechner aus einen im raw-Modus des ttys mitgeschnittenen Datensatz (~500B), funktioniert es und alles nicht lesbare fliegt raus - auch wenn ich das zwanzig mal wiederhole. Sende ich eine Datei mit mehreren Datensätzen (größer 4kB), dann bekomm ich nach ~4kB Datensalat. Möglicherweise ein Puffer, der vollläuft? Ist es möglich, diesen zu vergrößern?
Der Weg, erst in ein FiFo zu senden, dieses zu Filtern usw. scheitert meistens daran, das die ausgebenden Programme zur Ausgabe auf ttyS* "voreingestellt" sind.
Inwiefern "voreingestellt"? - wobei ich an einen FiFo noch nicht gedacht habe.
Außerdem werden Steuersignale an die Schnittstelle gesendet, die im FiFo nicht übertragen werden.
Wie gesagt - es geht nur um den Text, der über die Schnittstelle kommt.
Pech ...
Wär dumm, wenn das gar nicht geht ...
(Der beste Weg ist es, den Quellcode des sendenden Programms zu ändern.)
Die Möglichkeit besteht leider nicht.
(Keine Alternative: 3 Schnittstellen: out1 ->in2 ->(modify)->out3)
Wie meinen "Keine Alternative" bzw. was würde es bringen?
Bernhard
(Bei Bedarf mehr Informationen. Ich habe mal einen Vortrag über serielle Schnittstelle und deren Programmierung unter Linux gemacht.)
Sehr gern :)
Alex