Example #1
0
            public void setCalibration(GainCalibration c)
            {
                if (c.coefficients.Length != gainCalibrationCoefficients)
                    throw new Exception("Coefficients not of correct length!");

                this.gainCalibration.Add(c);
            }
            public void setCalibration(GainCalibration c)
            {
                if (c.coefficients.Length != gainCalibrationCoefficients)
                {
                    throw new Exception("Coefficients not of correct length!");
                }

                this.gainCalibration.Add(c);
            }
            void Download()
            {
                int size = Marshal.SizeOf(typeof(Map));

                byte[] romContents   = new byte[size];
                uint   maxReadLength = 11;

                for (uint byteOffset = 0; byteOffset < size;)
                {
                    uint   readLength = (uint)Math.Min(maxReadLength, size - byteOffset);
                    byte[] tmp;
                    hwInterface.GetControllerRegister(ScopeController.FLASH, byteOffset, readLength, out tmp);
                    Array.Copy(tmp, 0, romContents, byteOffset, readLength);
                    byteOffset += readLength;
                }
                Map m = BytesToMap(romContents);

                this.plugCount       = m.plugCount;
                this.AdcTimingValue  = m.adcTimingValue;
                this.gainCalibration = new List <GainCalibration>();
                int offset = 0;

                foreach (AnalogChannel ch in AnalogChannel.List)
                {
                    foreach (double divider in SmartScope.validDividers)
                    {
                        foreach (double multiplier in SmartScope.validMultipliers)
                        {
                            GainCalibration c = new GainCalibration()
                            {
                                channel    = ch,
                                divider    = divider,
                                multiplier = multiplier
                            };
                            double[] coeff = new double[gainCalibrationCoefficients];

                            unsafe
                            {
                                for (int i = 0; i < coeff.Length; i++)
                                {
                                    coeff[i] = (double)m.gainCalibration[offset + i];
                                }
                            }
                            c.coefficients = coeff;
                            offset        += coeff.Length;

                            this.gainCalibration.Add(c);
                        }
                    }
                }
                computeDividersMultipliers();

                this.frequencyResponse = new List <FrequencyResponse>();
                int magnitudesOffset = 0;
                int phasesOffset     = 0;

                foreach (AnalogChannel ch in AnalogChannel.List)
                {
                    foreach (double multiplier in SmartScope.validMultipliers)
                    {
                        try
                        {
                            FrequencyResponse f = new FrequencyResponse()
                            {
                                channel    = ch,
                                multiplier = multiplier,
                                phases     = new Dictionary <int, float>(),
                                magnitudes = new Dictionary <int, float>()
                            };
                            unsafe
                            {
                                for (int i = 0; i < frequencyResponsePhases; i++)
                                {
                                    f.phases.Add(m.phasesIndices[phasesOffset + i], m.phases[phasesOffset + i]);
                                }
                                phasesOffset += frequencyResponsePhases;
                                for (int i = 0; i < frequencyResponseMagnitudes; i++)
                                {
                                    f.magnitudes.Add(m.magnitudesIndices[magnitudesOffset + i], m.magnitudes[magnitudesOffset + i]);
                                }
                                magnitudesOffset += frequencyResponseMagnitudes;
                            }
                            this.frequencyResponse.Add(f);
                        }
                        catch (ArgumentException e)
                        {
                            Logger.Warn(String.Format("Failed to load frequency response from ROM for channel {0:G} and multiplier {1} [{2}]", ch, multiplier, e.Message));
                        }
                    }
                }
            }
Example #4
0
            void Download()
            {
                int size = Marshal.SizeOf(typeof(Map));
                byte[] romContents = new byte[size];
                uint maxReadLength = 11;
                for (uint byteOffset = 0; byteOffset < size; )
                {
                    uint readLength = (uint)Math.Min(maxReadLength, size - byteOffset);
                    byte[] tmp;
                    hwInterface.GetControllerRegister(ScopeController.FLASH, byteOffset, readLength, out tmp);
                    Array.Copy(tmp, 0, romContents, byteOffset, readLength);
                    byteOffset += readLength;
                }
                Map m = BytesToMap(romContents);
                this.plugCount = m.plugCount;
                this.AdcTimingValue = m.adcTimingValue;
                this.gainCalibration = new List<GainCalibration>();
                int offset = 0;
                foreach (AnalogChannel ch in AnalogChannel.List)
                {
                    foreach (double divider in SmartScope.validDividers)
                    {
                        foreach (double multiplier in SmartScope.validMultipliers)
                        {
                            GainCalibration c = new GainCalibration()
                            {
                                channel = ch,
                                divider = divider,
                                multiplier = multiplier
                            };
                            double[] coeff = new double[gainCalibrationCoefficients];

                            unsafe
                            {
                                for (int i = 0; i < coeff.Length; i++)
                                    coeff[i] = (double)m.gainCalibration[offset + i];
                            }
                            c.coefficients = coeff;
                            offset += coeff.Length;

                            this.gainCalibration.Add(c);
                        }
                    }
                }
                computeDividersMultipliers();

                this.frequencyResponse = new List<FrequencyResponse>();
                int magnitudesOffset = 0;
                int phasesOffset = 0;
                foreach (AnalogChannel ch in AnalogChannel.List)
                {
                    foreach (double multiplier in SmartScope.validMultipliers)
                    {
                        try
                        {
                            FrequencyResponse f = new FrequencyResponse()
                            {
                                channel = ch,
                                multiplier = multiplier,
                                phases = new Dictionary<int, float>(),
                                magnitudes = new Dictionary<int, float>()
                            };
                            unsafe
                            {
                                for (int i = 0; i < frequencyResponsePhases; i++)
                                    f.phases.Add(m.phasesIndices[phasesOffset + i], m.phases[phasesOffset + i]);
                                phasesOffset += frequencyResponsePhases;
                                for (int i = 0; i < frequencyResponseMagnitudes; i++)
                                    f.magnitudes.Add(m.magnitudesIndices[magnitudesOffset + i], m.magnitudes[magnitudesOffset + i]);
                                magnitudesOffset += frequencyResponseMagnitudes;
                            }
                            this.frequencyResponse.Add(f);
                        }
                        catch (ArgumentException e)
                        {
                            Logger.Warn(String.Format("Failed to load frequency response from ROM for channel {0:G} and multiplier {1} [{2}]", ch, multiplier, e.Message));
                        }
                    }
                }
            }