From 26116303cc9a17249fcc3cbe1c971e6c72aa1a9e Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Wed, 30 Oct 2019 22:32:52 -0400 Subject: [PATCH] Ready to try re-write in prototype --- index.js | 85 +++++++---------- lib/delay/index.js | 1 + lib/delay/index.js.map | 2 +- lib/intval/index.js | 174 ++++++++++++++++++---------------- lib/intval/index.js.map | 2 +- lib/sequence/index.js | 131 +++++++++----------------- lib/sequence/index.js.map | 2 +- src/delay/index.ts | 2 +- src/intval/index.ts | 191 ++++++++++++++++++++++---------------- src/sequence/index.ts | 170 +++++++++++++-------------------- 10 files changed, 355 insertions(+), 405 deletions(-) diff --git a/index.js b/index.js index 6d5b810..9b43b26 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,8 @@ const { exec } = require('child_process') const BLE = require('./lib/ble') const intval = require('./lib/intval') -const sequence = require('./lib/sequence') +const Sequence = require('./lib/sequence') +const sequence = new Sequence(intval) const PACKAGE = require('./package.json') const PORT = process.env.PORT || 6699 @@ -183,7 +184,7 @@ function rCounter (req, res, next) { return next() } -function rFrame (req, res, next) { +async function rFrame (req, res, next) { let dir = true let exposure = 0 if (intval._state.frame.dir !== true) { @@ -235,10 +236,14 @@ function rFrame (req, res, next) { } } log.info('/frame', { method : req.method, dir : dir, exposure : exposure }) - intval.frame(dir, exposure, (len) => { - res.send({ dir : dir, len : len}) + + if (exposure < 30000) { + await intval.frame(dir, exposure) + } else { + intval.frame(dir, exposure) + res.send({ dir : dir, len : exposure, delaying : true }) return next() - }) + } } function rStatus (req, res, next) { @@ -247,7 +252,7 @@ function rStatus (req, res, next) { return next() } -function rSequence (req, res, next) { +async function rSequence (req, res, next) { let dir = true let exposure = 0 let delay = 0 @@ -304,33 +309,17 @@ function rSequence (req, res, next) { delay = req.body.delay } } - if (intval._state.sequence && sequence._state.active) { - sequence.setStop() + if (intval._state.sequence && sequence.active) { intval._state.sequence = false + sequence.stop() res.send({ stopped : true }) - return next() - } else { - console.time('sequence time') - intval._state.sequence = true - let seq_id = sequence.start({ - loop : [ (next) => { - intval.frame(dir, exposure, (len) => { - next() - }) - }, (next) => { - setTimeout(() => { - next() - }, delay) - }] - }, (seq) => { - console.timeEnd('sequence time') - }) - if (seq_id === false) { - res.send({ started : false }) - } else { - res.send({ started : true , id : seq_id }) - } + return next() + + } else { + intval._state.sequence = true + sequence.start() + res.send({ started : true }) return next() } @@ -374,9 +363,13 @@ function rRestart (req, res, next) { //Ble functions -function bFrame (obj, cb) { +async function bFrame (obj, cb) { let dir = true let exposure = 0 + + if (sequence.active) { + return cb() + } if (intval._state.frame.dir !== true) { dir = false @@ -401,11 +394,10 @@ function bFrame (obj, cb) { log.info('frame', { method : 'ble', dir : dir, exposure : exposure }) if (exposure < 5000) { - intval.frame(dir, exposure, (len) => { - return cb() - }) + await intval.frame(dir, exposure) + return cb() } else { - intval.frame(dir, exposure, (len) => {}) + intval.frame(dir, exposure) return cb() } @@ -502,29 +494,14 @@ function bSequence (obj, cb) { } if (intval._state.sequence && sequence._state.active) { //should not occur with single client - sequence.setStop() intval._state.sequence = false + sequence.stop() log.info('sequence stop', { method : 'ble' }) return cb() } else { - console.time('sequence time') intval._state.sequence = true - let seq_id = sequence.start({ - loop : [ (next) => { - intval.frame(dir, exposure, (len) => { - next() - }) - }, (next) => { - setTimeout(() => { - next() - }, delay) - }] - }, (seq) => { - console.timeEnd('sequence time') - }) - if (seq_id !== false) { - log.info('sequence start', { method : 'ble', id : seq_id }) - } + sequence.start() + log.info('sequence start', { method : 'ble' }) return cb() } } @@ -558,6 +535,7 @@ function bUpdate (obj, cb) { }, 20) }) } + function bRestart (obj, cb) { log.info('restart', { method : 'ble' }) cb() @@ -607,7 +585,6 @@ function index (req, res, next) { } function init () { - intval.init() intval.sequence = seq createServer() createBLE() diff --git a/lib/delay/index.js b/lib/delay/index.js index 8c9a098..c82e5f0 100644 --- a/lib/delay/index.js +++ b/lib/delay/index.js @@ -12,6 +12,7 @@ function delay(ms) { return setTimeout(resolve, ms); }); } +exports.delay = delay; module.exports.delay = delay; exports.default = delay; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/delay/index.js.map b/lib/delay/index.js.map index 4b48c62..489444c 100644 --- a/lib/delay/index.js.map +++ b/lib/delay/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delay/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;IAMI;AAEJ,SAAS,KAAK,CAAE,EAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAa,EAAE,EAAE;QACpC,OAAO,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAE7B,kBAAe,KAAK,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delay/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;IAMI;AAEJ,SAAgB,KAAK,CAAE,EAAW;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAa,EAAE,EAAE;QACpC,OAAO,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC;AAJD,sBAIC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAE7B,kBAAe,KAAK,CAAC"} \ No newline at end of file diff --git a/lib/intval/index.js b/lib/intval/index.js index 002c2d0..a030ffa 100644 --- a/lib/intval/index.js +++ b/lib/intval/index.js @@ -11,7 +11,7 @@ const db = require('../db'); const log = require('../log')('intval'); const storage = __importStar(require("node-persist")); const fs_extra_1 = require("fs-extra"); -require("../delay"); +const delay_1 = require("../delay"); let Gpio; try { Gpio = require('onoff').Gpio; @@ -52,9 +52,15 @@ class Intval { }; this._release = { min: 20, - seq: 1000 + seq: 1000, + time: 0, + active: false + }; + this._micro = { + time: 0, + primed: false, + delay: 10 // delay after stop signal before stopping motors }; - this._microDelay = 10; // delay after stop signal before stopping motors this._pin = {}; this._state = {}; this._init(); @@ -64,21 +70,7 @@ class Intval { */ async _init() { let dirExists; - try { - dirExists = await fs_extra_1.exists(this.STATE_DIR); - } - catch (err) { - log.error('init', `Error locating state directory ${this.STATE_DIR}`); - } - if (!dirExists) { - try { - await fs_extra_1.mkdir(this.STATE_DIR); - } - catch (err) { - log.error('init', `Error creating state directory ${this.STATE_DIR}`); - } - } - storage.init({ + const storateOptions = { dir: this.STATE_DIR, stringify: JSON.stringify, parse: JSON.parse, @@ -87,22 +79,56 @@ class Intval { continuous: true, interval: false, ttl: false, - }).then(this._restoreState).catch((err) => { - log.warn('init', err); + }; + try { + dirExists = await fs_extra_1.pathExists(this.STATE_DIR); + } + catch (err) { + log.error('_init', `Error locating state directory ${this.STATE_DIR}`); + } + if (!dirExists) { + try { + await fs_extra_1.mkdir(this.STATE_DIR); + } + catch (err) { + log.error('_init', `Error creating state directory ${this.STATE_DIR}`); + } + } + try { + await storage.init(storateOptions); + } + catch (err) { + log.error('_init', err); + } + try { + await this._restoreState(); + } + catch (err) { + log.warn('_init', err); this.reset(); this._declarePins(); - }); - process.on('SIGINT', this._undeclarePins); - process.on('uncaughtException', this._undeclarePins); + } + process.on('SIGINT', this._undeclarePins.bind(this)); + process.on('uncaughtException', this._undeclarePins.bind(this)); } /** * Restore the state from the storage object */ - _restoreState() { - storage.getItem('_state', 'test').then(this._setState).catch((err) => { - this._setState(); + async _restoreState() { + let data; + try { + data = await storage.getItem('_state'); + } + catch (err) { log.error('_restoreState', err); - }); + } + try { + this._setState(data); + } + catch (err) { + log.error('_restoreState', err); + this._setState(); + } this._declarePins(); } /** @@ -127,14 +153,6 @@ class Intval { current: {}, cb: () => { } }, - release: { - time: 0, - active: false //is pressed - }, - micro: { - time: 0, - primed: false //is ready to stop frame - }, counter: 0, sequence: false }; @@ -144,11 +162,12 @@ class Intval { * Store the state object. */ _storeState() { - storage.setItem('_state', this._state) - .then(() => { }) - .catch((err) => { + try { + storage.setItem('_state', this._state); + } + catch (err) { log.error('_storeState', err); - }); + } } /** * (internal function) Declares all Gpio pins that will be used. @@ -247,7 +266,7 @@ class Intval { * @param {integer} val Current value of the pin * */ - _watchMicro(err, val) { + async _watchMicro(err, val) { const now = +new Date(); if (err) { log.error('_watchMicro', err); @@ -255,9 +274,9 @@ class Intval { //log.info(`Microswitch val: ${val}`) //determine when to stop if (val === 0 && this._state.frame.active) { - if (!this._state.micro.primed) { - this._state.micro.primed = true; - this._state.micro.time = now; + if (!this._micro.primed) { + this._micro.primed = true; + this._micro.time = now; log.info('Microswitch primed to stop motor'); } } @@ -265,9 +284,8 @@ class Intval { if (this._state.micro.primed && !this._state.micro.paused && (now - this._state.frame.start) > this._frame.open) { this._state.micro.primed = false; this._state.micro.time = 0; - setTimeout(() => { - this._stop(); - }, this._microDelay); + await delay_1.delay(this._micro.delay); + this._stop(); } } } @@ -277,7 +295,7 @@ class Intval { * * 1) If closed, start timer. * 2) If opened, check timer AND - * 3) If `press` (`now - this._state.release.time`) greater than minimum and less than `this._release.seq`, start frame + * 3) If `press` (`now - this._release.time`) greater than minimum and less than `this._release.seq`, start frame * 4) If `press` greater than `this._release.seq`, start sequence * * Button + 10K ohm resistor @@ -298,34 +316,39 @@ class Intval { if (val === 0) { //closed if (this._releaseClosedState(now)) { - this._state.release.time = now; - this._state.release.active = true; //maybe unncecessary + this._release.time = now; + this._release.active = true; //maybe unncecessary } } else if (val === 1) { //opened - if (this._state.release.active) { - press = now - this._state.release.time; + if (this._release.active) { + press = now - this._release.time; if (press > this._release.min && press < this._release.seq) { this.frame(); } else if (press >= this._release.seq) { - this.sequence(); + this._sequence(); } //log.info(`Release closed for ${press}ms`) - this._state.release.time = 0; - this._state.release.active = false; + this._release.time = 0; + this._release.active = false; } } } + _sequence() { + if (this.sequence) { + this._state.sequence = this.sequence(); + } + } /** * */ _releaseClosedState(now) { - if (!this._state.release.active && this._state.release.time === 0) { + if (!this._release.active && this._release.time === 0) { return true; } - if (this._state.release.active && (now - this._state.release.time) > (this._release.seq * 10)) { + if (this._release.active && (now - this._release.time) > (this._release.seq * 10)) { return true; } return false; @@ -389,7 +412,7 @@ class Intval { * @param {?integer} [exposure="null"] (optional) Exposure time, 0 = minimum * */ - frame(dir = null, exposure = null, cb = () => { }) { + async frame(dir = null, exposure = null) { if (dir === true || (dir === null && this._state.frame.dir === true)) { dir = true; } @@ -402,10 +425,12 @@ class Intval { else if (exposure === null) { exposure = 0; //default speed } + this._state.frame.current.exposure = exposure; + this._state.frame.current.dir = dir; this._state.frame.start = +new Date(); this._state.frame.active = true; this._pin.micro.watch(this._watchMicro); - log.info('frame', { dir: dir ? 'forward' : 'backward', exposure: exposure }); + log.info('frame', { dir: dir ? 'forward' : 'backward', exposure }); if (dir) { this._startFwd(); } @@ -415,47 +440,40 @@ class Intval { if (exposure !== 0) { this._state.frame.paused = true; if (dir) { - setTimeout(this._pause, this._frame.open); - //log.info('frame', { pausing : time + this._frame.open }) - setTimeout(() => { - this._state.frame.paused = false; - this._startFwd(); - }, exposure + this._frame.closed); + await delay_1.delay(this._frame.open); + this._pause(); + await delay_1.delay(exposure + this._frame.closed); + this._state.frame.paused = false; + this._startFwd(); } else { - setTimeout(this._pause, this._frame.openBwd); - setTimeout(() => { - //log.info('frame', 'restarting') - this._state.frame.paused = false; - this._startBwd(); - }, exposure + this._frame.closed); + await delay_1.delay(this._frame.openBwd); + this._pause(); + await delay_1.delay(exposure + this._frame.closed); + this._state.frame.paused = false; + this._startBwd(); } } if (dir) { this._state.frame.cb = (len) => { this._state.counter++; this._storeState(); - cb(len); }; } else { this._state.frame.cb = (len) => { this._state.counter--; this._storeState(); - cb(len); }; } - this._state.frame.current = { - dir: dir, - exposure: exposure - }; } /** - * + * Returns the state of the */ status() { return this._state; } } -module.exports = new Intval(); +exports.default = Intval; +module.exports = Intval; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/intval/index.js.map b/lib/intval/index.js.map index 0a5151c..9d9e802 100644 --- a/lib/intval/index.js.map +++ b/lib/intval/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intval/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intval/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/sequence/index.js b/lib/sequence/index.js index 7bd06bb..d2c4227 100644 --- a/lib/sequence/index.js +++ b/lib/sequence/index.js @@ -5,111 +5,72 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const v4_1 = __importDefault(require("uuid/v4")); const log = require('../log')('seq'); -require("../delay"); +const delay_1 = require("../delay"); +const MAX_INTEGER = 2147483647; /** Object sequence features */ class Sequence { - constructor() { - this._state = { - arr: [] - }; + /** + * @constructor + * + * Create a sequencer object from class + **/ + constructor(intval) { this.active = false; - this.paused = false; - this.frame = false; - this.delay = false; + this.delay = 0; this.count = 0; - this._stop = null; - this._loop = { - arr: [], - count: 0, - max: 0 - }; + /** + * Stop a running sequence and reset counter and delay + **/ this.stop = function () { this.active = false; this.count = 0; - this._state.arr = []; - this._loop.count = 0; - this._loop.max = 0; - this._loop.arr = []; - if (this._stop) - this._stop(); - this._stop = null; + this.delay = 0; + }; + this.intval = intval; + this.intval.sequence = function () { + if (this.active) { + this.stop(); + return false; + } + else { + this.start(); + return true; + } }; } /** * Start running a "sequence" of frames. Shoots a continuous sequence * of single frames with a delay in between each one. **/ - start(options, cb) { - if (this._state.active) { - return false; - } - this.active = true; - this.count = 0; - if (options.arr) { - this._state.arr = options.arr; - } - if (options.loop) { - this._loop.arr = options.loop; - this._loop.count = 0; - } - if (options.maxLoop) { - this._loop.max = options.maxLoop; - } - else { - this._loop.max = 0; - } - this._stop = cb; - this.step(); + async start(options) { + let len = typeof options.len !== 'undefined' ? options.len : MAX_INTEGER; + let multiple = typeof options.multiple !== 'undefined' ? options.multiple : 1; this.id = v4_1.default(); - return this.id; - } - setStop() { - this.active = false; - } - pause() { - this.paused = true; - } - resume() { - this.paused = false; - this.step(); - } - step() { - if (this.active && !this.paused) { - if (this._state.arr.length > 0) { - if (this.count > this._state.arr.length - 1) { - return this.stop(); - } - log.info('step', { count: this.count, id: this._state.id }); - return this._state.arr[this.count](() => { + this.delay = typeof options.delay !== 'undefined' ? options.delay : 0; + this.count = 0; + for (let i = 0; i < len; i++) { + if (multiple > 1) { + for (let x = 0; x < multiple; x++) { + await this.intval.frame(); + log.info({ id: this.id, count: this.count }); this.count++; - this.step(); - }); - } - else if (this._loop.arr.length > 0) { - if (this.count > this._loop.arr.length - 1) { - this.count = 0; - this._loop.count++; } - if (this._loop.max > 0 && this._loop.count > this._loop.max) { - return this.stop(); - } - log.info('step', { count: this.count, id: this.id }); - return this._loop.arr[this.count](() => { - this.count++; - this.step(); - }); } else { - return this.stop(); + await this.intval.frame(); + log.info({ id: this.id, count: this.count }); + this.count++; + } + if (this.delay > 0) { + await delay_1.delay(this.delay); + } + if (!this.active) { + break; } } - else if (this.paused) { - log.info('step', 'Sequence paused', { loop: this._loop.count, count: this.count }); - } - else if (!this.active) { - log.info('step', 'Sequence stopped', { loop: this._loop.count, count: this.count }); - } + this.stop(); } } -module.exports = new Sequence(); +exports.Sequence = Sequence; +module.exports = Sequence; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/sequence/index.js.map b/lib/sequence/index.js.map index ad64c2d..d3ec6bc 100644 --- a/lib/sequence/index.js.map +++ b/lib/sequence/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequence/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequence/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;AAEZ,iDAA2B;AAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;AACrC,oCAAiC;AAEjC,MAAM,WAAW,GAAG,UAAU,CAAC;AAc/B,+BAA+B;AAC/B,MAAa,QAAQ;IAUpB;;;;QAII;IAEJ,YAAa,MAAY;QAbjB,WAAM,GAAa,KAAK,CAAA;QAExB,UAAK,GAAY,CAAC,CAAA;QAClB,UAAK,GAAY,CAAC,CAAA;QA6D1B;;YAEI;QACG,SAAI,GAAG;YACb,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;YACnB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;YACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QACf,CAAC,CAAA;QAzDA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG;YACtB,IAAI,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAA;gBACX,OAAO,KAAK,CAAA;aACZ;iBAAM;gBACN,IAAI,CAAC,KAAK,EAAE,CAAA;gBACZ,OAAO,IAAI,CAAA;aACX;QACF,CAAC,CAAA;IACF,CAAC;IAED;;;QAGI;IAEG,KAAK,CAAC,KAAK,CAAE,OAAiB;QACpC,IAAI,GAAG,GAAY,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAA;QACjF,IAAI,QAAQ,GAAY,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtF,IAAI,CAAC,EAAE,GAAG,YAAI,EAAE,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oBAClC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;oBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;oBAC9C,IAAI,CAAC,KAAK,EAAE,CAAA;iBACZ;aACD;iBAAM;gBACN,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;gBACzB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC9C,IAAI,CAAC,KAAK,EAAE,CAAA;aACZ;YAED,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gBACnB,MAAM,aAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aACvB;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACjB,MAAK;aACL;SACD;QAED,IAAI,CAAC,IAAI,EAAE,CAAA;IACZ,CAAC;CAUD;AA3ED,4BA2EC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAA"} \ No newline at end of file diff --git a/src/delay/index.ts b/src/delay/index.ts index eb5b1bb..16e0a33 100644 --- a/src/delay/index.ts +++ b/src/delay/index.ts @@ -8,7 +8,7 @@ * @returns {Promise} Promise to resolve after timeout **/ -function delay (ms : number) { +export function delay (ms : number) { return new Promise((resolve : any) => { return setTimeout(resolve, ms); }); diff --git a/src/intval/index.ts b/src/intval/index.ts index 0b802ff..2de2425 100644 --- a/src/intval/index.ts +++ b/src/intval/index.ts @@ -3,8 +3,8 @@ const db = require('../db'); const log = require('../log')('intval'); import * as storage from 'node-persist'; -import { exists, mkdir } from 'fs-extra'; -import '../delay'; +import { pathExists, mkdir } from 'fs-extra'; +import { delay } from '../delay'; let Gpio : any try { @@ -15,7 +15,7 @@ try { } -const PINS = { +const PINS : any = { fwd : { pin : 13, dir : 'out' @@ -51,7 +51,8 @@ interface Entry { } /** class representing the intval3 features */ -class Intval { +export default class Intval { + private STATE_DIR : string = '~/state'; private _frame : any = { @@ -62,12 +63,21 @@ class Intval { } private _release : any = { min : 20, - seq : 1000 + seq : 1000, + time : 0, + active : false } - private _microDelay : number = 10; // delay after stop signal before stopping motors + + private _micro : any = { + time : 0, + primed : false, //is ready to stop frame + delay : 10// delay after stop signal before stopping motors + } + private _pin : any = {}; private _state : any = {}; + public sequence : any; constructor() { this._init(); @@ -79,22 +89,7 @@ class Intval { private async _init () { let dirExists : boolean; - - try { - dirExists = await exists(this.STATE_DIR); - } catch (err) { - log.error('init', `Error locating state directory ${this.STATE_DIR}`); - } - - if (!dirExists) { - try { - await mkdir(this.STATE_DIR); - } catch (err) { - log.error('init', `Error creating state directory ${this.STATE_DIR}`) - } - } - - storage.init({ + const storateOptions = { dir: this.STATE_DIR, stringify: JSON.stringify, parse: JSON.parse, @@ -105,25 +100,60 @@ class Intval { ttl: false, // ttl* [NEW], can be true for 24h default or a number in MILLISECONDS //expiredInterval: 2 * 60 * 1000, // [NEW] every 2 minutes the process will clean-up the expired cache //forgiveParseErrors: false // [NEW] - }).then(this._restoreState).catch((err) => { - log.warn('init', err) + } + + try { + dirExists = await pathExists(this.STATE_DIR); + } catch (err) { + log.error('_init', `Error locating state directory ${this.STATE_DIR}`); + } + + if (!dirExists) { + try { + await mkdir(this.STATE_DIR); + } catch (err) { + log.error('_init', `Error creating state directory ${this.STATE_DIR}`); + } + } + + try { + await storage.init(storateOptions); + } catch (err) { + log.error('_init', err); + } + + try { + await this._restoreState(); + } catch (err) { + log.warn('_init', err) ; this.reset(); this._declarePins(); - }) + } - process.on('SIGINT', this._undeclarePins); - process.on('uncaughtException', this._undeclarePins); + process.on('SIGINT', this._undeclarePins.bind(this)); + process.on('uncaughtException', this._undeclarePins.bind(this)); } /** * Restore the state from the storage object */ - private _restoreState () { - storage.getItem('_state', 'test').then(this._setState).catch((err) => { - this._setState(); + private async _restoreState () { + let data : any; + + try { + data = await storage.getItem('_state'); + } catch (err) { log.error('_restoreState', err); - }) + } + + try { + this._setState(data); + } catch (err) { + log.error('_restoreState', err); + this._setState(); + } + this._declarePins(); } @@ -150,14 +180,6 @@ class Intval { current : {}, //current settings cb : () => {} }, - release : { - time: 0, - active : false //is pressed - }, - micro : { - time : 0, - primed : false //is ready to stop frame - }, counter : 0, sequence : false } @@ -169,11 +191,11 @@ class Intval { */ private _storeState () { - storage.setItem('_state', this._state) - .then(() => {}) - .catch((err) => { - log.error('_storeState', err); - }) + try { + storage.setItem('_state', this._state); + } catch (err) { + log.error('_storeState', err); + } } /** @@ -181,7 +203,7 @@ class Intval { */ private _declarePins () { - let pin; + let pin : any; for (let p in PINS) { pin = PINS[p]; if (pin.edge) this._pin[p] = new Gpio(pin.pin, pin.dir, pin.edge); @@ -290,7 +312,7 @@ class Intval { * */ - private _watchMicro (err : Error, val : number) { + private async _watchMicro (err : Error, val : number) { const now : number = +new Date(); if (err) { log.error('_watchMicro', err); @@ -298,18 +320,17 @@ class Intval { //log.info(`Microswitch val: ${val}`) //determine when to stop if (val === 0 && this._state.frame.active) { - if (!this._state.micro.primed) { - this._state.micro.primed = true; - this._state.micro.time = now; + if (!this._micro.primed) { + this._micro.primed = true; + this._micro.time = now; log.info('Microswitch primed to stop motor'); } } else if (val === 1 && this._state.frame.active) { if (this._state.micro.primed && !this._state.micro.paused && (now - this._state.frame.start) > this._frame.open) { this._state.micro.primed = false; this._state.micro.time = 0; - setTimeout( () => { - this._stop(); - }, this._microDelay); + await delay(this._micro.delay) + this._stop(); } } } @@ -320,7 +341,7 @@ class Intval { * * 1) If closed, start timer. * 2) If opened, check timer AND - * 3) If `press` (`now - this._state.release.time`) greater than minimum and less than `this._release.seq`, start frame + * 3) If `press` (`now - this._release.time`) greater than minimum and less than `this._release.seq`, start frame * 4) If `press` greater than `this._release.seq`, start sequence * * Button + 10K ohm resistor @@ -342,34 +363,40 @@ class Intval { if (val === 0) { //closed if (this._releaseClosedState(now)) { - this._state.release.time = now; - this._state.release.active = true; //maybe unncecessary + this._release.time = now; + this._release.active = true; //maybe unncecessary } } else if (val === 1) { //opened - if (this._state.release.active) { - press = now - this._state.release.time; + if (this._release.active) { + press = now - this._release.time; if (press > this._release.min && press < this._release.seq) { this.frame(); } else if (press >= this._release.seq) { - this.sequence(); + this._sequence(); } //log.info(`Release closed for ${press}ms`) - this._state.release.time = 0; - this._state.release.active = false; + this._release.time = 0; + this._release.active = false; } } } + private _sequence () { + if (this.sequence) { + this._state.sequence = this.sequence() + } + } + /** * */ private _releaseClosedState (now : number) { - if (!this._state.release.active && this._state.release.time === 0) { + if (!this._release.active && this._release.time === 0) { return true; } - if (this._state.release.active && (now - this._state.release.time) > (this._release.seq * 10)) { + if (this._release.active && (now - this._release.time) > (this._release.seq * 10)) { return true; } return false; @@ -445,7 +472,7 @@ class Intval { * */ - public frame (dir : boolean = null, exposure : number = null, cb : Function = () => {}) { + public async frame (dir : boolean = null, exposure : number = null) { if (dir === true || (dir === null && this._state.frame.dir === true) ) { dir = true; } else { @@ -465,42 +492,46 @@ class Intval { this._state.frame.active = true; this._pin.micro.watch(this._watchMicro); - log.info('frame', {dir : dir ? 'forward' : 'backward', exposure : exposure}); + log.info('frame', {dir : dir ? 'forward' : 'backward', exposure }); if (dir) { this._startFwd(); } else { this._startBwd(); } + if (exposure !== 0) { this._state.frame.paused = true; if (dir) { - setTimeout(this._pause, this._frame.open); - //log.info('frame', { pausing : time + this._frame.open }) - setTimeout( () => { - this._state.frame.paused = false; - this._startFwd(); - }, exposure + this._frame.closed); + await delay(this._frame.open) + + this._pause() + + await delay(exposure + this._frame.closed) + + this._state.frame.paused = false + this._startFwd() } else { - setTimeout(this._pause, this._frame.openBwd); - setTimeout( () => { - //log.info('frame', 'restarting') - this._state.frame.paused = false; - this._startBwd(); - }, exposure + this._frame.closed); + + await delay(this._frame.openBwd) + + this._pause() + + await delay(exposure + this._frame.closed) + + this._state.frame.paused = false; + this._startBwd() } } if (dir) { this._state.frame.cb = (len : number) => { this._state.counter++; this._storeState(); - cb(len); } } else { this._state.frame.cb = (len : number) => { this._state.counter--; this._storeState(); - cb(len); } } } @@ -514,6 +545,4 @@ class Intval { } } -module.exports = new Intval(); - -export default Intval; \ No newline at end of file +module.exports = Intval \ No newline at end of file diff --git a/src/sequence/index.ts b/src/sequence/index.ts index d3b7704..0f58aaf 100644 --- a/src/sequence/index.ts +++ b/src/sequence/index.ts @@ -2,135 +2,99 @@ import uuid from 'uuid/v4'; const log = require('../log')('seq'); -import '../delay'; +import { delay } from '../delay'; const MAX_INTEGER = 2147483647; interface Options { len? : number; + multiple? : number; + delay? : number; +} + +interface Loop { + count : number; + max : number; + delay : number; } /** Object sequence features */ -class Sequence { - public _state : any = { - arr : [] - } - private id : string; +export class Sequence { + private id : string - private active : boolean = false; - private paused : boolean = false; + private active : boolean = false - private frame : boolean = false; - private delay : boolean = false; - private count : number = 0; + private delay : number = 0 + private count : number = 0 - private _stop : Function = null; + private intval : any - public _loop : any = { - arr : [], - count : 0, - max : 0 + /** + * @constructor + * + * Create a sequencer object from class + **/ + + constructor (intval : any) { + this.intval = intval + this.intval.sequence = function () { + if (this.active) { + this.stop() + return false + } else { + this.start() + return true + } + } } - constructor (intval : Intval) { - - } /** * Start running a "sequence" of frames. Shoots a continuous sequence * of single frames with a delay in between each one. **/ - public startOld (options : any, cb : Function) { - if (this._state.active) { - return false - } - - this.active = true - this.count = 0 - - if (options.arr) { - this._state.arr = options.arr - } - - if (options.loop) { - this._loop.arr = options.loop - this._loop.count = 0 - } - - if (options.maxLoop) { - this._loop.max = options.maxLoop - } else { - this._loop.max = 0 - } - this._stop = cb - this.step() - this.id = uuid() - return this.id - } public async start (options : Options) { + let len : number = typeof options.len !== 'undefined' ? options.len : MAX_INTEGER + let multiple : number = typeof options.multiple !== 'undefined' ? options.multiple : 1 + + this.id = uuid() + this.delay = typeof options.delay !== 'undefined' ? options.delay : 0 + this.count = 0 + for (let i = 0; i < len; i++) { + if (multiple > 1) { + for (let x = 0; x < multiple; x++) { + await this.intval.frame() + log.info({ id : this.id, count : this.count }) + this.count++ + } + } else { + await this.intval.frame() + log.info({ id : this.id, count : this.count }) + this.count++ + } + + if (this.delay > 0) { + await delay(this.delay) + } + + if (!this.active) { + break + } + } + + this.stop() } - public setStop () { - this.active = false - } - + /** + * Stop a running sequence and reset counter and delay + **/ public stop = function () { this.active = false this.count = 0 - this._state.arr = [] - - this._loop.count = 0 - this._loop.max = 0 - this._loop.arr = [] - - if (this._stop) this._stop() - - this._stop = null - } - - public pause () { - this.paused = true - } - - public resume () { - this.paused = false - this.step() - } - - public step () { - if (this.active && !this.paused) { - if (this._state.arr.length > 0) { - if (this.count > this._state.arr.length - 1) { - return this.stop() - } - log.info('step', { count : this.count, id : this._state.id }) - return this._state.arr[this.count](() => { - this.count++ - this.step() - }) - } else if (this._loop.arr.length > 0) { - if (this.count > this._loop.arr.length - 1) { - this.count = 0 - this._loop.count++ - } - if (this._loop.max > 0 && this._loop.count > this._loop.max) { - return this.stop() - } - log.info('step', { count : this.count, id : this.id }) - return this._loop.arr[this.count](() => { - this.count++ - this.step() - }) - } else{ - return this.stop() - } - } else if (this.paused) { - log.info('step', 'Sequence paused', { loop : this._loop.count, count : this.count }) - } else if (!this.active) { - log.info('step', 'Sequence stopped', { loop : this._loop.count, count : this.count }) - } + this.delay = 0 } } -module.exports = new Sequence(); \ No newline at end of file +module.exports = Sequence +