コード例 #1
0
        static void Main(string[] args)
        {
            //Config Parse
            WriteLine("===== Config Parse =====");
            ConfigStruct config       = new ConfigStruct();
            string       rString      = "";
            int          numArgAccept = ConfigStruct.Parse(config, args, ref rString);;

            if (numArgAccept < 0)
            {
                ErrorWriteLine(rString);
                return;
            }

            WriteLine("Args Parsed Num:" + numArgAccept);
            ArgsShow(config);

            //Hex Load
            WriteLine("===== Hex Load =====");
            AddressDataGroup <byte> dataGroup = new AddressDataGroup <byte>();

            try
            {
                IntelHexLoader            hexLoader = new IntelHexLoader();
                IntelHexLoader.ResultEnum r         = hexLoader.Load(config.HexFile, dataGroup);
                if (dataGroup.Groups.Count != 1)
                {
                    ErrorWriteLine("Hex Not Have One Data Section.");
                    return;
                }
                if (r != IntelHexLoader.ResultEnum.Success)
                {
                    ErrorWriteLine(r.ToString());
                    return;
                }
                WriteLine("Hex Data Size:" + dataGroup.Groups[0].Datas.Count);
            }
            catch (Exception ee)
            {
                ErrorWriteLine(ee.Message);
                return;
            }

            //FlashSection Load
            JobMaker.FlashSectionStruct[] FlashSection = null;
            if (config.FlashSectionFile != "")
            {
                try
                {
                    WriteLine("===== FlashSection Load =====");
                    FlashSection = (JobMaker.FlashSectionStruct[])SerializerHelper.Deserialize(config.FlashSectionFile, typeof(JobMaker.FlashSectionStruct[]));
                    WriteLine("FlashSection Num:" + FlashSection.Length);
                }
                catch (Exception ee)
                {
                    ErrorWriteLine(ee.Message);
                    //return;
                }
            }

            //Job Make
            List <Job> jobs = new List <Job>();

            try
            {
                WriteLine("===== Job Make =====");
                JobMaker.EraseWrite(jobs, dataGroup, config.EraseOpt, FlashSection, true);

                if (config.JumpToFlash)
                {
                    JobMaker.Go(jobs, dataGroup.Groups[0].Address);
                }

                WriteLine("Job Num:" + jobs.Count);
            }
            catch (Exception ee)
            {
                ErrorWriteLine(ee.Message);
                return;
            }

            //CAN Open
            ICAN CANDev = null;

            try
            {
                WriteLine("===== CAN Open =====");
                string   dllPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, config.CANDevFile);
                Assembly ass     = Assembly.LoadFile(dllPath);
                Type     tCAN    = ass.GetType(config.CANDevClass);
                CANDev = (ICAN)Activator.CreateInstance(tCAN);
                bool rOpen = CANDev.Open(config.CANDeviceNo);
                if (!rOpen)
                {
                    ErrorWriteLine("CAN Open Fail.");
                    return;
                }
                bool rStart = CANDev.Start(config.CANPortNo, config.CANBPS, false, config.CANSendOnce, false);
                if (!rOpen)
                {
                    ErrorWriteLine("CAN Start Fail.");
                    return;
                }
                WriteLine("CAN Open Success");
            }
            catch (Exception ee)
            {
                ErrorWriteLine(ee.Message);
                return;
            }

            //JobExecutor Init
            WriteLine("===== JobExecutor Init =====");
            JobExecutor JE = new JobExecutor(CANDev, config.CANPortNo);

            JE.IsShowSendRecive = config.ShowReceiveSend;
            JE.TimeoutSpan      = new TimeSpan(0, 0, config.Timeout);
            JE.TimeoutSpanErase = new TimeSpan(0, 0, config.TimeoutErase);
            JE.OnStateChange   += JE_OnStateChange;
            JE.SetJob(jobs.ToArray());

            //Run
            WriteLine("===== JobExecutor Running =====");
            while (JE.IsRunning)
            {
                JE.BackgroundRun(false);
                Thread.Sleep(100);
            }
            WriteLine("End With:" + JE.JobsState);
        }