UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

142 lines 11.9 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/variable'; import '@iotize/tap/service/impl/target'; import '@iotize/tap/service/impl/interface'; import { createTapBundleFromConfig, TLV_BUNDLE_CONVERTER, } from '../target-variable/tap-bundle/tap-bundle'; import { TypedDataManager } from './data-manager'; export function createTapBundlesFromConfig(tap, bundles) { const bundleDataStreams = {}; for (const name in bundles) { bundleDataStreams[name] = createTapBundleFromConfig(tap, name, bundles[name]); } return bundleDataStreams; } export function createDataManagerFromTapConfig(tap, config) { const { bundles } = config; return new TypedDataManager(tap, createTapBundlesFromConfig(tap, bundles)); } export function readDataManagerTapConfigFromTap(tap, config = { bundleIdNameMap: {}, variableIdNameMap: {}, }) { return __awaiter(this, void 0, void 0, function* () { const { bundleIdNameMap, variableIdNameMap, observer } = config; (yield tap.service.target.connect()).successful(); const readProfileResponse = yield tap.service.variable.readProfile(); // if (!readProfileResponse.isSuccessful()) { // switch (readProfileResponse.status) { // case ResultCode.SERVICE_UNAVAILABLE: // // If service is unavailable, it probably means that target is not connected yet // (await tap.service.target.connect()).successful(); // readProfileResponse = await tap.service.variable.readProfile(); // break; // default: // // Throw error otherwise // readProfileResponse.successful(); // } // } readProfileResponse.successful(); const rawBundleData = readProfileResponse.rawBody(); const profileData = TLV_BUNDLE_CONVERTER.decode(rawBundleData); const bundles = {}; const variableCount = Object.keys(profileData).length; let index = 0; observer === null || observer === void 0 ? void 0 : observer.next({ step: 'start-read-variable-config', profileData, progress: { loaded: index, total: variableCount, }, }); for (const variableId in profileData) { const variableIdInt = parseInt(variableId, 10); if (isNaN(variableIdInt)) { throw new Error(`Invalid variable integer identifier: ${variableId}`); continue; } observer === null || observer === void 0 ? void 0 : observer.next({ step: 'read-variable', variableId: variableIdInt, progress: { loaded: index + 1, total: variableCount, }, }); const { bundleId, variableName, config: variableInfo, } = yield readTapVariableConfigFromTap(tap, variableIdInt, variableIdNameMap ? variableIdNameMap[variableIdInt] : undefined); let bundleName; if (bundleIdNameMap && bundleId in bundleIdNameMap) { bundleName = bundleIdNameMap[bundleId]; } else { let readBundleName = (yield tap.service.bundle.getName(bundleId)).body(); // Fix bug on firmware versions that returns fixed size for bundle name (at least until firmware v1.106) const endOfStringIndex = readBundleName.indexOf('\u0000'); if (endOfStringIndex >= 0) { readBundleName = readBundleName.substr(0, endOfStringIndex); } if (!readBundleName) { bundleName = bundleId; } else { bundleName = readBundleName; } } if (!(bundleName in bundles)) { bundles[bundleName] = { id: bundleId, variables: {}, }; } else { // TODO what to do when duplicated bundle name ? } bundles[bundleName].variables[variableName] = variableInfo; index++; } observer === null || observer === void 0 ? void 0 : observer.next({ step: 'end-read-variable-config', progress: { loaded: variableCount, total: variableCount, }, }); return bundles; }); } export function readTapVariableConfigFromTap(tap, variableId, variableName) { return __awaiter(this, void 0, void 0, function* () { const [typeResponse, bundleIdResponse, lengthResponse, metaResponse] = yield tap.service.interface.executeMultipleCalls([ tap.service.variable.getTypeCall(variableId), tap.service.variable.getBundleIdCall(variableId), tap.service.variable.getNumberOfElementsCall(variableId), tap.service.variable.getMetaCall(variableId), ]); const bundleId = bundleIdResponse.body(); const variableType = typeResponse.body(); const length = lengthResponse.body(); const dataType = variableType.data; if (!variableName) { const meta = metaResponse.body(); variableName = meta.name || variableId.toString(); } return { bundleId, variableName, config: { id: variableId, dataType, length, }, }; }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhdGEtbWFuYWdlci1mcm9tLXRhcC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kYXRhL3NyYy9saWIvZGF0YS1tYW5hZ2VyL2NyZWF0ZS1kYXRhLW1hbmFnZXItZnJvbS10YXAtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLG9DQUFvQyxDQUFDO0FBUTVDLE9BQU8sRUFDTCx5QkFBeUIsRUFFekIsb0JBQW9CLEdBRXJCLE1BQU0sMENBQTBDLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXbEQsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxHQUFRLEVBQ1IsT0FBZ0M7SUFFaEMsTUFBTSxpQkFBaUIsR0FBUSxFQUFFLENBQUM7SUFFbEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7UUFDMUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcseUJBQXlCLENBQ2pELEdBQUcsRUFDSCxJQUFJLEVBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUNkLENBQUM7S0FDSDtJQUNELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsR0FBUSxFQUNSLE1BQXNDO0lBRXRDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFM0IsT0FBTyxJQUFJLGdCQUFnQixDQUN6QixHQUFHLEVBQ0gsMEJBQTBCLENBQVcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUNuRCxDQUFDO0FBQ0osQ0FBQztBQWtCRCxNQUFNLFVBQWdCLCtCQUErQixDQU1uRCxHQUFRLEVBQ1IsU0FJSTtJQUNGLGVBQWUsRUFBRSxFQUFFO0lBQ25CLGlCQUFpQixFQUFFLEVBQUU7Q0FDdEI7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