public void OnRtxChanged(object sender, EventArgs e) { if (_StateManager.Radio.Rtx > 0) { _RtxBT.Text = "Rtx " + (char)('G' + _StateManager.Radio.Rtx - 1); _RtxBT.ButtonColor = _RtxBlinkOn ? VisualStyle.Colors.Yellow : VisualStyle.ButtonColor; _RtxBlinkTimer.Enabled = true; } else { _RtxBlinkTimer.Enabled = false; _RtxBlinkOn = true; _RtxBT.Text = "Rtx"; _RtxBT.ButtonColor = VisualStyle.ButtonColor; } int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = 0; i < _NumPositionsByPage; i++) { RdButton bt = _RdButtons[i]; RdDst dst = _StateManager.Radio[i + absPageBegin]; Reset(bt, dst); } }
public void OnRadioChanged(object sender, RangeMsg e) { Debug.Assert(e.Count > 0); int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = Math.Max(e.From, absPageBegin), to = Math.Min(e.From + e.Count, absPageBegin + _NumPositionsByPage); i < to; i++) { RdButton bt = _RdButtons[i - absPageBegin]; RdDst dst = _StateManager.Radio[i]; /* * if (!dst.Restored || dst.Unavailable) * { * Reset(bt, dst); * * if (!dst.Unavailable && i < Settings.Default.AssignatedStates.Count) * { * Settings.Default.AssignatedStates.RemoveAt(i - absPageBegin); * Settings.Default.AssignatedStates.Insert(i - absPageBegin, dst.Frecuency + "," + dst.Rx.ToString() + "," + dst.Tx + * "," + dst.AudioVia + "," + dst.Unavailable); * } * else if (!dst.Unavailable) * { * Settings.Default.AssignatedStates.Add(dst.Frecuency + "," + dst.Rx.ToString() + "," + dst.Tx + * "," + dst.AudioVia + "," + dst.Unavailable); * } * // Envío de vuelta confirmación para que Engine envíe histórico (si corresponde) * // De momento a este comando solo se atiende si Engine es OPE (CD30) * _CmdManager.SendCmdHistoricalEvent(_StateManager.Title.Id, dst.Frecuency); * } * else*/ { EstadoAsignacion estado = _EstadosAsignacion[i - absPageBegin]; Reset(bt, dst, ref estado); //Reset(bt, dst); _EstadosAsignacion[i - absPageBegin] = estado; if (/*!dst.Unavailable &&*/ i < Settings.Default.AssignatedStates.Count) { Settings.Default.AssignatedStates.RemoveAt(i - absPageBegin); Settings.Default.AssignatedStates.Insert(i - absPageBegin, dst.Frecuency + "," + estado._Rx.ToString() + "," + estado._Tx + "," + dst.AudioVia + "," + dst.Unavailable); } else //if (!dst.Unavailable) { Settings.Default.AssignatedStates.Add(dst.Frecuency + "," + estado._Rx.ToString() + "," + estado._Tx + "," + dst.AudioVia + "," + dst.Unavailable); } // Envío de vuelta confirmación para que Engine envíe histórico (si corresponde) // De momento a este comando solo se atiende si Engine es OPE (CD30) _CmdManager.SendCmdHistoricalEvent(_StateManager.Title.Id, dst.Frecuency); } } Settings.Default.Save(); _RtxBT.Enabled = _RtxEnabled; }
/* VMG 05/09/2018 */ ///<summary> /// Error al confirmar la Transmision. Tick del Timer. ///</summary> //private void _TxConfirmationDetectionTimer_Tick(object sender, EventArgs e) //{ // try // { // if (_TxConfirmationDetectionTimer.Enabled) // { // var rdButtonList = new Dictionary<RdButton, RdDst>(_PttPushedList); // foreach (KeyValuePair<RdButton, RdDst> p in rdButtonList) // { // if (p.Value.Ptt != PttState.PttOnlyPort && p.Value.Ptt != PttState.PttPortAndMod // && p.Value.Ptt != PttState.ExternPtt) // { // General.SafeLaunchEvent(RdPosPttStateEngine, this, new RangeMsg<PttState>(p.Key.Id, PttState.TxError)); // _TxErrorEventFired = true; // } // } // } // } // catch (Exception ex) // { // _Logger.Error("ERROR generando timer error recepcion Tx", ex); // } //} /* VMG 05/09/2018 */ ///<summary> /// Error de Rx al realizar Tx. Tick del Timer. ///</summary> //private void _CarrierDetectionTimer_Tick(object sender, EventArgs e) //{ // try // { // if (_CarrierDetectionTimer.Enabled) // { // var rdButtonList = new Dictionary<RdButton, RdDst>(_PttPushedList); // foreach (KeyValuePair<RdButton, RdDst> p in rdButtonList) // { // if (p.Value.Ptt == PttState.PttOnlyPort && p.Value.Squelch == SquelchState.NoSquelch) // { // General.SafeLaunchEvent(RdPosPttStateEngine, this, new RangeMsg<PttState>(p.Key.Id, PttState.CarrierError)); // _CarrierDetectionEventFired = true; // } // } // } // } // catch (Exception ex) // { // _Logger.Error("ERROR generando timer Ptt", ex); // } //} /** Esta funcion se ha trasladado al MODEL MODULE */ //private void RecuperaEstadoAsignacionFrecuencias() //{ // int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; // for (int i = absPageBegin, to = absPageBegin + _NumPositionsByPage; i < to; i++) // { // if (i < Settings.Default.AssignatedStates.Count) // { // string[] estado = Settings.Default.AssignatedStates[i].Split(','); // EstadoAsignacion eAsignacion = new EstadoAsignacion(); // eAsignacion._Rx = estado[1] == "True"; // eAsignacion._Tx = estado[2] == "True"; // switch (estado[3]) // { // case "HfSpeaker": // eAsignacion._AudioVia = RdRxAudioVia.HfSpeaker; // break; // case "HeadPhones": // eAsignacion._AudioVia = RdRxAudioVia.HeadPhones; // break; // case "Speaker": // eAsignacion._AudioVia = RdRxAudioVia.Speaker; // break; // case "NoAudio": // eAsignacion._AudioVia = RdRxAudioVia.NoAudio; // break; // } // _EstadosAsignacion[i - absPageBegin] = eAsignacion; // } // } //} private void Reset(RdButton bt, RdDst dst, ref EstadoAsignacion estado) { Reset(bt, dst); if (!dst.Unavailable && estado.Unavailable && !_StateManager.ScreenSaver.On) { if (estado._Rx && !dst.Rx) { RdButton_RxShortClick(bt, null); } else if (estado._AudioVia == RdRxAudioVia.HeadPhones) { if (dst.TipoFrecuencia == TipoFrecuencia_t.HF && (dst.AudioVia == RdRxAudioVia.HfSpeaker || dst.AudioVia == RdRxAudioVia.Speaker)) { RdButton_RxShortClick(bt, null); } else if (dst.TipoFrecuencia != TipoFrecuencia_t.HF && dst.AudioVia == RdRxAudioVia.Speaker) { RdButton_RxShortClick(bt, null); } } else if (estado._AudioVia == RdRxAudioVia.HfSpeaker && dst.AudioVia == RdRxAudioVia.Speaker) { RdButton_RxShortClick(bt, null); } if (estado._Tx && !dst.Tx) { //RdButton_TxClick(bt, null); try { // Forzar la asignación de Tx independientemente de si está ya asignada en otra posición _CmdManager.RdConfirmTxState(bt.Id); } catch (Exception ex) { int pos = _RdButtons.IndexOf(bt); string msg = string.Format("ERROR modificando Tx de frecuencia RD [Pos={0}] [Id={1}]", pos, bt.Id); _Logger.Error(msg, ex); } } } else if (!dst.Unavailable && !estado.Unavailable) { estado._Tx = dst.Tx; estado._Rx = dst.Rx; estado._AudioVia = dst.AudioVia; } estado.Unavailable = dst.Unavailable || estado._Rx != dst.Rx || estado._Tx != dst.Tx || estado._AudioVia != dst.AudioVia; }
public void OnRdPageChanged(object sender, EventArgs e) { _RdPageBT.Page = _StateManager.Radio.Page; int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = 0; i < _NumPositionsByPage; i++) { RdButton bt = _RdButtons[i]; RdDst dst = _StateManager.Radio[i + absPageBegin]; Reset(bt, dst); } }
public void OnHfGlobalStatus(object sender, StateMsg <string> msg) { if (msg.State != _HfGlobalStatus) { _HfGlobalStatus = msg.State; _RdPageBT.Page = _StateManager.Radio.Page; int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = 0; i < _NumPositionsByPage; i++) { RdButton bt = _RdButtons[i]; RdDst dst = _StateManager.Radio[i + absPageBegin]; UpdateTx(bt, dst); } } }
public void OnTitleIdChanged(object sender, EventArgs e) { if (Settings.Default.Sector != _StateManager.Title.Id) { int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = absPageBegin, to = absPageBegin + _NumPositionsByPage; i < to; i++) { RdButton bt = _RdButtons[i - absPageBegin]; if (!_StateManager.Radio[i].Unavailable && _StateManager.Radio[i].Rx) { RdButton_RxLongClick(bt, null); } } Settings.Default.Sector = _StateManager.Title.Id; Settings.Default.Save(); } }
/// <summary> /// Actualiza el estado habilitado o no del tx del botón, según el estado global Hf /// Se llama en los reset generales y en los cambios del estado global Hf /// Si la frecuencia no es HF, el TX está siempre habilitado (caso cambio destino en sectorizaciones) /// </summary> /// <param name="bt" botón sobre el que se actualiza></param> /// <param name="dst" destino al que corresponde el botón></param> private void UpdateTx(RdButton bt, RdDst dst) { if (dst.TipoFrecuencia == TipoFrecuencia_t.HF) { switch (_HfGlobalStatus) { case "DISC": if (dst.Tx) { // Quitarlo de transimisión, ya que el gestor de HF no esta disponible _CmdManager.RdForceTxOff(bt.Id); } bt.EnableTx(false); break; case "NODISP": // Sólo las frecuencias HF que no están ya asignadas en TX se deben de inhabilitar if (!dst.Tx) { bt.EnableTx(false); } break; case "DISP": bt.EnableTx(true); break; default: _Logger.Warn("Unknown _HfGlobalStatus {0}", _HfGlobalStatus); break; } } else { bt.EnableTx(true); } }
public void OnRadioChanged(object sender, RangeMsg e) { Debug.Assert(e.Count > 0); int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; _Logger.Debug("******** M+N [RadioView::OnRadioChanged]"); for (int i = Math.Max(e.From, absPageBegin), to = Math.Min(e.From + e.Count, absPageBegin + _NumPositionsByPage); i < to; i++) { RdButton bt = _RdButtons[i - absPageBegin]; RdDst dst = _StateManager.Radio[i]; EstadoAsignacion estado = _EstadosAsignacion[i - absPageBegin]; Reset(bt, dst, ref estado); //Reset(bt, dst); _EstadosAsignacion[i - absPageBegin] = estado; /** Esta funcion se ha trasladado al MODEL MODULE */ //if (i < Settings.Default.AssignatedStates.Count) //{ // Settings.Default.AssignatedStates.RemoveAt(i - absPageBegin); // Settings.Default.AssignatedStates.Insert(i - absPageBegin, dst.Frecuency + "," + _EstadosAsignacion[i - absPageBegin]._Rx.ToString() + "," + // ((dst.TipoFrecuencia == TipoFrecuencia_t.HF) ? false : _EstadosAsignacion[i - absPageBegin]._Tx) + // "," + _EstadosAsignacion[i - absPageBegin]._AudioVia + "," + _EstadosAsignacion[i - absPageBegin].Unavailable); //} //else //{ // Settings.Default.AssignatedStates.Add(dst.Frecuency + "," + _EstadosAsignacion[i - absPageBegin]._Rx.ToString() + "," + // ((dst.TipoFrecuencia == TipoFrecuencia_t.HF) ? false : _EstadosAsignacion[i - absPageBegin]._Tx) + // "," + _EstadosAsignacion[i - absPageBegin]._AudioVia + "," + _EstadosAsignacion[i - absPageBegin].Unavailable); //} } /** Esta funcion se ha trasladado al MODEL MODULE */ //Settings.Default.Save(); _RtxBT.Enabled = _RtxEnabled; }
public void OnRdPageChanged(object sender, EventArgs e) { _RdPageBT.Page = _StateManager.Radio.Page; int absPageBegin = _RdPageBT.Page * _NumPositionsByPage; for (int i = 0; i < _NumPositionsByPage; i++) { RdButton bt = _RdButtons[i]; RdDst dst = _StateManager.Radio[i + absPageBegin]; //EstadoAsignacion estado = _EstadosAsignacion[i]; //Reset(bt, dst, ref estado); Reset(bt, dst); if (i < Settings.Default.AssignatedStates.Count) { Settings.Default.AssignatedStates.RemoveAt(i); } Settings.Default.AssignatedStates.Insert(i, dst.Frecuency + "," + dst.Rx.ToString() + "," + dst.Tx + "," + dst.AudioVia + "," + dst.Unavailable); } Settings.Default.Save(); }
private void Reset(RdButton bt, RdDst dst) { bt.Id = dst.Id; if (_PttBlinkList.Remove(bt) && (_PttBlinkList.Count == 0)) { _PttBlinkTimer.Enabled = false; _PttBlinkOn = true; } if (_SquelchBlinkList.Remove(bt) && (_SquelchBlinkList.Count == 0)) { _SquelchBlinkTimer.Enabled = false; _SquelchBlinkOn = true; } _RtxBlinkList.Remove(bt); _PttPushedList.Remove(bt); if (dst.IsConfigurated) { Color title = VisualStyle.ButtonColor; Color tx = VisualStyle.ButtonColor; Color rx = VisualStyle.ButtonColor; Color txForeColor = VisualStyle.Colors.White; Color rxForeColor = VisualStyle.Colors.White; Image ptt = null; Image squelch = null; Image audio = null; int rtxGroup = 0; bool allAsOneBt = false; if (!dst.Unavailable) { rtxGroup = dst.RtxGroup; if (dst.Rx) { title = rx = VisualStyle.Colors.White; rxForeColor = VisualStyle.Colors.Green; if (dst.Tx) { tx = VisualStyle.Colors.White; txForeColor = VisualStyle.Colors.Green; _PttPushedList[bt] = dst;//VMG lista con los botones seleccionados en la UI if (_StateManager.Radio.Rtx > 0) { rtxGroup = dst.RtxGroup < 0 ? dst.RtxGroup : dst.TempRtxGroup; if (rtxGroup == 0) { allAsOneBt = true; title = _RtxBlinkOn ? VisualStyle.Colors.Yellow : VisualStyle.ButtonColor; _RtxBlinkList[bt] = VisualStyle.Colors.Yellow; } else if (rtxGroup == _StateManager.Radio.Rtx) { allAsOneBt = true; title = VisualStyle.Colors.Yellow; } } } } NotifMsg msg = null; switch (dst.Ptt) { case PttState.NoPtt: break; case PttState.ExternPtt: case PttState.PttOnlyPort: ptt = Resources.Ptt; break; case PttState.PttPortAndMod: ptt = _PttBlinkOn ? Resources.Ptt : null; _PttBlinkList[bt] = Resources.Ptt; _PttBlinkTimer.Enabled = true; break; case PttState.Blocked: ptt = Resources.PttBlocked; break; //VMG 04/09/2018 Cambios en los estados case PttState.Error: //Error en portadora title = VisualStyle.Colors.Red; txForeColor = VisualStyle.Colors.Red; msg = new NotifMsg("Bad Operation", Resources.BadOperation, Resources.CarrierDetectionError, 3000, MessageType.Error, MessageButtons.Ok); General.SafeLaunchEvent(ShowNotifMsgEngine, this, msg); break; //VMG 05/09/2018 Cambios en los estados case PttState.CarrierError: //Error en portadora title = VisualStyle.Colors.Red; txForeColor = VisualStyle.Colors.Red; if (!_CarrierDetectionEventFired && !_TxErrorEventFired) { //Lanzamos el mensaje solo una vez msg = new NotifMsg("Bad Operation", Resources.BadOperation, Resources.CarrierDetectionError, 3000, MessageType.Error, MessageButtons.Ok); General.SafeLaunchEvent(ShowNotifMsgEngine, this, msg); } break; case PttState.TxError: //Error en la confirmacion de la Tx // PttState.PttNotConfirmed title = VisualStyle.Colors.Red; txForeColor = VisualStyle.Colors.Red; if (!_TxErrorEventFired && !_CarrierDetectionEventFired) { //Lanzamos el mensaje solo una vez msg = new NotifMsg("Bad Operation", Resources.BadOperation, Resources.TxConfirmationDetectionError, 3000, MessageType.Error, MessageButtons.Ok); General.SafeLaunchEvent(ShowNotifMsgEngine, this, msg); } break; /*default://Error en la confirmacion de la Tx lo capturamos como PttState.NoPtt * // PttState.PttNotConfirmed * title = VisualStyle.Colors.Red; * txForeColor = VisualStyle.Colors.Red; * NotifMsg msg2 = new NotifMsg("Bad Operation", Resources.BadOperation, Resources.TxConfirmationDetectionError, 3000, MessageType.Error, MessageButtons.Ok); * General.SafeLaunchEvent(ShowNotifMsgEngine, this, msg2); * break;*/ } switch (dst.Squelch) { case SquelchState.SquelchOnlyPort: squelch = Resources.Squelch; break; case SquelchState.SquelchPortAndMod: squelch = _SquelchBlinkOn ? Resources.Squelch : null; _SquelchBlinkList[bt] = Resources.Squelch; _SquelchBlinkTimer.Enabled = true; break; } switch (dst.AudioVia) { case RdRxAudioVia.Speaker: if (_StateManager.Radio.DoubleRadioSpeaker) { audio = Resources.SpeakerUp; } else { audio = Resources.RxSpeaker; } break; case RdRxAudioVia.HeadPhones: audio = Resources.RxHeadPhones; break; case RdRxAudioVia.HfSpeaker: if (_StateManager.Radio.DoubleRadioSpeaker) { audio = Resources.HFSpeakerUp; } else { audio = Resources.HfSpeaker; } break; } } bt.Reset(dst.Frecuency, dst.Alias, dst.Unavailable, allAsOneBt, rtxGroup, ptt, squelch, audio, title, tx, rx, txForeColor, rxForeColor, dst.TipoFrecuencia == TipoFrecuencia_t.HF ? VisualStyle.Colors.HfColor : VisualStyle.Colors.Black); bt.Enabled = _StateManager.Tft.Enabled && _StateManager.Engine.Operative && !dst.Unavailable; UpdateTx(bt, dst); } bt.Visible = dst.IsConfigurated; }
public RadioView([ServiceDependency] IModelCmdManagerService cmdManager, [ServiceDependency] StateManagerService stateManager) { InitializeComponent(); if (!Settings.Default.HFView) { _RadioTLP.Controls.Remove(_SelCallWS); _RadioTLP.RowStyles.Clear(); _RadioTLP.RowCount = 2; this._RadioTLP.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 18F)); this._RadioTLP.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 82F)); } else { _SelCallWS.Name = WorkspaceNames.SelCallWorkspace; } _CmdManager = cmdManager; _StateManager = stateManager; _RdButtonsTLP.RowCount = Settings.Default.RdRows; _RdButtonsTLP.RowStyles.Clear(); for (int i = 0; i < _RdButtonsTLP.RowCount; i++) { RowStyle st = new RowStyle(SizeType.Percent, 100); _RdButtonsTLP.RowStyles.Add(st); } _RdButtonsTLP.ColumnCount = Settings.Default.RdColumns; _RdButtonsTLP.ColumnStyles.Clear(); for (int i = 0; i < _RdButtonsTLP.ColumnCount; i++) { ColumnStyle st = new ColumnStyle(SizeType.Percent, 100); _RdButtonsTLP.ColumnStyles.Add(st); } _NumPositionsByPage = _RdButtonsTLP.RowCount * _RdButtonsTLP.ColumnCount; /** 20180425. RSR */ _StateManager.Radio.PageSize = _NumPositionsByPage; _PttBlinkList = new Dictionary <RdButton, Image>(); _SquelchBlinkList = new Dictionary <RdButton, Image>(); _RtxBlinkList = new Dictionary <RdButton, Color>(); _PttPushedList = new Dictionary <RdButton, RdDst>(); for (int row = 0, pos = 0; row < _RdButtonsTLP.RowCount; row++) { for (int column = 0; column < _RdButtonsTLP.ColumnCount; column++, pos++) { RdButton bt = new RdButton(); _RdButtonsTLP.Controls.Add(bt, column, row); _RdButtons.Add(bt); _EstadosAsignacion.Add(new EstadoAsignacion()); bt.Dock = DockStyle.Fill; bt.Name = "_RdButton" + pos; bt.Visible = false; bt.Id = pos; bt.Click += RdButton_Click; bt.TxClick += RdButton_TxClick; bt.RxLongClick += RdButton_RxLongClick; bt.RxShortClick += RdButton_RxShortClick; } } _RdSpeakerUDB.Level = _StateManager.RdSpeaker.Level; _RdHfSpeakerUDB.Level = _StateManager.HfSpeaker.Level; //En Asecna el doble altavoz es configurable (para Kenia) _RdHfSpeakerUDB.Visible = _StateManager.Radio.DoubleRadioSpeaker; _RdHfSpeakerUDB.Enabled = _RdSpeakerEnabled; _RdSpeakerUDB.Enabled = _RdSpeakerEnabled; _RdHfSpeakerUDB.DrawX = _RdSpeakerUDB.DrawX = true; _RdHeadPhonesUDB.Visible = !_StateManager.Tlf.SoloAltavoces; _RdHeadPhonesUDB.Level = _StateManager.RdHeadPhones.Level; _RdHeadPhonesUDB.Enabled = _RdHeadPhonesEnabled; _PttBT.Enabled = _PttEnabled; _RtxBT.Enabled = _RtxEnabled; _RdPageBT.Enabled = _RdPageEnabled; _RtxBT.Text = _Rtx; // Miguel /** Esta funcion se ha trasladado al MODEL MODULE */ //RecuperaEstadoAsignacionFrecuencias(); }
public RadioView([ServiceDependency] IModelCmdManagerService cmdManager, [ServiceDependency] StateManagerService stateManager) { InitializeComponent(); _CmdManager = cmdManager; _StateManager = stateManager; _RdButtonsTLP.RowCount = Settings.Default.RdRows; _RdButtonsTLP.RowStyles.Clear(); for (int i = 0; i < _RdButtonsTLP.RowCount; i++) { RowStyle st = new RowStyle(SizeType.Percent, 100); _RdButtonsTLP.RowStyles.Add(st); } _RdButtonsTLP.ColumnCount = Settings.Default.RdColumns; _RdButtonsTLP.ColumnStyles.Clear(); for (int i = 0; i < _RdButtonsTLP.ColumnCount; i++) { ColumnStyle st = new ColumnStyle(SizeType.Percent, 100); _RdButtonsTLP.ColumnStyles.Add(st); } _NumPositionsByPage = _RdButtonsTLP.RowCount * _RdButtonsTLP.ColumnCount; /** 20180425. RSR */ _StateManager.Radio.PageSize = _NumPositionsByPage; _PttBlinkList = new Dictionary <RdButton, Image>(); _SquelchBlinkList = new Dictionary <RdButton, Image>(); _RtxBlinkList = new Dictionary <RdButton, Color>(); _PttPushedList = new Dictionary <RdButton, RdDst>(); for (int row = 0, pos = 0; row < _RdButtonsTLP.RowCount; row++) { for (int column = 0; column < _RdButtonsTLP.ColumnCount; column++, pos++) { RdButton bt = new RdButton(); _RdButtonsTLP.Controls.Add(bt, column, row); _RdButtons.Add(bt); _EstadosAsignacion.Add(new EstadoAsignacion()); bt.Dock = DockStyle.Fill; bt.Name = "_RdButton" + pos; bt.Visible = false; bt.Id = pos; bt.Click += RdButton_Click; bt.TxClick += RdButton_TxClick; bt.RxLongClick += RdButton_RxLongClick; bt.RxShortClick += RdButton_RxShortClick; } } _RdSpeakerUDB.Level = _StateManager.RdSpeaker.Level; _RdSpeakerUDB.Enabled = _RdSpeakerEnabled; _RdHeadPhonesUDB.Level = _StateManager.RdHeadPhones.Level; _RdHeadPhonesUDB.Enabled = _RdHeadPhonesEnabled; _PttBT.Enabled = _PttEnabled; _RtxBT.Enabled = _RtxEnabled; _RdPageBT.Enabled = _RdPageEnabled; _RtxBT.Text = _Rtx; // Miguel //RecuperaEstadoAsignacionFrecuencias(); }