/// <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); } }
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()); } }
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()); } }