コード例 #1
0
        public async Task <ActionResult> Create(FormCollection form)
        {
            FirmwareUpgradeViewModel vm = new FirmwareUpgradeViewModel();

            if (TryUpdateModel(vm))
            {
                byte[] upgradeBytes = null;
                using (BinaryReader r = new BinaryReader(vm.UploadedFile.InputStream))
                {
                    upgradeBytes = r.ReadBytes(vm.UploadedFile.ContentLength);
                }

                // Calculate MD5 of the file.
                string fileMD5 = HexFileUtility.GetMd5Hash(upgradeBytes);

                FirmwareUpgrade upgrade = new FirmwareUpgrade
                {
                    Name     = vm.Name,
                    FileHash = fileMD5,
                    FileData = upgradeBytes,
                };
                upgrade = await upgradesService.CreateFirmwareUpgrade(upgrade);

                if (upgrade == null)
                {
                    ModelState.AddModelError("UpgradeCreationFailed", "Failed to create upgrade. Does an upgrade with this name already exist?");
                    return(View(vm));
                }
            }

            return(RedirectToAction("Index"));
        }
コード例 #2
0
        public async Task <HttpResponseMessage> GetFirmware(string deviceName)
        {
            string tag = Request.Headers.IfNoneMatch
                         .Select(eTag => eTag.Tag.Replace("\"", ""))
                         .FirstOrDefault();
            FirmwareUpgrade upgrade = await devicesService.GetNewFirmware(deviceName, tag);

            await devicesService.UpdateLastContactTime(deviceName);

            if (upgrade != null)
            {
                // run HEXMOD on the upgrade file (get flash attributes Start, Length, CRC16-CCITT (iReflected, oReflected))
                HexFileUtility.FlashCRCData flashCRC = HexFileUtility.ProcessHEX(upgrade.FileData);

                var response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Content = new ByteArrayContent(upgrade.FileData.Concat(flashCRC.bytesToAppend).ToArray());
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Headers.ETag = new EntityTagHeaderValue(String.Format("\"{0}\"", upgrade.FileHash), false);
                return(response);
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.NoContent));
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="expected"></param>
        /// <param name="actual"></param>
        /// <returns></returns>
        private bool VerifyHash(byte[] expected, byte[] actual)
        {
            bool verified = FirmwareUpgrade.CompareMD5Hash(expected, actual);

            Log.Debug(string.Format("VerifyHash: expected=\"{0}\"", FirmwareUpgrade.MD5HashToString(expected)));
            Log.Debug(string.Format("VerifyHash: actual  =\"{0}\"", FirmwareUpgrade.MD5HashToString(actual)));
            Log.Debug(string.Format("VerifyHash: {0}", verified ? "PASSED" : "FAILED"));

            return(verified);
        }
コード例 #4
0
        public async Task <ActionResult> Delete(FirmwareUpgradeViewModel vm)
        {
            FirmwareUpgrade upgrade = new FirmwareUpgrade
            {
                Id = vm.Id
            };
            await upgradesService.DeleteFirmwareUpgrade(upgrade);

            return(RedirectToAction("Index"));
        }
コード例 #5
0
        public async Task DeleteFirmwareUpgrade(FirmwareUpgrade upgrade)
        {
            // Attach the upgrade object.
            db.FirmwareUpgrades.Attach(upgrade);

            // Load related logging devices so they can have the upgrade unassigned.
            await db.Entry(upgrade).Collection(dbUpgrade => dbUpgrade.LoggingDevices).LoadAsync();

            // Delete upgrade.
            db.Entry(upgrade).State = EntityState.Deleted;
            await db.SaveChangesAsync();
        }
コード例 #6
0
        public async Task <ActionResult> DownloadFirmwareFile(int id)
        {
            FirmwareUpgrade upgrade = await upgradesService.GetFirmwareUpgradeFile(id);

            if (upgrade != null)
            {
                return(File(upgrade.FileData, "application/octet-stream", string.Format("{0}_upgradeFile.hex", upgrade.Name)));
            }
            else
            {
                return(null);
            }
        }
コード例 #7
0
        public async Task <FirmwareUpgrade> GetFirmwareUpgradeFile(int upgradeId)
        {
            FirmwareUpgrade firmwareUpgrade = await FirmwareUpgradeList
                                              .SingleOrDefaultAsync(upgrade => upgrade.Id == upgradeId);

            if (firmwareUpgrade == null)
            {
                // Can't find the upgrade.
                throw new UpgradeNotFoundException(upgradeId);
            }

            return(firmwareUpgrade);
        }
コード例 #8
0
 public async Task <FirmwareUpgrade> CreateFirmwareUpgrade(FirmwareUpgrade upgrade)
 {
     try
     {
         db.Entry(upgrade).State = EntityState.Added;
         await db.SaveChangesAsync();
     }
     catch (Exception e)
     {
         Trace.TraceError("Error saving logging device: {0}", e);
         return(null);
     }
     return(upgrade);
 }
コード例 #9
0
ファイル: Form1.cs プロジェクト: Deokbin/WindowSDK2.0
        public Form1()
        {
            InitializeComponent();

            //파일로 로그를 보려면 아래에서
            Log.FileLog();

            mPenAgent = PenCommAgent.GetInstance(this);
            mPenAgent.Init();



            fuDlg      = new FirmwareUpgrade(mPenAgent);
            penDataFrm = new PenDataForm(this);

            width  = pictureBox1.Width;
            height = pictureBox1.Height;

            mBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
        }
コード例 #10
0
        /// <summary>
        /// Download firmware zip file from iNet server.
        /// </summary>
        /// <remarks>
        /// </remarks>
        /// <returns>
        /// true if call to iNet succeeds, and it returns us new firmware.
        ///
        /// false if call to iNet succeeds, but iNet purposely doesn't give us back any firmware.
        ///
        /// Throws an exception if we fail to download firmware due to download errors, etc.
        /// </returns>
        private bool DownloadFirmware()
        {
            string funcMsg = Name + ".DownloadFirmware: ";

            Log.Debug(string.Format("{0}Attempting to download firmware; the maximum number of tries is {1}", funcMsg, MAX_ATTEMPTS));

            string msg = string.Empty;

            for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++)
            {
                Log.Debug(string.Format("{0}attempt {1} of {2}", funcMsg, attempt, MAX_ATTEMPTS));

                Master.Instance.ConsoleService.UpdateAction(ConsoleServiceResources.DOWNLOADING);

                //We don't need to consider SubType for DSX as of now, since the Firmware varies only for instrument's Subtype.
                string equipmentType = Configuration.DockingStation.Type.ToString();

                using (InetDownloader inetDownloader = new InetDownloader())
                {
                    FirmwareUpgrade = inetDownloader.DownloadFirmwareUpgrade(null, _firmwareUpgradeEvent.Errors, EquipmentTypeCode.VDS, equipmentType, null, equipmentType);
                }

                if (FirmwareUpgrade == null)
                {
                    Log.Debug(string.Format("{0}Nothing returned by iNet.", funcMsg));
                    return(false);
                }

                if (FirmwareUpgrade.Firmware == null)
                {
                    Log.Debug(string.Format("{0}No firmware returned by iNet.", funcMsg));
                    return(false);
                }

                Log.Debug(string.Format("{0}Firmware DeviceType: {1}.", funcMsg, FirmwareUpgrade.EquipmentCode));
                Log.Debug(string.Format("{0}Firmware Version: {1}.", funcMsg, FirmwareUpgrade.Version));
                Log.Debug(string.Format("{0}Firmware Size: {1} bytes.", funcMsg, FirmwareUpgrade.Firmware.Length));
                Log.Debug(string.Format("{0}Firmware iNet checksum: \"{1}\".", funcMsg, FirmwareUpgrade.MD5HashToString(FirmwareUpgrade.MD5Hash)));

                if (FirmwareUpgrade.EquipmentCode != Configuration.DockingStation.Type.ToString())
                {
                    msg = string.Format("Downloaded firmware is for wrong device type (\"{0}\").  Expected \"{1}\" ", FirmwareUpgrade.EquipmentCode, Configuration.DockingStation.Type.ToString());
                    Log.Error(msg);
                    throw new FirmwareUpgradeException(msg);
                }

                Master.Instance.ConsoleService.UpdateAction(ConsoleServiceResources.VERIFYING);

                byte[] hash = new MD5CryptoServiceProvider().ComputeHash(FirmwareUpgrade.Firmware);

                bool verified = VerifyHash(FirmwareUpgrade.MD5Hash, hash);

                if (verified)
                {
                    Log.Debug(string.Format("{0}Firmware successfully downloaded.", funcMsg));
                    return(true);
                }

                Log.Debug(string.Format("{0}Verification of MD5 hash failed.", funcMsg));
            }

            msg = string.Format("{0}Unable to download firwmare after {1} attempts.", funcMsg, MAX_ATTEMPTS);
            Log.Error(msg);
            throw new FirmwareUpgradeException(msg);
        }