Compare commits
	
		
			1 Commits
		
	
	
		
			mct5494-sk
			...
			square-wav
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 344cbbb92d | 
| @@ -5,6 +5,38 @@ define([ | ||||
| ) { | ||||
|  | ||||
|     var METADATA_BY_TYPE = { | ||||
|         'squareWaveGenerator': { | ||||
|             values: [ | ||||
|                 { | ||||
|                     key: "name", | ||||
|                     name: "Name" | ||||
|                 }, | ||||
|                 { | ||||
|                     key: "utc", | ||||
|                     name: "Time", | ||||
|                     format: "utc", | ||||
|                     hints: { | ||||
|                         domain: 1 | ||||
|                     } | ||||
|                 }, | ||||
|                 { | ||||
|                     key: "yesterday", | ||||
|                     name: "Yesterday", | ||||
|                     format: "utc", | ||||
|                     hints: { | ||||
|                         domain: 2 | ||||
|                     } | ||||
|                 }, | ||||
|                 { | ||||
|                     key: "square", | ||||
|                     name: "Square", | ||||
|                     formatString: '%d', | ||||
|                     hints: { | ||||
|                         range: 1 | ||||
|                     } | ||||
|                 } | ||||
|             ] | ||||
|         }, | ||||
|         'generator': { | ||||
|             values: [ | ||||
|                 { | ||||
|   | ||||
							
								
								
									
										68
									
								
								example/generator/SquareWaveGeneratorProvider.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								example/generator/SquareWaveGeneratorProvider.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| define([ | ||||
|     './WorkerInterface' | ||||
| ], function ( | ||||
|     WorkerInterface | ||||
| ) { | ||||
|     var REQUEST_DEFAULTS = { | ||||
|         amplitude: 1, | ||||
|         period: 10, | ||||
|         offset: 0, | ||||
|         dataRateInHz: 1, | ||||
|         phase: 0 | ||||
|     }; | ||||
|  | ||||
|     function SquareWaveGeneratorProvider() { | ||||
|         this.workerInterface = new WorkerInterface(); | ||||
|     } | ||||
|  | ||||
|     SquareWaveGeneratorProvider.prototype.canProvideTelemetry = function (domainObject) { | ||||
|         return domainObject.type === 'squareWaveGenerator'; | ||||
|     }; | ||||
|  | ||||
|     SquareWaveGeneratorProvider.prototype.supportsRequest = | ||||
|         SquareWaveGeneratorProvider.prototype.supportsSubscribe = | ||||
|             SquareWaveGeneratorProvider.prototype.canProvideTelemetry; | ||||
|  | ||||
|     SquareWaveGeneratorProvider.prototype.makeWorkerRequest = function (domainObject, request) { | ||||
|         var props = [ | ||||
|             'amplitude', | ||||
|             'period', | ||||
|             'offset', | ||||
|             'dataRateInHz', | ||||
|             'phase', | ||||
|         ]; | ||||
|  | ||||
|         request = request || {}; | ||||
|  | ||||
|         var workerRequest = {}; | ||||
|  | ||||
|         props.forEach(function (prop) { | ||||
|             if (domainObject.telemetry && domainObject.telemetry.hasOwnProperty(prop)) { | ||||
|                 workerRequest[prop] = domainObject.telemetry[prop]; | ||||
|             } | ||||
|             if (request && request.hasOwnProperty(prop)) { | ||||
|                 workerRequest[prop] = request[prop]; | ||||
|             } | ||||
|             if (!workerRequest.hasOwnProperty(prop)) { | ||||
|                 workerRequest[prop] = REQUEST_DEFAULTS[prop]; | ||||
|             } | ||||
|             workerRequest[prop] = Number(workerRequest[prop]); | ||||
|         }); | ||||
|         workerRequest.name = domainObject.name; | ||||
|         return workerRequest; | ||||
|     }; | ||||
|  | ||||
|     SquareWaveGeneratorProvider.prototype.request = function (domainObject, request) { | ||||
|         var workerRequest = this.makeWorkerRequest(domainObject, request); | ||||
|         workerRequest.start = request.start; | ||||
|         workerRequest.end = request.end; | ||||
|         return this.workerInterface.request(workerRequest); | ||||
|     }; | ||||
|  | ||||
|     SquareWaveGeneratorProvider.prototype.subscribe = function (domainObject, callback) { | ||||
|         var workerRequest = this.makeWorkerRequest(domainObject, {}); | ||||
|         return this.workerInterface.subscribe(workerRequest, callback); | ||||
|     }; | ||||
|  | ||||
|     return SquareWaveGeneratorProvider; | ||||
| }); | ||||
| @@ -66,7 +66,8 @@ | ||||
|                         utc: nextStep, | ||||
|                         yesterday: nextStep - 60*60*24*1000, | ||||
|                         sin: sin(nextStep, data.period, data.amplitude, data.offset, data.phase, data.randomness), | ||||
|                         cos: cos(nextStep, data.period, data.amplitude, data.offset, data.phase, data.randomness) | ||||
|                         cos: cos(nextStep, data.period, data.amplitude, data.offset, data.phase, data.randomness), | ||||
|                         square: square(nextStep, data.period, data.amplitude, data.offset, data.phase) | ||||
|                     } | ||||
|                 }); | ||||
|                 nextStep += step; | ||||
| @@ -112,7 +113,8 @@ | ||||
|                 utc: nextStep, | ||||
|                 yesterday: nextStep - 60*60*24*1000, | ||||
|                 sin: sin(nextStep, period, amplitude, offset, phase, randomness), | ||||
|                 cos: cos(nextStep, period, amplitude, offset, phase, randomness) | ||||
|                 cos: cos(nextStep, period, amplitude, offset, phase, randomness), | ||||
|                 square: square(nextStep, period, amplitude, offset, phase) | ||||
|             }); | ||||
|         } | ||||
|         self.postMessage({ | ||||
| @@ -121,6 +123,12 @@ | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     function square(timestamp, period, amplitude, offset, phase) { | ||||
|         var sinValue = Math.sin(phase + (timestamp / period / 1000 * Math.PI * 2)) + offset; | ||||
|         var value = sinValue > 0 ? amplitude : -amplitude; | ||||
|         return value; | ||||
|     } | ||||
|  | ||||
|     function cos(timestamp, period, amplitude, offset, phase, randomness) { | ||||
|         return amplitude * | ||||
|             Math.cos(phase + (timestamp / period / 1000 * Math.PI * 2)) + (amplitude * Math.random() * randomness) + offset; | ||||
|   | ||||
| @@ -25,11 +25,13 @@ define([ | ||||
|     "./GeneratorProvider", | ||||
|     "./SinewaveLimitProvider", | ||||
|     "./StateGeneratorProvider", | ||||
|     "./SquareWaveGeneratorProvider", | ||||
|     "./GeneratorMetadataProvider" | ||||
| ], function ( | ||||
|     GeneratorProvider, | ||||
|     SinewaveLimitProvider, | ||||
|     StateGeneratorProvider, | ||||
|     SquareWaveGeneratorProvider, | ||||
|     GeneratorMetadataProvider | ||||
| ) { | ||||
|  | ||||
| @@ -62,6 +64,80 @@ define([ | ||||
|  | ||||
|         openmct.telemetry.addProvider(new StateGeneratorProvider()); | ||||
|  | ||||
|         openmct.types.addType("squareWaveGenerator", { | ||||
|             name: "Square Wave Generator", | ||||
|             description: "For development use. Generates example streaming telemetry data using a simple sqaure wave algorithm.", | ||||
|             cssClass: "icon-generator-telemetry", | ||||
|             creatable: true, | ||||
|             form: [ | ||||
|                 { | ||||
|                     name: "Period", | ||||
|                     control: "numberfield", | ||||
|                     cssClass: "l-input-sm l-numeric", | ||||
|                     key: "period", | ||||
|                     required: true, | ||||
|                     property: [ | ||||
|                         "telemetry", | ||||
|                         "period" | ||||
|                     ] | ||||
|                 }, | ||||
|                 { | ||||
|                     name: "Amplitude", | ||||
|                     control: "numberfield", | ||||
|                     cssClass: "l-input-sm l-numeric", | ||||
|                     key: "amplitude", | ||||
|                     required: true, | ||||
|                     property: [ | ||||
|                         "telemetry", | ||||
|                         "amplitude" | ||||
|                     ] | ||||
|                 }, | ||||
|                 { | ||||
|                     name: "Offset", | ||||
|                     control: "numberfield", | ||||
|                     cssClass: "l-input-sm l-numeric", | ||||
|                     key: "offset", | ||||
|                     required: true, | ||||
|                     property: [ | ||||
|                         "telemetry", | ||||
|                         "offset" | ||||
|                     ] | ||||
|                 }, | ||||
|                 { | ||||
|                     name: "Data Rate (hz)", | ||||
|                     control: "numberfield", | ||||
|                     cssClass: "l-input-sm l-numeric", | ||||
|                     key: "dataRateInHz", | ||||
|                     required: true, | ||||
|                     property: [ | ||||
|                         "telemetry", | ||||
|                         "dataRateInHz" | ||||
|                     ] | ||||
|                 }, | ||||
|                 { | ||||
|                     name: "Phase (radians)", | ||||
|                     control: "numberfield", | ||||
|                     cssClass: "l-input-sm l-numeric", | ||||
|                     key: "phase", | ||||
|                     required: true, | ||||
|                     property: [ | ||||
|                         "telemetry", | ||||
|                         "phase" | ||||
|                     ] | ||||
|                 } | ||||
|             ], | ||||
|             initialize: function (object) { | ||||
|                 object.telemetry = { | ||||
|                     period: 10, | ||||
|                     amplitude: 5, | ||||
|                     offset: 0, | ||||
|                     dataRateInHz: 10, | ||||
|                     phase: 0 | ||||
|                 }; | ||||
|             } | ||||
|         }); | ||||
|         openmct.telemetry.addProvider(new SquareWaveGeneratorProvider()); | ||||
|  | ||||
|         openmct.types.addType("generator", { | ||||
|             name: "Sine Wave Generator", | ||||
|             description: "For development use. Generates example streaming telemetry data using a simple sine wave algorithm.", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user