示例#1
0
        public void SetAttenuatorLevel(AttLevel Level, AttLevel CalibrationLevel)
        {
            if (port.IsOpen)
            {
                byte[] OutMessage = new byte[3];
                OutMessage[0] = 0x8f;
                OutMessage[1] = (byte)'r';

                switch (Level)
                {
                case AttLevel._0dB: OutMessage[2] = 0; break;

                case AttLevel._10dB: OutMessage[2] = 1; break;

                case AttLevel._20dB: OutMessage[2] = 2; break;

                case AttLevel._30dB: OutMessage[2] = 3; break;

                case AttLevel._40dB: OutMessage[2] = 6; break;

                case AttLevel._50dB: OutMessage[2] = 7; break;

                default: OutMessage[2] = 0; break;
                }

                port.Write(OutMessage, 0, OutMessage.Length);
                // needed to wait completion
                int nVersion = GetVersion();
                CurrentLevel            = Level;
                CurrentCalibrationLevel = CalibrationLevel;
            }
        }
示例#2
0
        public Int16 GetZeroDbValue(Int64 nFrequencyInHz, AttLevel Level, bool bLinear)
        {
            if (GetReferenceArray(Level, bLinear) == null)
            {
                return(455);
            }

            if (nFrequencyInHz < nFirstCalibrationFrequency)
            {
                return(GetReferenceArray(Level, bLinear)[0]);
            }

            Int64 nStepInHz = (nLastCalibrationFrequency - nFirstCalibrationFrequency) / GetReferenceArray(Level, bLinear).Length;

            Int64 nIndex = (nFrequencyInHz - nFirstCalibrationFrequency) / nStepInHz;
            float fIndex = (nFrequencyInHz - nFirstCalibrationFrequency) / nStepInHz;

            if (nIndex > GetReferenceArray(Level, bLinear).Length - 1)
            {
                nIndex = GetReferenceArray(Level, bLinear).Length - 1;
            }

            /*
             * int IntPart = (int)Math.Truncate(fIndex);
             * float fFRactionnal = fIndex - (float)Math.Truncate(fIndex);
             *
             *
             * if (nIndex < GetReferenceArray(Level, bLinear).Length - 1)
             *  return (short)(((float)GetReferenceArray(Level, bLinear)[nIndex])*(1.0f- fFRactionnal) + (float)GetReferenceArray(Level, bLinear)[nIndex+1]* fFRactionnal);
             * else
             */
            return(GetReferenceArray(Level, bLinear)[nIndex]);
        }
示例#3
0
        public Int16 GetAverageReferenceLevel(AttLevel Level, bool bLinear = false)
        {
            int nSum = 0;

            foreach (Int16 i in GetReferenceArray(Level, bLinear))
            {
                nSum += i;
            }

            nSum /= GetReferenceArray(Level, bLinear).Length;

            return((Int16)nSum);
        }
示例#4
0
        public Int16[] GetReferenceArray(AttLevel Level, bool bLinear)
        {
            if (!bLinear)
            {
                switch (Level)
                {
                case AttLevel._0dB: return(ZeroDbReferenceLevel_0dB);

                case AttLevel._10dB: return(ZeroDbReferenceLevel_10dB);

                case AttLevel._20dB: return(ZeroDbReferenceLevel_20dB);

                case AttLevel._30dB: return(ZeroDbReferenceLevel_30dB);

                case AttLevel._40dB: return(ZeroDbReferenceLevel_40dB);

                case AttLevel._50dB: return(ZeroDbReferenceLevel_50dB);

                default:
                    return(ZeroDbReferenceLevel_0dB);
                }
            }
            else
            {
                switch (Level)
                {
                case AttLevel._0dB: return(ZeroDbReferenceLevel_linear_0dB);

                case AttLevel._10dB: return(ZeroDbReferenceLevel_linear_10dB);

                case AttLevel._20dB: return(ZeroDbReferenceLevel_linear_20dB);

                case AttLevel._30dB: return(ZeroDbReferenceLevel_linear_30dB);

                case AttLevel._40dB: return(ZeroDbReferenceLevel_linear_40dB);

                case AttLevel._50dB: return(ZeroDbReferenceLevel_linear_50dB);

                default:
                    return(ZeroDbReferenceLevel_linear_0dB);
                }
            }
        }
示例#5
0
        public void SetReferenceArray(AttLevel Level, Int16[] Array, bool bLinear)
        {
            if (!bLinear)
            {
                switch (Level)
                {
                case AttLevel._0dB:  ZeroDbReferenceLevel_0dB = Array; break;

                case AttLevel._10dB:  ZeroDbReferenceLevel_10dB = Array; break;

                case AttLevel._20dB:  ZeroDbReferenceLevel_20dB = Array; break;

                case AttLevel._30dB:  ZeroDbReferenceLevel_30dB = Array; break;

                case AttLevel._40dB:  ZeroDbReferenceLevel_40dB = Array; break;

                case AttLevel._50dB:  ZeroDbReferenceLevel_50dB = Array; break;

                default: break;
                }
            }
            else
            {
                switch (Level)
                {
                case AttLevel._0dB:  ZeroDbReferenceLevel_linear_0dB = Array; break;

                case AttLevel._10dB:  ZeroDbReferenceLevel_linear_10dB = Array; break;

                case AttLevel._20dB:  ZeroDbReferenceLevel_linear_20dB = Array; break;

                case AttLevel._30dB:  ZeroDbReferenceLevel_linear_30dB = Array; break;

                case AttLevel._40dB:  ZeroDbReferenceLevel_linear_40dB = Array; break;

                case AttLevel._50dB:  ZeroDbReferenceLevel_linear_50dB = Array; break;

                default: break;
                }
            }
        }
示例#6
0
        bool ProcessCalibration(bool AllAttenuatorforced = false, UInt16 nCaptureDelay = 0)
        {
            if (!CurrentDeviceDef.Attenuator)
            {
                return(ProcessCalibrationNoAttenuator());
            }

            DialogResult Result;

            if (AllAttenuatorforced)
            {
                Result = MessageBox.Show("We will run calibration for all attenuators setup", "Need calibration", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            }
            else
            {
                Result = MessageBox.Show("Run calibration for all attenuators setup ?", "Need calibration", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            }

            if (Result == DialogResult.Cancel)
            {
                LOGDraw(" canceled", true);
                return(false);
            }
            else
            {
                AttLevel Current = (AttLevel)AttLevelcomboBox.SelectedItem;

                if (Result == DialogResult.No)
                {
                    if (DeviceInterface.GetDevice().HaveLogDetector)
                    {
                        LOGDraw("Calibration for " + Current.ToString() + " attenuator, using logarithmic detector", true);
                        DeviceInterface.SetAttenuatorLevel(Current, Current);
                        DeviceInterface.RunCalibration(MyNotifier, 9999, false);
                    }
                    if (DeviceInterface.GetDevice().HaveLinDetector)
                    {
                        LOGDraw("Calibration for " + Current.ToString() + " attenuator, using linear detector..", true);
                        DeviceInterface.SetAttenuatorLevel(Current, Current);
                        DeviceInterface.RunCalibration(MyNotifier, 9999, true);
                    }

                    DeviceInterface.SaveCalibration(Program.CalibrationPath);
                    bCalibrationAvailable = true;
                    LOGDraw("done.");
                }
                else
                {
                    foreach (AttLevel Level in Enum.GetValues(typeof(AttLevel)))
                    {
                        if (DeviceInterface.GetDevice().HaveLogDetector)
                        {
                            LOGDraw("Calibration for " + Level.ToString() + " attenuator, using logarihtmic detector..", true);
                            DeviceInterface.SetAttenuatorLevel(Level, Level);
                            DeviceInterface.RunCalibration(MyNotifier, 4000, false);
                        }

                        if (DeviceInterface.GetDevice().HaveLinDetector)
                        {
                            LOGDraw("Calibration for " + Level.ToString() + " attenuator, using linear detector..", true);
                            DeviceInterface.SetAttenuatorLevel(Level, Level);
                            DeviceInterface.RunCalibration(MyNotifier, 4000, true);
                        }


                        LOGDraw("done.");
                    }
                    DeviceInterface.SaveCalibration(Program.CalibrationPath);
                    bCalibrationAvailable = true;

                    if (Program.Save.AttCal)
                    {
                        DeviceInterface.SetAttenuatorLevel(Current, Current);
                    }
                    else
                    {
                        DeviceInterface.SetAttenuatorLevel(Current, AttLevel._0dB);
                    }
                }

                return(true);
            }
        }