那作用不就在擴充.Net平台XDDD
那我就直接用.Net寫就好了啊,聽廠商講得好像很精華XD
不過我也學習到另一種C++的寫法,不過這似乎還沒有被ANSI C認可
畢竟是for .Net XDDD,或許有一些不為人知的用法XD
基本上這程式跟HRV Source code應該是沒有太大出路,如果看得懂HRV Source code應該就看得懂這邊
還打算在這隻程式上面加點料,後來因為一些特殊的問題存在,就暫時打住了
Designer.cs:
namespace HRV { partial class HRVForm { /// <summary> /// 設計工具所需的變數。 /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清除任何使用中的資源。 /// </summary> /// <param name="disposing">如果應該處置 Managed 資源則為 true,否則為 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form 設計工具產生的程式碼 /// <summary> /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器 /// 修改這個方法的內容。 /// </summary> private void InitializeComponent() { this.btn_Start = new System.Windows.Forms.Button(); this.btn_Stop = new System.Windows.Forms.Button(); this.comboBox = new System.Windows.Forms.ComboBox(); this.label_ComPort = new System.Windows.Forms.Label(); this.label_FileName = new System.Windows.Forms.Label(); this.textBox_FileName = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // btn_Start // this.btn_Start.Location = new System.Drawing.Point(26, 72); this.btn_Start.Name = "btn_Start"; this.btn_Start.Size = new System.Drawing.Size(75, 23); this.btn_Start.TabIndex = 0; this.btn_Start.Text = "Start"; this.btn_Start.UseVisualStyleBackColor = true; this.btn_Start.Click += new System.EventHandler(this.btn_Start_Click); // // btn_Stop // this.btn_Stop.Location = new System.Drawing.Point(126, 72); this.btn_Stop.Name = "btn_Stop"; this.btn_Stop.Size = new System.Drawing.Size(75, 23); this.btn_Stop.TabIndex = 1; this.btn_Stop.Text = "Stop"; this.btn_Stop.UseVisualStyleBackColor = true; this.btn_Stop.Click += new System.EventHandler(this.btn_Stop_Click); // // comboBox // this.comboBox.FormattingEnabled = true; this.comboBox.Location = new System.Drawing.Point(80, 12); this.comboBox.Name = "comboBox"; this.comboBox.Size = new System.Drawing.Size(121, 20); this.comboBox.TabIndex = 2; // // label_ComPort // this.label_ComPort.AutoSize = true; this.label_ComPort.Location = new System.Drawing.Point(24, 12); this.label_ComPort.Name = "label_ComPort"; this.label_ComPort.Size = new System.Drawing.Size(50, 12); this.label_ComPort.TabIndex = 3; this.label_ComPort.Text = "Com Port"; // // label_FileName // this.label_FileName.AutoSize = true; this.label_FileName.Location = new System.Drawing.Point(24, 44); this.label_FileName.Name = "label_FileName"; this.label_FileName.Size = new System.Drawing.Size(52, 12); this.label_FileName.TabIndex = 4; this.label_FileName.Text = "File Name"; // // textBox_FileName // this.textBox_FileName.Location = new System.Drawing.Point(80, 44); this.textBox_FileName.Name = "textBox_FileName"; this.textBox_FileName.Size = new System.Drawing.Size(121, 22); this.textBox_FileName.TabIndex = 5; // // HRVForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(230, 106); this.Controls.Add(this.textBox_FileName); this.Controls.Add(this.label_FileName); this.Controls.Add(this.label_ComPort); this.Controls.Add(this.comboBox); this.Controls.Add(this.btn_Stop); this.Controls.Add(this.btn_Start); this.Name = "HRVForm"; this.Text = "HRV By C.Y. Fang"; this.Load += new System.EventHandler(this.HRVForm_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button btn_Start; private System.Windows.Forms.Button btn_Stop; private System.Windows.Forms.ComboBox comboBox; private System.Windows.Forms.Label label_ComPort; private System.Windows.Forms.Label label_FileName; private System.Windows.Forms.TextBox textBox_FileName; } }
Code:
using System; using System.IO; using System.IO.Ports; using System.Threading; using System.Windows.Forms; namespace HRV { public partial class HRVForm : Form { private static SerialPort mSerial = new SerialPort(); private static Thread mThread = null; private static StreamWriter mWriter = null; private static bool mContinue { set; get; } private static readonly Byte[] TryDetect = { 0x00, 0x00, 0x00 }; private static readonly Byte[] setupRFDB = { 0x0b, 0x08, 0xff, 0x00, 0x00 }; private static readonly Byte[] setupXMIT = { 0x07, 0x80, 0x07, 0x01, 0xff, 0xff, 0x00, 0x14, 0x21 }; private static readonly Byte[] StpDetect = { 0x22, 0x22, 0x22 }; public HRVForm() { InitializeComponent(); } private void HRVForm_Load(object sender, EventArgs e) { this.comboBox.DropDownStyle = ComboBoxStyle.DropDownList; this.textBox_FileName.Text = "HRV.raw"; if (SerialPort.GetPortNames().Length > 0) { foreach (String com in SerialPort.GetPortNames()) { comboBox.Items.Add(com); } comboBox.SelectedIndex = 0; mContinue = false; } else { MessageBox.Show("Bye"); Application.Exit(); } } private void btn_Start_Click(object sender, EventArgs e) { if (IsSetFileName()) { Init_mSerial(); mSerial.Open(); if (mSerial.IsOpen == true) { MessageBox.Show("SerialPort opened successfully!"); mContinue = true; Thread.Sleep(100); mThread.Start(); mSerial.RtsEnable = true; Thread.Sleep(1); mSerial.RtsEnable = false; Thread.Sleep(500); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mSerial.Write(setupRFDB, 0, setupRFDB.Length); Thread.Sleep(10); mSerial.Write(setupXMIT, 0, setupXMIT.Length); } else { mContinue = false; mSerial.Close(); mWriter.Close(); MessageBox.Show("Serialport open failed."); } } else { MessageBox.Show("Input file name!!"); textBox_FileName.Focus(); } } private void btn_Stop_Click(object sender, EventArgs e) { if (mThread.ThreadState == ThreadState.Running) { mContinue = false; mThread.Join(); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mSerial.Write(TryDetect, 0, 1); mWriter.Flush(); mWriter.Close(); mSerial.Close(); MessageBox.Show("Thread join"); } } private void Init_mSerial() { mSerial.PortName = comboBox.SelectedItem.ToString(); mSerial.BaudRate = 250000; mSerial.Parity = Parity.None; mSerial.DataBits = 8; mSerial.StopBits = StopBits.One; mSerial.Handshake = Handshake.None; mSerial.ReadTimeout = 500; mSerial.WriteTimeout = 500; mThread = new Thread(new ThreadStart(Read)); } private bool IsSetFileName() { if (textBox_FileName.Text.Length < 0) { return false; } else { mWriter = new StreamWriter(textBox_FileName.Text, true); } return true; } private void Read() { MessageBox.Show("Reading..."); while (mContinue) { int count = mSerial.BytesToRead; if (count > 0) { byte[] buffer = new byte[count]; mSerial.Read(buffer, 0, count); foreach (byte b in buffer) { mWriter.Write(Convert.ToString(b, 16) + " "); } mWriter.WriteLine(""); mWriter.Flush(); } } } } }