FlipFlop Machine

by Rowan Hamilton

JavaScript

var DVMTriggers = { inputs:
   { trigger0: { config: '02' },
     trigger1: { config: '01' },
     trigger2: { config: '01' },
     trigger3: { config: '01' },
     trigger4: { config: '01' },
     trigger5: { config: '00' } },
  outputs: {} }

// Define dummy functions in the global scope.
mirror_trigger_zero = function(toggle) {
	console.log('mirror_trigger_zero');
}
mirror_trigger_one = function(toggle) {
	console.log('mirror_trigger_one');
}
mirror_trigger_two = function(toggle) {
	console.log('mirror_trigger_two');
}
mirror_trigger_three = function(toggle) {
	console.log('mirror_trigger_three');
}
mirror_trigger_four = function(toggle) {
	console.log('mirror_trigger_four');
}
mirror_trigger_five = function(toggle) {
	console.log('mirror_trigger_five');
}

function getConfigOfTrigger(triggerNum) {
	var setting = DVMTriggers["inputs"]["trigger" + String(triggerNum)]["config"];
	return setting;
}

function flipFlopMachine(configString) {
	/**
	 * Build function based on a configuration string value.
	 * Returned function looks to see if trigger is held down,
	 *   based on initially passed in config settings.
	 *   Returns boolean of whether the trigger is active or inactive.
	 * Input: Expected valid config value of '00', '01', or '02'.
	 * Output: Function.
	 * Returned Function Input: true case for a sensor value. Assume a boolean state.
	*/
	let result = null;
	switch (configString) {
		case '00': // Not used
			result = function(pinMessageValue) {
				// Trigger will never be active.
				return false;
			}
			break;
		case '01': // Low to High
			result = function(pinMessageValue) {
				// Return true for high messages.
				return  pinMessageValue;
			}
			break;
		case '02': // High to Low
			result = function(pinMessageValue) {
				// Return true for low messages.
				return !pinMessageValue;
			}
			break;
		default:
			console.error('Unexpected configString', configString, 'passed into function makeTriggerCheckFunction.');
			break;
	}
	return...