Guten Tag,
ich habe eine POS-Gerät zuhause (mit arm prozessor von atmel)und möchte
ein "Treiber" auf das Gerät Laden. Wenn ich das Gerät über usb mit dem
Rechner verbinde, soll es als drucker erkannt werden und mann kann es
als drucker benutzen. Dazu brauch ich einige lösungsvorschläge und
programmier ansätze, wie ich das Problem lösen kann.
hoffe ich konnte mein problem erläutern.
wäre dankbar um jede hilfe.
Die Hardwareseite ist recht einfach -- sorge dafür, daß das Ding über
eine Centronics-Schnittstelle (Parallel) angesteuert werden kann und
verwende ein USB-Paralleldruckerkabel. Oder sieh Dir die
USB-Spezifikation für USB-Drucker an (das ist eine Standardgeräteklasse)
und implementiere das auf dem "ARM-Prozessor von Atmel", wenn der eine
USB-Device-Schnittstelle hat.
Auf der PC-Seite sieht's etwas komplizierter aus:
Du willst keinen Windows-Druckertreiber schreiben.
Glaub' mir. Das willst Du nicht.
Also wirst Du dafür sorgen müssen, daß das Ding mit seiner
"Druckersprache" zu irgendwas kompatibel ist, was von Windows von Hause
aus mit irgendeinem Treiber unterstützt wird - Epson ESC/P dürfte ein
sinnvoller Kandidat sein:
http://de.wikipedia.org/wiki/ESC/P
Und das wiederum muss Dein "ARM-Prozessor von Atmel" entsprechend
umsetzen.
Tja, dann musst Du "nur" zwei Dinge machen:
- die USB-Standardgeräteklasse "Drucker" implementieren
- eine bekannte Druckersprache (wie eben das schon genannte ESC/P)
nachbilden
und rausfinden, welcher der mit Windows mitgelieferten Treiber sich da
am besten eignet.
Windows 8.1 bietet da z.B. "Epson ESC/P 9Pin V4 Class Driver" an, der
könnte möglicherweise passen.
Das ganze kommt natürlich auf die Auflösung und Papierabmessungen des
Druckers an, aber ESC/P ist recht gut und ausführlich beschrieben.
oesm59 schrieb:> Ich bin mir auch nicht sicher, wie ich mit der Implementierung Anfangen> soll. :-(> Programmiergrundkenntnisse habe ich.
Ich fürchte das wird nicht reichen.
Hat schon mal wer Erfahrung mit derartigen Kabeln gesammelt
http://www.amazon.de/Parallel-Centronics-Adapter-Druckerkabel-36pol/dp/B002CP8U3U
(jetzt nicht unbedingt dieses spezielle)
Sobald man auf Centronics ist, ist die Sache wesentlich leichter.
D.h. allerdings nicht unbedingt, dass man mit Grundkentnissen über die
Runden kommt. Aber immerhin ist schon mal ein 'unangenehmer' Teil
erledigt (ja, ich spreche von der USB Anbindung)
Die Anbindung und die Kommunikation sollte bei USB bleiben.
auf dem POS-Gerät funktioniert der Drucker.
ich müsste "nur" noch beim "Verbinden" mit dem Rechner über USB, den
Rechner sagen das das ein "Drucker" ist. Es sollte auch Betriebssystem
unabhängig sein. Habe bisschen in CUPS-Bib. rumgelesen....nicht viel
geholfen. :-(
oesm59 schrieb:> Die Anbindung und die Kommunikation sollte bei USB bleiben.
Sollte
Es ist nicht leicht einen fertigen USB-Stack zu finden, in dem bereits
eine Printer-Class inkludiert ist. Gefunden habe ich bisher nur eine,
die von Freescale. Bei allen anderen müsste man über eine Custom Class
gehen und sich die entsprechenden USB-Deskriptoren (oder wie das heisst)
selber aufbauen. Mit Grundkentnissen wird das nichts.
> ich müsste "nur" noch beim "Verbinden" mit dem Rechner über USB, den> Rechner sagen das das ein "Drucker" ist.
Genau das sagt der Begriff 'USB Klasse' aus. USB ist standardisiert, wie
sich ein Gerät beim Host anzumelden hat. Und je nach Geräteklasse, muss
es da einige Voraussetzungen erfüllen.
Allerdings kenn ich mich mit USB selbst auch nicht wirklich aus. USB ist
für Hersteller von Geräten super (und je nachdem wen man fragt auch für
Anwender). Für Bastler ist es ein Albtraum, wenn man nicht auf fertige
IC zurückgreifen kann und/oder nicht mit einem Standard-HID Device über
die Runden kommt. SO wie ich das sehe, gibt es aber keine fertigen IC,
die eine USB Printer Class implementieren.
oesm59 schrieb:> ich müsste "nur" noch beim "Verbinden" mit dem Rechner über USB, den> Rechner sagen das das ein "Drucker" ist.
Deswegen gibt es die USB-Standardgeräteklasse "USB-Drucker". Die musst
Du mit Deinem USB-Gerät implementieren.
Dann weiß der Rechner zwar noch nicht, welcher Drucker da ist, aber
das ist der nächste Schritt.
Ist denn der Drucker --Du nennst das Ding "POS-Drucker"-- mit
irgendeiner Druckersprache ansteuerbar, oder steuerst Du die
Schrittmotoren & Druckkopf in Deinem bisherigen Gerät selbst an?
Was genau für ein Drucker ist das denn? Gibts von dem Ding 'ne
Typenbezeichnung und ein Datenblatt?
oesm59 schrieb:> Danke für die schnelle Antwort.> Ja das Gerät hat einen Micro-Usb Schnittstelle.
Und was passiert, wenn man da den PC anschliesst? Wird irgendwas erkannt
- welche VID/PID? Wofür ist der Anschluß gedacht - Konfiguration des
Kassencomputers?
physiker schrieb:> Und was passiert, wenn man da den PC anschliesst? Wird irgendwas erkannt> - welche VID/PID? Wofür ist der Anschluß gedacht - Konfiguration des> Kassencomputers?
es wird als laufwerk erkannt. kann man .bat datei hochladen und flashen.
kassensystem.
oesm59 schrieb:> kann man mit ESC/P ansteuern.
Na, wenn man das kann, ist die Katze schon recht weit gelaufen.
Also musst Du nur noch das USB-Druckerprotokoll auf Deinem Ding
implementieren (wie bereits mehrfach geschrieben, ist das eine
USB-Standardgeräteklasse), und das Ding an einen PC anschließen.
Im Gerätemanager wird zunächst ein Standardruckerport auftauchen. Jetzt
kannst Du mit der Druckerverwaltung einen neuen Drucker einrichten, und
gibst dort als Port den im Gerätemanager vorgefundenen ein.
Als Druckertreiber dürfte so etwas wie "Epson FX80" o.ä. verwendbar sein
-- bzw. der von mir schon erwähnte "Generic 9pin ESC/P"-Treiber.
Wenn das dann funktioniert, kannst Du den nächsten Schritt begehen - das
Anpassen der USB-Deskriptoren, damit das Ding nicht ein
"Standarddruckerport" ist, sondern einen Namen bekommt, über den Windows
sich den passenden Druckertreiber selbst 'raussuchen kann.
Aber das ist ohne den ersten Schritt sinnlos.
Rufus Τ. Firefly schrieb:> oesm59 schrieb:>> kann man mit ESC/P ansteuern.>> Na, wenn man das kann, ist die Katze schon recht weit gelaufen.>> Also musst Du nur noch das USB-Druckerprotokoll auf Deinem Ding> implementieren (wie bereits mehrfach geschrieben, ist das eine> USB-Standardgeräteklasse), und das Ding an einen PC anschließen.
'nur noch'
So wie du das schreibst liest sich das als wäre das ein Spaziergang :-)
Karl Heinz schrieb:> So wie du das schreibst liest sich das als wäre das ein Spaziergang
Nun, ich hätte "nur noch" in Anführungszeichen setzen können.
Andererseits nehme ich an, daß hier ein USB-Stack vorhanden ist, und
Beispielimplementierungen für USB-Standardgeräteklassen sind im Umfeld
um USB-Stacks auch des öfteren zu finden, so daß das dem findigen
Programmierer keine unüberwindbaren Hemmnisse in den Weg legt.
Ein alternativer Lösungsansatz:
Parallelport mit µC nachbilden, käufliches USB-Paralleldruckerkabel dran
anschließen.
Dann aber würde die USB-Schnittstelle des µC unbenutzt bleiben ...
möchte euch nochmal nerven... ;-)
ich habe jetzt den Treiber für mein "ThermoDrucker" gefunden.
ppd datei ist vorhanden.
kann ich mit den informationen, langsam aber sicher mein Geräteklasse
"Drucker" implementieren?