UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

162 lines 12.8 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import '@iotize/tap/service/impl/target'; import { GPIOMode } from '@iotize/tap/service/impl/gpio'; import { debug } from './debug'; import { CONFIGURE_MASK, DIRECT_ACCESS_GPIO_FORMAT } from './definitions'; import { GPIO_MAPPING } from './gpio-mapping'; import { encodeMultiAddressInfo, encodeMultiIndexData, } from './tap-gpio-converter'; export class GPIOManager { constructor(tap) { this.tap = tap; this._cache = {}; } getPinByIndex(index) { if (!(index in this._cache)) { this._cache[index] = new GPIOPin(this.tap, index); } return this._cache[index]; } /** * TODO min api version ? * @param options */ readValues(indexs) { return __awaiter(this, void 0, void 0, function* () { return this._readMuliple(indexs || GPIO_MAPPING.map((pin) => pin.index), false); }); } /** * TODO min api version ? * @param options */ readConfig(indexs) { return __awaiter(this, void 0, void 0, function* () { return this._readMuliple(indexs || GPIO_MAPPING.map((pin) => pin.index), true); }); } _readMuliple(indexs, config) { return __awaiter(this, void 0, void 0, function* () { const memoryInfo = encodeMultiAddressInfo(indexs, config); const results = (yield this.tap.service.target.readAddress(memoryInfo)).body(); const formwattedResult = Array.from(results).map((v, index) => { return { index: memoryInfo.address + index, value: (config ? v : !!v), }; }); return formwattedResult; }); } writeValues(indexValues) { return __awaiter(this, void 0, void 0, function* () { if (typeof indexValues === 'boolean') { indexValues = GPIO_MAPPING.map((pin) => ({ index: pin.index, value: indexValues, })); } const indexs = indexValues.map((info) => info.index); const memoryInfo = encodeMultiAddressInfo(indexs); const encodedData = encodeMultiIndexData(indexValues); (yield this.tap.service.target.writeAddress({ data: encodedData, info: memoryInfo, })).successful(); }); } /** * TODO min api version ? * @param options */ writeConfig(indexValues) { return __awaiter(this, void 0, void 0, function* () { if (typeof indexValues === 'number') { indexValues = GPIO_MAPPING.map((pin) => ({ index: pin.index, value: indexValues, })); } const indexs = indexValues.map((info) => info.index); const memoryInfo = encodeMultiAddressInfo(indexs, true); const encodedData = encodeMultiIndexData(indexValues); (yield this.tap.service.target.writeAddress({ data: encodedData, info: memoryInfo, })).successful(); }); } } export function pinIndexToConfigureAddress(index) { return (CONFIGURE_MASK | index) >>> 0; } export class GPIOPin { constructor(tap, index) { this.tap = tap; this.index = index; } readConfig() { return __awaiter(this, void 0, void 0, function* () { debug(`Read config for pin=${this.index}...`); const body = (yield this.tap.service.target.readAddress({ address: pinIndexToConfigureAddress(this.index), format: DIRECT_ACCESS_GPIO_FORMAT, length: 1, })).body(); // TODO check body.length >= 1 return body[0]; }); } writeConfig(options) { return __awaiter(this, void 0, void 0, function* () { if (!(options.mode in GPIOMode)) { throw new Error(`Unknown mode GPIO mode ${options.mode}`); } debug(`writeConfig on pin=${this.index}`, GPIOMode[options.mode]); (yield this.tap.service.target.writeAddress({ data: Uint8Array.from([options.mode]), info: { address: pinIndexToConfigureAddress(this.index), format: DIRECT_ACCESS_GPIO_FORMAT, length: 1, }, })).successful(); }); } readValue() { return __awaiter(this, void 0, void 0, function* () { const rawBody = (yield this.tap.service.target.readAddress({ address: this.index, format: DIRECT_ACCESS_GPIO_FORMAT, length: 1, })).body(); if (rawBody.length !== 1) { throw new Error(`Unexpected Tap response for read Address. Should be 1 byte but received ${rawBody.length} bytes`); } const value = !!rawBody[0]; debug(`Read value for pin=${this.index} ==> ${value}`); return value; }); } writeValue(value) { return __awaiter(this, void 0, void 0, function* () { debug(`Write value on pin=${this.index}; ${value}`); return (yield this.tap.service.target.writeAddress({ data: value ? Uint8Array.from([1]) : Uint8Array.from([0]), info: { address: this.index, format: DIRECT_ACCESS_GPIO_FORMAT, length: 1, }, })).body(); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLWdwaW8tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2dwaW8vc3JjL2xpYi90YXAtZ3Bpby1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFHekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsR0FDckIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixNQUFNLE9BQU8sV0FBVztJQUd0QixZQUE0QixHQUFRO1FBQVIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUY1QixXQUFNLEdBQTRCLEVBQUUsQ0FBQztJQUVOLENBQUM7SUFFeEMsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNHLFVBQVUsQ0FDZCxNQUFpQjs7WUFFakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUN0QixNQUFNLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUM5QyxLQUFLLENB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