mitglieder
67
Bearbeitungen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
|owner = Riley | |owner = Riley | ||
|image = labelprinter_image.jpg | |image = labelprinter_image.jpg | ||
|version = | |version = 2.0 | ||
}} | |||
=== Vorgeschichte: === | |||
Die heilige elektronische Bucht, ein Ort der Wunder und Geheimnisse. | Die heilige elektronische Bucht, ein Ort der Wunder und Geheimnisse. | ||
An einem einsamen Tag verfiel unser byte erneut in ihrem Bann. | An einem einsamen Tag verfiel unser byte erneut in ihrem Bann. | ||
Zeile 24: | Zeile 24: | ||
Ihn fuer schlechte Witze und auch die Musik missbraucht haben und wie auch du das alles machen kannst. | Ihn fuer schlechte Witze und auch die Musik missbraucht haben und wie auch du das alles machen kannst. | ||
=== Das einfache drucken: === | |||
Der Drucker spricht unter anderem, wie auch andere aus der Honeywell Intermec Reihe, die [https://www.barcodedeus.de/artikeldownload/pdf_en/Inter-C4_Guide.pdf Intermec Fingerprint], diese ist aehnlich der Basic Programmiersprache strukturiert. | |||
Diese kann fuer sehr vieles auch komplexes genutzt werden, es gibt Funktionen um eingaben von dem in den Drucker eingebauten Touchscreen zu lesen, mit Floats und Zeit zu rechnen. | |||
Doch das alles haben wir (noch) nicht angeruehrt, zuerst wollten wir Bilder drucken, denn sobald das geht, so dachten wir, kann man die eingebauten Textlayout, die 1- und 2-d-Datacodegeneration einfach ignorieren und alles in familliaereren Umgebungen auf unseren Laptops erstellen, ganz ohne eine properitaere Dokumentenbeschreibungssprache zu lernen. | |||
Das Protokoll unterstuetzt das hochladen von Bildern mithilfe des `IMAGE LOAD` Befehls den ich zuerst versucht habe zu implementieren, im nachhinein hat das hochladen wohl funktioniert nur die Befehle `IMAGES` und `IMAGE` haben diese nicht als solche erkannt, war mir aber dann auch zu bloed. | |||
Also habe ich mich dem `PRBUF` Befehl und dem gleichnamigen [https://sps-support.honeywell.com/s/article/How-can-the-Fingerprint-PRBUF-command-used-to-print-an-image Encoding] gewidmet, dieses habe ich in einigen Stunden [https://pkg.go.dev/github.com/rileys-trash-can/libfp/prbuf implementieren] koennen nur um danach zu realisieren, dass unser Drucker (laut doku unterscheidet sich der support bei manchen Modellen) durch den selben Befehl auch (unter anderem) PNG und GIF (ohne animation :/ ) Datein haette lesen koennen. Darum ist der Encoder auch noch etwas verbuggt. | |||
Waehrendessen habe ich einen weitere vielversprechenden Befehl entdeckt, die `BEEP` und `SOUND` Befehle, der letztere es ermoeglicht eine Frequenz fuer eine bestimmte Zeit abzuspielen. | |||
Es folgt: Musik (part 1): um diesen auszunutzen habe ich ein script geschrieben dass midi Dateien abspielen kann. | |||
Danach habe ich beim Durch scrollen [[:Datei:Inter-C4 Guide.pdf|einem der Dokumente]] eine sehr komische Zeile gelesen und damit einen noch lustigeren Befehl entdeckt:<syntaxhighlight> | |||
RUN "insmod <device><file>" (insert module) | |||
Danach habe ich | </syntaxhighlight>insmod, ist das nicht Linux kernel bzw. einfach shell command? - Ja!<syntaxhighlight> | ||
RUN "ash" | |||
</syntaxhighlight>liefert eine shell - leider nur als normal-sterblich und nicht root aber immerhin! (insmod als user, richtig gehoert) | |||
Was macht man nun, wenn man auf einem Geraet mit Numpad und LCD auf den eine shell gefunden wird? - Doom? | |||
Eigentlich ja, aber das cross-compilen fuer ein altes ARMv6 Linux ist leider nicht so einfach wie wir gehofft haben :(. | |||
Next up, ist altes Linux, hmm... , Ich hatte grade etwas ueber das Linux Sound-subsystem recherchiert. also.... | |||
* gibt es `/dev/dsp` - ja. | * gibt es `/dev/dsp` - ja. | ||
* `cat rickroll.wav > /dev/dsp` - ja, aber zu langsam | * `cat rickroll.wav > /dev/dsp` - ja, aber zu langsam | ||
* | * re-encoding mit verschiedenen samplerates? (`ffmpeg -ac 1 -ar 32000`) | ||
* tut | * tut | ||
der Drucker kann jetzt echtes Audio! Und der eingebaute Lautsprecher (ein kleines 2W Model) ist gar nicht so schlecht, ABER wir haben ja ne Schublade voll welcher aus Laptops... - TLDR: der Drucker hat jetzt zwei ziemlich grosse Laptop Lautsprecher | der Drucker kann jetzt echtes Audio! Und der eingebaute Lautsprecher (ein kleines 2W Model) ist gar nicht so schlecht, ABER wir haben ja ne Schublade voll welcher aus Laptops... - TLDR: der Drucker hat jetzt zwei ziemlich grosse Laptop Lautsprecher | ||
Resultate: | Resultate: [https://social.schaffenburg.org/@schaffenburg/111691754197457737 social.schaffenburg.org/@schaffenburg/111691754197457737] | ||
Musik: [https://soundcloud.com/meltedmoon/pripyat Pripyat] von [https://soundcloud.com/meltedmoon Melted Moon] | |||
---- | |||
=== Teil 2 - es geht weiter! === | |||
Nach einem weiteren halben Jahr ist es so weit, ich habe mich zusammen gerafft und das gefixt, was kaputt war: alles! | |||
Was geschah:<blockquote>Ich fand raus, dass dass der Drucker meine konformen RLL encodierten daten nicht mag :(, also habe ich mich auf PNGs geeinigt, die sind schoen klein und einfach (spoiler: sind es wohl nicht) schienen | |||
Manche meiner PNGs crashen wohl den ZPL-Interpreter :( | |||
Nach weiterem Probieren findet sich auch Fehler: ein segfault.... EIN SEGFAULT!??! Mama, mein Drucker Segfaultet! - warum? :B:remium Industriesoftware von Honeywell halt. Haben ueberlegt, ob wie den Support mal anrufen sollen, wie ich meinen Drucker zum drucken bekomme :P | |||
Naja nach rumprobieren, fehlerhafte Pixelkonfigurationen zu finden testete ich das Bild erst in Blocke (100x100 px) und dann streifen (100x800 px) zu teilen, maessiger erfolg. Dann, aus desperation die erloesung: ich tauschte mein `png.Encode` durch ein `bmp.Encode` und was sehe ich da? ein drucker der druckt? bitte was?</blockquote>Also, die alten Bitmaps waren wohl Erloesung fuer unseren Drucker! also verfeinerte ich die Software (fputils) weiter, sodass sie nun mit `printchunk` auch in bmp chunks drucken kann. | |||
Und weil ich grade so gut drauf war, baute ich gleich noch support fuer USB-Seriell ein, nun kann mit --ctype zwischen net und serial gewechselt werden (bzw auch mit env var IPL_CTYPE) USB ist zwar langsamer aber jetzt ist die Software vollstaendig :D. | |||
Nun fuer die Normies, die drucken wollen, sich aber nicht zu ImageMagick und meinem esoterischen interface belesen wollen: ich habe fpweb geschrieben, ein webinterface fuer den drucker, etwas einfacher aufzusetzen und super zum einfach auf einen Pi schmeissen, und genau das habe ich dann auch gemacht: in unserem Drucker, auf einem der ungenutzen expansion slots ist jetzt ein rpi0w mit besagter software (das zum cross-compilieren zu bringen war zwar eine Reise fuer sich aber das passt hier nicht rein) | |||
Besagtes [https://github.com/rileys-trash-can/libfp/tree/main/cmd/fpweb webinterface] hat auch eine zugehoerige [https://github.com/rileys-trash-can/libfp/blob/main/cmd/fpweb/index.txt API] um diverse Bilder vom server direkt dithern, skalieren und dann drucken zu lassen. | |||
Links zu Zeugs: | |||
* resultierendes [https://github.com/rileys-trash-can/libfp GitHub repo] | |||
* [[:Datei:Inter-C4 Guide.pdf|Intermec Fingerprint® v8.10]] | |||
* [[:Datei:Sps-ppr-intermec-direct-protocol-860-programmers-reference-manual-60.pdf|Intermec Direct Protocol v8.60]] | |||
* [http://44.128.42.32/ Lokale Adresse unseres Druckers] |