Dec 172016
code below
C Code to test the thermal printer and serial comms
/*===========================================================================
* Serial Port Programming in C (Serial Port Write)
* Non Cannonical mode
* Program writes a character to the serial port at 19200 bps 8N1 format
*---------------------------------------------------------------------------
* original Programmer : Rahul.S
* Date : 21-December-2014
*============================================================================
* altered by : Alex the Engineer
* rtn VFRmedia the Rat's nest
* Ipswich GB
* to work with x86 netbook connected to Sparkfun thermal printer
* via USB-TTL serial converter
* Date : 2016-05-29
* 2016-05-30 : code recompiled to ZX-SL91
* (old Tosh amd64 laptop with busted keyboard repurposed as mini
* server
* ----------------------------------------------------------------------------
* 2016-06-10 : sourcecode formatting cleaned up a bit
*==============================================================================
/*-------------------------------------------------------------*/
/* termios structure - /usr/include/asm-generic/termbits.h */
/* use "man termios" to get more info about termios structure */
/*-------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h> /* File Control Definitions */
#include <string.h> /* strings */
#include <termios.h> /* POSIX Terminal Control Definitions */
#include <unistd.h> /* UNIX Standard Definitions */
#include <errno.h> /* ERROR Number Definitions */
/* global vars - probably shouldn't be hardcoded like this */
/* and some should be #defines to save memory */
/* but better than sticking them into the sourcecode */
int bytes_written = 0;
/* Buffer containing characters to write into port */
char *write_buffer = "\x1b@\n\n\n"
"\x1b\x0ertn\n"
"telecommunicatie\x1b\x14\n"
"printertest ZX-SL91\n"
"\nAchtung! Achtung!\n"
"The Goose is Loose!\n"
"\x1d\x48\x03\n";
char *msg2= "\x1b@"
"rtn :miauw naar de maan!\n\n\n\n\n";
char *barcode128n= "\x1d\x6bI";
char *item1= "2815 doedelzak";
char *item2= "9502 asbak ";
char *item3= "7281 snakeoil ";
char *lin_adv= "\n";
int main(void)
{
int fd; /*File Descriptor*/
printf("\n +----------------------------------+");
printf("\n | Serial Port Write |");
printf("\n +----------------------------------+");
/*------------------------------- Opening the Serial Port ------*/
/* Change /dev/ttyUSB0 to the one corresponding to your system */
fd = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY | O_NDELAY);
/* ttyUSB0 is the FT232 based USB2SERIAL Converter */
/* O_RDWR Read/Write access to serial port */
/* O_NOCTTY - No terminal will control the process */
/* O_NDELAY -Non Blocking Mode,Does not care about- */
/* -the status of DCD line,Open() returns immediatly */
if(fd == -1) { /* Error Checking */
perror("\n Error! in Opening ttyUSB0 ");
return -1;
}
else
perror("\n ttyUSB0 Opened Successfully ");
/* set tty attrs 19200 8N1 */
struct termios SerialPortSettings;
tcgetattr(fd, &SerialPortSettings);
cfsetispeed(&SerialPortSettings,B19200);
cfsetospeed(&SerialPortSettings,B19200);
SerialPortSettings.c_cflag &= ~PARENB;
SerialPortSettings.c_cflag &= ~CSTOPB;
SerialPortSettings.c_cflag &= ~CSIZE;
SerialPortSettings.c_cflag |= CS8;
SerialPortSettings.c_cflag &= ~CRTSCTS;
SerialPortSettings.c_cflag |= CREAD | CLOCAL;
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY);
SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);
SerialPortSettings.c_oflag &= ~OPOST;/*No Output Processing*/
/* Set the attributes to the termios structure*/
if((tcsetattr(fd,TCSANOW,&SerialPortSettings)) != 0) {
perror ("\n ERROR! in set attrs");
return -1;
}
else
printf("\n ttyUSB0 set to 19200-8N1\n");
bytes_written = str_send(fd,write_buffer);
printf("\n Sending these 3 barcode:\n%s\n%s\n%s\n",item1,item2,item3);
bytes_written += bc128_send(fd,item1);
bytes_written += bc128_send(fd,item2);
bytes_written += bc128_send(fd,item3);
bytes_written += str_send(fd,msg2);
printf("\n %d Bytes written to ttyUSB0", bytes_written);
printf("\n +----------------------------------+\n\n");
close(fd);/* Close the Serial port */
}
/* str_send : write string of bytes to the serial port */
/* specified by fd */
/* returns number of bytes written */
int str_send (int fd, char *msg)
{
return write(fd,msg,strlen(msg));
}
/* bc128_send : send code128 barcode from string */
/* create code 128 barcode - Achtung! uses fixed length sequence */
/* with hardcoded length of 14 (0x0e) sent to printer */
/* which must be specified as a string even though it is only 1 byte */
/* or wrong data is sent down the line */
/* and the barcodes do not print */
int bc128_send (int fd, char *barcode)
{
int bcount = 0;
bcount += write(fd,barcode128n,3);
bcount += write(fd,"\x0e",1);
bcount += write(fd,barcode,14);
return bcount;
}