diff --git a/GazeWebSocketServer/Program.cs b/GazeWebSocketServer/Program.cs index be567ae..51f01a3 100644 --- a/GazeWebSocketServer/Program.cs +++ b/GazeWebSocketServer/Program.cs @@ -11,7 +11,7 @@ namespace GazeWebSocketServer public class Program { private static GazeServer gazeServer; - private static GazeDecimator decimator = new GazeDecimator(1, 600); + private static GazeDecimatorFixedLength decimator = new GazeDecimatorFixedLength(1, 600); public static void Main(string[] args) { @@ -20,7 +20,7 @@ namespace GazeWebSocketServer if (args.Length > 0 && args[0] == "-d") { - Task.Run(() => SimulateGazeDataHz(10)); + Task.Run(() => SimulateGazeDataHz(600)); } else { diff --git a/TrackerBridge/DSP/GazeDecimator.cs b/TrackerBridge/DSP/GazeDecimatorFixedLength.cs similarity index 92% rename from TrackerBridge/DSP/GazeDecimator.cs rename to TrackerBridge/DSP/GazeDecimatorFixedLength.cs index 39eca61..6c42673 100644 --- a/TrackerBridge/DSP/GazeDecimator.cs +++ b/TrackerBridge/DSP/GazeDecimatorFixedLength.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace TrackerBridge.DSP { - public class GazeDecimator : IGazeFilter + public class GazeDecimatorFixedLength : IGazeFilter { private GazeData[] buffer; private Int32 currentValueIndex; @@ -17,6 +17,8 @@ namespace TrackerBridge.DSP private Object outputLock = new Object(); private Object inputLock = new Object(); + public event EventHandler OutputAvailable; + public Single InputFrequency { get { return inputFrequency; } set { @@ -39,6 +41,7 @@ namespace TrackerBridge.DSP } } } + public Single OutputFrequency { get { return outputFrequency; } set { @@ -47,7 +50,7 @@ namespace TrackerBridge.DSP } } - public GazeDecimator(Single outputFrequency, Single inputFrequency) + public GazeDecimatorFixedLength(Single outputFrequency, Single inputFrequency) { this.outputFrequency = outputFrequency; this.inputFrequency = inputFrequency; @@ -58,29 +61,32 @@ namespace TrackerBridge.DSP { lock (inputLock) { - buffer[currentValueIndex] = input; currentValueIndex = (currentValueIndex + 1) % buffer.Length; + } + buffer[currentValueIndex] = input; - if (currentValueIndex == 0) + if (currentValueIndex == buffer.Length-1) + { + GazeData sum = buffer[0]; + for (Int32 index = 1; index < buffer.Length; index++) { - GazeData sum = buffer[0]; - for (Int32 index = 1; index < buffer.Length; index++) - { - sum += buffer[index]; - } - lock (outputLock) - { - output = sum / buffer.Length; - } + sum += buffer[index]; + } + sum /= buffer.Length; + + lock (outputLock) + { + output = sum; } } + } public void Reset() { Int32 bufferLength = Convert.ToInt32(InputFrequency / OutputFrequency); buffer = new GazeData[bufferLength]; - currentValueIndex = 0; + currentValueIndex = -1; output = null; } } diff --git a/TrackerBridge/DSP/IGazeFilter.cs b/TrackerBridge/DSP/IGazeFilter.cs index c383b77..31e1fe0 100644 --- a/TrackerBridge/DSP/IGazeFilter.cs +++ b/TrackerBridge/DSP/IGazeFilter.cs @@ -8,6 +8,7 @@ namespace TrackerBridge.DSP { interface IGazeFilter { + event EventHandler OutputAvailable; GazeData? Output { get; } void Input(GazeData input); void Reset(); diff --git a/TrackerBridge/GazeDataProcessor.cs b/TrackerBridge/GazeDataProcessor.cs index b67088f..19fa3b3 100644 --- a/TrackerBridge/GazeDataProcessor.cs +++ b/TrackerBridge/GazeDataProcessor.cs @@ -26,13 +26,14 @@ namespace TrackerBridge } } + public GazeDataProcessor(IBridgeTracker tracker) { tracker.TrackingFrequencyChanged += OnTrackingFrequencyChanged; screenHeight = Convert.ToSingle(SystemParameters.PrimaryScreenHeight); screenWidth = Convert.ToSingle(SystemParameters.PrimaryScreenWidth); gazeFilters = new IGazeFilter[1]; - gazeFilters[0] = new GazeDecimator(outputFrequency, tracker.GetTrackingFrequency()); + gazeFilters[0] = new GazeDecimatorFixedLength(outputFrequency, tracker.GetTrackingFrequency()); } public void Initialize() { @@ -66,9 +67,9 @@ namespace TrackerBridge { foreach(IGazeFilter filter in gazeFilters) { - if(filter.GetType() == typeof(GazeDecimator)) + if(filter.GetType() == typeof(GazeDecimatorFixedLength)) { - GazeDecimator decimator = (GazeDecimator)filter; + GazeDecimatorFixedLength decimator = (GazeDecimatorFixedLength)filter; decimator.InputFrequency = frequency; } } diff --git a/TrackerBridge/TrackerBridge.csproj b/TrackerBridge/TrackerBridge.csproj index 53502a0..c0c5052 100644 --- a/TrackerBridge/TrackerBridge.csproj +++ b/TrackerBridge/TrackerBridge.csproj @@ -48,7 +48,7 @@ - +