public SetDeviceProgrammingParametersRequest(IMCU mcu)
        {
            var flashMem      = mcu.Flash;
            var eepromMem     = mcu.EEPROM;
            var flashPageSize = flashMem.PageSize;
            var flashSize     = flashMem.Size;
            var epromSize     = eepromMem.Size;

            Bytes     = new byte[22];
            Bytes[0]  = Constants.CMD_STK_SET_DEVICE;
            Bytes[1]  = mcu.DeviceCode;
            Bytes[2]  = mcu.DeviceRevision;
            Bytes[3]  = mcu.ProgType;
            Bytes[4]  = mcu.ParallelMode;
            Bytes[5]  = mcu.Polling;
            Bytes[6]  = mcu.SelfTimed;
            Bytes[7]  = mcu.LockBytes;
            Bytes[8]  = mcu.FuseBytes;
            Bytes[9]  = flashMem.PollVal1;
            Bytes[10] = flashMem.PollVal2;
            Bytes[11] = eepromMem.PollVal1;
            Bytes[12] = eepromMem.PollVal2;
            Bytes[13] = (byte)((flashPageSize >> 8) & 0x00ff);
            Bytes[14] = (byte)(flashPageSize & 0x00ff);
            Bytes[15] = (byte)((epromSize >> 8) & 0x00ff);
            Bytes[16] = (byte)(epromSize & 0x00ff);
            Bytes[17] = (byte)((flashSize >> 24) & 0xff);
            Bytes[18] = (byte)((flashSize >> 16) & 0xff);
            Bytes[19] = (byte)((flashSize >> 8) & 0xff);
            Bytes[20] = (byte)(flashSize & 0xff);
            Bytes[21] = Constants.SYNC_CRC_EOP;
        }
Beispiel #2
0
        internal EnableProgrammingModeRequest(IMCU mcu)
        {
            var cmdBytes = mcu.CommandBytes[Command.PGM_ENABLE];

            Bytes = new[]
            {
                Constants.CMD_ENTER_PROGRMODE_ISP,
                mcu.Timeout,
                mcu.StabDelay,
                mcu.CmdExeDelay,
                mcu.SynchLoops,
                mcu.ByteDelay,
                mcu.PollValue,
                mcu.PollIndex,
                cmdBytes[0],
                cmdBytes[1],
                cmdBytes[2],
                cmdBytes[3]
            };
        }
 public ButterflyBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu)
     : base(serialPortConfig, mcu)
 {
 }
Beispiel #4
0
 protected BootloaderProgrammer(IMCU mcu)
 {
     MCU = mcu;
 }
 protected SerialPortBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu)
     : base(mcu)
 {
     this.serialPortConfig = serialPortConfig;
 }
        public void UploadSketch(IEnumerable <string> hexFileContents)
        {
            var serialPortName = options.PortName;

            var ports = SerialPortStream.GetPortNames();

            if (!ports.Any() || ports.Distinct().SingleOrDefault(
                    x => x.Equals(serialPortName, StringComparison.OrdinalIgnoreCase)) == null)
            {
                UploaderLogger.LogErrorAndThrow(
                    string.Format("Specified COM port name '{0}' is not valid.", serialPortName));
            }

            logger.Trace("Creating serial port '{0}'...", serialPortName);
            SerialPortBootloaderProgrammer programmer = null;

            IMCU             mcu = null;
            SerialPortConfig serialPortConfig;

            switch (options.ArduinoModel)
            {
            case ArduinoModel.Mega1284:
            {
                mcu = new ATMega1284();
                serialPortConfig = new SerialPortConfig(serialPortName, 115200);
                programmer       = new OptibootBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            case ArduinoModel.Mega2560:
            {
                mcu = new ATMega2560();
                serialPortConfig = new SerialPortConfig(serialPortName, 115200);
                programmer       = new WiringBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            case ArduinoModel.Leonardo:
            case ArduinoModel.Micro:
            {
                mcu = new ATMega32U4();
                serialPortConfig = new SerialPortConfig(serialPortName, 57600);
                programmer       = new ButterflyBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            case ArduinoModel.NanoR2:
            {
                mcu = new ATMega168();
                serialPortConfig = new SerialPortConfig(serialPortName, 19200);
                programmer       = new OptibootBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            case ArduinoModel.NanoR3:
            {
                mcu = new ATMega328P();
                serialPortConfig = new SerialPortConfig(serialPortName, 57600);
                programmer       = new OptibootBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            case ArduinoModel.UnoR3:
            {
                mcu = new ATMega328P();
                serialPortConfig = new SerialPortConfig(serialPortName, 115200);
                programmer       = new OptibootBootloaderProgrammer(serialPortConfig, mcu);
                break;
            }

            default:
            {
                UploaderLogger.LogErrorAndThrow(
                    string.Format("Unsupported model: {0}!", options.ArduinoModel));
                break;
            }
            }

            try
            {
                programmer.Open();

                logger.Info("Establishing sync...");
                programmer.EstablishSync();
                logger.Info("Sync established.");

                logger.Info("Checking device signature...");
                programmer.CheckDeviceSignature();
                logger.Info("Device signature checked.");

                logger.Info("Initializing device...");
                programmer.InitializeDevice();
                logger.Info("Device initialized.");

                logger.Info("Enabling programming mode on the device...");
                programmer.EnableProgrammingMode();
                logger.Info("Programming mode enabled.");

                logger.Info("Programming device...");
                programmer.ProgramDevice(ReadHexFile(hexFileContents, mcu.Flash.Size), progress);
                logger.Info("Device programmed.");

                logger.Info("Leaving programming mode...");
                programmer.LeaveProgrammingMode();
                logger.Info("Left programming mode!");
            }
            finally
            {
                programmer.Close();
            }
            logger.Info("All done, shutting down!");
        }
Beispiel #7
0
 internal OptibootBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu)
     : base(serialPortConfig, mcu)
 {
 }
 protected ArduinoBootloaderProgrammer(UploaderSerialPort serialPort, IMCU mcu)
     : base(serialPort, mcu)
 {
 }
Beispiel #9
0
 private void _MCUType_SelectedIndexChanged(object sender, EventArgs e)
 {
     mcu = EntityService.GetMCU((MCUType)Enum.Parse(typeof(MCUType), (string)_MCUType.SelectedItem));
 }
 public WiringBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu)
     : base(serialPortConfig, mcu)
 {
 }
Beispiel #11
0
 public WiringBootloaderProgrammer(UploaderSerialPort serialPort, IMCU mcu)
     : base(serialPort, mcu)
 {
 }
Beispiel #12
0
 protected ArduinoBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu)
     : base(serialPortConfig, mcu)
 {
 }
 internal OptibootBootloaderProgrammer(UploaderSerialPort serialPort, IMCU mcu)
     : base(serialPort, mcu)
 {
 }
Beispiel #14
0
 protected SerialPortBootloaderProgrammer(UploaderSerialPort serialPort, IMCU mcu)
     : base(mcu)
 {
     SerialPort = serialPort;
 }