Пример #1
0
        /// <summary>
        /// Deals with changes of GPS state
        /// </summary>
        /// <param name="o">Event source object.</param>
        /// <param name="blockState">Event Parmeters</param>
        public void OnBlockChangedEventHandler(object o, BlockTransferManager.StateChangedEventArgs blockState)
        {
            CNXLog.InfoFormat("TrackingState Block event {0}", blockState.State);
            if (mResourceMessage == null)
            {
                CNXLog.WarnFormat("TrackingState no resource message!");
                return;
            }
            try
            {
                // deal with any newly completed blocks
                if (blockState.State == BlockTransferManager.BlockTransferState.DeviceSynchronised)
                {
                    // get  the Block details
                    BlockTransferManager btm = (BlockTransferManager)o;
                    switch ((Block)btm.BlockId)
                    {
                    // get new route config version
                    case Block.RouteConfig:
                        if (mResourceMessage.RoutePatternVersion != (byte)btm.DeviceVersion)
                        {
                            mResourceMessage.RoutePatternVersion = (byte)btm.DeviceVersion;
                            StateMachine(TrackingEvent.CATALOGUE);
                        }
                        break;

                    // get new vehicle config
                    case Block.VehicleConfig:
                        if (mResourceMessage.VehicleConfigVersion != (byte)btm.DeviceVersion)
                        {
                            mResourceMessage.VehicleConfigVersion = (byte)btm.DeviceVersion;
                            StateMachine(TrackingEvent.CATALOGUE);
                        }
                        break;

                    // get new Service Alert
                    case Block.ServiceAlert:
                        if (mResourceMessage.ServiceAlertVersion != (byte)btm.DeviceVersion)
                        {
                            mResourceMessage.ServiceAlertVersion = (byte)btm.DeviceVersion;
                            StateMachine(TrackingEvent.CATALOGUE);
                        }
                        break;

                    // get new diriver config
                    case Block.DriverConfig:
                        if (mResourceMessage.DriverConfigVersion != (byte)btm.DeviceVersion)
                        {
                            mResourceMessage.DriverConfigVersion = (byte)btm.DeviceVersion;
                            StateMachine(TrackingEvent.CATALOGUE);
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                CNXLog.Error("TrackerState Block error.", ex);
            }
        }
Пример #2
0
        private void StartFirmwareManagement(byte[] versionData, int startIndex)
        {
            try
            {
                // the vesion data is in id,version pairs
                // test against our cataloge to see if anything needs upgrading.
                for (int i = startIndex; i < versionData.Length; i += 2)
                {
                    // check if there is version information for this module
                    if (versionData[i] == mProductCode)
                    {
                        // it's for us, should we be doing a self upgrade!
                        // allow a 128 window to allow for version wrap round.
                        if (mVersion < versionData[i + 1])
                        {
                            CNXLog.InfoFormat("Doing self upgrade from {0} to {1}.", mVersion, versionData[i + 1]);
                            if (mBootstrapUpgrader == null)
                            {
                                //object[] args = { mRTTServer, Properties.Settings.Default.FirmwarePath, mProductCode, Properties.Settings.Default.FirmwareExtension };
                                object[] args = { mRTTServer, FirmwarePath, mProductCode, FirmwareExtension };
                                //object[] args = { mRTTServer, "", mProductCode, "" };
                                string url = string.Format("http://{0}{1}{2}{3}", args);
                                mBootstrapUpgrader = new BootstrapUpgrader(url);
                                mBootstrapUpgrader.BeginUpgrade();
                            }
                            else if (mBootstrapUpgrader.Status == BootstrapUpgrader.UpgradeState.Idle || mBootstrapUpgrader.Status == BootstrapUpgrader.UpgradeState.UpgradeComplete)
                            {
                                mBootstrapUpgrader.BeginUpgrade();
                            }
                        }
                    }
                    // Product Ids < 0x7f are not CAN upgradable so ignore them
                    if (versionData[i] < 0x7f)
                    {
                        continue;
                    }

                    DeviceCatalogueInfo info = mCANServer.DeviceCatalogue.FindDevice((DeviceCatalogueInfo.Product)versionData[i]);
                    if (info != null)
                    {
                        if (info.BuildNo < versionData[i + 1])
                        {
                            BlockTransferManager txManager = null;
                            // need to organise an upgrade
                            foreach (BlockTransferManager btm in mFirmwareList)
                            {
                                if (btm.BlockId == (byte)info.ProductId)
                                {
                                    txManager        = btm;
                                    btm.BlockVersion = versionData[i + 1];
                                    break;
                                }
                            }
                            if (txManager == null)
                            {
                                //object[] args = { mRTTServer, Properties.Settings.Default.FirmwarePath, versionData[i], Properties.Settings.Default.FirmwareExtension };
                                object[] args = { mRTTServer, FirmwarePath, versionData[i], FirmwareExtension };
                                //object[] args = { mRTTServer, "", versionData[i], "" };
                                string url = string.Format("http://{0}{1}{2}{3}", args);
                                mFirmwareList.Add(new BlockTransferManager(url, versionData[i], versionData[i + 1], mCANClient));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                CNXLog.ErrorFormat("StartFirmwareManagement error {0}", e.ToString());
            }
        }
Пример #3
0
        private void StartDeviceConfigurationManagement(byte[] resourceVersions)
        {
            string url;

            try
            {
                if (resourceVersions.Length > 0)
                {
                    if (mRoutePatternManager == null)
                    {
                        url = string.Format("http://{0}{1}", mRTTServer, VehicleRouteReasourcePath);
                        //url = string.Format("http://{0}{1}", mRTTServer, "");
                        mRoutePatternManager = new BlockTransferManager(url, (int)Block.RouteConfig, resourceVersions[0], mCANClient);
                        // register the tracking state manager to changes
                        mRoutePatternManager.RaiseStateChangedEvent += mTrackingManager.OnBlockChangedEventHandler;
                    }
                    else
                    {
                        mRoutePatternManager.BlockVersion = resourceVersions[0];
                    }
                }
                if (resourceVersions.Length > 1)
                {
                    if (mVehicleConfigManager == null)
                    {
                        url = string.Format("http://{0}{1}", mRTTServer, VehicleConfigPath);
                        //url = string.Format("http://{0}{1}", mRTTServer, "");
                        mVehicleConfigManager = new BlockTransferManager(url, (int)Block.VehicleConfig, resourceVersions[1], mCANClient);
                        // register the tracking state manager to changes
                        mVehicleConfigManager.RaiseStateChangedEvent += mTrackingManager.OnBlockChangedEventHandler;
                    }
                    else
                    {
                        mVehicleConfigManager.BlockVersion = resourceVersions[1];
                    }
                }
                if (resourceVersions.Length > 2)
                {
                    if (mServiceAlertManager == null)
                    {
                        url = string.Format("http://{0}{1}", mRTTServer, ServiceAlertPath);
                        //url = string.Format("http://{0}{1}", mRTTServer, "");
                        mServiceAlertManager = new BlockTransferManager(url, (int)Block.ServiceAlert, resourceVersions[2], mCANClient);
                        // register the tracking state manager to changes
                        mServiceAlertManager.RaiseStateChangedEvent += mTrackingManager.OnBlockChangedEventHandler;
                    }
                    else
                    {
                        mServiceAlertManager.BlockVersion = resourceVersions[2];
                    }
                }
                if (resourceVersions.Length > 3)
                {
                    if (mDriverConfigManager == null)
                    {
                        url = string.Format("http://{0}{1}", mRTTServer, DriverConfigPath);
                        //url = string.Format("http://{0}{1}", mRTTServer, "");
                        mDriverConfigManager = new BlockTransferManager(url, (int)Block.DriverConfig, resourceVersions[3], mCANClient);
                        // register the tracking state manager to changes
                        mDriverConfigManager.RaiseStateChangedEvent += mTrackingManager.OnBlockChangedEventHandler;
                    }
                    else
                    {
                        mDriverConfigManager.BlockVersion = resourceVersions[3];
                    }
                }
            }
            catch (Exception e)
            {
                CNXLog.ErrorFormat("StartDeviceConfigurationManagement error {0}", e.ToString());
            }
        }