private void ExecuteClearCommand()
        {
            Task.Run(() =>
            {
                System.Windows.MessageBoxResult msgResult = System.Windows.MessageBoxResult.No;
                System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                {
                    msgResult = System.Windows.MessageBox.Show("Are you sure you want to clear all data stored on the bridge?", "Confirm", System.Windows.MessageBoxButton.YesNo);
                }));

                if (msgResult == System.Windows.MessageBoxResult.Yes)
                {
                    if (CottonDBMS.DataModels.Helpers.NetworkHelper.HasNetwork())
                    {
                        if (BridgeSyncTask.SyncProcessRunning())
                        {
                            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                                IsBusy = true, Message = "Waiting for background sync to complete."
                            });
                            BridgeSyncTask.WaitForSyncToStop();
                        }
                        else
                        {
                            //run the sync to send data collected this also ensure after it completes
                            //it will not start again during the reset operation
                            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                                IsBusy = true, Message = "Sending collected data."
                            });
                            BridgeSyncTask.RunSync(System.Reflection.Assembly.GetExecutingAssembly().Location, false);
                            BridgeSyncTask.WaitForSyncToStop();
                        }

                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = true, Message = "Clearing data..."
                        });
                        using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                        {
                            dp.TruckRepository.ClearTruckData();
                            dp.LoadScanRepository.ClearBridgeScanData();
                            dp.TruckRepository.ClearClientFarmFieldData();
                            dp.SaveChanges();
                            TagDataProvider.ClearBuffer();
                            dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.LAST_SYNC_TIME, DateTime.Now.AddYears(-1).ToString());
                        }

                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = false, Message = ""
                        });
                        Messenger.Default.Send <DataRefreshedMessage>(new DataRefreshedMessage());
                    }
                    else
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            msgResult = System.Windows.MessageBox.Show("Cannot clear data no network connection");
                        }));
                    }
                }
            });
        }
 private void ExecuteCancelCommand()
 {
     TagDataProvider.SetGPOState(1, false);
     TagDataProvider.SetGPOState(2, false);
     TagDataProvider.SetGPOState(3, false);
     ExitToIdlePage();
 }
        private void handleWeightAcquired(WeightAcquiredMessage msg)
        {
            try
            {
                if (!_initialized || _canceled || _loadCreated)
                {
                    return;
                }

                Logging.Logger.Log("INFO", "Entering handleWeightAcquired " + msg.Weight.ToString());
                //lock (_dataLocker)
                //{
                if (_canceled)
                {
                    return;
                }

                if (!_weight1Acquired)
                {
                    Weight1          = msg.Weight;
                    _weight1Acquired = true;

                    //if not semi signal weight acquired
                    if (!IsSplitWeight)
                    {
                        WelcomeMessage = "WEIGHT RECORDED";
                        Logging.Logger.Log("INFO", "WEIGHT RECORDED " + msg.Weight.ToString());
                        waitingForExit = true;
                        TagDataProvider.SetGPOState(2, true);
                        TagDataProvider.SetGPOState(3, false);
                    }
                    else
                    {
                        WelcomeMessage = "WEIGHT 1 OF 2 RECORDED";
                        Logging.Logger.Log("INFO", "WEIGHT 1 OF 2 RECORDED " + msg.Weight.ToString());
                        TagDataProvider.SetGPOState(2, true);
                        TagDataProvider.SetGPOState(3, false);
                        _waitingForMotion = true;
                    }
                }
                else if (_isSplitWeigh && _weight1Acquired && !_waitingForMotion && !_weight2Acquired)
                {
                    Weight2          = msg.Weight;
                    _weight2Acquired = true;
                    waitingForExit   = true;
                    //signal pull forward
                    WelcomeMessage = "WEIGHT 2 OF 2 RECORDED ";
                    Logging.Logger.Log("INFO", "WEIGHT 2 OF 2 RECORDED " + msg.Weight.ToString());
                    TagDataProvider.SetGPOState(3, false);
                    TagDataProvider.SetGPOState(2, true);
                }
                //}
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
        /* private void Timer_Elapsed(object sender, ElapsedEventArgs e)
         * {
         *   if (!executingTimer) //prevent long execution of handler from overlapping later callbacks
         *   {
         *       executingTimer = true;
         *       using (var dp = SimpleIoc.Default.GetInstance<IUnitOfWorkFactory>().CreateUnitOfWork())
         *       {
         *           lock (_trucks)
         *           {
         *               _trucks = dp.TruckRepository.GetAll().ToList();
         *           }
         *       }
         *       executingTimer = false;
         *   }
         * }*/

        public void Initialize()
        {
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                GinName        = dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.GIN_NAME, "");
                WelcomeMessage = "WELCOME, TO " + GinName;
                TagDataProvider.ClearBuffer();
            }
        }
 private void handleInMotionMessage(InMotionMessage msg)
 {
     try
     {
         TagDataProvider.SetGPOState(3, true);
     }
     catch (Exception exc)
     {
         Logging.Logger.Log(exc);
         Logging.Logger.WriteBuffer();
     }
 }
 private void handleWeightAcquired(WeightAcquiredMessage msg)
 {
     try
     {
         TagDataProvider.SetGPOState(3, false);
     }
     catch (Exception exc)
     {
         Logging.Logger.Log(exc);
         Logging.Logger.WriteBuffer();
     }
 }
        private void handleTagsReported(List <TagItem> tagsReported)
        {
            try
            {
                TagItem     truckTag      = null;
                TruckEntity selectedTruck = null;

                lock (_trucks)
                {
                    /*foreach (var tag in tagsReported)
                     * {
                     *  Logging.Logger.Log("INFO", "EPC: " + tag.Epc + " SN: " + tag.SerialNumber + " ANTENNA PORT: " + tag.AntennaePort.ToString() + " FIRST SEEN LOCAL TIME: " + tag.Firstseen.ToLocalTime().ToString() + " PEAK RSSI: " + tag.PeakRSSI.ToString() + " PHASE ANGLE: " + tag.PhaseAngle.ToString());
                     * }*/

                    var truckTagIds = _trucks.Select(t => t.RFIDTagId).ToArray();
                    truckTag = tagsReported.FirstOrDefault(t => truckTagIds.Contains(t.SerialNumber) || truckTagIds.Contains(t.Epc));

                    if (truckTag != null)
                    {
                        using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                        {
                            selectedTruck = dp.TruckRepository.FindSingle(t => t.RFIDTagId == truckTag.SerialNumber || t.RFIDTagId == truckTag.Epc);
                            var lastLoad = dp.LoadScanRepository.LastLoad();
                            if (lastLoad != null && lastLoad.TruckID == selectedTruck.Name && lastLoad.Created.AddMinutes(15) > DateTime.UtcNow)
                            {
                                selectedTruck = null;
                                Logging.Logger.Log("INFO", "Truck Tag ignored: " + truckTag.SerialNumber);
                                TagDataProvider.ClearBuffer();
                            }
                        }
                    }

                    if (selectedTruck != null)
                    {
                        Logging.Logger.Log("INFO", "Truck Tag for truck: " + selectedTruck.Name + " scanned.  Starting weigh in.");
                        //check to see if this truck
                        var vm = new WeighInPageViewModel(NavService);
                        //TagDataProvider.ClearBuffer();
                        NavService.ShowPage(PageType.WEIGHT_IN_PAGE, false, (BasePageViewModel)vm);
                        vm.Initialize(selectedTruck);
                    }
                    else
                    {
                        //TagDataProvider.ClearBuffer();
                    }
                }
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
        private void handleInMotion(InMotionMessage msg)
        {
            try
            {
                if (!_initialized || _canceled || _loadCreated)
                {
                    return;
                }

                if (timer != null)
                {
                    timer.Enabled = false;
                }

                Logging.Logger.Log("INFO", "Entering handleInMotion");
                //lock (_dataLocker)
                //{

                if (_canceled)
                {
                    return;
                }

                TagDataProvider.SetGPOState(2, false);

                if (zeroWeightCount < 20)
                {
                    TagDataProvider.SetGPOState(3, true);
                }
                //TagDataProvider.SetGPOState(3, true);

                if (!_weight1Acquired)
                {
                    Weight1 = msg.Weight;
                }
                else if (_weight1Acquired && _waitingForMotion)
                {
                    _waitingForMotion = false;
                }
                else if (!_weight2Acquired && IsSplitWeight)
                {
                    Weight2 = msg.Weight;
                }
                //}
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
        public override void Cleanup()
        {
            Messenger.Default.Unregister <ScaleWeightReportMessage>(this);
            Messenger.Default.Unregister <WeightAcquiredMessage>(this);
            Messenger.Default.Unregister <InMotionMessage>(this);
            Messenger.Default.Unregister <BarcodeScannedMessage>(this);
            Messenger.Default.Unregister <List <TagItem> >(this, handleTagsReported);

            TagDataProvider.SetGPOState(1, false);
            TagDataProvider.SetGPOState(2, false);
            TagDataProvider.SetGPOState(3, false);

            base.Cleanup();
        }
        private void ExecuteLookupLoad()
        {
            try
            {
                if (_loadCreated)
                {
                    return;
                }

                _canceled = true;
                timer.Stop();
                autoSaveTimer.Stop();

                Logging.Logger.Log("INFO", "Entering ExecuteLookupLoad");
                //lock (_dataLocker)
                //{
                bool newLoad = false;

                if (string.IsNullOrWhiteSpace(GinTicketLoadNumber))
                {
                    HasLookupError = true;
                    return;
                }
                else
                {
                    HasLookupError = false;
                }
                Logging.Logger.Log("INFO", "CREATE LOAD FROM LOAD LOOKUP");

                if (!_loadCreated)
                {
                    CreateLoad(ref newLoad);
                }

                TagDataProvider.SetGPOState(1, false);
                TagDataProvider.SetGPOState(2, false);
                TagDataProvider.SetGPOState(3, false);

                var vm = new LoadViewModel(NavService);
                NavService.ShowPage(PageType.LOAD_PAGE, false, (BasePageViewModel)vm);
                vm.Initialize(GinTicketLoadNumber, newLoad);
                //}
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
Ejemplo n.º 11
0
        private void handleTagsReported(List <TagItem> tagsReported)
        {
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                foreach (var t in tagsReported)
                {
                    var existingScan = dp.FeederScanRepository.FindSingle(s => s.Name == t.SerialNumber);
                    if (existingScan == null)
                    {
                        Initialize(t.SerialNumber, t.Epc, false);
                    }
                }

                TagDataProvider.ClearBuffer();
            }
        }
        private void handleTagsReported(List <TagItem> tagsReported)
        {
            try
            {
                TagsInBuffer     = TagDataProvider.TagsInBuffer();
                LastSerialNumber = tagsReported.Last().SerialNumber;

                foreach (var tag in tagsReported)
                {
                    Logging.Logger.Log("INFO", "EPC: " + tag.Epc + " SN: " + tag.SerialNumber + " ANTENNA PORT: " + tag.AntennaePort.ToString() + " FIRST SEEN LOCAL TIME: " + tag.Firstseen.ToLocalTime().ToString() + " PEAK RSSI: " + tag.PeakRSSI.ToString() + " PHASE ANGLE: " + tag.PhaseAngle.ToString());
                }
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
 private void handleTagsReported(List <TagItem> tagsReported)
 {
     using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
     {
         foreach (var t in tagsReported)
         {
             var existingScan = dp.FeederScanRepository.FindSingle(s => s.Name == t.SerialNumber);
             if (existingScan == null)
             {
                 var vm = new ModuleScanViewModel(NavService);
                 NavService.ShowPage(PageType.FEEDER_MODULE_PAGE, false, vm);
                 System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                 {
                     vm.Initialize(t.SerialNumber, t.Epc, true);
                 }));
             }
         }
         TagDataProvider.ClearBuffer();
     }
 }
        public void Initialize(TruckEntity selectedTruck)
        {
            Logging.Logger.Log("INFO", "Entering Weighin Initialize");
            //lock (_dataLocker)
            //{
            _activeTruck = selectedTruck;
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                isUnattendedMode = bool.Parse(dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.UNATTENDED_MODE, "FALSE"));

                GinName         = dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.GIN_NAME, "");
                _allTrucks      = dp.TruckRepository.GetAll().ToList();
                WelcomeMessage  = selectedTruck.Name + " PULLING ONTO SCALE";
                IsSplitWeight   = _activeTruck.IsSemi;
                IsSplitCanceled = !_activeTruck.IsSemi;
                _yellowLightOn  = false;
                zeroWeightCount = 0;
                if (TagDataProvider.TagsInBuffer() >= 1)
                {
                    TagDataProvider.SetGPOState(1, true);
                    _yellowLightOn = true;
                    TagDataProvider.SetGPOState(2, false);
                    TagDataProvider.SetGPOState(3, false);
                }

                timer           = new System.Timers.Timer();
                timer.Interval  = int.Parse(dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.WEIGH_IN_TIMEOUT, "30")) * 1000;
                timer.AutoReset = false;
                timer.Elapsed  += Timer_Elapsed;
                timer.Start();

                autoSaveTimer           = new System.Timers.Timer();
                autoSaveTimer.Interval  = int.Parse(dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.WEIGHT_AUTO_SAVE_TIMEOUT, "10")) * 60 * 1000;
                autoSaveTimer.AutoReset = false;
                autoSaveTimer.Elapsed  += AutoSaveTimer_Elapsed;;
                autoSaveTimer.Start();
            }

            _initialized = true;
            //}
        }
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                Messenger.Default.Unregister <FirstSetupWizardComplete>(this);

                CottonDBMS.TruckApp.Tasks.TruckPullFromCloudTask.Cancel();
                AggregateDataProvider.Cleanup();
                TagDataProvider.Disconnect();
                GPSDataProvider.Disconnect();
                QuadratureEncoderDataProvider.Dispose();
                Logging.Logger.CleanUp();
                base.OnClosed(e);
            }
            catch (Exception exc)
            {
                System.Diagnostics.Trace.Write(exc.Message);
            }

            //if (ConfigurationManager.AppSettings["AllowStartupAndShutdown"].ToLower() == "true")
            //System.Diagnostics.Process.Start("Shutdown", "-s -t 10");
        }
        public override void Cleanup()
        {
            Messenger.Default.Unregister <SettingsSavedMessage>(this);
            Messenger.Default.Unregister <BusyMessage>(this);
            Messenger.Default.Unregister <ScaleWeightReportMessage>(this);
            Messenger.Default.Unregister <KeyDownMessage>(this);
            Messenger.Default.Unregister <List <TagItem> >(this);
            Messenger.Default.Unregister <BarcodeScannedMessage>(this);
            timer.Enabled = false;
            TagDataProvider.Disconnect();

            if (_scaleReader != null)
            {
                _scaleReader.Dispose();
            }

            if (_barCodeReader != null)
            {
                _barCodeReader.Dispose();
            }
            base.Cleanup();
        }
        private void handleTagsReported(List <TagItem> tags)
        {
            try
            {
                if (!_initialized || _canceled || _loadCreated)
                {
                    return;
                }

                if (!_yellowLightOn)
                {
                    if (tags.Any(t => !_allTrucks.Any(truck => truck.RFIDTagId == t.SerialNumber || truck.RFIDTagId == t.Epc)))
                    {
                        TagDataProvider.SetGPOState(1, true);
                        _yellowLightOn = true;
                    }
                }
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
            }
        }
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
     try
     {
         CottonDBMS.Logging.Logger.Log("INFO", "FEEDER APPLICATION LAUNCH");
         Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
         Messenger.Default.Register <ContentPageChangedMessage>(this, handleContentPageChanged);
         TagDataProvider.SetSettingsPath(FolderConstants.FEEDER_BRIDGE_APP_DATA_FOLDER);
         INavigationService navService = SimpleIoc.Default.GetInstance <INavigationService>();
         shellVM = new ShellViewModel(navService);
         shellVM.AllowBarcoderConnect   = false;
         shellVM.AllowRFIDReaderConnect = true;
         shellVM.AllowScaleConnect      = false;
         shellVM.AllowWeighInTimeOut    = false;
         this.DataContext = shellVM;
         shellVM.Initialize();
     }
     catch (Exception exc)
     {
         Logging.Logger.Log(exc);
         Logging.Logger.CleanUp();
     }
 }
        private void AutoSaveTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            try
            {
                if (_canceled || _loadCreated)
                {
                    return;
                }

                autoSaveTimer.Enabled = false;
                autoSaveTimer.Stop();

                Logging.Logger.Log("INFO", "Entering AutoSave");
                //lock (_dataLocker)
                //{
                bool newLoad = true;

                if (!_loadCreated)
                {
                    setGinTicketToAuto();
                    Logging.Logger.Log("INFO", "CREATE LOAD FROM AUTO SAVE");
                    CreateLoad(ref newLoad);
                }

                TagDataProvider.SetGPOState(1, false);
                TagDataProvider.SetGPOState(2, false);
                TagDataProvider.SetGPOState(3, false);

                ExitToIdlePage();
                //}
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
                Logging.Logger.WriteBuffer();
            }
        }
Ejemplo n.º 20
0
        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            ScaleSimHelper.RunSim();

            bool CtrlDown = System.Windows.Input.Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);
            bool TDown    = Keyboard.IsKeyDown(Key.T);
            bool MDown    = Keyboard.IsKeyDown(Key.M);

            if (CtrlDown && TDown)
            {
                using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                {
                    var truck   = dp.TruckRepository.GetAll().ToList().First();
                    var message = new TagItem {
                        AntennaePort = 1, Epc = truck.RFIDTagId, Firstseen = DateTime.UtcNow, Lastseen = DateTime.UtcNow
                    };
                    var listtags = new List <TagItem>();
                    listtags.Add(message);
                    Messenger.Default.Send <List <TagItem> >(listtags);
                }
            }
            else if (CtrlDown && MDown)
            {
                Task.Run(() =>
                {
                    TagDataProvider.SpoofRandomTag();
                    System.Threading.Thread.Sleep(200);
                    TagDataProvider.SpoofRandomTag();
                    System.Threading.Thread.Sleep(200);
                    TagDataProvider.SpoofRandomTag();
                    System.Threading.Thread.Sleep(200);
                    TagDataProvider.SpoofRandomTag();
                    System.Threading.Thread.Sleep(200);
                });
            }
        }
        public void Initialize()
        {
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                TagDataProvider.SetGPOState(1, false);
                TagDataProvider.SetGPOState(2, false);
                TagDataProvider.SetGPOState(3, false);

                GinName        = dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.GIN_NAME, "");
                WelcomeMessage = "WELCOME, TO " + GinName;
                TagDataProvider.ClearBuffer();
                Logging.Logger.WriteBuffer();

                /*Task.Run(() =>
                 * {
                 *  TagDataProvider.DisconnectIfUptimeLimitReached(1);
                 * });*/

                lock (_trucks)
                {
                    _trucks = dp.TruckRepository.GetAll().ToList();
                }
            }
        }
        private async void ExecuteSave()
        {
            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                IsBusy = true, Message = "Validating settings..."
            });
            if (!await ValidateForm())
            {
                Messenger.Default.Send <BusyMessage>(new BusyMessage {
                    IsBusy = false, Message = ""
                });
                return;
            }

            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                IsBusy = true, Message = "Saving..."
            });

            await Task.Run(() =>
            {
                try
                {
                    Settings settings = TagDataProvider.GetDefaultSettings();

                    if (settings != null)
                    {
                        settings.Antennas.TxPowerMax       = false;
                        settings.Antennas.RxSensitivityMax = false;
                        settings.HoldReportsOnDisconnect   = false;
                        settings.Report.Mode = ReportMode.Individual;
                        settings.SearchMode  = SearchMode.DualTarget;
                        settings.ReaderMode  = ReaderMode.AutoSetStaticDRM;
                        settings.Report.IncludeFirstSeenTime      = true;
                        settings.Report.IncludeLastSeenTime       = true;
                        settings.Report.IncludeSeenCount          = true;
                        settings.Keepalives.Enabled               = true;
                        settings.Keepalives.EnableLinkMonitorMode = true;
                        settings.Keepalives.LinkDownThreshold     = 5;
                        settings.Keepalives.PeriodInMs            = 3000;

                        settings.Antennas.GetAntenna(1).RxSensitivityInDbm = (double)_antenna1ReceivePower;
                        settings.Antennas.GetAntenna(1).TxPowerInDbm       = (double)_antenna1TransmitPower;

                        settings.Antennas.GetAntenna(2).RxSensitivityInDbm = (double)_antenna2ReceivePower;
                        settings.Antennas.GetAntenna(2).TxPowerInDbm       = (double)_antenna2TransmitPower;

                        settings.Antennas.GetAntenna(3).RxSensitivityInDbm = (double)_antenna3ReceivePower;
                        settings.Antennas.GetAntenna(3).TxPowerInDbm       = (double)_antenna3TransmitPower;

                        settings.Antennas.GetAntenna(4).RxSensitivityInDbm = (double)_antenna4ReceivePower;
                        settings.Antennas.GetAntenna(4).TxPowerInDbm       = (double)_antenna4TransmitPower;

                        TagDataProvider.ApplySettings(settings);

                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = true, Message = "Settings saved."
                        });
                        System.Threading.Thread.Sleep(3000);
                    }
                    else
                    {
                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = true, Message = "Unable to save reader settings. Reader disconnected?"
                        });
                        System.Threading.Thread.Sleep(3000);
                    }


                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        if (PortName == "NONE")
                        {
                            PortName = "";
                        }
                        if (BarcodePortName == "NONE")
                        {
                            BarcodePortName = "";
                        }

                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.SCALE_COM_PORT, PortName);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.BARCODE_COM_PORT, BarcodePortName);

                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.BRIDGE_ID, BridgeID);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.GIN_NAME, ScreenTitle);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DOCUMENTDB_ENDPOINT, DocumentDbEndpoint);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DOCUMENT_DB_KEY, DocumentDbConnection);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.LATITUDE, Latitude);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.LONGITUDE, Longitude);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.TARGET_STATUS, TargetStatus);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DATA_SYNC_INTERVAL, DataSyncInterval.ToString());
                        dp.SaveChanges();
                    }

                    /*if (portChanged)
                     * {
                     *  System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                     *  {
                     *      System.Windows.MessageBox.Show("Please close and restart the application for new scale setting to take effect");
                     *  }));
                     * }*/
                }
                catch (Exception exc)
                {
                    System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        System.Windows.MessageBox.Show("An error occurred saving settings. " + exc.Message);
                    }));
                    Logging.Logger.Log(exc);
                }
                finally
                {
                    Messenger.Default.Send <BusyMessage>(new BusyMessage {
                        IsBusy = false, Message = ""
                    });
                    Messenger.Default.Send <SettingsSavedMessage>(new SettingsSavedMessage {
                        GinName = ScreenTitle
                    });
                }

                if (IsFirstLaunch)
                {
                    var vm = new IdlePageViewModel(NavService);
                    NavService.ShowPage((int)PageType.IDLE_PAGE, false, vm);
                    vm.Initialize();
                }
            });
        }
        private void initialize()
        {
            if (vm == null)
            {
                vm          = SimpleIoc.Default.GetInstance <NavViewModel>();
                DataContext = vm;
                unlockSettingsControl.DataContext = vm;
                passwordModalControl.DataContext  = vm;
                busyModal.DataContext             = vm;
            }

            this.Visibility = Visibility.Visible;

            //check for gps offsett setting
            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                var repo          = dp.SettingsRepository;
                var offsetSetting = repo.FindSingle(s => s.Key == TruckClientSettingKeys.GPS_OFFSET_FEET);

                if (offsetSetting == null)
                {
                    repo.UpsertSetting(TruckClientSettingKeys.GPS_OFFSET_FEET, "45");
                    GPSDataProvider.SetGpsOffsetFeet(45.0);
                }
                else
                {
                    GPSDataProvider.SetGpsOffsetFeet(double.Parse(offsetSetting.Value));
                }
            }

            if (!vm.HasCloudSettings)
            {
                MessageBox.Show("Data sync settings have not been configured.  Please configure then restart the application.");
                navTabControl.SelectedIndex = 2;
            }
            else
            {
                Task.Run(() =>
                {
                    try
                    {
                        try
                        {
                            if (!TagDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "Looking for RFID reader..."
                                });
                                //System.Threading.Thread.Sleep(35000);
                                int tryNumber = 1;

                                do
                                {
                                    //todo fix error hangs when no reader on rugged pc
                                    TagDataProvider.Connect();
                                    tryNumber++;
                                    System.Threading.Thread.Sleep(3000);
                                } while (tryNumber < 10 && !TagDataProvider.IsConnected);

                                //Messenger.Default.Send<BusyMessage>(new Messages.BusyMessage { IsBusy = true, Message = "Connecting to RFID reader..." });
                                //TagDataProvider.Connect();
                                //System.Threading.Thread.Sleep(1400);
                            }

                            if (!TagDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "Not connected to RFID Reader."
                                });
                                System.Threading.Thread.Sleep(1200);
                            }
                            else
                            {
                                TagDataProvider.Stop();
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "RFID Reader found."
                                });
                                TagDataProvider.SyncReaderTime();
                                System.Threading.Thread.Sleep(1200);
                            }
                        }
                        catch (Exception readerExc)
                        {
                            Logging.Logger.Log(readerExc);
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Initializing shaft sensor..."
                        });
                        QuadratureEncoderDataProvider.StartEvents();
                        System.Threading.Thread.Sleep(1000);

                        if (!QuadratureEncoderDataProvider.IsStarted)
                        {
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Shaft Sensor not found."
                            });
                            System.Threading.Thread.Sleep(1200);
                        }

                        if (!GPSDataProvider.IsConnected)
                        {
                            Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                IsBusy = true, Message = "Connecting to GPS receiver..."
                            });

                            Task.Run(() =>
                            {
                                GPSDataProvider.Connect();
                            });

                            int waitCount = 0;
                            while (waitCount < 60 && !GPSDataProvider.IsConnected)
                            {
                                System.Threading.Thread.Sleep(500);
                                waitCount++;
                            }

                            if (GPSDataProvider.IsConnected)
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "GPS connected."
                                });
                                System.Threading.Thread.Sleep(1000);
                            }
                            else
                            {
                                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                                    IsBusy = true, Message = "GPS not connected."
                                });
                                System.Threading.Thread.Sleep(2000);
                            }
                        }

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = false, Message = ""
                        });

                        TagDataProvider.Initialize();
                        AggregateDataProvider.Initialize();
                        CottonDBMS.TruckApp.Tasks.TruckPullFromCloudTask.Init();
                        readerSettingsControl.Initialize();
                    }
                    catch (Exception exc)
                    {
                        CottonDBMS.Logging.Logger.Log(exc);
                    }
                });
            }

            navTabControl.Height = canvasLayout.ActualHeight;
            navTabControl.Width  = canvasLayout.ActualWidth;
            modalBG.Height       = canvasLayout.ActualHeight;
            modalBG.Width        = canvasLayout.ActualWidth;
        }
Ejemplo n.º 24
0
        private void ExecuteSave()
        {
            Task.Run(() =>
            {
                Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                    IsBusy = true, Message = "Saving..."
                });

                try
                {
                    Settings settings = TagDataProvider.GetDefaultSettings();

                    if (settings != null)
                    {
                        settings.Antennas.TxPowerMax       = false;
                        settings.Antennas.RxSensitivityMax = false;
                        settings.HoldReportsOnDisconnect   = false;
                        settings.Report.Mode = ReportMode.Individual;
                        //settings.AutoStart.Mode = AutoStartMode.None;
                        settings.SearchMode = SearchMode.DualTarget;
                        settings.ReaderMode = ReaderMode.AutoSetStaticDRM;
                        settings.Report.IncludeFirstSeenTime      = true;
                        settings.Report.IncludeLastSeenTime       = true;
                        settings.Report.IncludeSeenCount          = true;
                        settings.Keepalives.Enabled               = true;
                        settings.Keepalives.EnableLinkMonitorMode = true;
                        settings.Keepalives.LinkDownThreshold     = 5;
                        settings.Keepalives.PeriodInMs            = 3000;

                        settings.Antennas.GetAntenna(1).RxSensitivityInDbm = (double)_antenna1ReceivePower;
                        settings.Antennas.GetAntenna(1).TxPowerInDbm       = (double)_antenna1TransmitPower;

                        settings.Antennas.GetAntenna(2).RxSensitivityInDbm = (double)_antenna2ReceivePower;
                        settings.Antennas.GetAntenna(2).TxPowerInDbm       = (double)_antenna2TransmitPower;

                        settings.Antennas.GetAntenna(3).RxSensitivityInDbm = (double)_antenna3ReceivePower;
                        settings.Antennas.GetAntenna(3).TxPowerInDbm       = (double)_antenna3TransmitPower;

                        settings.Antennas.GetAntenna(4).RxSensitivityInDbm = (double)_antenna4ReceivePower;
                        settings.Antennas.GetAntenna(4).TxPowerInDbm       = (double)_antenna4TransmitPower;

                        TagDataProvider.ApplySettings(settings);

                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Settings saved."
                        });
                        System.Threading.Thread.Sleep(3000);
                    }
                    else
                    {
                        Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                            IsBusy = true, Message = "Unable to save reader settings. Reader disconnected?"
                        });
                        System.Threading.Thread.Sleep(3000);
                    }

                    bool portChanged = false;
                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        var repo    = dp.SettingsRepository;
                        var setting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.RFID_READ_DELAY);
                        if (setting != null)
                        {
                            setting.Value = RFIDReadDelay.ToString();
                            AggregateDataProvider.UpdateReadDelay(RFIDReadDelay);
                        }

                        var portSetting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.GPS_COM_PORT);
                        if (portSetting != null)
                        {
                            if (PortName != "-- Select One --")
                            {
                                if (portSetting.Value != PortName)
                                {
                                    portChanged = true;
                                }
                                portSetting.Value = PortName;
                            }
                        }
                        else //Add Port setting
                        {
                            portSetting       = new Setting();
                            portSetting.Value = PortName;
                            portSetting.Key   = TruckClientSettingKeys.GPS_COM_PORT;
                            dp.SettingsRepository.Add(portSetting);
                            portChanged = true;
                        }
                        dp.SaveChanges();
                    }

                    if (portChanged)
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                        {
                            System.Windows.MessageBox.Show("Please close and restart the application for new GPS settings to take effect");
                        }));
                    }
                }
                catch (Exception exc)
                {
                    System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        System.Windows.MessageBox.Show("An error occurred saving settings to reader. " + exc.Message);
                    }));
                    Logging.Logger.Log(exc);
                }
                finally
                {
                    Messenger.Default.Send <BusyMessage>(new Messages.BusyMessage {
                        IsBusy = false, Message = ""
                    });
                }
            });
        }
 private void ExecuteClearRFIDCommand()
 {
     RFIDEvents.Clear();
     TagDataProvider.ClearBuffer();
 }
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (!executingTimer) //prevent long execution of handler from overlapping later callbacks
            {
                executingTimer = true;

                if (lastActivity.AddMinutes(2) < DateTime.Now)
                {
                    Messenger.Default.Send <InactiveMessage>(new InactiveMessage());
                }


                CurrentTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");

                if (String.IsNullOrEmpty(Version))
                {
                    Version = "VERSION " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
                }

                //try to connect to reader
                if (AllowRFIDReaderConnect)
                {
                    connectToReader();
                }

                using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                {
                    if (AllowBarcoderConnect)
                    {
                        connectBarCodeReader(dp);
                    }

                    if (AllowScaleConnect)
                    {
                        connectScaleReader(dp);
                    }
                }

                if (EnableProcessSync)
                {
                    if (!BridgeSyncProcessHelper.Initialized && !NavService.IsOpen(PageType.SETTINGS_PAGE)) //make sure sync timer is running but not if in first setup
                    {
                        BridgeSyncProcessHelper.Init();
                    }

                    if (BridgeSyncProcessHelper.SyncProcessRunning())
                    {
                        SyncStatus = "SYNCING";
                    }
                    else
                    {
                        SyncStatus = "WAITING";
                    }
                }

                if (AllowRFIDReaderConnect)
                {
                    TagsInBuffer = TagDataProvider.TagsInBuffer();
                }

                executingTimer = false;
            }
        }
        private void connectToReader()
        {
            try
            {
                if (!TagDataProvider.IsConnected)
                {
                    Logging.Logger.Log("INFO", "READER NOT CONNECTED");

                    if (ReaderStatus == "CONNECTED")
                    {
                        Logging.Logger.Log("INFO", "READER CHANGE FROM CONNECTED TO DISCONNECTED");
                    }

                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        var setting = dp.SettingsRepository.GetSettingWithDefault(BridgeSettingKeys.READER_HOST_NAME, "169.254.1.1");
                        TagDataProvider.SetHostName(setting);
                        TagDataProvider.Connect();
                        //System.Threading.Thread.Sleep(1000);
                    }
                }

                if (!TagDataProvider.IsConnected)
                {
                    ReaderStatus = "DISCONNECTED";
                }
                else
                {
                    if (ReaderStatus == "DISCONNECTED")
                    {
                        Logging.Logger.Log("INFO", "READER RE-CONNECTED");
                    }


                    ReaderStatus = "CONNECTED";
                    if (!readerTimeSet)
                    {
                        readerTimeSet = true;
                        TagDataProvider.Stop();
                        TagDataProvider.SyncReaderTime();
                        //TagDataProvider.Disconnect();
                    }
                }

                if (TagDataProvider.IsConnected && !TagDataProvider.IsSingulating())
                {
                    System.Threading.Thread.Sleep(500);

                    TagDataProvider.Start(0);

                    if (!TagDataProvider.IsSingulating())
                    {
                        TagDataProvider.Stop();
                        TagDataProvider.Disconnect();
                    }
                }
            }
            catch (Exception readerExc)
            {
                ReaderStatus = "ERROR";
                Logging.Logger.Log(readerExc);
            }
        }
Ejemplo n.º 28
0
        public void Initialize()
        {
            Settings settings = TagDataProvider.GetSettings();

            if (settings != null)
            {
                Antenna1ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(1).RxSensitivityInDbm);
                Antenna1TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(1).TxPowerInDbm);

                Antenna2ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(2).RxSensitivityInDbm);
                Antenna2TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(2).TxPowerInDbm);

                Antenna3ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(3).RxSensitivityInDbm);
                Antenna3TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(3).TxPowerInDbm);

                Antenna4ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(4).RxSensitivityInDbm);
                Antenna4TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(4).TxPowerInDbm);
            }

            if (Antenna1ReceivePower == 0)
            {
                Antenna1ReceivePower = -80;
            }
            if (Antenna2ReceivePower == 0)
            {
                Antenna2ReceivePower = -80;
            }
            if (Antenna3ReceivePower == 0)
            {
                Antenna3ReceivePower = -80;
            }
            if (Antenna4ReceivePower == 0)
            {
                Antenna4ReceivePower = -80;
            }

            if (Antenna1TransmitPower == 0)
            {
                Antenna1TransmitPower = 30;
            }
            if (Antenna2TransmitPower == 0)
            {
                Antenna2TransmitPower = 30;
            }
            if (Antenna3TransmitPower == 0)
            {
                Antenna3TransmitPower = 30;
            }
            if (Antenna4TransmitPower == 0)
            {
                Antenna4TransmitPower = 30;
            }


            foreach (var p in System.IO.Ports.SerialPort.GetPortNames().OrderBy(s => s))
            {
                AvailablePorts.Add(p);
            }

            using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
            {
                var repo = dp.SettingsRepository;

                var setting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.RFID_READ_DELAY);
                if (setting != null && !string.IsNullOrWhiteSpace(setting.Value))
                {
                    RFIDReadDelay = int.Parse(setting.Value);
                }

                var portSetting = repo.FindSingle(x => x.Key == TruckClientSettingKeys.GPS_COM_PORT);

                if (portSetting != null && !string.IsNullOrWhiteSpace(portSetting.Value))
                {
                    PortName = portSetting.Value;
                }
                else
                {
                    if (AvailablePorts.Count > 0)
                    {
                        PortName = AvailablePorts.First();
                    }
                    else
                    {
                        PortName = "";
                    }
                }
            }
        }
        public void Initialize()
        {
            if (IsFirstLaunch)
            {
                IsScreenLocked = false;
            }

            if (IsScreenLocked)
            {
                return;
            }

            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                IsBusy = true, Message = "Loading..."
            });

            Task.Run(() =>
            {
                try
                {
                    System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        loadForm();
                    }));

                    Settings settings = TagDataProvider.GetSettings();
                    if (settings != null)
                    {
                        Antenna1ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(1).RxSensitivityInDbm);
                        Antenna1TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(1).TxPowerInDbm);

                        Antenna2ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(2).RxSensitivityInDbm);
                        Antenna2TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(2).TxPowerInDbm);

                        Antenna3ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(3).RxSensitivityInDbm);
                        Antenna3TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(3).TxPowerInDbm);

                        Antenna4ReceivePower  = Convert.ToInt32(settings.Antennas.GetAntenna(4).RxSensitivityInDbm);
                        Antenna4TransmitPower = Convert.ToInt32(settings.Antennas.GetAntenna(4).TxPowerInDbm);
                    }

                    if (Antenna1ReceivePower == 0)
                    {
                        Antenna1ReceivePower = -80;
                    }
                    if (Antenna2ReceivePower == 0)
                    {
                        Antenna2ReceivePower = -80;
                    }
                    if (Antenna3ReceivePower == 0)
                    {
                        Antenna3ReceivePower = -80;
                    }
                    if (Antenna4ReceivePower == 0)
                    {
                        Antenna4ReceivePower = -80;
                    }

                    if (Antenna1TransmitPower == 0)
                    {
                        Antenna1TransmitPower = 30;
                    }
                    if (Antenna2TransmitPower == 0)
                    {
                        Antenna2TransmitPower = 30;
                    }
                    if (Antenna3TransmitPower == 0)
                    {
                        Antenna3TransmitPower = 30;
                    }
                    if (Antenna4TransmitPower == 0)
                    {
                        Antenna4TransmitPower = 30;
                    }
                }
                catch (Exception exc)
                {
                    Logging.Logger.Log(exc);
                }
                Messenger.Default.Send <BusyMessage>(new BusyMessage {
                    IsBusy = false, Message = ""
                });
            });
        }
        private async void ExecuteSave()
        {
            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                IsBusy = true, Message = "Validating settings..."
            });
            if (!await ValidateForm())
            {
                Messenger.Default.Send <BusyMessage>(new BusyMessage {
                    IsBusy = false, Message = ""
                });
                return;
            }

            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                IsBusy = true, Message = "Saving..."
            });

            await Task.Run(() =>
            {
                try
                {
                    Settings settings = TagDataProvider.GetDefaultSettings();

                    if (settings != null)
                    {
                        settings.Antennas.TxPowerMax       = false;
                        settings.Antennas.RxSensitivityMax = false;
                        settings.HoldReportsOnDisconnect   = false;
                        settings.Report.Mode = ReportMode.Individual;
                        settings.SearchMode  = SearchMode.DualTarget;
                        settings.ReaderMode  = ReaderMode.AutoSetStaticDRM;
                        settings.Report.IncludeFirstSeenTime      = true;
                        settings.Report.IncludeLastSeenTime       = true;
                        settings.Report.IncludeSeenCount          = true;
                        settings.Keepalives.Enabled               = true;
                        settings.Report.IncludePeakRssi           = true;
                        settings.Report.IncludePhaseAngle         = true;
                        settings.Report.IncludeAntennaPortNumber  = true;
                        settings.Keepalives.EnableLinkMonitorMode = true;
                        settings.Keepalives.LinkDownThreshold     = 5;
                        settings.Keepalives.PeriodInMs            = 3000;

                        settings.Antennas.GetAntenna(1).RxSensitivityInDbm = (double)_antenna1ReceivePower;
                        settings.Antennas.GetAntenna(1).TxPowerInDbm       = (double)_antenna1TransmitPower;

                        settings.Antennas.GetAntenna(2).RxSensitivityInDbm = (double)_antenna2ReceivePower;
                        settings.Antennas.GetAntenna(2).TxPowerInDbm       = (double)_antenna2TransmitPower;

                        settings.Antennas.GetAntenna(3).RxSensitivityInDbm = (double)_antenna3ReceivePower;
                        settings.Antennas.GetAntenna(3).TxPowerInDbm       = (double)_antenna3TransmitPower;

                        settings.Antennas.GetAntenna(4).RxSensitivityInDbm = (double)_antenna4ReceivePower;
                        settings.Antennas.GetAntenna(4).TxPowerInDbm       = (double)_antenna4TransmitPower;

                        TagDataProvider.ApplySettings(settings);

                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = true, Message = "Settings saved."
                        });
                        System.Threading.Thread.Sleep(3000);
                    }
                    else
                    {
                        Messenger.Default.Send <BusyMessage>(new BusyMessage {
                            IsBusy = true, Message = "Unable to save reader settings. Reader disconnected?"
                        });
                        System.Threading.Thread.Sleep(3000);
                    }


                    using (var dp = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                    {
                        if (PortName == "NONE")
                        {
                            PortName = "";
                        }
                        if (BarcodePortName == "NONE")
                        {
                            BarcodePortName = "";
                        }

                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.SCALE_COM_PORT, PortName);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.BARCODE_COM_PORT, BarcodePortName);

                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.BRIDGE_ID, BridgeID);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.GIN_NAME, ScreenTitle);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DOCUMENTDB_ENDPOINT, DocumentDbEndpoint);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DOCUMENT_DB_KEY, DocumentDbConnection);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.LATITUDE, Latitude);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.LONGITUDE, Longitude);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.TARGET_STATUS, TargetStatus);
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.DATA_SYNC_INTERVAL, DataSyncInterval.ToString());
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.WEIGH_IN_TIMEOUT, WeighInTimeout.ToString());
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.STABLE_WEIGHT_SECONDS, StableWeightSeconds.ToString());

                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.WEIGHT_AUTO_SAVE_TIMEOUT, WeightAutoSaveTimeout.ToString());
                        dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.UNATTENDED_MODE, UnattendedMode.ToString());

                        bool needsReaderDisconnect = false;
                        if (_originalHost != ReaderHostname)
                        {
                            needsReaderDisconnect = true;
                            dp.SettingsRepository.UpsertSetting(BridgeSettingKeys.READER_HOST_NAME, ReaderHostname);
                        }

                        dp.SaveChanges();

                        if (needsReaderDisconnect)
                        {
                            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                                IsBusy = true, Message = "Reconnecting to " + ReaderHostname
                            });
                            System.Threading.Thread.Sleep(1000);
                            TagDataProvider.Disconnect();
                            TagDataProvider.SetHostName(ReaderHostname);
                            TagDataProvider.Connect();
                            Messenger.Default.Send <BusyMessage>(new BusyMessage {
                                IsBusy = false, Message = "Reader connected to " + ReaderHostname
                            });
                            //shell should start the reader back up in 15-30 seconds
                        }
                    }

                    /*if (portChanged)
                     * {
                     *  System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                     *  {
                     *      System.Windows.MessageBox.Show("Please close and restart the application for new scale setting to take effect");
                     *  }));
                     * }*/
                }
                catch (Exception exc)
                {
                    System.Windows.Application.Current.Dispatcher.Invoke((Action)(() =>
                    {
                        System.Windows.MessageBox.Show("An error occurred saving settings. " + exc.Message);
                    }));
                    Logging.Logger.Log(exc);
                }
                finally
                {
                    Messenger.Default.Send <BusyMessage>(new BusyMessage {
                        IsBusy = false, Message = ""
                    });
                    Messenger.Default.Send <SettingsSavedMessage>(new SettingsSavedMessage {
                        GinName = ScreenTitle, IsFirstLaunch = IsFirstLaunch
                    });
                }
            });
        }