194 lines
5.6 KiB
C#
194 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using AR;
|
|
using COMM;
|
|
namespace Project.Dialog
|
|
{
|
|
public partial class fXbeeSetting : Form
|
|
{
|
|
public fXbeeSetting()
|
|
{
|
|
InitializeComponent();
|
|
VAR.BOOL[eVarBool.DISABLE_AUTOCONN_XBEE] = true;
|
|
PUB.XBE.Close();
|
|
this.serialPort1.DataReceived += SerialPort1_DataReceived;
|
|
}
|
|
private void fXbeeSetting_Load(object sender, EventArgs e)
|
|
{
|
|
this.tbPortName.Items.Clear();
|
|
foreach (var item in System.IO.Ports.SerialPort.GetPortNames())
|
|
{
|
|
this.tbPortName.Items.Add(item);
|
|
}
|
|
|
|
this.tbPortName.Text = PUB.setting.Port_XBE;
|
|
this.tbBaud.Text = PUB.setting.Baud_XBE.ToString();
|
|
|
|
}
|
|
void showlog(string Message)
|
|
{
|
|
if (rtXbee.Visible)
|
|
{
|
|
rtXbee.AddMsg(DateTime.Now, "NORMAL", Message);
|
|
}
|
|
}
|
|
|
|
void showlog(arCtl.LogTextBox rtRx, DateTime LogTime, string TypeStr, string Message)
|
|
{
|
|
if (rtRx.Visible)
|
|
{
|
|
rtRx.AddMsg(LogTime, TypeStr, Message);
|
|
}
|
|
}
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
if (this.serialPort1.IsOpen)
|
|
{
|
|
serialPort1.Close();
|
|
showlog("closed");
|
|
}
|
|
else
|
|
{
|
|
serialPort1.PortName = tbPortName.Text;
|
|
serialPort1.BaudRate = int.Parse(tbBaud.Text);
|
|
serialPort1.Open();
|
|
showlog("open");
|
|
}
|
|
}
|
|
|
|
private void fXbeeSetting_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
VAR.BOOL[eVarBool.DISABLE_AUTOCONN_XBEE] = false;
|
|
}
|
|
|
|
private volatile bool isCommandExecuting = false;
|
|
|
|
private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
|
|
{
|
|
if (isCommandExecuting) return;
|
|
|
|
try
|
|
{
|
|
string data = serialPort1.ReadExisting();
|
|
var hexdata = System.Text.Encoding.Default.GetBytes(data);
|
|
var hexstr = string.Join(" ", hexdata.Select(t => t.ToString("X2")));
|
|
if (!string.IsNullOrEmpty(data))
|
|
{
|
|
this.BeginInvoke(new Action(() =>
|
|
{
|
|
showlog($"RxAsync: {hexstr}");
|
|
}));
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private string Cmd(string cmd, int timeout = 1000)
|
|
{
|
|
isCommandExecuting = true;
|
|
try
|
|
{
|
|
if (!serialPort1.IsOpen) return "Error: Port Closed";
|
|
|
|
serialPort1.DiscardInBuffer();
|
|
serialPort1.Write(cmd);
|
|
|
|
System.Threading.Thread.Sleep(20);
|
|
serialPort1.ReadTimeout = timeout;
|
|
string res = serialPort1.ReadTo("\r");
|
|
System.Threading.Thread.Sleep(20);
|
|
showlog($"Tx:{cmd.Trim()}, Rx:{res}");
|
|
|
|
//명령수신호 10ms 대기후 다음 명령을 전송
|
|
System.Threading.Thread.Sleep(20);
|
|
|
|
return res;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
showlog($"Err: {ex.Message}");
|
|
return "Error";
|
|
}
|
|
finally
|
|
{
|
|
isCommandExecuting = false;
|
|
}
|
|
}
|
|
private void btpand_Click(object sender, EventArgs e)
|
|
{
|
|
//각명령마다 회신을 확인하고 다음명령을 실행해야함
|
|
//명령수신호 10ms 대기후 다음 명령을 전송
|
|
//명령을 설정하면 응답은 OK\d 형태로 입력된다.
|
|
var cmds = new string[] {
|
|
"+++",
|
|
$"ATID{tbpanid.Text}\r" ,
|
|
$"ATCN\r"};
|
|
|
|
foreach (var cmd in cmds)
|
|
{
|
|
if(!Cmd(cmd).Contains("OK"))
|
|
{
|
|
showlog("FAIL");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btch_Click(object sender, EventArgs e)
|
|
{
|
|
var cmds = new string[] {
|
|
"+++",
|
|
$"ATCH{tbch.Text}\r" ,
|
|
$"ATCN\r"};
|
|
foreach (var cmd in cmds)
|
|
{
|
|
if (!Cmd(cmd).Contains("OK"))
|
|
{
|
|
showlog("FAIL");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btmy_Click(object sender, EventArgs e)
|
|
{
|
|
var cmds = new string[] {
|
|
"+++",
|
|
$"ATMY{tbmy.Text}\r" ,
|
|
$"ATCN\r"};
|
|
foreach (var cmd in cmds)
|
|
{
|
|
if (!Cmd(cmd).Contains("OK"))
|
|
{
|
|
showlog("FAIL");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
//read all(id,ch,my)
|
|
if (Cmd("+++").Contains("OK"))
|
|
{
|
|
var id = Cmd("ATID\r");
|
|
var ch = Cmd("ATCH\r");
|
|
var my = Cmd("ATMY\r");
|
|
Cmd("ATCN\r");
|
|
this.BeginInvoke(new Action(() => {
|
|
this.tbpanid.Text = id;
|
|
this.tbch.Text = ch;
|
|
this.tbmy.Text = my;
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
}
|