UNPKG

raspi-io-server-utils

Version:

Utilities for interacting with Raspberry IOs and Raspbian

112 lines 6.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const EventEmitter = require('events'); const rpio = require('rpio'); var InputMode; (function (InputMode) { InputMode["PULLUP"] = "PULLUP"; InputMode["PULLDOWN"] = "PULLDOWN"; InputMode["OFF"] = "OFF"; })(InputMode = exports.InputMode || (exports.InputMode = {})); /** * Digital input which listens to rising edges. * Keeps the state until reset. * * ## Events * * ### `enable` * * Emitted when the input changes to logical HIGH (depending on the `highIsOff` settings) * * ### `disable` * * Emitted when the input changes to logical LOW */ class DigitalInput extends EventEmitter { /** * Creates a new digital input which is polled for changes. When the pin changes, * an `enable` or `disable` event is emitted. * * @param pin Physical pin to read * @param highIsOff Invert the input: low = on, high = off * @param inputMode Defines which input resistors (pullup, pulldown, or none) are used. */ constructor(pin, highIsOff = false, inputMode = InputMode.OFF) { super(); this._pin = pin; this._tEnabled = undefined; this._highIsOff = highIsOff; this._inputMode = inputMode; this._currentStatus = false; this._ON = highIsOff ? rpio.LOW : rpio.HIGH; this.reset(); let rpioInputMode = rpio.OFF; switch (inputMode) { case InputMode.PULLUP: rpioInputMode = rpio.PULL_UP; break; case InputMode.PULLDOWN: rpioInputMode = rpio.PULL_DOWN; break; } try { rpio.open(pin, rpio.INPUT, rpioInputMode); } catch (e) { throw new Error(`Could not open output pin ${pin}: ${e.message || e}`); } rpio.poll(pin, () => this._stateChanged(), rpio.POLL_BOTH); // Read initial status this._stateChanged(); } get pin() { return this._pin; } get status() { return { pin: this.pin, status: this.currentStatus, tEnabled: this.tEnabled, highIsOff: this._highIsOff, inputMode: this._inputMode, }; } /** * @returns Timestamp when the input was activated the last time */ get tEnabled() { return this._tEnabled; } /** * @returns true, if the input is currently HIGH */ get currentStatus() { return this._currentStatus; } reset() { this._tEnabled = -1; } setActivated() { this._tEnabled = Date.now(); setImmediate(() => this.emit('enable')); } setDeactivated() { setImmediate(() => this.emit('disable')); } _stateChanged() { const status = rpio.read(this._pin); const oldStatus = this._currentStatus; if (status === this._ON) { this._currentStatus = true; if (!oldStatus) this.setActivated(); } else { this._currentStatus = false; if (oldStatus) this.setDeactivated(); } } } exports.DigitalInput = DigitalInput; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlnaXRhbC1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pby9kaWdpdGFsLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFFLFFBQVEsQ0FBRSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBRSxNQUFNLENBQUUsQ0FBQztBQUUvQixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIsOEJBQWlCLENBQUE7SUFDakIsa0NBQXFCLENBQUE7SUFDckIsd0JBQVcsQ0FBQTtBQUNmLENBQUMsRUFKVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUlwQjtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxZQUFZO0lBUzFDOzs7Ozs7O09BT0c7SUFDSCxZQUFhLEdBQVksRUFBRSxZQUFzQixLQUFLLEVBQUUsWUFBd0IsU0FBUyxDQUFDLEdBQUc7UUFDekYsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU1QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzdCLFFBQVMsU0FBUyxFQUFHO1lBQ2pCLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ2pCLGFBQWEsR0FB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