• No results found

Zigbee Driver Code – C#

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 }