using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using SafeMobileLib; using SharedUI; using System.Diagnostics; using static SDRgateway.LIP; using SafeMobileLib.Registration; using SafeMobileLib.Helpers; using System.Threading; using System.Timers; namespace SDRgateway { public partial class MainForm : Form { //public static Config cfg; private SDR SDRConnector; private MessageBuss msgBuss; private SMSmanager sms; private PingThread pingThread; private static System.Timers.Timer aTimer; private static Int32 _GWID = 0; private static int _radioID = 0; private Gateway currentGateway = null; UInt32 callOutNumber = 1; byte cm_msg_id = 1; public MainForm() { InitializeComponent(); Version v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; Utils.WriteLine(lbVersion.Text = "Version: " + v.ToString()); this.Text += " - v." + v.ToString(); Utils.WriteLine("SDR gateway. SafeMobile 2012-2017", ConsoleColor.Magenta); Utils.WriteLine(""); // load the config file Program.cfg.LoadConfig(); // set the value for checkbox cbAutoConnect.Checked = Program.cfg.SDR_Autoconnect; //LIPSDR.printBytesArray(LIPSDR.Stds_CallOutAlertPDU_sdsEncoder(10006, 11, 5, "this is a test", LIPSDR.TGctrl.TGChangeOnAlert)); //LIPSDR.printBytesArray(LIPSDR.Stds_CallOutAlertPDU_sdsEncoder(623, 3, 00, "this is a test", LIPSDR.TGctrl.TGChangeOnAlert)); /// TODO EMERGENCY ACK /// bigu limitation for South africa label1.Visible = false; label2.Visible = false; label4.Visible = false; cbStoreForward.Visible = false; cbCallOut.Visible = true; tbSFServerID.Visible = false; /// end limitation ddlTgCtrl.SelectedIndex = 1; } void pingThread_OnNewPingComplete(bool status, string ip) { if (status) { Utils.WriteLine("Ping to " + ip + " succeded"); } else { Utils.WriteLine("Ping to " + ip + " failed"); } } /// /// Verify if an IP address is a valid IP address /// /// IP which needs to be checked /// True if the email is a valid one, or false otherwise bool IsValidIP(string ip) { Match match = Regex.Match(ip, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"); return match.Success; } private void btnSave_Click(object sender, EventArgs e) { if (!IsValidIP(tbMUPSpass.Text)) { MessageBox.Show("The password is invalid. It must be a valid IP address!", "Invalid password"); return; } //TestClass t = new TestClass(); try { Program.cfg.SDR_ISSI = Int32.Parse(tbMUPSappID.Text); Program.cfg.SDR_pass = tbMUPSpass.Text; Program.cfg.SDR_IP = tbMUPSip.Text; Program.cfg.SDR_port = int.Parse(tbMUPSport.Text); Program.cfg.messageBusIP = tbMBip.Text; Program.cfg.messageBusPort = int.Parse(tbMBport.Text); Program.cfg.SDR_StoreTM = cbStoreForward.Text.Equals("Yes") ? 1 : 0; Program.cfg.SDR_SFServer = (Int32)tbSFServerID.Value; Program.cfg.SDR_CallOut = cbCallOut.Text.Equals("Yes") ? 1 : 0; Program.cfg.PositionErrorTolerance = PositionError.GetPositionError(cbPositionErrorTolerance.Text); //bigu limitation for SouthAfrica Program.cfg.SDR_StoreTM = 0; Program.cfg.SDR_SFServer = 0; // MainForm.cfg.SDR_CallOut = 0; //end limitation //MainForm.cfg.DB_IP = tbDBip.Text; //MainForm.cfg.DB_port = tbDBport.Text; Program.cfg.SaveCFGFile(); MessageBox.Show("Configs saved to file. Please restart the gateway for this settings to be used."); } catch (Exception ex) { Utils.WriteLine("btnSave_Click " + ex.ToString(), ConsoleColor.Red); } } private void LoadSettings_GUI() { //MUPS tbMUPSappID.Text = Program.cfg.SDR_ISSI.ToString(); tbMUPSpass.Text = Program.cfg.SDR_pass.ToString(); tbMUPSip.Text = Program.cfg.SDR_IP; tbMUPSport.Text = Program.cfg.SDR_port.ToString(); tbSFServerID.Text = Program.cfg.SDR_SFServer.ToString(); cbStoreForward.Text = Program.cfg.SDR_StoreTM == 1 ? "Yes" : "No"; cbCallOut.Text = Program.cfg.SDR_CallOut == 1 ? "Yes" : "No"; cbPositionErrorTolerance.Text = Program.cfg.PositionErrorTolerance.ToHumanString(); //message buss tbMBip.Text = Program.cfg.messageBusIP; tbMBport.Text = Program.cfg.messageBusPort.ToString(); //DataBAse //tbDBip.Text = MainForm.cfg.DB_IP; //tbDBport.Text = MainForm.cfg.DB_port; } private void btnConnect_Click(object sender, EventArgs e) { if (btnConnect.Text.Equals("Connect")) { btnConnect.Text = "Disconnect"; SDRConnector.Start(); } else if (btnConnect.Text.Equals("Disconnect")) { btnConnect.Text = "Disconnecting..."; btnConnect.Enabled = false; SDRConnector.Stop(SDR.SDR_STATUS.Disconnecting); } } delegate void PropertyChangedCallback(SDR.SDR_STATUS register); void SDRConnector_PropertyChanged(object sender, PropertyChangedEventArgs e) { SM.Debug("New value for radio status:" + ((SDR)sender).registered); PropertyChangedCallback d = new PropertyChangedCallback(RegStatusChanged); this.Invoke(d, new object[] { ((SDR)sender).registered }); } private void RegStatusChanged(SDR.SDR_STATUS rStatus) { switch (rStatus) { case SDR.SDR_STATUS.Connected: { lbStatus.Text = "Connected"; btnConnect.Text = "Disconnect"; break; } case SDR.SDR_STATUS.Connecting: { lbStatus.Text = "Trying to connect!"; btnConnect.Text = "Disconnect"; break; } case SDR.SDR_STATUS.Disconnected: { //lbStatus.Text = "Reconnecting"; btnConnect.Text = "Connect"; btnConnect.Enabled = true; break; } case SDR.SDR_STATUS.NoConnection: { if (btnConnect.Text.Equals("Disconnect")) ; else { lbStatus.Text = "Not connected"; btnConnect.Text = "Connect"; } btnConnect.Enabled = true; break; } case SDR.SDR_STATUS.Disconnecting: { if (!lbStatus.Text.EndsWith("Disconnecting...")) lbStatus.Text = "Disconnecting..."; btnConnect.Text = "Disconnecting..."; break; } } // update envet into the UI lable which is designated for the event UpdateLabelEvent(lbStatus.Text); } #region UI changes private void ResetMenuBackgroundAndFont() { menuStatus.IsSelected = false; menuSDRSettings.IsSelected = false; menuMessageBus.IsSelected = false; menuSave.IsSelected = false; } private void menuClick(object sender, EventArgs e) { if ((MenuButton)sender == menuSave) { btnSave_Click(sender, e); menuSave.IsSelected = false; return; } ResetMenuBackgroundAndFont(); HideAllPanels(); if ((MenuButton)sender == menuStatus) { panelStatus.BringToFront(); panelStatus.Visible = true; menuStatus.IsSelected = true; } else if ((MenuButton)sender == menuSDRSettings) { panelSDRSettings.BringToFront(); panelSDRSettings.Visible = true; menuSDRSettings.IsSelected = true; } else if ((MenuButton)sender == menuMessageBus) { panelMessageBus.BringToFront(); panelMessageBus.Visible = true; menuMessageBus.IsSelected = true; } } private void HideAllPanels() { panelStatus.Visible = false; panelStatus.SendToBack(); panelSDRSettings.Visible = false; panelSDRSettings.SendToBack(); panelMessageBus.Visible = false; panelMessageBus.SendToBack(); } #endregion private void LogoClick(object sender, EventArgs e) { System.Diagnostics.Process.Start("http://www.safemobile.com"); } private void cbStoreForward_SelectedValueChanged(object sender, EventArgs e) { if (cbStoreForward.Text.Equals("Yes")) tbSFServerID.Enabled = true; else tbSFServerID.Enabled = false; } /// /// Update the label from the UI in which all events are stored /// /// The message which needs to be written into the label private void UpdateLabelEvent(String message) { this.Invoke((MethodInvoker)delegate { //tbEvent.BackColor = Color.White; // remove a line /* if (Regex.Matches(labelEvent.Text, Environment.NewLine).Count >= labelEventMaxLines) labelEvent.Text = labelEvent.Text.Substring(labelEvent.Text.IndexOf(Environment.NewLine) + 1); */ // add message at which the date is added tbEvent.AppendText(String.Format("{0:H:mm:ss} - {1}", DateTime.Now, message) + Environment.NewLine); }); } private void menuMessageBus_Load(object sender, EventArgs e) { } int count = 0; private void button1_Click(object sender, EventArgs e) { //SDRConnector.SEND_CALL_OUT_MESSAGE_TEST_623(count++); } private void cbAutoConnect_CheckedChanged(object sender, EventArgs e) { Program.cfg.SaveConfigOption("SDR", "SDR_Autoconnect", cbAutoConnect.Checked ? "true" : "false"); } private void MainForm_Load(object sender, EventArgs e) { // register for registration changed event this.OnRegistrationCompleted += OnRegistrationResponseHandler; Register(); } private async void Register() { RegistrationResponse regResponse = await RegistrationHelper.RegisterGateway(Program.cfg.APPLICATION_SERVER_IP, Program.cfg.regPort); // raise event for registration completed OnRegistrationCompleted?.Invoke(regResponse); //while (unregistered) //{ // RegistrationResponse regResponse = await RegistrationHelper.RegisterGateway(Program.cfg.APPLICATION_SERVER_IP, Program.cfg.regPort); // if (regResponse.ToString() == "") // unregistered = false; // // raise event for registration completed // OnRegistrationCompleted?.Invoke(regResponse); // Thread.Sleep(1000); //} } #region REGISTRATION HANDLER private void OnRegistrationResponseHandler(RegistrationResponse regResponse) { this.Invoke((MethodInvoker)delegate () { switch (regResponse.RegistrationStatus) { case RegistrationCode.ServerUnreachable: onRegistrationServerUnreachable(); break; case RegistrationCode.Unauthorized: onRegistraionUnauthorized(); break; case RegistrationCode.Registered: onRegistrationCompleted(regResponse); break; } }); } private void onRegistrationServerUnreachable() { DisplayMessageBox("Application Server is unreachable. Please check internet connection and the application server IP in the configuration file.", "App Server Unreachable", MessageBoxIcon.Error); Application.Exit(); } private void onRegistraionUnauthorized() { DisplayMessageBox("Please register this gateway in the admin module.", "Unauthorized gateway", MessageBoxIcon.Exclamation); } private void DisplayMessageBox(String message, String title, MessageBoxIcon boxType) { MessageBox.Show(this, "Application Server is unreachable. Please check internet connection and the application server IP in the configuration file.", "App Server Unreachable", MessageBoxButtons.OK, MessageBoxIcon.Error); } private void onRegistrationCompleted(RegistrationResponse response) { String currentIP = "127.0.0.1"; // this gateway is on other computer than the application server is if (!Program.cfg.APPLICATION_SERVER_IP.Equals("127.0.0.1")) currentIP = RegistrationHelper.GatewayIP; // update values for Message bus, database received from AppServer Program.cfg.DB_IP = response.DataBaseServerIP; Program.cfg.DB_passwd = response.DataBasePassword; Program.cfg.DB_port = response.DataBasePort + ""; Program.cfg.DB_schema = response.DataBaseName; Program.cfg.DB_user = response.DataBaseUser; Program.cfg.messageBusIP = response.MessageBusIP; Program.cfg.messageBusPort = response.MessageBusPort; DBgatewaysManager gatewayManager = new DBgatewaysManager(Program.cfg.DB_IP, Program.cfg.DB_schema, Program.cfg.DB_user, Program.cfg.DB_passwd, Program.cfg.DB_port); // get current gateway currentGateway = getGateway(currentIP, gatewayManager); List radioGws = getRadioGWsFromDB(currentGateway.Id, gatewayManager); // check if any sdr gateway is defined if (radioGws.Count == 0) { onNoRadioGatewayDefined(); return; } else { RadioGateway currentRadioGw = radioGws[0]; // search for radioGws with same identifier as this gateway foreach (RadioGateway rg in radioGws) { if (rg.Name.ToLower().Equals(Program.cfg.GatewayName.ToLower())) { currentRadioGw = rg; break; } } // update values for current gateway Program.cfg.SDR_ISSI = currentRadioGw.Imei; Program.cfg.SDR_IP = currentRadioGw.Ip; // remove all others gateways from the list radioGws.Clear(); radioGws.Add(currentRadioGw); } if (Program.cfg.SDR_ping > 0) { pingThread = new PingThread(Program.cfg.SDR_IP, Program.cfg.SDR_ping); pingThread.OnNewPingComplete += new PingThread.NewPingCompleteDEl(pingThread_OnNewPingComplete); } Utils.WriteLine("Starting application."); SDRConnector = new SDR(); SDRConnector.OnEventToDisplayOnUI += delegate (string message) { UpdateLabelEvent(message); }; SDRConnector.OnSDRStopped += delegate () { UpdateLabelEvent("Disconnected"); this.Invoke((MethodInvoker)delegate { btnConnect.Enabled = true; btnConnect.Text = "Connect"; }); }; // set if the message needs to be stored on the server and resent once at X seconds SDRConnector.setStoreAndForwardOption(Program.cfg.SDR_StoreTM == 1 ? true : false); SDRConnector.PropertyChanged += new PropertyChangedEventHandler(SDRConnector_PropertyChanged); //SDRConnector.Start(); msgBuss = new MessageBuss(Program.cfg.messageBusIP, Program.cfg.messageBusPort.ToString(), SDRConnector); Set500Timer(); msgBuss.OnPollRequest += delegate (Int64 radioID, bool isLong, string seqNumber) { SDRConnector.Send_Imed_Loc_req((UInt32)radioID, isLong, seqNumber); }; msgBuss.OnSDSRequest += delegate (Int64 radioID, Int64 gatewayID, Int64 gatewayRadioID, string message, int type, string seqID) { SDRConnector.SEND_SMS((uint)radioID, message); Utils.WriteLine("SMSConfirm.getFromConfirmationQueue(hret.seq_no)=" + seqID); string test = "#242#1#"; //send SMS ack to message bus MessageBuss.SendOnMsgBuss(seqID, test); }; msgBuss.OnUnitsUpdated += delegate () { DBvehiclesManager dbVehManager = new DBvehiclesManager(Program.cfg.DB_IP, Program.cfg.DB_schema, Program.cfg.DB_user, Program.cfg.DB_passwd, Program.cfg.DB_port); try { lock (SDR.dictionaryLock) { SDR.RadioIdToLastPosDictionary = dbVehManager.getImeiLastPosDictionary(true); Utils.WriteLine("Received " + SDR.RadioIdToLastPosDictionary.Count + " units", ConsoleColor.Green); foreach (var item in SDR.RadioIdToLastPosDictionary) { Utils.Write(String.Format("{0:#############} |||| ", item.Key), ConsoleType.ALL); } } } catch (Exception ex) { Utils.WriteLine("Unable to get assigned units " + ex.ToString(), ConsoleColor.Red); } }; msgBuss.OnCallOutRequest += delegate (ulong destISSI, ushort callOutSeverity, string GeoName) { SDRConnector.SendCallOut((uint)destISSI, callOutSeverity, GeoName); }; msgBuss.OnCallOutStopRequest += delegate (ulong destISSI, ushort callOutSeverity) { SDRConnector.SendCallOutStop((uint)destISSI, callOutSeverity); }; lbStatus.Text = "Not connected"; lbGateway.Text = "gateway " + Program.cfg.SDR_ISSI.ToString() + " status"; LoadSettings_GUI(); sms = new SMSmanager(SDRConnector, Program.cfg); // press the auto connect if needed if (cbAutoConnect.Checked) btnConnect.PerformClick(); ContextMenu contextMenu = new ContextMenu(); contextMenu.MenuItems.Add("Check for updates...", (s, e2) => { UpdateForm uf = new UpdateForm(App.GW_TETRA_SDR, true) { IsDevelop = Program.cfg.isDevelop }; uf.Show(); }); contextMenu.MenuItems.Add("Exit", (s, e2) => CloseApp()); notifyIcon1.ContextMenu = contextMenu; // check for a new version if available if (Program.cfg.autoupdate) CheckForUpdate(); } #endregion #region GATEWAY - RADIO GATEWAY private Gateway getGateway(String gatewayIP, DBgatewaysManager gatewayManager) { List allGateways = gatewayManager.getAllGateways(); foreach (Gateway g in allGateways) { if (g.Ip == gatewayIP) { Utils.WriteLine("Gateway IP found in registration tabel. ID:" + g.Id, ConsoleColor.Yellow); currentGateway = g; Program.cfg.GW_ID = g.Id; Program.cfg.GW_IP = g.Ip; // TODO update thegateway infos in the config file return g; } } return null; } private List getRadioGWsFromDB(Int64 gatewayID, DBgatewaysManager gatewayManager) { List list = gatewayManager.gelAllRadioGateways(gatewayID); List listtoreturn = new List(); foreach (RadioGateway g in list) listtoreturn.Add(g); return listtoreturn; } private void onNoRadioGatewayDefined() { DisplayMessageBox("No SDR controller defined in the admin module for this computer. Please contact your administrator.", "No SDR controller defined", MessageBoxIcon.Exclamation); } private static void SendGatewayAlive(Int32 GWID, int radioID) { string test = "#500#" + GWID + "#" + radioID + "#ON#"; MessageBuss.SendOnMsgBuss("0.0", test); } private void Set500Timer() { // Create a timer with a two second interval. aTimer = new System.Timers.Timer(5000); // Hook up the Elapsed event for the timer. aTimer.Elapsed += GWAliveTimer; aTimer.AutoReset = true; aTimer.Enabled = true; } private void GWAliveTimer(Object source, ElapsedEventArgs e) { String currentIP = "127.0.0.1"; // this gateway is on other computer than the application server is if (!Program.cfg.APPLICATION_SERVER_IP.Equals("127.0.0.1")) currentIP = RegistrationHelper.GatewayIP; DBgatewaysManager gatewayManager = new DBgatewaysManager(Program.cfg.DB_IP, Program.cfg.DB_schema, Program.cfg.DB_user, Program.cfg.DB_passwd, Program.cfg.DB_port); // get current gateway currentGateway = getGateway(currentIP, gatewayManager); List radioGws = getRadioGWsFromDB(currentGateway.Id, gatewayManager); _GWID = (Int32)radioGws[0].Gw_id; _radioID = radioGws[0].Id; SendGatewayAlive(_GWID, _radioID); Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime); } #endregion #region UPDATE /// /// Check for new version release on SafeMobile Portal /// The check is done by comparing Current Assembly Version with the one /// written in a xml file on the portal. /// private void CheckForUpdate() { App appType = App.GW_TETRA_SDR; AutoUpdate au = new AutoUpdate(appType) { IsDevelop = Program.cfg.isDevelop }; au.OnNewVersionAvailable += delegate (string version) { notifyIcon1.Text = "New version available"; notifyIcon1.ShowBalloonTip(2500, $"{App.GetAppName(appType)} version {version} available", $"Press to download and install the latest version of {App.GetAppName(appType)}.", ToolTipIcon.Info); notifyIcon1.BalloonTipClicked += delegate (object sender, EventArgs e) { if (notifyIcon1.Text.Equals("New version available")) { UpdateForm uf = new UpdateForm(appType, true) { IsDevelop = Program.cfg.isDevelop }; uf.Show(); } }; }; // call method to check for new updated au.CheckUpdate(); } #endregion private void CloseApp() { Process oldProcess = Process.GetCurrentProcess(); oldProcess.Kill(); Application.Exit(); } #region EVENTS public delegate void RegistrationCompleted(RegistrationResponse response); public event RegistrationCompleted OnRegistrationCompleted; #endregion #region TEST CallOut /* private void btnAlert_Click(object sender, EventArgs e) { if (txtTGNumber.Text.Length == 0) { MessageBox.Show("Please add a TGNumber !"); return; } try { UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; UInt16 callOutSeverity = (UInt16)spinSeverity.Value; UInt32 tgNumber = UInt32.Parse(txtTGNumber.Text); string data = txtMessage.Text; uint tgCtrl = (uint)LIPSDR.TGctrl.TGChangeUserInter; if (ddlTgCtrl.SelectedText == LIPSDR.TGctrl.TGChangeOnAlert.ToString()) tgCtrl = (uint)LIPSDR.TGctrl.TGChangeOnAlert; byte[] result = SDRConnector.SendCallOut(chkPrefixWithSize.Checked, (uint)LIPSDR.CallOutFunction.Alert, ++callOutNumber, callOutSeverity, tgCtrl, tgNumber, ref cm_msg_id, sourceISSI, destISSI, data); if (result != null && result.Length > 0) { txtOutput.Text = BitConverter.ToString(result); Utils.WriteLine("RX :" + txtOutput.Text,ConsoleColor.Green); if (this.InvokeRequired) listCallOutNumber.Invoke(new Action(() => listCallOutNumber.Items.Add(callOutNumber))); else listCallOutNumber.Items.Add(callOutNumber); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnTest_Click(object sender, EventArgs e) { try { UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; string data = txtMessage.Text; byte[] result = SDRConnector.SendCallOut(chkPrefixWithSize.Checked, (uint)LIPSDR.CallOutFunction.Test, ++callOutNumber, 0, (uint)LIPSDR.TGctrl.TGControlNotUsed, 0, ref cm_msg_id, sourceISSI, destISSI, data); if (result != null && result.Length > 0) { txtOutput.Text = BitConverter.ToString(result); Utils.WriteLine("RX :" + txtOutput.Text, ConsoleColor.Green); if (this.InvokeRequired) listCallOutNumber.Invoke(new Action(() => listCallOutNumber.Items.Add(callOutNumber))); else listCallOutNumber.Items.Add(callOutNumber); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnInfo_Click(object sender, EventArgs e) { try { UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; string data = txtMessage.Text; byte[] result = SDRConnector.SendCallOut(chkPrefixWithSize.Checked, (uint)LIPSDR.CallOutFunction.Info, ++callOutNumber, 0, (uint)LIPSDR.TGctrl.TGControlNotUsed, 0, ref cm_msg_id, sourceISSI, destISSI, data); if (result != null && result.Length > 0) { txtOutput.Text = BitConverter.ToString(result); Utils.WriteLine("RX :" + txtOutput.Text, ConsoleColor.Green); if (this.InvokeRequired) listCallOutNumber.Invoke(new Action(() => listCallOutNumber.Items.Add(callOutNumber))); else listCallOutNumber.Items.Add(callOutNumber); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnClear_Click(object sender, EventArgs e) { try { if (listCallOutNumber.SelectedItem == null) { MessageBox.Show("Please select a callOutNumber !"); return; } UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; string data = txtMessage.Text; UInt32 callOutNumber = UInt32.Parse(listCallOutNumber.SelectedItem.ToString()); byte[] result = SDRConnector.SendCallOut(chkPrefixWithSize.Checked, (uint)LIPSDR.CallOutFunction.Clear, callOutNumber, 0, (uint)LIPSDR.TGctrl.TGControlNotUsed, 0, ref cm_msg_id, sourceISSI, destISSI, data); if (result != null && result.Length > 0) { listCallOutNumber.Items.Remove(callOutNumber); txtOutput.Text = BitConverter.ToString(result); Utils.WriteLine("RX :" + txtOutput.Text, ConsoleColor.Green); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnAvalability_Click(object sender, EventArgs e) { UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; byte[] result = SDRConnector.SendCallOut((uint)LIPSDR.CallOutFunction.Availability, 0xF0, 0, (uint)LIPSDR.TGctrl.TGControlNotUsed, 0, ref cm_msg_id, sourceISSI, destISSI, ""); if (result != null && result.Length > 0) { txtOutput.Text = BitConverter.ToString(result).Replace("-", " "); } } private void btnAvalabilityRequest_Click(object sender, EventArgs e) { UInt32 sourceISSI = (UInt32)spinSourceISSI.Value; UInt32 destISSI = (UInt32)spinDestISSI.Value; byte[] result = SDRConnector.SendCallOut(chkPrefixWithSize.Checked, (uint)LIPSDR.CallOutFunction.AvailabilityRequest, 0, 0, (uint)LIPSDR.TGctrl.TGControlNotUsed, 0, ref cm_msg_id, sourceISSI, destISSI, ""); if (result != null && result.Length > 0) { txtOutput.Text = BitConverter.ToString(result).Replace("-", " "); } } private void btnClearList_Click(object sender, EventArgs e) { listCallOutNumber.Items.Clear(); } private void btnClearOutput_Click(object sender, EventArgs e) { txtOutput.Text = ""; } */ #endregion } }