const wrap = (p) => { p.out = differ() p.out.pipe(process.stdout) p.bell = () => { p.out.write(esc.beep) } if ('function' !== typeof p._) p._ = p.bell const onKey = (key) => { let a = action(key) if (a === 'abort') return p.close() if (a === false) p._(key.raw) else if ('function' === typeof p[a]) p[a](key) else p.out.write(esc.beep) } const onNewSize = () => { const {width, height} = termSize() p.out.reset() p.render(true) } let offKeypress, offResize const pause = () => { if (!offKeypress) return offKeypress() offKeypress = null offResize() offResize = null process.stdout.write(esc.cursorShow) } p.pause = pause const resume = () => { if (offKeypress) return offKeypress = onKeypress(process.stdin, onKey) offResize = onResize(process.stdout, onNewSize) process.stdout.write(esc.cursorHide) } p.resume = resume return new Promise((resolve, reject) => { let isClosed = false p.close = () => { if (isClosed) return null isClosed = true p.out.unpipe(process.stdout) pause() if (p.aborted) reject(p.value) else resolve(p.value) } process.on('beforeExit', () => p.close()) if ('function' !== typeof p.submit) p.submit = p.close resume() p.render(true) }) }
} else interval = 30 * 1000 const recording = record(stations, interval, dbPath) recording.on('error', (err) => { if (!err.isHafasError || process.env.NODE_DEBUG === 'record-vbb-delays') { console.error(err) } else console.error(err && err.message || (err + '')) }) process.once('beforeExit', () => recording.stop()) if (!argv.quiet && !argv.q) { const clearReports = isatty(process.stderr.fd) let reporter = process.stderr if (clearReports) { reporter = differ() reporter.pipe(process.stderr) recording.on('error', () => { process.stderr.write('\n') reporter.reset() }) } const report = ({reqs, departures, avgDuration}) => { reporter.write([ reqs + (reqs === 1 ? ' request' : ' requests'), departures + (departures === 1 ? ' departure' : ' departures'), '~ ' + Math.round(avgDuration) + ' ms/req' ].join(', ') + (clearReports ? '' : '\n')) } recording.on('stats', report)
'use strict' const rtlsdr = require('rtl-sdr') const decoder = require('mode-s-decoder') const differ = require('ansi-diff-stream') const printf = require('printf') const DEFAULT_RATE = 2000000 const DEFAULT_FREQ = 1090000000 const ASYNC_BUF_NUMBER = 12 const DATA_LEN = 16 * 16384 // 256k const AUTO_GAIN = -100 // Use automatic gain const MAX_GAIN = 999999 // Use max available gain // setup console output const diff = differ() diff.pipe(process.stdout) const aircrafts = {} const self = decoder.init() const dev = setup() let mag const noop = function () {} rtlsdr.read_async(dev, onData, noop, ASYNC_BUF_NUMBER, DATA_LEN) function onData (data, len) { if (!mag) mag = new Uint16Array(len / 2) decoder.computeMagnitudeVector(data, mag, len) decoder.detect(self, mag, len / 2, onMsg)