2016-05-09 18 views
0

ich eine Linie in bedrucktes Papier wie _____ und das unten stehende Bild ist meine Schrift Bitmap font bitmapsSo drucken Sie verbundene Zeichen in Verifone VX520?

und ich verwende diesen Code ziehen möchte, dass meine Schrift auf Drucker und Druckzeichen

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <svc.h> 
#include <printer.h> 

int main() { 
    int retVal; 
    int handle; 
    open_block_t parm; 
    int h_font_file; 
    char print[32] = {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}; 

    handle = open("/dev/com4", 0); 

    memset(&parm, 0, sizeof (parm)); 
    parm.rate = Rt_19200; 
    parm.format = Fmt_A8N1 | Fmt_auto | Fmt_RTS; 
    parm.protocol = P_char_mode; 
    parm.parameter = 0; 
    set_opn_blk(handle, &parm); 
    SVC_WAIT(200); 
    p3700_init(handle, 6); 
    SVC_WAIT(100); 

    /****************SETUP FONT******************/ 
    h_font_file = open("8x16.pft", O_RDONLY); //load font 
    retVal = p3700_dnld_font_file(handle, h_font_file, 2); //set font 
    SVC_WAIT(100); 
    retVal = p3700_select_font(handle, 0x03, 2); 


    retVal = write(handle, print, 32); 

    printf("printf: %d\n", retVal); 

    retVal = write(handle, "\n\n\n\n", 4); 

    SVC_WAIT(100); 

    return 0; 
} 

zum Herunterladen und wählen Sie aber Das Ergebnis ist das Bild unten und die Zeichen sind nicht miteinander verbunden. Wie kann ich dieses Problem beheben? result

Antwort

2

Wenn Sie nur eine horizontale Linie drucken möchten, dann ist das Erstellen einer neuen Schrift wahrscheinlich nicht der richtige Weg. Erwägen Sie stattdessen, eine Grafik zu erstellen, die nur eine horizontale Linie ist, und sie like any other graphic zu drucken.

Sie können auch versuchen, das Terminal in den Grafikmodus zu versetzen und es manuell zu zeichnen, obwohl dies mehr Aufwand erfordert. Aus der Dokumentation (Hervorhebung hinzugefügt):

Im Punktgraphikmodus hat der Host fast vollständige Kontrolle über den Mechanismus und kann Punkte in beliebigen Punktpositionen drucken ... Die horizontale und vertikale Druckdichte beträgt acht Punkte pro mm . Im Punktgraphikmodus werden druckbare Zeichen in zwei Gruppen von Zeichen unterteilt - druckbare Bitmuster und Terminatoren. Die große Vielfalt von Leitungsabschlüssen bestimmt, wie empfangene Bitmuster gedruckt werden.

Grafikbilder werden in einem Durchlauf mit einem Punkt nacheinander erstellt. Das Papier wird nach dem Drucken einer Zeile mit einer Punktlinie eingezogen. Die Daten für das Bild werden sequenziell in 6-Bit-Schritten dargestellt. Bit 8 hängt von der Parität ab; Bit 7 ist immer 1; die restlichen Bits sind die Grafikbild-Bits. Für Grafikbild-Bits ist Bit 6 das am weitesten links liegende Bit und Bit 0 ist am weitesten rechts. Der erste gesendete Code stellt die Position des linken Wagens dar, das letzte Zeichen die Position des Wagens ganz rechts und so weiter.

Aufgrund der Mechanismuskonfiguration ist das Bilddatenformat als 384 Punkte pro Punktlinie aufgebaut. Der Host kann maximal 64 Bildcodes pro Punktzeile, und einen Abschlusscode senden.

HINWEIS: Der Bildcode darf nicht kleiner als die Hex-Zahl 40 sein; der Terminator darf nicht weniger als Hex-Zahl 20.

So werden die Druckzeichen definiert P 1 G G G G G G Wo P = "Parity wie Word-Format definiert" sein, 1 = Konstante 1 und G ist eine Grafik Bit

Der Terminator char definiert P 0 1 0 EXIT X X FEED wobei P = "Parity wie Word-Format definiert" zu sein, 0 eine konstante 0, 1 ist eine konstante 1, "EXIT" Sie Grafikmodus (0 zu verlassen erlaubt = nicht beenden, 1 = beenden), X wird ignoriert, und "FEED" ermöglicht Ihnen, einen Zeilenvorschub zu senden.

Ich bin mir nicht sicher, ob dieses Codebeispiel funktioniert, wie sie ist, aber es sollte man zumindest den Einstieg, wenn Sie mit ihm spielen wollen:

char line[65]; /* room for 64 image codes + 1 terminator code 
       (if using all 64, no line feed should be used 
        as it will drop down on its own) */ 
memset(line, 0, sizeof(line)); 

// ENTER GRAPHICS MODE 
line[0] = ESC; // ESC is defined as 0x1B 
line[1] = 'g'; 
p350_print(hPrinter, line); 

for(int i = 0; i<sizeof(line); i++) 
    line[i] = 0x7F; 

line[sizeof(line)-1] = 0x29; 
p350_print(hPrinter, line); 

Schlussbemerkung: Ich war gerade auf der Suche bei einigen Code hatte ich vor ziemlich langer Zeit geschrieben, die Grafik-Modus verwendet und es sieht nicht aus, als würde ich keine Aufmerksamkeit auf Parität, so dass Sie in der Lage sein mit immer 0 sein können.

+0

wie kann Ich erstelle und benutze Makefile in meinem Projekt? Ich habe diese Frage [hier] gestellt (http: // stackoverflow.com/questions/40127882/how-to-add-library-in-makefile-for-verix) können Sie es bitte beantworten. Vielen Dank –