publicclassZigbee
{
#region Define Parameters. ///<summary>
/// Define the Zigbee Com Ports. ///</summary>
privatestaticSerialPort comXbee;
///<summary>
/// Define String ///</summary>
privatestaticstring _str_SCAN = "*SCAN*"; privatestaticstring _str_TEST = "*TEST*"; privatestaticstring _str_WSN = "*WSN*"; privatestaticstring _str_DATA = "*DATA*"; privatestaticstring _str_SPO2 = "*SPO2*"; privatestaticstring _str_BP = "*BP*"; privatestaticstring _str_ECG = "*ECG*";
privatestaticstring _str_CONNECT = "*CONNECT*"; privatestaticstring _str_OK = "*OK*";
privatestaticstring _str_DISCONNECT = "*DISCONNECT*";
privatestaticbool _COMMAND_RESPONSE_OK = false;
publicbool _sensor_SPO2 = false; publicbool _sensor_BP = false;
publicbool _ready_SPO2 = false; publicbool _ready_BP = false;
privateint Timeout = 5000; privateint Timeout_Test = 2000;
///<summary>
/// Define the measurement data ///</summary>
publicint lastSpo2 = 0; publicint lastHR = 0; publicint lastSBP = 0; publicint lastDBP = 0;
publicint lastABP = 0; publicint lastPR = 0; #endregion
#region Public Events //Delegate
///<summary>
/// A delegate representing receipt of SPO2. ///</summary>
publicdelegatevoidScan_Sensor_SPO2_Handler(); ///<summary>
/// A delegate representing receipt of BP. ///</summary>
publicdelegatevoidScan_Sensor_BP_Handler(); ///<summary>
/// A delegate representing receipt of SPO2. ///</summary>
publicdelegatevoidSensor_SPO2_Handler(); ///<summary>
/// A delegate representing receipt of BP. ///</summary>
publicdelegatevoidSensor_BP_Handler(); ///<summary>
/// A delegate representing receipt of SPO2. ///</summary>
publicdelegatevoidDataReceive_SPO2_Handler(); ///<summary>
/// A delegate representing receipt of BP. ///</summary>
publicdelegatevoidDataReceive_BP_Handler();
//Handlers ///<summary>
/// Fired when a SPO2 data received ///</summary>
publiceventScan_Sensor_SPO2_Handler Scan_Sensor_SPO2; ///<summary>
/// Fired when a SPO2 data received ///</summary>
publiceventScan_Sensor_BP_Handler Scan_Sensor_BP; ///<summary>
/// Fired when a SPO2 data received ///</summary>
publiceventSensor_SPO2_Handler Sensor_SPO2; ///<summary>
/// Fired when a SPO2 data received ///</summary>
publiceventSensor_BP_Handler Sensor_BP; ///<summary>
/// Fired when a SPO2 data received ///</summary>
publiceventDataReceive_SPO2_Handler DataReceive_SPO2; ///<summary>
/// Fired when a BP data received. ///</summary>
publiceventDataReceive_BP_Handler DataReceive_BP;
//Triggers ///<summary>
/// Fired when a spo2 DATA come ///</summary>
protectedvirtualvoid OnScanSensor_SPO2() { if (Scan_Sensor_SPO2 != null) { Scan_Sensor_SPO2(); } } ///<summary>
/// Fired when a bp data come ///</summary>
protectedvirtualvoid OnScanSensor_BP() { if (Scan_Sensor_BP != null) { Scan_Sensor_BP(); } } ///<summary>
/// Fired when a bp data come ///</summary>
protectedvirtualvoid OnSensor_SPO2() {
if (Sensor_SPO2 != null) {
} }
///<summary>
/// Fired when a bp data come ///</summary>
protectedvirtualvoid OnSensor_BP() { if (Sensor_BP != null) { Sensor_BP(); } } ///<summary>
/// Fired when a spo2 DATA come ///</summary>
protectedvirtualvoid OnDataReceived_SPO2() { if (DataReceive_SPO2 != null) { DataReceive_SPO2(); } } ///<summary>
/// Fired when a bp data come ///</summary>
protectedvirtualvoid OnDataReceived_BP() { if (DataReceive_BP != null) { DataReceive_BP(); } } #endregion
public Zigbee(int Com, int baudRate) {
comXbee = newSerialPort("COM"+Com, baudRate, Parity.None, 8, StopBits.One);
comXbee.DataReceived += newSerialDataReceivedEventHandler(comXbee_DataReceived); try
{
comXbee.Open();
Debug.Print("XBee Com Open..."); }
catch (Exception err) {
Debug.Print("ERROR: " + err.Message.ToString()); }
}
#region Serial Port Operations ///<summary>
/// Serial Received Data ///</summary>
void comXbee_DataReceived(object sender, SerialDataReceivedEventArgs e) {
Thread.Sleep(500);
int bytesToRead = comXbee.BytesToRead; byte[] byteArray = newbyte[bytesToRead]; comXbee.Read(byteArray, 0, bytesToRead);
string response = newString(UTF8Encoding.UTF8.GetChars(byteArray));
if (response.IndexOf("\r\n") >= 0) {
int index = -1;
while ((index = response.IndexOf("\r\n")) >= 0) {
string new_line = response.Substring(0, index); response = response.Substring(index + 2); new_line = new_line + "\r\n"; _Serial_Line_Received(new_line); Debug.Print(new_line); } } } ///<summary>
/// Serial Line Data Operation ///</summary>
///<param name="Command">Received Line Data.</param>
void _Serial_Line_Received(string line) {
if (line.IndexOf(_str_OK) > -1) {
_COMMAND_RESPONSE_OK = true;
{
case"*SPO2*": _ready_SPO2 = true; OnSensor_SPO2(); break;
case"*BP*": _ready_BP = true; OnSensor_BP(); break; } } if (line.IndexOf(_str_WSN) > -1) { line = line.Substring(_str_WSN.Length); switch (line) {
case"*SPO2*": _sensor_SPO2 = true; OnScanSensor_SPO2(); break;
case"*BP*": _sensor_BP = true; OnScanSensor_BP(); break; } } if (line.IndexOf(_str_DISCONNECT) > -1) { line = line.Substring(_str_DISCONNECT.Length); switch (line) {
case"*SPO2*": _ready_SPO2 = false; break;
case"*BP*": _ready_BP = false; break; } } if (line.IndexOf(_str_DATA) > -1) { line = line.Substring(_str_DATA.Length); if (line.IndexOf(_str_SPO2) > -1) { line = line.Substring(_str_SPO2.Length); string[] data = line.Split(newchar[] { '|' }); if (data.Length > 0)
{
int length = Int32.Parse(data[0]);
{
lastSpo2 = Int32.Parse(data[1]); lastPR = Int32.Parse(data[2]); OnDataReceived_SPO2(); } } } elseif (line.IndexOf(_str_BP) > -1) { line = line.Substring(_str_BP.Length); string[] data = line.Split(newchar[] { '|' }); if (data.Length > 0)
{
int length = Int32.Parse(data[0]);
if (length == data.Length - 1 && length == 4) {
lastSBP = Int32.Parse(data[1]); lastDBP = Int32.Parse(data[2]); lastABP = Int32.Parse(data[3]); lastHR = Int32.Parse(data[4]); OnDataReceived_BP(); } } } } } ///<summary>
/// Write to the device. ///</summary>
///<param name="Command">The command to write.</param>
publicvoid _Command_Mode_Write(string Command) {
//Convert string to byte array
byte[] _Command = System.Text.Encoding.UTF8.GetBytes(Command); comXbee.Write(_Command, 0, _Command.Length);
}
#endregion
#region Functions of Zigbee ///<summary>
///<returns></returns>
publicbool _SCAN() {
_Command_Mode_Write(_str_SCAN);
int tempCount = 0;
while (tempCount< Timeout) { //scan receive. Thread.Sleep(1); } returntrue; } ///<summary>
/// Connect to the Wireless Sensor Node ///</summary>
///<returns></returns>
publicbool _CONNECT() {
_COMMAND_RESPONSE_OK = false; _Command_Mode_Write(_str_CONNECT); int tempCount = 0;
while (tempCount < Timeout) { //scan receive. if (_COMMAND_RESPONSE_OK) { returntrue; } Thread.Sleep(1); } returntrue; } ///<summary> /// Measurement Function ///</summary> ///<returns></returns>
publicbool _TEST() {
_Command_Mode_Write(_str_TEST); int tempCount = 0;
while (tempCount < Timeout_Test) { Thread.Sleep(1); } returntrue; } #endregion }