Browse Source

Fix Bug on focus in middle area

develop
Flo Smilari 1 year ago
parent
commit
5b57735156

BIN
.vs/FSRemotePowerSwitch/v16/.suo View File


+ 110
- 53
Form1.cs View File

using System.Threading; using System.Threading;
using System.Windows.Forms; 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"; private static string SETTINGS_FILE = "Settings.txt";
private static string EXP_FIRMWARE_VER = "ExpectedFirmwareVersion"; private static string EXP_FIRMWARE_VER = "ExpectedFirmwareVersion";
private static bool connected; private static bool connected;
private static Boolean Connected {
private static Boolean Connected
{
[MethodImpl(MethodImplOptions.Synchronized)] [MethodImpl(MethodImplOptions.Synchronized)]
get { return connected; } get { return connected; }
[MethodImpl(MethodImplOptions.Synchronized)] [MethodImpl(MethodImplOptions.Synchronized)]
} }
private static bool requestPending; private static bool requestPending;
private static Boolean RequestPending {
private static Boolean RequestPending
{
[MethodImpl(MethodImplOptions.Synchronized)] [MethodImpl(MethodImplOptions.Synchronized)]
get { return requestPending; } get { return requestPending; }
[MethodImpl(MethodImplOptions.Synchronized)] [MethodImpl(MethodImplOptions.Synchronized)]
private Boolean initializing; private Boolean initializing;
private string firmwareVersion; private string firmwareVersion;
public MainForm() {
public MainForm()
{
initializing = false; initializing = false;
Connected = false; Connected = false;
RequestPending = false; RequestPending = false;
initializeSerialPortComboBox(); initializeSerialPortComboBox();
} }
private void onFormShown(object sender, EventArgs e) {
private void onFormShown(object sender, EventArgs e)
{
connect(); connect();
} }
private void connect() {
if (serialPort.IsOpen) {
private void connect()
{
if (serialPort.IsOpen)
{
serialPort.Close(); serialPort.Close();
} }
if (serialPortsCboBox.SelectedItem != null) {
if (serialPortsCboBox.SelectedItem != null)
{
Application.UseWaitCursor = true; Application.UseWaitCursor = true;
serialPort.PortName = serialPortsCboBox.SelectedItem.ToString(); serialPort.PortName = serialPortsCboBox.SelectedItem.ToString();
serialPort.Open(); serialPort.Open();
Thread waitThread = new Thread(Wait); Thread waitThread = new Thread(Wait);
waitThread.Start(); waitThread.Start();
} else {
}
else
{
initStatusLbl.Text = "Kein Port verfügbar!"; initStatusLbl.Text = "Kein Port verfügbar!";
connectedSerialPortLbl.Text = "Port: "; connectedSerialPortLbl.Text = "Port: ";
initProgressBar.Style = ProgressBarStyle.Continuous; initProgressBar.Style = ProgressBarStyle.Continuous;
} }
} }
private void Wait() {
private void Wait()
{
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); stopwatch.Start();
while (stopwatch.ElapsedMilliseconds < 3000) {
while (stopwatch.ElapsedMilliseconds < 3000)
{
Thread.Sleep(50); Thread.Sleep(50);
if (Connected) {
if (Connected)
{
break; break;
} }
} }
if (!Connected) {
BeginInvoke(new EventHandler(delegate {
if (!Connected)
{
BeginInvoke(new EventHandler(delegate
{
initStatusLbl.Text = "Zeitüberschreitung!"; initStatusLbl.Text = "Zeitüberschreitung!";
connectedSerialPortLbl.Text = "Port: "; connectedSerialPortLbl.Text = "Port: ";
initProgressBar.Style = ProgressBarStyle.Continuous; initProgressBar.Style = ProgressBarStyle.Continuous;
Cursor.Position = Cursor.Position; Cursor.Position = Cursor.Position;
} }
private void initializeSerialPortComboBox() {
private void initializeSerialPortComboBox()
{
initializing = true; initializing = true;
string[] ports = SerialPort.GetPortNames(); string[] ports = SerialPort.GetPortNames();
foreach (string port in ports) {
foreach (string port in ports)
{
serialPortsCboBox.Items.Add(port); serialPortsCboBox.Items.Add(port);
} }
PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE); PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE);
} }
private void onSerialPortsCboBoxSelectedIndexChanged(object sender, EventArgs e) {
private void onSerialPortsCboBoxSelectedIndexChanged(object sender, EventArgs e)
{
PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE); PropertiesHandler serialPortCfg = new PropertiesHandler(SETTINGS_FILE);
serialPortCfg.set(SERIALPORT_KEY, serialPortsCboBox.SelectedItem); serialPortCfg.set(SERIALPORT_KEY, serialPortsCboBox.SelectedItem);
serialPortCfg.Save(); serialPortCfg.Save();
if (!initializing) {
if (!initializing)
{
reconnectBtn.Visible = false; reconnectBtn.Visible = false;
connect(); connect();
} }
} }
private void onSerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) {
private void onSerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
string s = readSerialPortData((SerialPort)sender); string s = readSerialPortData((SerialPort)sender);
try {
try
{
Message msg = JsonConvert.DeserializeObject<Message>(s); 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; RequestPending = false;
BeginInvoke(new EventHandler(delegate {
BeginInvoke(new EventHandler(delegate
{
sendRelayStatusCmd(); sendRelayStatusCmd();
Connected = true; Connected = true;
initStatusLbl.Text = "Verbunden"; initStatusLbl.Text = "Verbunden";
powerSwitchButton.Enabled = true; powerSwitchButton.Enabled = true;
statusTimer.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; 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; powerStateLed.BackgroundImage = FSRemotePowerSwitch.Properties.Resources.blue_led_on;
powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged; powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged;
powerSwitchButton.Checked = true; powerSwitchButton.Checked = true;
powerSwitchButton.CheckStateChanged += onSwitchCheckStateChanged; 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; powerStateLed.BackgroundImage = FSRemotePowerSwitch.Properties.Resources.blue_led_off;
powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged; powerSwitchButton.CheckStateChanged -= onSwitchCheckStateChanged;
powerSwitchButton.Checked = false; powerSwitchButton.Checked = false;
} }
})); }));
} }
} 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; RequestPending = false;
initStatusLbl.Text = "Json Deserialize Exception!"; initStatusLbl.Text = "Json Deserialize Exception!";
serialPort.DiscardInBuffer(); serialPort.DiscardInBuffer();
} }
} }
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(); serialPort.Open();
openBtn.Enabled = false; openBtn.Enabled = false;
closeBtn.Enabled = true; closeBtn.Enabled = true;
} }
} }
private void onCloseBtnClick(object sender, EventArgs e) {
if (serialPort.IsOpen) {
private void onCloseBtnClick(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.Close(); serialPort.Close();
openBtn.Enabled = true; openBtn.Enabled = true;
closeBtn.Enabled = false; closeBtn.Enabled = false;
} }
} }
private void onReconnectBtnClick(object sender, EventArgs e) {
private void onReconnectBtnClick(object sender, EventArgs e)
{
reconnectBtn.Visible = false; reconnectBtn.Visible = false;
connect(); 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); sendRelayPowerCmd(Message.CMD_VAL_ON);
} else {
}
else
{
sendRelayPowerCmd(Message.CMD_VAL_OFF); 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); sendWebCamPowerCmd(Message.CMD_VAL_ON);
} else {
}
else
{
sendWebCamPowerCmd(Message.CMD_VAL_OFF); sendWebCamPowerCmd(Message.CMD_VAL_OFF);
} }
} }
private String readSerialPortData(SerialPort serialPort) {
private String readSerialPortData(SerialPort serialPort)
{
string data = ""; string data = "";
while (serialPort.BytesToRead > 0) {
while (serialPort.BytesToRead > 0)
{
data += serialPort.ReadExisting(); data += serialPort.ReadExisting();
Thread.Sleep(50); Thread.Sleep(50);
} }
return data; return data;
} }
private void sendVersionCmd() {
private void sendVersionCmd()
{
Message msg = new Message(); Message msg = new Message();
msg.Sender = Message.CMD_SENDER_PC; msg.Sender = Message.CMD_SENDER_PC;
msg.Cmd = Message.CMD_VER; msg.Cmd = Message.CMD_VER;
msg.Val = null; msg.Val = null;
string msJson = JsonConvert.SerializeObject(msg); string msJson = JsonConvert.SerializeObject(msg);
if (serialPort.IsOpen && !RequestPending) {
if (serialPort.IsOpen && !RequestPending)
{
serialPort.Write(msJson); serialPort.Write(msJson);
RequestPending = true; RequestPending = true;
} }
} }
private void sendRelayPowerCmd(string value) {
private void sendRelayPowerCmd(string value)
{
Message msg = new Message(); Message msg = new Message();
msg.Sender = Message.CMD_SENDER_PC; msg.Sender = Message.CMD_SENDER_PC;
msg.Cmd = Message.CMD_POWER_RELAY; msg.Cmd = Message.CMD_POWER_RELAY;
msg.Val = value; msg.Val = value;
string msJson = JsonConvert.SerializeObject(msg); string msJson = JsonConvert.SerializeObject(msg);
if (serialPort.IsOpen && !RequestPending) {
if (serialPort.IsOpen && !RequestPending)
{
serialPort.Write(msJson); serialPort.Write(msJson);
RequestPending = true; RequestPending = true;
} }
} }
private void sendRelayStatusCmd() {
private void sendRelayStatusCmd()
{
Message msg = new Message(); Message msg = new Message();
msg.Sender = Message.CMD_SENDER_PC; msg.Sender = Message.CMD_SENDER_PC;
msg.Cmd = Message.CMD_STATUS_RELAY; msg.Cmd = Message.CMD_STATUS_RELAY;
msg.Val = null; msg.Val = null;
string msJson = JsonConvert.SerializeObject(msg); string msJson = JsonConvert.SerializeObject(msg);
if (serialPort.IsOpen && !RequestPending) {
if (serialPort.IsOpen && !RequestPending)
{
serialPort.Write(msJson); serialPort.Write(msJson);
RequestPending = true; RequestPending = true;
} }
} }
} }
private void onStatusTimerTick(object sender, EventArgs e) {
private void onStatusTimerTick(object sender, EventArgs e)
{
sendRelayStatusCmd(); sendRelayStatusCmd();
} }
private void onMainFormClosing(object sender, FormClosingEventArgs e) {
private void onMainFormClosing(object sender, FormClosingEventArgs e)
{
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); stopwatch.Start();
while (RequestPending && stopwatch.ElapsedMilliseconds < 2000) {
while (RequestPending && stopwatch.ElapsedMilliseconds < 2000)
{
Thread.Sleep(50); Thread.Sleep(50);
} }
if (serialPort.IsOpen) {
if (serialPort.IsOpen)
{
serialPort.DiscardInBuffer(); serialPort.DiscardInBuffer();
serialPort.DiscardOutBuffer(); serialPort.DiscardOutBuffer();
serialPort.Close(); serialPort.Close();
{ {
rotatorActValue.Text = webCamRotator.Value.ToString(); rotatorActValue.Text = webCamRotator.Value.ToString();
} }
private void onSetWebCamZero(object sender, EventArgs e) private void onSetWebCamZero(object sender, EventArgs e)
{ {
sendWebCamZeroCmd(); sendWebCamZeroCmd();

BIN
bin/Debug/FSRemotePowerSwitch.exe View File


BIN
bin/Debug/FSRemotePowerSwitch.pdb View File


BIN
bin/Debug/KnobControl.dll View File


BIN
bin/Debug/KnobControl.pdb View File


BIN
obj/Debug/DesignTimeResolveAssemblyReferences.cache View File


BIN
obj/Debug/FSRemotePowerSwitch.csproj.GenerateResource.cache View File


BIN
obj/Debug/FSRemotePowerSwitch.exe View File


BIN
obj/Debug/FSRemotePowerSwitch.pdb View File


Loading…
Cancel
Save