raspi-io-server-utils
Version:
Utilities for interacting with Raspberry IOs and Raspbian
112 lines • 6.51 kB
JavaScript
"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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