@iotize/tap
Version:
IoTize Device client for Javascript
162 lines • 12.8 kB
JavaScript
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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