Printer POS

Bila Kita membuat program yang menggunakan Printer ESC/POS atau epson POS compatible printer, atau juga sering disebut printer kasir, ada baiknya Kita membuat sebuah fungsi untuk melakukan cek status printer ataupun status kertas yang ada pada printer.

Kegunaannya lumayan banyak dan sangat bermanfaat, seperti pengingat operator agar bersiap-siap karena kertas akan habis, atau sebagai alert system ketika kertas habis.

Mungkin hal ini sepele, tapi bisa menjadi hal yang sangat penting, terutama bila printer tersebut digunakan pada perangkat dimana resi menjadi hal yang sangat penting, seperti peralatan Parkir misalnya.

Pada pembahasan berikut, tidak akan membahas status printer aktif atau tidak, tapi yang akan dijelaskan hanya soal melakukan cek status kertas secara program.

Untuk melakukan cek status kertas, sebenarnya ada beberapa command yang mungkin berbeda-beda untuk tiap-tiap printer, tapi mengacu pada ESC/POS Command reference, terdapat satu fungsi yang sering di-support oleh printer sebagai fungsi untuk cek status kertas, yaitu GS r n.

Dimana GS=0x1D, r=0x72, dan n adalah nilai apa yang akan di-transmit statusnya. Berikut manual untuk GS r:

GS r
[Name]
Transmit status

[Format]
ASCII    GS  r    n
Hex      1D  72   n
Decimal  29  114  n

[Range]
n: different depending on the printers

Pada bahasan berikut Kita akan menggunakan n=0x01. Maka secara program, untuk melakukan cek status printer bisa dilakukan sebagai berikut:

// Kirim command trasmit status
const char * cek_status = "\x1D\x72\x01";
write(print_fd, cek_status, 3);

// Baca status kertas
char status_kertas = 0;
if (read(print_fd, &status_kertas, 1)==1){
	if ((paper_status & 0x60) == 0x60) {
		if ((paper_status & 0x04) == 0x04)
			printf("Tidak ada kertas\n");
		else if ((paper_status & 0x01) == 0x01)
			printf("Kertas hampir habis\n");
		else
			printf("Printer OK\n");
	}
		printf("Printer Error\n");
}
else
	printf("ERROR\n");

Ketika mengirimkan GS r n pada printer, printer akan meresponse dengan 1 byte data berupa status kertas, dimana bit ke 3 merupakan status tidak ada printer, dan bit ke 1 adalah status kertas hampir habis, sedangkan 0x60 memastikan itu response dari printer.

Penutup

Kode di atas hanya untuk ilustrasi, penerapannya pastinya digunakan pada fungsi dengan return nilai status, dimana status tersebut dapat digunakan sesuai kebutuhan.

Tidak semua printer menggunakan perintah GS r n untuk cek status kertas, ada juga yang menggunakan DLE EOT n, ataupun ESC v. Silahkan saja dicoba satu-persatu mana yang tepat untuk printer yang sedang diprogram.

Semoga bermanfaat, dan sampai jumpa pada pembahasan lainnya.