Пример #1
0
        public void GetUpdateFirmware(ref System.Collections.Generic.List <CFirmwareStation> versionMicros)
        {
            List <CFirmwareStation> versionMicrosHostController = new List <CFirmwareStation>();

            try
            {
                //Carpeta donde guardar la descarga
                string firmwareFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles), "JBC\\JBC Station Controller Service\\Firmwares");

                //Crear carpeta temporal
                if (!(new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.DirectoryExists(firmwareFolder))
                {
                    Directory.CreateDirectory(firmwareFolder);
                }

                //Endpoint HostController
                EndpointAddress ep = null;

                m_mutexHostControllerEndpoints.WaitOne();
                if (m_hostControllerEndpoints.Count > 0)
                {
                    ep = m_hostControllerEndpoints.First();
                }
                m_mutexHostControllerEndpoints.ReleaseMutex();

                if (ep != null)
                {
                    //Open connection
                    BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
                    JBCHostControllerServiceClient serviceClient = new JBCHostControllerServiceClient(binding, ep);
                    serviceClient.Open();

                    //Recorrer todos los micros
                    for (int i = 0; i <= versionMicros.Count - 1; i++)
                    {
                        //Obtener información del firmware
                        HostControllerServiceReference.dc_FirmwareStation infoUpdateFirmware = new HostControllerServiceReference.dc_FirmwareStation();
                        infoUpdateFirmware.model           = System.Convert.ToString(versionMicros.ElementAt(i).Model);
                        infoUpdateFirmware.hardwareVersion = System.Convert.ToString(versionMicros.ElementAt(i).HardwareVersion);

                        List <HostControllerServiceReference.dc_FirmwareStation> listNewInfoUpdateFirmware = new List <HostControllerServiceReference.dc_FirmwareStation>();
                        listNewInfoUpdateFirmware.AddRange(serviceClient.GetInfoUpdateFirmware(infoUpdateFirmware));
                        foreach (HostControllerServiceReference.dc_FirmwareStation dc_firmware in listNewInfoUpdateFirmware)
                        {
                            CFirmwareStation firmware = new CFirmwareStation();
                            firmware.Model           = dc_firmware.model;
                            firmware.ModelVersion    = dc_firmware.modelVersion;
                            firmware.ProtocolVersion = dc_firmware.protocolVersion;
                            firmware.HardwareVersion = dc_firmware.hardwareVersion;
                            firmware.SoftwareVersion = dc_firmware.softwareVersion;
                            firmware.FileName        = Path.Combine(firmwareFolder, dc_firmware.fileName);
                            versionMicrosHostController.Add(firmware);

                            //Si no existe el archivo de firmware
                            if (!File.Exists(firmware.FileName))
                            {
                                bool bOk       = false;
                                bool bContinue = false;
                                int  nSequence = 1;

                                //Download firmware update
                                do
                                {
                                    int nTries = 3;
                                    bOk = false;
                                    dc_UpdateFirmware updateFirmware = new dc_UpdateFirmware();

                                    while (nTries > 0 && !bOk)
                                    {
                                        updateFirmware = serviceClient.GetFileUpdateFirmware(nSequence, dc_firmware.fileName);
                                        bOk            = updateFirmware.sequence == nSequence;
                                        bContinue      = !updateFirmware.final;

                                        nTries--;
                                    }

                                    if (!bOk)
                                    {
                                        break;
                                    }
                                    nSequence++;

                                    (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllBytes(firmware.FileName, updateFirmware.bytes, true);
                                } while (bContinue);
                            }
                        }
                    }

                    serviceClient.Close();
                }
            }
            catch (Exception ex)
            {
                LoggerModule.logger.Error(System.Reflection.MethodInfo.GetCurrentMethod().Name + ". Error: " + ex.Message);
            }

            versionMicros = versionMicrosHostController;
        }