private void ComputeRateParameters(int picClockSpeed)
        {
            int rate;

            if (Int32.TryParse(DesiredBaudRateText, out rate))
            {
                Rates.Clear();
                Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed));
                Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.FtdiLow, rate));
                Rates.Add(BaudRateCalculator.Compute(SerialDeviceType.FtdiHigh, rate));
                ActualBaudRateText = String.Format("{0:F1}", Rates[0].ActualBaud);
                ErrorRateText      = String.Format("{0:F1}", Rates[0].PercentError);
            }
        }
        private void PrepareSerialSpeeds(int picClockSpeed)
        {
            int[] desiredRates =
            {
                9600,
                19200,
                38400,
                56000,
                57600,
                115200,
                250000,
                500000,
                750000,
                1000000
            };

            // create possible PIC32 UART speeds, given by
            // picClockRate/(4*(num+1)) for num = 1 to 65535
            SerialSpeeds.Clear();
            foreach (var targetRate in desiredRates)
            {
                SerialSpeeds.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, targetRate, picClockSpeed));
            }

            // add the rest of the speeds that hit exactly
            var rate = desiredRates[desiredRates.Length - 1];

            var br      = BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed);
            var divider = Int32.Parse(br.Setting);

            while (divider > 0)
            {
                --divider;
                if ((picClockSpeed % (divider + 1)) == 0)
                {
                    rate = BaudRateCalculator.ComputePic32BaudRateFromClockDivider(picClockSpeed, divider);
                    SerialSpeeds.Add(BaudRateCalculator.Compute(SerialDeviceType.PIC32, rate, picClockSpeed));
                }
            }
        }