mirror of
https://github.com/nasa/openmct.git
synced 2025-05-02 16:53:24 +00:00
[Plot] Add sine wave generator example
Add sine wave generator as an example of a domain object which exposes telemetry, to support transition of the Plot view. WTD-533.
This commit is contained in:
parent
7836fe5fbb
commit
3909ddcd14
40
example/generator/bundle.json
Normal file
40
example/generator/bundle.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Sine Wave Generator",
|
||||||
|
"description": "Example of a component that produces dataa.",
|
||||||
|
"extensions": {
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"implementation": "SinewaveTelemetryProvider.js",
|
||||||
|
"type": "provider",
|
||||||
|
"provides": "telemetryService",
|
||||||
|
"depends": [ "$q", "$timeout" ]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"key": "generator",
|
||||||
|
"name": "Sine Wave Generator",
|
||||||
|
"glyph": "T",
|
||||||
|
"description": "A sine wave generator",
|
||||||
|
"model": {
|
||||||
|
"telemetry": {
|
||||||
|
"period": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"source": "generator"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"label": "Period",
|
||||||
|
"control": "_textfield",
|
||||||
|
"key": "period",
|
||||||
|
"required": true,
|
||||||
|
"property": [ "telemetry", "period" ],
|
||||||
|
"pattern": "^\\d*(\\.\\d*)?$"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
42
example/generator/src/SinewaveTelemetry.js
Normal file
42
example/generator/src/SinewaveTelemetry.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*global define,Promise*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module defining SinewaveTelemetry. Created by vwoeltje on 11/12/14.
|
||||||
|
*/
|
||||||
|
define(
|
||||||
|
[],
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var firstObservedTime = Date.now();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
function SinewaveTelemetry(request) {
|
||||||
|
var latestObservedTime = Date.now(),
|
||||||
|
count = Math.floor((latestObservedTime - firstObservedTime) / 1000),
|
||||||
|
period = request.period || 30,
|
||||||
|
generatorData = {};
|
||||||
|
|
||||||
|
generatorData.getPointCount = function () {
|
||||||
|
return count;
|
||||||
|
};
|
||||||
|
|
||||||
|
generatorData.getDomainValue = function (i, domain) {
|
||||||
|
return i * 1000 +
|
||||||
|
(domain !== 'delta' ? firstObservedTime : 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
generatorData.getRangeValue = function (i, range) {
|
||||||
|
range = range || "sin";
|
||||||
|
return Math[range](i * Math.PI * 2 / period);
|
||||||
|
};
|
||||||
|
|
||||||
|
return generatorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SinewaveTelemetry;
|
||||||
|
}
|
||||||
|
);
|
53
example/generator/src/SinewaveTelemetryProvider.js
Normal file
53
example/generator/src/SinewaveTelemetryProvider.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*global define,Promise*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module defining SinewaveTelemetryProvider. Created by vwoeltje on 11/12/14.
|
||||||
|
*/
|
||||||
|
define(
|
||||||
|
["./SinewaveTelemetry"],
|
||||||
|
function (SinewaveTelemetry) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
function SinewaveTelemetryProvider($q, $timeout) {
|
||||||
|
|
||||||
|
//
|
||||||
|
function matchesSource(request) {
|
||||||
|
return request.source === "generator";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used internally; this will be repacked by doPackage
|
||||||
|
function generateData(request) {
|
||||||
|
return {
|
||||||
|
key: request.key,
|
||||||
|
telemetry: new SinewaveTelemetry(request)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
function doPackage(results) {
|
||||||
|
var packaged = {};
|
||||||
|
results.forEach(function (result) {
|
||||||
|
packaged[result.key] = result.telemetry;
|
||||||
|
});
|
||||||
|
// Format as expected (sources -> keys -> telemetry)
|
||||||
|
return { generator: packaged };
|
||||||
|
}
|
||||||
|
|
||||||
|
function requestTelemetry(requests) {
|
||||||
|
return $timeout(function () {
|
||||||
|
return doPackage(requests.filter(matchesSource).map(generateData));
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
requestTelemetry: requestTelemetry
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return SinewaveTelemetryProvider;
|
||||||
|
}
|
||||||
|
);
|
Loading…
x
Reference in New Issue
Block a user