| @@ -6,10 +6,8 @@ using System.Runtime.CompilerServices; | |||
| using System.Threading; | |||
| using System.Windows.Forms; | |||
| namespace FSRemotePowerSwitch | |||
| { | |||
| public partial class MainForm : Form | |||
| { | |||
| namespace FSRemotePowerSwitch { | |||
| public partial class MainForm : Form { | |||
| private static string SETTINGS_FILE = "Settings.txt"; | |||
| @@ -17,8 +15,7 @@ namespace FSRemotePowerSwitch | |||
| private static string EXP_FIRMWARE_VER = "ExpectedFirmwareVersion"; | |||
| private static bool connected; | |||
| private static Boolean Connected | |||
| { | |||
| private static Boolean Connected { | |||
| [MethodImpl(MethodImplOptions.Synchronized)] | |||
| get { return connected; } | |||
| [MethodImpl(MethodImplOptions.Synchronized)] | |||
| @@ -26,8 +23,7 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| private static bool requestPending; | |||
| private static Boolean RequestPending | |||
| { | |||
| private static Boolean RequestPending { | |||
| [MethodImpl(MethodImplOptions.Synchronized)] | |||
| get { return requestPending; } | |||
| [MethodImpl(MethodImplOptions.Synchronized)] | |||
| @@ -37,8 +33,7 @@ namespace FSRemotePowerSwitch | |||
| private Boolean initializing; | |||
| private string firmwareVersion; | |||
| public MainForm() | |||
| { | |||
| public MainForm() { | |||
| initializing = false; | |||
| Connected = false; | |||
| RequestPending = false; | |||
| @@ -47,19 +42,15 @@ namespace FSRemotePowerSwitch | |||
| initializeSerialPortComboBox(); | |||
| } | |||
| private void onFormShown(object sender, EventArgs e) | |||
| { | |||
| private void onFormShown(object sender, EventArgs e) { | |||
| connect(); | |||
| } | |||
| private void connect() | |||
| { | |||
| if (serialPort.IsOpen) | |||
| { | |||
| private void connect() { | |||
| if (serialPort.IsOpen) { | |||
| serialPort.Close(); | |||
| } | |||
| if (serialPortsCboBox.SelectedItem != null) | |||
| { | |||
| if (serialPortsCboBox.SelectedItem != null) { | |||
| Application.UseWaitCursor = true; | |||
| serialPort.PortName = serialPortsCboBox.SelectedItem.ToString(); | |||
| serialPort.Open(); | |||
| @@ -67,9 +58,7 @@ namespace FSRemotePowerSwitch | |||
| Thread waitThread = new Thread(Wait); | |||
| waitThread.Start(); | |||
| } | |||
| else | |||
| { | |||
| } else { | |||
| initStatusLbl.Text = "Kein Port verfügbar!"; | |||
| connectedSerialPortLbl.Text = "Port: "; | |||
| initProgressBar.Style = ProgressBarStyle.Continuous; | |||
| @@ -77,22 +66,17 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| } | |||
| private void Wait() | |||
| { | |||
| private void Wait() { | |||
| Stopwatch stopwatch = new Stopwatch(); | |||
| stopwatch.Start(); | |||
| while (stopwatch.ElapsedMilliseconds < 3000) | |||
| { | |||
| while (stopwatch.ElapsedMilliseconds < 3000) { | |||
| Thread.Sleep(50); | |||
| if (Connected) | |||
| { | |||
| if (Connected) { | |||
| break; | |||
| } | |||
| } | |||
| if (!Connected) | |||
| { | |||
| BeginInvoke(new EventHandler(delegate | |||
| { | |||
| if (!Connected) { | |||
| BeginInvoke(new EventHandler(delegate { | |||
| initStatusLbl.Text = "Zeitüberschreitung!"; | |||
| connectedSerialPortLbl.Text = "Port: "; | |||
| initProgressBar.Style = ProgressBarStyle.Continuous; | |||
| @@ -104,12 +88,10 @@ namespace FSRemotePowerSwitch | |||
| Cursor.Position = Cursor.Position; | |||
| } | |||
| private void initializeSerialPortComboBox() | |||
| { | |||
| private void initializeSerialPortComboBox() { | |||
| initializing = true; | |||
| string[] ports = SerialPort.GetPortNames(); | |||
| foreach (string port in ports) | |||
| { | |||
| foreach (string port in ports) { | |||
| serialPortsCboBox.Items.Add(port); | |||
| } | |||
| PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE); | |||
| @@ -119,30 +101,24 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| private void onSerialPortsCboBoxSelectedIndexChanged(object sender, EventArgs e) | |||
| { | |||
| private void onSerialPortsCboBoxSelectedIndexChanged(object sender, EventArgs e) { | |||
| PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE); | |||
| serialPortCfg.set(SERIALPORT_KEY, serialPortsCboBox.SelectedItem); | |||
| serialPortCfg.Save(); | |||
| if (!initializing) | |||
| { | |||
| if (!initializing) { | |||
| reconnectBtn.Visible = false; | |||
| connect(); | |||
| } | |||
| } | |||
| private void onSerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) | |||
| { | |||
| private void onSerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) { | |||
| string s = readSerialPortData((SerialPort)sender); | |||
| try | |||
| { | |||
| try { | |||
| Message msg = JsonConvert.DeserializeObject<Message>(s); | |||
| if (msg.Sender.Equals(Message.CMD_SENDER_AN) && msg.Cmd.Equals(Message.CMD_VER) && msg.Val.Equals(firmwareVersion)) | |||
| { | |||
| if (msg.Sender.Equals(Message.CMD_SENDER_AN) && msg.Cmd.Equals(Message.CMD_VER) && msg.Val.Equals(firmwareVersion)) { | |||
| RequestPending = false; | |||
| BeginInvoke(new EventHandler(delegate | |||
| { | |||
| BeginInvoke(new EventHandler(delegate { | |||
| sendRelayStatusCmd(); | |||
| Connected = true; | |||
| initStatusLbl.Text = "Verbunden"; | |||
| @@ -155,21 +131,15 @@ namespace FSRemotePowerSwitch | |||
| powerSwitchButton.Enabled = true; | |||
| statusTimer.Enabled = true; | |||
| })); | |||
| } | |||
| else if (msg.Sender.Equals(Message.CMD_SENDER_AN) && msg.Cmd.Equals(Message.CMD_STATUS_RELAY)) | |||
| { | |||
| } else if (msg.Sender.Equals(Message.CMD_SENDER_AN) && msg.Cmd.Equals(Message.CMD_STATUS_RELAY)) { | |||
| RequestPending = false; | |||
| BeginInvoke(new EventHandler(delegate | |||
| { | |||
| if (msg.Val.Equals(Message.CMD_VAL_ON)) | |||
| { | |||
| BeginInvoke(new EventHandler(delegate { | |||
| if (msg.Val.Equals(Message.CMD_VAL_ON)) { | |||
| powerStateLed.BackgroundImage = FSRemotePowerSwitch.Properties.Resources.blue_led_on; | |||
| powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged; | |||
| powerSwitchButton.Checked = true; | |||
| powerSwitchButton.CheckStateChanged += onSwitchCheckStateChanged; | |||
| } | |||
| else if (msg.Val.Equals(Message.CMD_VAL_OFF)) | |||
| { | |||
| } else if (msg.Val.Equals(Message.CMD_VAL_OFF)) { | |||
| powerStateLed.BackgroundImage = FSRemotePowerSwitch.Properties.Resources.blue_led_off; | |||
| powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged; | |||
| powerSwitchButton.Checked = false; | |||
| @@ -177,10 +147,8 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| })); | |||
| } | |||
| } | |||
| catch (Exception ex) when (ex is Newtonsoft.Json.JsonReaderException || | |||
| ex is Newtonsoft.Json.JsonSerializationException) | |||
| { | |||
| } catch (Exception ex) when (ex is Newtonsoft.Json.JsonReaderException || | |||
| ex is Newtonsoft.Json.JsonSerializationException) { | |||
| RequestPending = false; | |||
| initStatusLbl.Text = "Json Deserialize Exception!"; | |||
| serialPort.DiscardInBuffer(); | |||
| @@ -189,10 +157,8 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| } | |||
| private void onOpenBtnClick(object sender, EventArgs e) | |||
| { | |||
| if (serialPort.PortName != "COM1" && !serialPort.IsOpen) | |||
| { | |||
| private void onOpenBtnClick(object sender, EventArgs e) { | |||
| if (serialPort.PortName != "COM1" && !serialPort.IsOpen) { | |||
| serialPort.Open(); | |||
| openBtn.Enabled = false; | |||
| closeBtn.Enabled = true; | |||
| @@ -200,10 +166,8 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| } | |||
| private void onCloseBtnClick(object sender, EventArgs e) | |||
| { | |||
| if (serialPort.IsOpen) | |||
| { | |||
| private void onCloseBtnClick(object sender, EventArgs e) { | |||
| if (serialPort.IsOpen) { | |||
| serialPort.Close(); | |||
| openBtn.Enabled = true; | |||
| closeBtn.Enabled = false; | |||
| @@ -211,146 +175,119 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| } | |||
| private void onReconnectBtnClick(object sender, EventArgs e) | |||
| { | |||
| private void onReconnectBtnClick(object sender, EventArgs e) { | |||
| reconnectBtn.Visible = false; | |||
| connect(); | |||
| } | |||
| private void onSwitchCheckStateChanged(object sender, EventArgs e) | |||
| { | |||
| if (powerSwitchButton.Checked) | |||
| { | |||
| private void onSwitchCheckStateChanged(object sender, EventArgs e) { | |||
| if (powerSwitchButton.Checked) { | |||
| sendRelayPowerCmd(Message.CMD_VAL_ON); | |||
| } | |||
| else | |||
| { | |||
| } else { | |||
| sendRelayPowerCmd(Message.CMD_VAL_OFF); | |||
| } | |||
| } | |||
| private void onWebCamPowerSwitchCheckStateChanged(object sender, EventArgs e) | |||
| { | |||
| if (webCamRotatorPowerSwitch.Checked) | |||
| { | |||
| private void onWebCamPowerSwitchCheckStateChanged(object sender, EventArgs e) { | |||
| if (webCamRotatorPowerSwitch.Checked) { | |||
| sendWebCamPowerCmd(Message.CMD_VAL_ON); | |||
| } | |||
| else | |||
| { | |||
| } else { | |||
| sendWebCamPowerCmd(Message.CMD_VAL_OFF); | |||
| } | |||
| } | |||
| private String readSerialPortData(SerialPort serialPort) | |||
| { | |||
| private String readSerialPortData(SerialPort serialPort) { | |||
| string data = ""; | |||
| while (serialPort.BytesToRead > 0) | |||
| { | |||
| while (serialPort.BytesToRead > 0) { | |||
| data += serialPort.ReadExisting(); | |||
| Thread.Sleep(50); | |||
| } | |||
| return data; | |||
| } | |||
| private void sendVersionCmd() | |||
| { | |||
| private void sendVersionCmd() { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_VER; | |||
| msg.Val = null; | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void sendRelayPowerCmd(string value) | |||
| { | |||
| private void sendRelayPowerCmd(string value) { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_POWER_RELAY; | |||
| msg.Val = value; | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void sendRelayStatusCmd() | |||
| { | |||
| private void sendRelayStatusCmd() { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_STATUS_RELAY; | |||
| msg.Val = null; | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void sendWebCamZeroCmd() | |||
| { | |||
| private void sendWebCamZeroCmd() { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_ZERO_CAM; | |||
| msg.Val = "0"; | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void sendWebCamAzimutCmd() | |||
| { | |||
| private void sendWebCamAzimutCmd() { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_AZIMUT_CAM; | |||
| msg.Val = webCamRotator.Value.ToString(); | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void sendWebCamPowerCmd(string value) | |||
| { | |||
| private void sendWebCamPowerCmd(string value) { | |||
| Message msg = new Message(); | |||
| msg.Sender = Message.CMD_SENDER_PC; | |||
| msg.Cmd = Message.CMD_POWER_CAM; | |||
| msg.Val = value; | |||
| string msJson = JsonConvert.SerializeObject(msg); | |||
| if (serialPort.IsOpen && !RequestPending) | |||
| { | |||
| if (serialPort.IsOpen && !RequestPending) { | |||
| serialPort.Write(msJson); | |||
| RequestPending = true; | |||
| } | |||
| } | |||
| private void onStatusTimerTick(object sender, EventArgs e) | |||
| { | |||
| private void onStatusTimerTick(object sender, EventArgs e) { | |||
| sendRelayStatusCmd(); | |||
| } | |||
| private void onMainFormClosing(object sender, FormClosingEventArgs e) | |||
| { | |||
| private void onMainFormClosing(object sender, FormClosingEventArgs e) { | |||
| Stopwatch stopwatch = new Stopwatch(); | |||
| stopwatch.Start(); | |||
| while (RequestPending && stopwatch.ElapsedMilliseconds < 2000) | |||
| { | |||
| while (RequestPending && stopwatch.ElapsedMilliseconds < 2000) { | |||
| Thread.Sleep(50); | |||
| } | |||
| if (serialPort.IsOpen) | |||
| { | |||
| if (serialPort.IsOpen) { | |||
| serialPort.DiscardInBuffer(); | |||
| serialPort.DiscardOutBuffer(); | |||
| serialPort.Close(); | |||
| @@ -358,18 +295,15 @@ namespace FSRemotePowerSwitch | |||
| } | |||
| } | |||
| private void onWebCamRotatorValueChanged(object Sender) | |||
| { | |||
| private void onWebCamRotatorValueChanged(object Sender) { | |||
| rotatorActValue.Text = webCamRotator.Value.ToString(); | |||
| } | |||
| private void onSetWebCamZero(object sender, EventArgs e) | |||
| { | |||
| private void onSetWebCamZero(object sender, EventArgs e) { | |||
| sendWebCamZeroCmd(); | |||
| } | |||
| private void onWebCamRotatorMiddleAreaClicked(object Sender) | |||
| { | |||
| private void onWebCamRotatorMiddleAreaClicked(object Sender) { | |||
| sendWebCamAzimutCmd(); | |||
| } | |||