From 56aba1eaba9baeca8cefa53cba18d28abc17b8b3 Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Thu, 21 Mar 2019 14:59:46 -0400 Subject: [PATCH] Refactor cam module into cam module. --- app/lib/cam/Readme.md | 49 +++++++++++ app/lib/cam/index.js | 183 +++++++++++++++++++++++++++++++++++++++ app/lib/cam/index.js.map | 1 + app/lib/cam/package.json | 11 +++ app/lib/ui/cam.js | 2 +- cli/lib/cam/index.js | 183 +++++++++++++++++++++++++++++++++++++++ cli/lib/cam/index.js.map | 1 + cli/lib/cam/package.json | 11 +++ lib/cam/index.js | 183 +++++++++++++++++++++++++++++++++++++++ lib/cam/index.js.map | 1 + lib/cam/package.json | 11 +++ src/cam/index.ts | 183 +++++++++++++++++++++++++++++++++++++++ 12 files changed, 818 insertions(+), 1 deletion(-) create mode 100644 app/lib/cam/Readme.md create mode 100644 app/lib/cam/index.js create mode 100644 app/lib/cam/index.js.map create mode 100644 app/lib/cam/package.json create mode 100644 cli/lib/cam/index.js create mode 100644 cli/lib/cam/index.js.map create mode 100644 cli/lib/cam/package.json create mode 100644 lib/cam/index.js create mode 100644 lib/cam/index.js.map create mode 100644 lib/cam/package.json create mode 100644 src/cam/index.ts diff --git a/app/lib/cam/Readme.md b/app/lib/cam/Readme.md new file mode 100644 index 0000000..3825697 --- /dev/null +++ b/app/lib/cam/Readme.md @@ -0,0 +1,49 @@ + + +## Camera +class representing camera functions + +**Kind**: global class + +* [Camera](#Camera) + * [.init()](#Camera+init) + * [.listen()](#Camera+listen) + * [.set()](#Camera+set) + * [.move()](#Camera+move) + * [.exposure()](#Camera+exposure) + * [.connectIntval()](#Camera+connectIntval) + * [.listener()](#Camera+listener) + * [.end()](#Camera+end) + + + +### camera.init() +**Kind**: instance method of [Camera](#Camera) + + +### camera.listen() +**Kind**: instance method of [Camera](#Camera) + + +### camera.set() +**Kind**: instance method of [Camera](#Camera) + + +### camera.move() +**Kind**: instance method of [Camera](#Camera) + + +### camera.exposure() +**Kind**: instance method of [Camera](#Camera) + + +### camera.connectIntval() +**Kind**: instance method of [Camera](#Camera) + + +### camera.listener() +**Kind**: instance method of [Camera](#Camera) + + +### camera.end() +**Kind**: instance method of [Camera](#Camera) diff --git a/app/lib/cam/index.js b/app/lib/cam/index.js new file mode 100644 index 0000000..c757ccf --- /dev/null +++ b/app/lib/cam/index.js @@ -0,0 +1,183 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const Intval = require("intval"); +/** class representing camera functions **/ +class Camera { + /** + * + **/ + constructor(arduino, cfg, ui) { + this.state = { dir: true, digital: false }; + this.arduino = null; + this.intval = null; + this.arduino = arduino; + this.cfg = cfg; + this.ui = ui; + this.init(); + } + /** + * + **/ + async init() { + this.log = await require('log')({}); + this.ipc = require('electron').ipcMain; + this.listen(); + } + /** + * + **/ + listen() { + this.ipc.on('cam', this.listener.bind(this)); + this.ipc.on('intval', this.connectIntval.bind(this)); + } + /** + * + **/ + async set(dir, id) { + let cmd; + let ms; + if (dir) { + cmd = this.cfg.arduino.cmd.cam_forward; + } + else { + cmd = this.cfg.arduino.cmd.cam_backward; + } + this.state.dir = dir; + if (this.intval) { + try { + ms = await this.intval.setDir(dir); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + return await this.end(cmd, id, ms); + } + /** + * + **/ + async move(frame, id) { + const cmd = this.cfg.arduino.cmd.camera; + let ms; + //if (this.state.digital) { + //await this.dig.start() + //} + if (this.intval) { + try { + ms = await this.intval.move(); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + //if (this.state.digital) { + // await this.dig.end() + //} + this.log.info('Camera move time', { ms }); + return this.end(cmd, id, ms); + } + /** + * + **/ + exposure(exposure, id) { + let cmd = 'E'; + this.intval.setExposure('camera', exposure, (ms) => { + this.end(cmd, id, ms); + }); + } + /** + * + **/ + async connectIntval(event, arg) { + return new Promise((resolve, reject) => { + if (arg.connect) { + this.intval = new Intval(arg.url); + this.intval.connect((err, ms, state) => { + if (err) { + this.ui.send('intval', { connected: false }); + this.log.info(`Cannot connect to ${arg.url}`, 'INTVAL'); + this.intval = null; + } + else { + this.ui.send('intval', { connected: true, url: arg.url, state: state }); + this.log.info(`Connected to INTVAL3 @ ${arg.url}`, 'INTVAL'); + } + return resolve(true); + }); + } + else if (arg.disconnect) { + this.intval = null; + return resolve(false); + } + }); + } + /** + * + **/ + async listener(event, arg) { + if (typeof arg.dir !== 'undefined') { + try { + await this.set(arg.dir, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + else if (typeof arg.frame !== 'undefined') { + try { + await this.move(arg.frame, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + event.returnValue = true; + } + /** + * + **/ + async end(cmd, id, ms) { + let message = ''; + if (cmd === this.cfg.arduino.cmd.cam_forward) { + message = 'Camera set to FORWARD'; + } + else if (cmd === this.cfg.arduino.cmd.cam_backward) { + message = 'Camera set to BACKWARD'; + } + else if (cmd === this.cfg.arduino.cmd.camera) { + message = 'Camera '; + if (this.state.dir) { + message += 'ADVANCED'; + } + else { + message += 'REWOUND'; + } + message += ' 1 frame'; + } + this.log.info(message, 'CAMERA', true, true); + this.ui.send('cam', { cmd: cmd, id: id, ms: ms }); + } + ; +} +module.exports = function (arduino, cfg, ui) { + return new Camera(arduino, cfg, ui); +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/app/lib/cam/index.js.map b/app/lib/cam/index.js.map new file mode 100644 index 0000000..5a02f24 --- /dev/null +++ b/app/lib/cam/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cam/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app/lib/cam/package.json b/app/lib/cam/package.json new file mode 100644 index 0000000..980dbbd --- /dev/null +++ b/app/lib/cam/package.json @@ -0,0 +1,11 @@ +{ + "name": "cam", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/app/lib/ui/cam.js b/app/lib/ui/cam.js index a376387..8d01f8e 100644 --- a/app/lib/ui/cam.js +++ b/app/lib/ui/cam.js @@ -1,4 +1,4 @@ -var cam = {}; +const cam = {}; cam.queue = {}; cam.lock = false; diff --git a/cli/lib/cam/index.js b/cli/lib/cam/index.js new file mode 100644 index 0000000..c757ccf --- /dev/null +++ b/cli/lib/cam/index.js @@ -0,0 +1,183 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const Intval = require("intval"); +/** class representing camera functions **/ +class Camera { + /** + * + **/ + constructor(arduino, cfg, ui) { + this.state = { dir: true, digital: false }; + this.arduino = null; + this.intval = null; + this.arduino = arduino; + this.cfg = cfg; + this.ui = ui; + this.init(); + } + /** + * + **/ + async init() { + this.log = await require('log')({}); + this.ipc = require('electron').ipcMain; + this.listen(); + } + /** + * + **/ + listen() { + this.ipc.on('cam', this.listener.bind(this)); + this.ipc.on('intval', this.connectIntval.bind(this)); + } + /** + * + **/ + async set(dir, id) { + let cmd; + let ms; + if (dir) { + cmd = this.cfg.arduino.cmd.cam_forward; + } + else { + cmd = this.cfg.arduino.cmd.cam_backward; + } + this.state.dir = dir; + if (this.intval) { + try { + ms = await this.intval.setDir(dir); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + return await this.end(cmd, id, ms); + } + /** + * + **/ + async move(frame, id) { + const cmd = this.cfg.arduino.cmd.camera; + let ms; + //if (this.state.digital) { + //await this.dig.start() + //} + if (this.intval) { + try { + ms = await this.intval.move(); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + //if (this.state.digital) { + // await this.dig.end() + //} + this.log.info('Camera move time', { ms }); + return this.end(cmd, id, ms); + } + /** + * + **/ + exposure(exposure, id) { + let cmd = 'E'; + this.intval.setExposure('camera', exposure, (ms) => { + this.end(cmd, id, ms); + }); + } + /** + * + **/ + async connectIntval(event, arg) { + return new Promise((resolve, reject) => { + if (arg.connect) { + this.intval = new Intval(arg.url); + this.intval.connect((err, ms, state) => { + if (err) { + this.ui.send('intval', { connected: false }); + this.log.info(`Cannot connect to ${arg.url}`, 'INTVAL'); + this.intval = null; + } + else { + this.ui.send('intval', { connected: true, url: arg.url, state: state }); + this.log.info(`Connected to INTVAL3 @ ${arg.url}`, 'INTVAL'); + } + return resolve(true); + }); + } + else if (arg.disconnect) { + this.intval = null; + return resolve(false); + } + }); + } + /** + * + **/ + async listener(event, arg) { + if (typeof arg.dir !== 'undefined') { + try { + await this.set(arg.dir, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + else if (typeof arg.frame !== 'undefined') { + try { + await this.move(arg.frame, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + event.returnValue = true; + } + /** + * + **/ + async end(cmd, id, ms) { + let message = ''; + if (cmd === this.cfg.arduino.cmd.cam_forward) { + message = 'Camera set to FORWARD'; + } + else if (cmd === this.cfg.arduino.cmd.cam_backward) { + message = 'Camera set to BACKWARD'; + } + else if (cmd === this.cfg.arduino.cmd.camera) { + message = 'Camera '; + if (this.state.dir) { + message += 'ADVANCED'; + } + else { + message += 'REWOUND'; + } + message += ' 1 frame'; + } + this.log.info(message, 'CAMERA', true, true); + this.ui.send('cam', { cmd: cmd, id: id, ms: ms }); + } + ; +} +module.exports = function (arduino, cfg, ui) { + return new Camera(arduino, cfg, ui); +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/cli/lib/cam/index.js.map b/cli/lib/cam/index.js.map new file mode 100644 index 0000000..5a02f24 --- /dev/null +++ b/cli/lib/cam/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cam/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/cli/lib/cam/package.json b/cli/lib/cam/package.json new file mode 100644 index 0000000..980dbbd --- /dev/null +++ b/cli/lib/cam/package.json @@ -0,0 +1,11 @@ +{ + "name": "cam", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/lib/cam/index.js b/lib/cam/index.js new file mode 100644 index 0000000..c757ccf --- /dev/null +++ b/lib/cam/index.js @@ -0,0 +1,183 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const Intval = require("intval"); +/** class representing camera functions **/ +class Camera { + /** + * + **/ + constructor(arduino, cfg, ui) { + this.state = { dir: true, digital: false }; + this.arduino = null; + this.intval = null; + this.arduino = arduino; + this.cfg = cfg; + this.ui = ui; + this.init(); + } + /** + * + **/ + async init() { + this.log = await require('log')({}); + this.ipc = require('electron').ipcMain; + this.listen(); + } + /** + * + **/ + listen() { + this.ipc.on('cam', this.listener.bind(this)); + this.ipc.on('intval', this.connectIntval.bind(this)); + } + /** + * + **/ + async set(dir, id) { + let cmd; + let ms; + if (dir) { + cmd = this.cfg.arduino.cmd.cam_forward; + } + else { + cmd = this.cfg.arduino.cmd.cam_backward; + } + this.state.dir = dir; + if (this.intval) { + try { + ms = await this.intval.setDir(dir); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + return await this.end(cmd, id, ms); + } + /** + * + **/ + async move(frame, id) { + const cmd = this.cfg.arduino.cmd.camera; + let ms; + //if (this.state.digital) { + //await this.dig.start() + //} + if (this.intval) { + try { + ms = await this.intval.move(); + } + catch (err) { + this.log.error(err); + } + } + else { + try { + ms = await this.arduino.send('camera', cmd); + } + catch (err) { + this.log.error(err); + } + } + //if (this.state.digital) { + // await this.dig.end() + //} + this.log.info('Camera move time', { ms }); + return this.end(cmd, id, ms); + } + /** + * + **/ + exposure(exposure, id) { + let cmd = 'E'; + this.intval.setExposure('camera', exposure, (ms) => { + this.end(cmd, id, ms); + }); + } + /** + * + **/ + async connectIntval(event, arg) { + return new Promise((resolve, reject) => { + if (arg.connect) { + this.intval = new Intval(arg.url); + this.intval.connect((err, ms, state) => { + if (err) { + this.ui.send('intval', { connected: false }); + this.log.info(`Cannot connect to ${arg.url}`, 'INTVAL'); + this.intval = null; + } + else { + this.ui.send('intval', { connected: true, url: arg.url, state: state }); + this.log.info(`Connected to INTVAL3 @ ${arg.url}`, 'INTVAL'); + } + return resolve(true); + }); + } + else if (arg.disconnect) { + this.intval = null; + return resolve(false); + } + }); + } + /** + * + **/ + async listener(event, arg) { + if (typeof arg.dir !== 'undefined') { + try { + await this.set(arg.dir, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + else if (typeof arg.frame !== 'undefined') { + try { + await this.move(arg.frame, arg.id); + } + catch (err) { + console.trace(); + this.log.error(err); + } + } + event.returnValue = true; + } + /** + * + **/ + async end(cmd, id, ms) { + let message = ''; + if (cmd === this.cfg.arduino.cmd.cam_forward) { + message = 'Camera set to FORWARD'; + } + else if (cmd === this.cfg.arduino.cmd.cam_backward) { + message = 'Camera set to BACKWARD'; + } + else if (cmd === this.cfg.arduino.cmd.camera) { + message = 'Camera '; + if (this.state.dir) { + message += 'ADVANCED'; + } + else { + message += 'REWOUND'; + } + message += ' 1 frame'; + } + this.log.info(message, 'CAMERA', true, true); + this.ui.send('cam', { cmd: cmd, id: id, ms: ms }); + } + ; +} +module.exports = function (arduino, cfg, ui) { + return new Camera(arduino, cfg, ui); +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/cam/index.js.map b/lib/cam/index.js.map new file mode 100644 index 0000000..5a02f24 --- /dev/null +++ b/lib/cam/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cam/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/cam/package.json b/lib/cam/package.json new file mode 100644 index 0000000..980dbbd --- /dev/null +++ b/lib/cam/package.json @@ -0,0 +1,11 @@ +{ + "name": "cam", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/src/cam/index.ts b/src/cam/index.ts new file mode 100644 index 0000000..b1a49bd --- /dev/null +++ b/src/cam/index.ts @@ -0,0 +1,183 @@ +'use strict'; + +import Intval = require('intval'); + +/** class representing camera functions **/ + +class Camera { + private state : any = { dir : true, digital : false }; + private arduino : Arduino = null; + private intval : any = null; + private log : any; + private cfg : any; + private ui : any; + private ipc : any; + /** + * + **/ + constructor (arduino : Arduino, cfg : any, ui : any) { + this.arduino = arduino; + this.cfg = cfg; + this.ui = ui; + this.init(); + } + + /** + * + **/ + private async init () { + this.log = await require('log')({}); + this.ipc = require('electron').ipcMain; + this.listen(); + } + + /** + * + **/ + private listen () { + this.ipc.on('cam', this.listener.bind(this)); + this.ipc.on('intval', this.connectIntval.bind(this)); + } + + /** + * + **/ + public async set (dir : boolean, id : string) { + let cmd : string; + let ms : number; + + if (dir) { + cmd = this.cfg.arduino.cmd.cam_forward; + } else { + cmd = this.cfg.arduino.cmd.cam_backward; + } + this.state.dir = dir; + + if (this.intval) { + try { + ms = await this.intval.setDir(dir); + } catch (err) { + this.log.error(err); + } + } else { + try { + ms = await this.arduino.send('camera', cmd); + } catch (err) { + this.log.error(err); + } + } + return await this.end(cmd, id, ms); + } + + /** + * + **/ + public async move (frame : number, id : string) { + const cmd : string = this.cfg.arduino.cmd.camera; + let ms : number; + //if (this.state.digital) { + //await this.dig.start() + //} + if (this.intval) { + try { + ms = await this.intval.move(); + } catch (err) { + this.log.error(err); + } + } else { + try { + ms = await this.arduino.send('camera', cmd); + } catch (err) { + this.log.error(err); + } + } + //if (this.state.digital) { + // await this.dig.end() + //} + this.log.info('Camera move time', { ms }); + return this.end(cmd, id, ms); + } + + /** + * + **/ + public exposure (exposure : number, id : string) { + let cmd : string = 'E'; + this.intval.setExposure('camera', exposure, (ms : number) => { + this.end(cmd, id, ms); + }); + } + + /** + * + **/ + private async connectIntval (event : any, arg : any) { + return new Promise((resolve, reject) => { + if (arg.connect) { + this.intval = new Intval(arg.url) + this.intval.connect((err : any, ms : number, state : boolean) => { + if (err) { + this.ui.send('intval', { connected : false }) + this.log.info(`Cannot connect to ${arg.url}`, 'INTVAL') + this.intval = null + } else { + this.ui.send('intval', { connected : true, url : arg.url, state : state }) + this.log.info(`Connected to INTVAL3 @ ${arg.url}`, 'INTVAL') + } + return resolve(true) + }) + } else if (arg.disconnect) { + this.intval = null + return resolve(false) + } + }) + } + + /** + * + **/ + private async listener (event : any, arg : any) { + if (typeof arg.dir !== 'undefined') { + try { + await this.set(arg.dir, arg.id) + } catch (err) { + console.trace() + this.log.error(err) + } + } else if (typeof arg.frame !== 'undefined') { + try { + await this.move(arg.frame, arg.id) + } catch (err) { + console.trace() + this.log.error(err) + } + } + event.returnValue = true + } + + /** + * + **/ + private async end (cmd : string, id : string, ms : number) { + let message = '' + if (cmd === this.cfg.arduino.cmd.cam_forward) { + message = 'Camera set to FORWARD' + } else if (cmd === this.cfg.arduino.cmd.cam_backward) { + message = 'Camera set to BACKWARD' + } else if (cmd === this.cfg.arduino.cmd.camera) { + message = 'Camera ' + if (this.state.dir) { + message += 'ADVANCED' + } else { + message += 'REWOUND' + } + message += ' 1 frame' + } + this.log.info(message, 'CAMERA', true, true) + this.ui.send('cam', {cmd: cmd, id : id, ms: ms}) + }; +} + +module.exports = function (arduino : Arduino, cfg : any, ui : any) { + return new Camera(arduino, cfg, ui); +} \ No newline at end of file