示例#1
0
 private static MemoryBlock ReadHexFile(IEnumerable <string> hexFileContents, int memorySize)
 {
     try
     {
         var reader = new HexFileReader(hexFileContents, memorySize);
         return(reader.Parse());
     }
     catch (Exception ex)
     {
         UploaderLogger.LogErrorAndQuit(ex.Message);
     }
     return(null);
 }
        public void UploadSketch()
        {
            var hexFileName = options.FileName;

            logger.Info("Starting upload process for file '{0}'.", hexFileName);
            string[] hexFileContents = null;
            try
            {
                hexFileContents = File.ReadAllLines(hexFileName);
            }
            catch (Exception ex)
            {
                UploaderLogger.LogErrorAndQuit(ex.Message);
            }
            UploadSketch(hexFileContents);
        }
示例#3
0
        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.LogErrorAndQuit(
                    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.Micro:
            {
                mcu = new ATMega32U4();
                serialPortConfig = new SerialPortConfig(serialPortName, 57600);
                programmer       = new ButterflyBootloaderProgrammer(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.LogErrorAndQuit(
                    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));
                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!");
        }