修改服務啟動動作與QRCode產生按鈕
1.啟動時連接印表機 2.判斷是否要開啟藍芽 3.畫面加入QRCode產生按鈕,方便APP設定
This commit is contained in:
1 parent
593c017a08
commit
a7f7653efa
10 files changed
+88
-21
No files matched your search
@@ -85,6 +85,9 @@ class PrinterDevice {
|
||||
|
||||
this._printer.cut(true, this._feed || 4)
|
||||
|
||||
this._lastPrint = str
|
||||
this.addCount()
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -2,4 +2,9 @@
|
||||
process.env.PROJECT_ROOT = __dirname
|
||||
|
||||
require('top-level-await')
|
||||
require('./server')
|
||||
|
||||
try {
|
||||
require('./server')
|
||||
} catch (err) {
|
||||
throw err
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
const bleno = require('bleno')
|
||||
const config = require('./config.json')
|
||||
const localEvent = require('./localEvent')
|
||||
const config = require('../config.json')
|
||||
const localEvent = require('../localEvent')
|
||||
|
||||
var tmp = []
|
||||
var idx = 0
|
||||
@@ -14,7 +14,7 @@ const notifyDesciptor = new bleno.Descriptor({
|
||||
class DataCharacteristic extends bleno.Characteristic {
|
||||
constructor () {
|
||||
super({
|
||||
uuid: config.uuid.service.func.data,
|
||||
uuid: config.ble.uuid.characteristic,
|
||||
properties: ['write', 'writeWithoutResponse', 'notify'],
|
||||
descriptors: [
|
||||
notifyDesciptor
|
||||
|
||||
+1
-2
@@ -1,8 +1,7 @@
|
||||
const config = require('../config.json')
|
||||
const bleno = require('bleno')
|
||||
const adapterName = 'BLE_Printer'
|
||||
const serverUUID = config.uuid.main
|
||||
const localEvent = require('./localEvent') //eslint-disable-line
|
||||
const serverUUID = config.ble.uuid.main
|
||||
const MainService = require('./main-service')
|
||||
|
||||
bleno.on('stateChange', state => {
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
const bleno = require('bleno')
|
||||
const config = require('./config.json')
|
||||
const localEvent = require('./localEvent')
|
||||
const config = require('../config.json')
|
||||
const localEvent = require('../localEvent')
|
||||
|
||||
const GdataCharacteristic = require('./gdata-characteristic')
|
||||
const dataCharacteristic = new GdataCharacteristic()
|
||||
@@ -8,7 +8,7 @@ const dataCharacteristic = new GdataCharacteristic()
|
||||
class MainService extends bleno.PrimaryService {
|
||||
constructor () {
|
||||
super({
|
||||
uuid: config.uuid.service.id,
|
||||
uuid: config.ble.uuid.service,
|
||||
characteristics: [
|
||||
dataCharacteristic
|
||||
]
|
||||
|
||||
@@ -6,4 +6,20 @@ html, body{
|
||||
|
||||
.t-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#qr img {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: "";
|
||||
display: table;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
.clearfix {
|
||||
*zoom: 1; /*For IE 6&7 only*/
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,cLine truncated
|
||||
@@ -20,7 +20,7 @@ let setupMode = false
|
||||
|
||||
try {
|
||||
let chk = new Promise((resolve, reject) => {
|
||||
fs.access(path.resolve('config.json'), (err) => {
|
||||
fs.access(path.resolve(process.env.PROJECT_ROOT, 'config.json'), (err) => {
|
||||
if (err) {
|
||||
setupMode = true
|
||||
resolve(0)
|
||||
@@ -59,6 +59,14 @@ if (setupMode) {
|
||||
} else {
|
||||
console.log(`start normal mode`)
|
||||
router = require('./route/dashboard')
|
||||
|
||||
Printer.serial = config.printer.serial
|
||||
Printer.feed = config.printer.feed
|
||||
await Printer.connect()
|
||||
|
||||
if (config.ble.enable) {
|
||||
require('./ble')
|
||||
}
|
||||
}
|
||||
|
||||
if (router !== null) {
|
||||
@@ -76,8 +84,7 @@ if (router !== null) {
|
||||
|
||||
// listen print event
|
||||
localEvent.on('print', str => {
|
||||
Printer.addCount()
|
||||
Printer.lastPrint = str
|
||||
Printer.printerString(str)
|
||||
})
|
||||
|
||||
ws.on('connection', async (client, req) => {
|
||||
@@ -120,7 +127,7 @@ ws.on('connection', async (client, req) => {
|
||||
return
|
||||
}
|
||||
|
||||
switch(m.type){
|
||||
switch (m.type) {
|
||||
case 'status':
|
||||
client.send(JSON.stringify({ type: 'status', data: json }))
|
||||
break
|
||||
@@ -137,7 +144,7 @@ async function getBTAddr() {
|
||||
})
|
||||
|
||||
address = address.trim()
|
||||
let arr = address.split(':')
|
||||
let arr = address.split(' ')
|
||||
if (arr.length !== 2) return ''
|
||||
return arr[1].trim()
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
<div class="ui container">
|
||||
<div class="ui grid">
|
||||
<div class="column sixteen wide t-right">
|
||||
<div class="ui segment">
|
||||
<button class="ui button mini" type="button" id="gen-qr">GenerateQR</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column eight wide">
|
||||
<div class="segment ui">
|
||||
<h4 class="ui header dividing">藍芽狀態</h4>
|
||||
@@ -30,16 +35,16 @@
|
||||
<div class="ui divided list">
|
||||
<div class="item">
|
||||
<div class="ui horizontal label basic">連線狀態</div>
|
||||
<div class="description t-right" id="prt-con">Disconnect</div>
|
||||
<div class="description t-right" id="prt-con">Disconnected</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="ui horizontal label basic">連接埠</div>
|
||||
<div class="description t-right" id="prt-port">/dev/ttyUSB0</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="ui horizontal label basic">切紙前空行</div>
|
||||
<div class="description t-right" id="prt-feed">8</div>
|
||||
</div>
|
||||
<div class="ui horizontal label basic">切紙前空行</div>
|
||||
<div class="description t-right" id="prt-feed">8</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,7 +70,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui page dimmer" id="qr-dimmer">
|
||||
<div class="content">
|
||||
<div class="center" id="qr"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var setting = {
|
||||
mac: '',
|
||||
service: '',
|
||||
characteristic: ''
|
||||
}
|
||||
|
||||
var ws = new WebSocket('ws://' + location.host)
|
||||
ws.onmessage = msg => {
|
||||
// console.log(msg)
|
||||
@@ -76,16 +93,20 @@
|
||||
return
|
||||
}
|
||||
|
||||
switch(data.type) {
|
||||
switch (data.type) {
|
||||
case 'status':
|
||||
console.log(data)
|
||||
console.log(data)
|
||||
let d = data.data
|
||||
$('#en-ble').text(d.ble.enable ? 'On' : 'Off')
|
||||
$('#ble-mac').text(d.ble.mac)
|
||||
$('#ble-service').text(d.ble.service)
|
||||
$('#ble-character').text(d.ble.characteristic)
|
||||
|
||||
$('#prt-con').text(d.printer.connect ? 'Connect' : 'Disconnect')
|
||||
setting.mac = d.ble.mac
|
||||
setting.service = d.ble.service
|
||||
setting.characteristic = d.ble.characteristic
|
||||
|
||||
$('#prt-con').text(d.printer.connect ? 'Connected' : 'Disconnected')
|
||||
$('#prt-port').text(d.printer.serial)
|
||||
$('#prt-feed').text(d.printer.feed)
|
||||
|
||||
@@ -95,4 +116,18 @@
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
$('#gen-qr').click(function () {
|
||||
let qrdiv = document.querySelector('div#qr')
|
||||
qrdiv.innerHTML = ''
|
||||
let qr = new QRCode(qrdiv, {
|
||||
text: JSON.stringify(setting, null, 2),
|
||||
colorDark: "#000000",
|
||||
colorLight: "#ffffff",
|
||||
correctLevel: QRCode.CorrectLevel.L
|
||||
})
|
||||
// qr.makeCode(JSON.stringify(setting, null, 2))
|
||||
$('#qr-dimmer').dimmer('show')
|
||||
})
|
||||
|
||||
</script>
|
||||
@@ -9,5 +9,6 @@
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<script src="/js/jquery-3.2.1.min.js"></script>
|
||||
<script src="/js/semantic.min.js"></script>
|
||||
<script src="/js/qrcode.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
Reference in new issue
Block a user