output_devices/DigitalOutputDevice.js

const OutputDevice = require ('./OutputDevice.js').OutputDevice;
const inherit = require('../tools.js').inherit;

exports.DigitalOutputDevice = DigitalOutputDevice;

/**
 * Represents a generic output device with typical on/off behaviour. This class extends {@link OutputDevice}
 * with a {@link DigitalOutputDevice#blink|blink} method which toggles the device state without further interaction.
 *
 * @param {(int | Pin)} pin - The GPIO pin (in BCM numbering) or an instance of Pin that the device is connected to.
 * @param {boolean} [active_high] - If `true` (the default), the {@link OutputDevice#on|on} method will set the GPIO to HIGH.
 * If `false`, the {@link OutputDevice#on|on} method will set the GPIO to LOW (the {@link OutputDevice#off|off} method always does the opposite).
 * @param {boolean} [initial_value] - If `false` (the default), the device will be off initially.
 * If `undefined`, the device will be left in whatever state the pin is found in when configured for output (warning: this can be on).  If `true`, the device will be switched on initially.
 *
 * @throws GPIOPinMissing - When pin is undefined.
 * @class
 * @augments OutputDevice
 */
function DigitalOutputDevice(pin, active_high, initial_value) {
    OutputDevice.call(this, pin, active_high, initial_value);
}

DigitalOutputDevice.prototype = inherit(OutputDevice.prototype);
DigitalOutputDevice.prototype.constructor = DigitalOutputDevice;

/**
 * Make the device turn on and off repeatedly.
 *
 * @param {float} on_time - Number of seconds on. Defaults to 1 second.
 * @param {float} off_time - Number of seconds off. Defaults to 1 second.
 * @param {int} n - Number of times to blink; ``None`` (the default) means forever.
 * @param {@callback} callback - Function to be called upon completion in the form (error, data).
 */
DigitalOutputDevice.prototype.blink = function(on_time, off_time, n, callback) {
    this._pin.blink(on_time, off_time, n, callback);
};