mcopy/cli/index.js

99 lines
2.0 KiB
JavaScript

'use strict'
const program = require('commander')
const uuid = require('uuid')
const moment = require('moment')
const events = require('events')
const ee = new events.EventEmitter()
const cfg = require('../app/data/cfg.json')
const pkg = require('./package.json')
const { delay } = require('delay')
const { exit } = require('exit')
const intval = require('intval')
const arduino = require('arduino')(cfg, ee)
const Mscript = require('mscript')
const mscript = new Mscript()
const dev = require('device')(arduino)
let log
let readline
let devices
async function command () {
return new Promise ((resolve, reject) => {
return readline.question(`Input:`, (str) => {
log.info(str)
console.dir(mscript.interpret(str))
//interpret string
//readline.close()
return resolve(true)
})
})
}
async function live () {
readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
log.info('Starting live control mode')
while (true) {
try {
await command()
} catch (err) {
log.error('Error executing command', err)
}
}
}
function parsePattern () {
}
async function main (arg) {
log = await require('log')(arg)
log.info('mcopy-cli')
try {
devices = await arduino.enumerate()
} catch (err) {
log.error('Error enumerating devices')
log.error(err)
}
if (!devices ||devices.length > 1) {
//return exit('No devices found', 1)
devices = []
}
await dev.all(devices)
if (arg.pattern) {
}
if (arg.live) {
try {
await live()
} catch (err) {
log.error('Error running in live control mode', err)
}
}
}
program
.version(pkg.version)
.option('-l, --live', 'Live control mode')
.option('-f, --frames', 'Number of frames to capture with camera')
.option('-p, --pattern', 'Pattern of sequence to be repeated')
.option('-i, --intval', 'URL of intval3')
.option('-m, --mscript', 'Execute an mscript file')
.option('-q, --quiet', 'Suppresses all log messages')
.parse(process.argv)
main(program)