var fs = require('fs'), net = require("net"), PNG = require('pngjs').PNG, star = require('./star'), epson = require('./epson'), getInterface = require("../interfaces"); var printerTypes = { EPSON: 'epson', STAR: 'star' }; var iface = null; var config = undefined; var buffer = null; var printerConfig; module.exports = { printerTypes: printerTypes, init: function(initConfig){ if(initConfig.type === printerTypes.STAR){ config = require('../configs/starConfig'); } else { config = require('../configs/epsonConfig'); } iface = getInterface(initConfig.interface); if(!initConfig.width) initConfig.width = 48; if(!initConfig.characterSet) initConfig.characterSet = "SLOVENIA"; if(initConfig.removeSpecialCharacters === undefined) initConfig.removeSpecialCharacters = false; if(initConfig.replaceSpecialCharacters === undefined) initConfig.replaceSpecialCharacters = true; if(initConfig.extraSpecialCharacters) config.specialCharacters = mergeObjects(config.specialCharacters, initConfig.extraSpecialCharacters); printerConfig = initConfig; }, execute: function(cb){ iface.execute(buffer, function (err) { if (!err) { buffer = null; if (typeof cb === "function") { cb(null); } } else { if (typeof cb === "function") { cb(err); } } }); }, cut: function(){ append(config.CTL_VT); append(config.CTL_VT); append(config.PAPER_FULL_CUT); append(config.HW_INIT); }, partialCut: function(){ append(config.CTL_VT); append(config.CTL_VT); append(config.PAPER_PART_CUT); append(config.HW_INIT); }, beep: function(){ if (printerConfig.type === printerTypes.STAR){ console.error("Beep not supported on STAR yet!"); } else { append(config.BEEP); } }, getWidth: function(){ return parseInt(printerConfig.width); }, getText: function(){ return buffer.toString(); }, getBuffer: function(){ return buffer; }, clear: function(){ buffer = null; }, add: function(buffer){ append(buffer); }, print: function(text){ append(text.toString()); }, println: function(text){ append(text.toString()); append("\n"); }, printVerticalTab: function(){ append(config.CTL_VT); }, bold: function(enabled){ if(enabled) append(config.TXT_BOLD_ON); else append(config.TXT_BOLD_OFF); }, underline: function(enabled){ if(enabled) append(config.TXT_UNDERL_ON); else append(config.TXT_UNDERL_OFF); }, underlineThick: function(enabled){ if(enabled) append(config.TXT_UNDERL2_ON); else append(config.TXT_UNDERL_OFF); }, upsideDown: function(enabled){ if(enabled) append(config.UPSIDE_DOWN_ON); else append(config.UPSIDE_DOWN_OFF); }, invert: function(enabled){ if(enabled) append(config.TXT_INVERT_ON); else append(config.TXT_INVERT_OFF); }, openCashDrawer: function(){ if(printerConfig.type === printerTypes.STAR){ append(config.CD_KICK); } else { append(config.CD_KICK_2); append(config.CD_KICK_5); } }, alignCenter: function (){ append(config.TXT_ALIGN_CT); }, alignLeft: function (){ append(config.TXT_ALIGN_LT); }, alignRight: function(){ append(config.TXT_ALIGN_RT); }, setTypeFontA: function(){ append(config.TXT_FONT_A); }, setTypeFontB: function(){ append(config.TXT_FONT_B); }, setTextNormal: function(){ append(config.TXT_NORMAL); }, setTextDoubleHeight: function(){ append(config.TXT_2HEIGHT); }, setTextDoubleWidth: function(){ append(config.TXT_2WIDTH); }, setTextQuadArea: function(){ append(config.TXT_4SQUARE); }, newLine: function(){ append(config.CTL_LF); }, drawLine: function(){ // module.exports.newLine(); for(var i=0; i