UNPKG

cycle-ev3dev

Version:

A cycle driver for ev3dev lego system

70 lines (60 loc) 1.88 kB
const driver = require('./driver'); const _ = require('lodash'); const xs = require('xstream').default; function createSimpleProducer() { let _listerner = null; return { dispatchError(error) { if(_listerner)_listerner.error(error); }, dispatchNext(data) { if(_listerner)_listerner.next(data); }, dispatchComplete(data) { if(_listerner)_listerner.complete(data); }, start(listener) { _listerner = listener; }, stop() { if(_listerner)_listerner=null; } } } exports.makeEv3devDriver = function makeEv3devDriver() { return function ev3devDriver(events$) { const producer = createSimpleProducer(); events$.addListener({ next: outgoing => { _.each(outgoing, (list, type) => _.each(list, (attrs, name) => { const path = driver.getDriverPath(type, name); try { driver.writeList(path, attrs); }catch(e){ producer.dispatchError(e); } }) ); }, error: () => { }, complete: () => { }, }); return { messages() { return xs.create(producer); }, getDriver(type, name) { const path = driver.getDriverPath(type, name); return { watch(attribute, interval = 500) { return driver.watch(path, attribute, interval); }, read(attribute) { return driver.read(path, attribute); } } } } } }