@iotize/tap
Version:
IoTize Device client for Javascript
142 lines • 11.9 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/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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