Example #1
0
        public void RefreshChart(object sender, EventArgs e)
        {
            if (filterKey == CMCustomUDPData.DataKey.Max)
            {
                return;
            }

            filterChart.Invoke((Action) delegate
            {
                var chart = filterChart.ChartAreas[0];
                filteredSeries.Points.Clear();
                rawSeries.Points.Clear();

                List <CMCustomUDPData> filteredData;
                FilterModuleCustom.Instance.GetFilteredHistory(out filteredData);
                List <CMCustomUDPData> rawData;
                FilterModuleCustom.Instance.GetRawHistory(out rawData);

                chart.AxisX.Maximum = filteredData.Count();

                for (int i = 0; i < filteredData.Count; ++i)
                {
                    CMCustomUDPData data = filteredData[i];

                    filteredSeries.Points.AddXY(i, data.GetValue(filterKey));
                }

                for (int i = 0; i < rawData.Count; ++i)
                {
                    CMCustomUDPData data = rawData[i];

                    rawSeries.Points.AddXY(i, data.GetValue(filterKey));
                }
            });
        }
        public void Filter(CMCustomUDPData dataIn, ref CMCustomUDPData dataOut, int keyMask = int.MaxValue, bool newHistory = true)
        {
            if (filters == null)
            {
                return;
            }

            mutex.WaitOne();

            CMCustomUDPData newRawData;
            CMCustomUDPData newFiltered;

            if (newHistory == true)
            {
                dataOut.Copy(dataIn);

                //copy to raw history
                newRawData = new CMCustomUDPData();
                newRawData.Copy(dataIn);
                rawData.Add(newRawData);
                if (rawData.Count > maxHistorySamples)
                {
                    rawData.RemoveAt(0);
                }

                //add new filtered history
                newFiltered = new CMCustomUDPData();
                newFiltered.Copy(dataIn);
                filteredData.Add(newFiltered);
                if (filteredData.Count > maxHistorySamples)
                {
                    filteredData.RemoveAt(0);
                }
            }
            else
            {
                newFiltered = filteredData[filteredData.Count - 1];
                newRawData  = rawData[rawData.Count - 1];
            }


            //do filter lists for each key if it exists
            for (int i = 0; i < filters.Length; ++i)
            {
                CMCustomUDPData.DataKey key        = (CMCustomUDPData.DataKey)i;
                List <FilterBase>       filterList = filters[i];

                if (!dataIn.IsValid(key))
                {
                    continue;
                }

                object value = dataIn.GetValue(key);

                if (filterList == null || filterList.Count == 0 || !dataIn.IsFloat(key))
                {
                    newFiltered.SetValue(key, value);
                    newRawData.SetValue(key, value);
                    continue;
                }

                //ignore filter if not in keyMask
                if (((1 << i) & keyMask) == 0)
                {
                    continue;
                }

                //get float val
                float floatVal = (float)value;

                //do filters for key
                foreach (FilterBase filter in filterList)
                {
                    floatVal = filter.Filter(floatVal);
                }

                //filtered
                newFiltered.SetValue(key, floatVal);
                dataOut.SetValue(key, floatVal);
            }

            mutex.ReleaseMutex();
        }