Example #1
0
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)
	})
}
Example #2
0
	} 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)
Example #3
0
'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)