ThermalPrinter

Files at this revision

API Documentation at this revision

Comitter:
williequesada
Date:
Tue Jun 04 16:03:54 2019 +0000
Commit message:
compartir a Pablo

Changed in this revision

ThermalPrinter.cpp Show annotated file Show diff for this revision Revisions of this file
ThermalPrinter.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ThermalPrinter.cpp	Tue Jun 04 16:03:54 2019 +0000
@@ -0,0 +1,553 @@
+#include "ThermalPrinter.h"
+#include "mbed.h"
+#include "stdio.h"
+
+const char HORIZONTAL_TAB=9;
+const char NEXT_POSITION=10;
+const char ESC=27;
+const char SPECIAL_CHARACTER=82;
+const char SPANISH=11;
+const char U_TILDE=126;
+const char A_TILDE=64;
+const char INICIAR=64;
+const char TAMANO=33;
+const char LETRA_12X24_DOBLE=49;
+const char LETRA_16X16_DOBLE=34;
+const char XON=17;//0x11
+const char XOFF=19;//0x13
+const char POWER_DOWN=18;
+const char GS=29;
+const char CUTTING=86;
+const char PARTIAL=49;
+const char FULL=48;
+
+char ThermalPrinter_Buffer[255];
+int ThermalPrinter_Counter=0;
+int Tiquete=0;
+
+PRINTER::PRINTER(PinName TX, PinName RX,PinName PAPER, PinName SELECT,PinName RESET,PinName POWER) : ThermalPrinter(TX,RX),_PAPER(PAPER),_SELECT(SELECT),_RESET(RESET),_POWER(POWER)
+{
+    _PAPER=1;          // AFT
+    _SELECT=1;         // SLCTIN
+    _RESET=1;          // INPRM
+    _POWER=0;          // RELE
+    ThermalPrinter.attach(this,&PRINTER::ThermalPrinterInterruption);
+}
+
+
+void PRINTER::ThermalPrinterInterruption()
+{
+    if(ThermalPrinter.readable()) {
+        ThermalPrinter_Buffer[ThermalPrinter_Counter]=ThermalPrinter.getc();
+        ThermalPrinter_Counter++;
+    }
+}
+
+uint8_t PRINTER::Reset()
+{
+    ThermalPrinter_Counter=0;
+    _RESET = 1;
+    wait_ms(500);
+    _RESET = 0;
+    int Error=2;
+    wait_ms(1400);
+    int Counter = ThermalPrinter_Counter;
+    
+    while(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            break;
+        }
+    }
+    return Error;
+}
+
+uint8_t PRINTER::Output(char Date[],char Hour_Start[],char Hour_Finish[],char Place[],char Time[],char Ticket[],char Money[])
+{
+    ThermalPrinter_Counter=0;
+    int Counter;
+    bool Error=1;
+    
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(INICIAR);
+        wait_ms(15);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(TAMANO);
+        ThermalPrinter.putc(LETRA_12X24_DOBLE);
+        ThermalPrinter.printf("  Municipalidad");
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+    
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("   de San Jose");
+        wait_ms(400);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+    
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.putc(NEXT_POSITION);        
+        ThermalPrinter.printf("Setex Costa Rica");      
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("- - - - - - - -");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(TAMANO);
+        ThermalPrinter.putc(LETRA_16X16_DOBLE);
+        ThermalPrinter.printf("Fin de estacionamiento:");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(100);
+        ThermalPrinter.putc(HORIZONTAL_TAB);
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(TAMANO);
+        ThermalPrinter.putc(LETRA_12X24_DOBLE);
+        ThermalPrinter.printf("   %s",Hour_Finish);
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(TAMANO);
+        ThermalPrinter.putc(LETRA_16X16_DOBLE);
+
+        ThermalPrinter.printf("N");
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(SPECIAL_CHARACTER);
+        ThermalPrinter.putc(SPANISH);
+        ThermalPrinter.putc(U_TILDE);
+        ThermalPrinter.printf("mero ticket:");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(50);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("  ");
+        ThermalPrinter.printf("%s",Ticket);
+        ThermalPrinter.putc(NEXT_POSITION);
+        Tiquete=Tiquete+1;
+        wait_ms(150);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("Espacio:");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(50);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("  %s",Place);
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(150);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("Importe:");
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("  %s",Money);
+        ThermalPrinter.printf(" CRC");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("Tiempo pagado:");
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("  %s",Time);
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("Hora y fecha de pago:");
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("  %s",Hour_Start);
+        ThermalPrinter.putc(HORIZONTAL_TAB);
+        ThermalPrinter.printf("%s",Date);
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(ESC);
+        ThermalPrinter.putc(TAMANO);
+        ThermalPrinter.putc(LETRA_12X24_DOBLE);
+        ThermalPrinter.printf("- - - - - - - -");
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("Pague su parqueo");
+        ThermalPrinter.putc(NEXT_POSITION);
+        ThermalPrinter.printf("   con el APP");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(250);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.printf("    epark CR");
+        ThermalPrinter.putc(NEXT_POSITION);
+        wait_ms(200);
+    }
+    
+    Counter = ThermalPrinter_Counter;
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            return Error;
+        }
+    }
+    
+    
+    return Error;
+}
+
+uint8_t PRINTER::Cutter(bool Type)
+{
+    ThermalPrinter_Counter=0;
+        
+    if(Type==1) {
+        if(ThermalPrinter.writeable()) {
+            ThermalPrinter.putc(GS);
+            ThermalPrinter.putc(CUTTING);
+            ThermalPrinter.putc(FULL);
+            wait_ms(2000);
+        }
+    }
+    if(Type==0) {
+        if(ThermalPrinter.writeable()) {
+            ThermalPrinter.putc(GS);
+            ThermalPrinter.putc(CUTTING);
+            ThermalPrinter.putc(PARTIAL);
+            wait_ms(2000);
+        }
+    }
+    
+    int Counter = ThermalPrinter_Counter;
+    bool Error=1;
+    
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+        }
+    }
+    return Error;
+};
+
+uint8_t PRINTER::Power(bool Turn)
+{ 
+    ThermalPrinter_Counter=0;
+    if (Turn==1) {
+        _PAPER=0;          // AFT
+        _SELECT=0;         // SLCTIN
+        _RESET=0; 
+        _POWER=1;
+    } else {
+        _PAPER=1;          // AFT
+        _SELECT=1;         // SLCTIN
+        _RESET=1; 
+        _POWER=0;
+    }
+    wait_ms(1500);
+    
+    bool Error=1;
+    int Counter = ThermalPrinter_Counter;
+    
+    while(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+            break;
+        }
+    }
+    return Error;
+}
+
+
+void PRINTER::PowerMax(bool Turn)
+{ 
+    if (Turn==1) {
+        _PAPER=0;          // AFT
+        _SELECT=0;         // SLCTIN
+        _RESET=0; 
+    } else {
+        _PAPER=1;          // AFT
+        _SELECT=1;         // SLCTIN
+        _RESET=1; 
+    }
+}
+
+
+uint8_t PRINTER::Paper(uint32_t Duration)
+{
+    ThermalPrinter_Counter=0;
+    _PAPER=1;
+    wait_ms(Duration);
+    _PAPER=0;
+    wait_ms(500);
+    
+    bool Error=1;
+    int Counter = ThermalPrinter_Counter;
+    
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=1;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=0;
+        }
+    }
+    return Error;
+};
+
+uint8_t PRINTER::End()
+{
+    ThermalPrinter_Counter=0;
+    if(ThermalPrinter.writeable()) {
+        ThermalPrinter.putc(POWER_DOWN);
+    }
+    
+    wait(1);
+    bool Error=0;
+    int Counter = ThermalPrinter_Counter;
+    
+    if(Counter>0){
+        Counter--;
+        if(ThermalPrinter_Buffer[Counter]==XON) {
+            Error=0;
+        }
+        if(ThermalPrinter_Buffer[Counter]==XOFF) {
+            Error=1;
+        }
+    }
+    return Error;
+};
+
+uint8_t PRINTER::Ticket(bool Instruction)
+{
+    if (Instruction==0) {
+        Tiquete=0;
+        return 0;
+    } else {
+        return Tiquete;
+    }
+};
+
+char PRINTER::Entrada()
+{    
+    if(ThermalPrinter_Counter>0){
+        ThermalPrinter_Counter--;
+        return ThermalPrinter_Buffer[ThermalPrinter_Counter];    
+    } else {
+        return 0x00;   
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ThermalPrinter.h	Tue Jun 04 16:03:54 2019 +0000
@@ -0,0 +1,29 @@
+#ifndef MBED_THERMAL_H
+#define MBED_THERMAL_H
+ 
+#include "mbed.h"
+ 
+class PRINTER {
+public:
+    PRINTER(PinName TX, PinName RX,PinName PAPER, PinName SELECT,PinName RESET,PinName POWER);
+
+    void    ThermalPrinterInterruption();
+    void    PowerMax(bool Turn);
+    uint8_t Power(bool Turn); 
+    uint8_t Reset();
+    uint8_t Output(char Date[],char Hour_Start[],char Hour_Finish[],char Place[],char Time[],char Ticket[],char Money[]);
+    uint8_t Cutter(bool Type);
+    uint8_t Paper(uint32_t Duration); 
+    uint8_t End();  
+    char    Entrada();
+    uint8_t Ticket(bool Instruction);  
+  
+private:  
+    RawSerial    ThermalPrinter;
+    DigitalOut   _PAPER;
+    DigitalOut   _SELECT;
+    DigitalOut   _RESET;
+    DigitalOut   _POWER;
+};
+ 
+#endif
\ No newline at end of file