UNPKG

weblab-instrument

Version:
375 lines (365 loc) 12.4 kB
const propMethod = require('../dev/propMethod.js'); const debug = require('debug'); const log = debug('dsosys:log'); let header = ''; let tmpbuffer = Buffer.allocUnsafe(8192); let tmplength = 0; function SysCmd() { this.sysLock = 'OFF'; this.dispData = Buffer.allocUnsafe(2000000); this.AutosetMode = 'FITSCREEN'; this.dataCount = 0; this.headerlen = 0; this.dataValidLen = 0; this.usbdelay = 'OFF'; this.recCount = 0; this.staWeight = '2'; this.staMode = 'OFF'; this.autosetenable = 'ON'; this.measureenable = 'ON'; this.cursorenable = 'ON'; this.lrn = []; this.image = Buffer.allocUnsafe(2000000); } SysCmd.prototype.cmdHandler = { IDN: { getHandler(sysObj, res) { log(res); return true; }, }, LRN: { getHandler(sysObj, res) { log(res); sysObj.lrn = res; return true; }, }, RST: { setHelper(sysObj) { log('sent RST command'); log(sysObj.cmdHandler); return true; }, }, SysLock: { setHelper(sysObj, arg) { log('sent SysLock command'); log(sysObj.cmdHandler); sysObj.sysLock = arg; return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, -1); sysObj.sysLock = res.toString(); return true; }, }, USBDelay: { setHelper(sysObj, arg) { log(sysObj.cmdHandler); sysObj.usbdelay = arg; return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, 1); sysObj.usbdelay = res.toString(); return true; }, }, AutosetEnable: { setHelper(sysObj, arg) { log(sysObj.cmdHandler); sysObj.autosetenable = arg; return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, -1); sysObj.autosetenable = res.toString(); return true; }, }, MeasureEnable: { setHelper(sysObj, arg) { log(sysObj.cmdHandler); sysObj.measureenable = arg; return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, -1); sysObj.measureenable = res.toString(); return true; }, }, CursorEnable: { setHelper(sysObj, arg) { log(sysObj.cmdHandler); sysObj.cursorenable = arg; return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, -1); sysObj.cursorenable = res.toString(); return true; }, }, SysErr: { // getHandler(dsoObj, res) { log(res.toString()); if (res.toString() === '+0, \'No error.\'') { dsoObj.dev.state.errCode.message = ''; } else { log(`command error: ${res.toString()}`); dsoObj.dev.state.errCode.message = res.toString(); } return true; }, }, AutosetMode: { setHelper(sysObj) { log('sent SysLock command'); log(sysObj.cmdHandler); return true; }, getHandler(sysObj, res) { log(res); res = res.slice(0, -1); sysObj.AutosetMode = res.toString(); return true; }, }, QRCode: { setHelper(sysObj, arg) { log('QRCode'); log(arg); return true; }, }, QRCodeTitle: { setHelper(sysObj, arg) { log('QRCodeTitle'); log(arg); return true; }, }, DispOut: { getHandler(sysObj, data) { if (sysObj.dataCount === 0) { data.copy(tmpbuffer, tmplength); tmplength += data.length; if (data.length > 20) { header += data.slice(0, 20).toString(); } else { header += data.toString(); } // console.log(header); // log('data length = '+data.length); // log('data[0] = '+data[0]); if (header[0] === '#') { const num = Number(header[1]); const numstr = header.slice(2, Number(header[1]) + 2); if (isNaN(header[1])) { return false; } if (header.length < num + 2) { return false; } sysObj.headerlen = num + 2; log(`numstr=${numstr}`); // block data length + NL sysObj.dataCount = parseInt(numstr, 10) + 1; // delete sysCmd.dispData; log(`sysObj.dataCount = ${sysObj.dataCount}`); tmpbuffer.copy(sysObj.dispData, sysObj.recCount, 0, tmplength); sysObj.recCount += tmplength; tmplength = 0; if (data.length >= (Number(header[1]) + 2)) { header = ''; log('======='); if (sysObj.recCount >= (sysObj.dataCount + sysObj.headerlen)) { // if (sysObj.recCount > sysObj.dataCount) { // sysObj.dispData = sysObj.dispData.slice(0, -1); // } sysObj.dataValidLen = sysObj.recCount; sysObj.recCount = 0; sysObj.dataCount = 0; log(`last 1 byte = ${data[data.length - 1]}`); return true; } } } else { tmplength = 0; header = ''; } } else { log(`sysObj.recCount=${sysObj.recCount},data.length= ${data.length},headerlen= ${sysObj.headerlen}`); data.copy(sysObj.dispData, sysObj.recCount, 0, data.length); sysObj.recCount += data.length; // log('sysObj.recCount='+sysObj.recCount+',data.length='+data.length); if (sysObj.recCount >= (sysObj.dataCount + sysObj.headerlen)) { if ((data[data.length - 1] === 0x0a) || (data === 0x0a)) { log(`sysObj.dataCount length=${sysObj.dataCount}`); log(`sysObj.headerlen length=${sysObj.headerlen}`); // sysObj.recCount += data.length; sysObj.dataValidLen = sysObj.recCount; sysObj.recCount = 0; sysObj.dataCount = 0; header = ''; return true; } log('data more then expect'); } } return false; }, }, PngOutput: { getHandler(sysObj, data) { if (sysObj.dataCount === 0) { data.copy(tmpbuffer, tmplength); tmplength += data.length; if (data.length > 10) { header += data.slice(0, 10).toString(); } else { header += data.toString(); } log(header); // log('data length = '+data.length); // log('data[0] = '+data[0]); if (header[0] === '#') { const num = Number(header[1]); const numstr = header.slice(2, Number(header[1]) + 2); if (header.length < num + 2) { return false; } log(`numstr=${numstr}`); sysObj.dataCount = parseInt(numstr, 10); // delete sysCmd.image; sysObj.image = new Buffer(sysObj.dataCount + 1); log(`sysObj.dataCount = ${sysObj.dataCount}`); // log(sysObj); sysObj.image = sysObj.image.slice(0, sysObj.dataCount + 1); if (data.length >= (Number(header[1]) + 2)) { if (tmplength != 0) { log(`before slice data length = ${tmpbuffer.length}`); tmpbuffer = tmpbuffer.slice((Number(header[1]) + 2), tmplength); log(`sliced data length = ${tmpbuffer.length}`); tmpbuffer.copy(sysObj.image, sysObj.recCount); sysObj.recCount += tmpbuffer.length; tmpbuffer = new Buffer(8192); tmplength = 0; } else { log(`before slice data length = ${data.length}`); data = data.slice((Number(header[1]) + 2), data.length); log(`slice data length = ${data.length}`); data.copy(sysObj.image, sysObj.recCount); sysObj.recCount += data.length; } header = ''; log('======='); if (sysObj.recCount > sysObj.dataCount) { // if (sysObj.recCount > sysObj.dataCount) { // sysObj.image = sysObj.image.slice(0, -1); // } sysObj.recCount = 0; sysObj.dataCount = 0; log(`last 1 byte=${data[data.length - 1]}`); return true; } } } } else { data.copy(sysObj.image, sysObj.recCount); sysObj.recCount += data.length; // log('sysObj.recCount='+sysObj.recCount+',data.length='+data.length); if (sysObj.recCount > sysObj.dataCount) { // if(sysObj.recCount>sysObj.dataCount){ // sysObj.image=sysObj.image.slice(0,-1); // } // log('sysObj.recCount='+sysObj.recCount); log(`sysObj.image length=${sysObj.image.length}`); sysObj.recCount = 0; sysObj.dataCount = 0; header = ''; return true; } } return false; }, }, CLS: { setHelper() { return true; }, }, RUN: { setHelper() { return true; }, }, STOP: { setHelper() { return true; }, }, SINGLE: { setHelper() { log('SINGLE ......'); return true; }, }, FORCE: { setHelper() { return true; }, }, AUTOSET: { setHelper() { return true; }, }, StatisticReset: { setHelper() { return true; }, }, StatisticStaWeight: { getHandler(sysObj, res) { res = res.slice(0, -1); sysObj.staWeight = res.toString(); return true; }, setHelper(sysObj, arg) { sysObj.staWeight = arg; return true; }, }, StatisticMode: { getHandler(sysObj, res) { res = res.slice(0, -1); sysObj.staMode = res.toString(); return true; }, setHelper(sysObj, arg) { sysObj.staMode = arg; return true; }, }, }; SysCmd.prototype.setToDefault = function setToDefault(sysObj) { sysObj.recCount = 0; sysObj.dataCount = 0; // tmpbuffer = new Buffer(8192); tmplength = 0; header = ''; }; exports.initSysObj = function initSysObj(id) { const sysCmd = new SysCmd(); sysCmd.prop = propMethod.CreatMethod.call(this, id); return sysCmd; };