From ae105fca88943d535bc97516587cd4bc4d4df151 Mon Sep 17 00:00:00 2001 From: Jay Date: Wed, 23 Aug 2017 23:31:25 +0800 Subject: [PATCH] add ble printer message parser method --- PrinterDev.js | 37 ++++++++++++++++++++++++++++++------- app.js | 12 +++++++++++- config.json | 3 ++- main-service.js | 3 ++- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/PrinterDev.js b/PrinterDev.js index cd6e025..73a180d 100644 --- a/PrinterDev.js +++ b/PrinterDev.js @@ -44,16 +44,39 @@ class PrinterDevice { }) } - printerString(str) { - if (!this._isOpen || !this._printer) return - let strs = str.split(/\n/) + async printerString(str) { + if (!this._isOpen || !this._printer) return false + this._printer.font('a') .align('ct') .size(1, 1) - for (let i in strs) { - this._printer.text(strs[i], 'big5') + + let cmds = str.split(/__/).filter(t => t) + + for (let i in cmds) { + let tmp = cmds[i] + if (tmp[0] === '&') { + switch (tmp[1]) { + case 'a': + let align = tmp.substring(2) + if (!align) break + this._printer.align(align) + break + case 's': + let size = tmp.substring(2) + let sarr = size.trim().split(',') + if (sarr != 2) break + this._printer.size(sarr[0], sarr[1]) + break + } + } else { + this._printer.text(tmp, 'big5') + } } - this._printer.cut(true, 8) + + this._printer.cut(true, config.printer.cutFeed || 4) + + return true } async close() { @@ -61,7 +84,7 @@ class PrinterDevice { if (this._type == 'serial') { let self = this await new Promise((resolve, reject) => { - self._device.close(() => { + self._printer.close(() => { resolve(1) }) }) diff --git a/app.js b/app.js index abbd305..b2f6dc4 100644 --- a/app.js +++ b/app.js @@ -8,6 +8,16 @@ const MainService = require('./main-service') const printer = require('./PrinterDev') +async function initSystem(){ + try{ + await printer.connect() + }catch(err){ + throw err + } +} + +initSystem() + bleno.on('stateChange', state => { console.log(`bt device state ${state}`) if (state == 'poweredOn') { @@ -31,7 +41,6 @@ bleno.on('advertisingStart', function (error) { }) localEvent.on('print', async (str) => { - console.log(`get printer string >>> \n${str}`) let status = false if (printer.isOpen) { try { @@ -46,4 +55,5 @@ localEvent.on('print', async (str) => { process.on('SIGINT', () => { printer.close() + process.exit(0) }) \ No newline at end of file diff --git a/config.json b/config.json index 9b2bba9..58bd2f0 100644 --- a/config.json +++ b/config.json @@ -9,6 +9,7 @@ } }, "printer": { - "serial": "/dev/ttyUSB0" + "serial": "/dev/ttyUSB0", + "cutFeed": 8 } } diff --git a/main-service.js b/main-service.js index 4dc21c3..5d8d164 100644 --- a/main-service.js +++ b/main-service.js @@ -17,7 +17,8 @@ class MainService extends bleno.PrimaryService { } } -localEvent.on('printResult', async str => { +localEvent.on('printResult', async state => { + let str = state ? 'ok' : 'fail' dataCharacteristic.sendNotidy(str) })