Serial.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. //Add code
  7. using System.Windows.Forms;
  8. using System.IO;
  9. using System.IO.Ports;
  10. namespace Basic_Terminal
  11. {
  12. class Serial
  13. {
  14. private System.IO.Ports.SerialPort serialPort;
  15. private Debug Debug = new Debug(); // Teminal Text Wnd Open
  16. public string Serial_Name { get => serialPort.PortName; set => serialPort.PortName = value;}
  17. Data_Handler data_Handler = new Data_Handler();
  18. public void Serial_Initialize(ref ComboBox cb_port)
  19. {
  20. this.serialPort = new System.IO.Ports.SerialPort();
  21. this.serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.Serial_DataRecvFunction);
  22. cb_port.BeginUpdate();
  23. foreach (string comport in SerialPort.GetPortNames())//foreach (string comport in SerialPort_TestProgram.GetPortNames())
  24. {
  25. cb_port.Items.Add(comport);
  26. }
  27. cb_port.EndUpdate();
  28. //SerialPort 초기 설정.
  29. cb_port.DataSource = SerialPort.GetPortNames();
  30. serialPort.PortName = Serial_Name = cb_port.SelectedItem.ToString();
  31. serialPort.BaudRate = (int)115200;
  32. serialPort.DataBits = (int)8;
  33. serialPort.Parity = System.IO.Ports.Parity.None;
  34. serialPort.StopBits = StopBits.One;
  35. }
  36. private delegate void StringSend(string Text);
  37. private delegate void ByteSend(byte[] Text);
  38. public string str2hex(string strData,Boolean Compotable)
  39. {
  40. string resultHex = string.Empty;
  41. byte[] arr_byteStr = Encoding.Default.GetBytes(strData);
  42. foreach (byte byteStr in arr_byteStr)
  43. {
  44. if(Compotable == true)
  45. resultHex += string.Format("{0:X2}", byteStr) + " ";
  46. else
  47. resultHex += string.Format("{0:X2}", byteStr);
  48. }
  49. return resultHex;
  50. }
  51. static public byte[] str2bytes(string byteData)
  52. {
  53. System.Text.ASCIIEncoding asencoding = new System.Text.ASCIIEncoding();
  54. return Encoding.Default.GetBytes(byteData);
  55. }
  56. public void Serial_DataRecvFunction(object sender, SerialDataReceivedEventArgs e)
  57. {
  58. string data = serialPort.ReadExisting();
  59. if(Debug.RadioButton_ascii.Checked == true)
  60. Debug.Invoke(new StringSend(Debug.Data_Recv_Str), data);
  61. else
  62. Debug.Invoke(new StringSend(Debug.Data_Recv_Str), str2hex(data,true));
  63. data_Handler.Recv_dataCheck(str2bytes(str2hex(data,false)));
  64. }
  65. public Boolean Serial_PortOpen(ref Button Btn_Portonoff)
  66. {
  67. Boolean ret = false;
  68. try
  69. {
  70. if (serialPort.IsOpen) { //When the port is open
  71. serialPort.Close();
  72. Btn_Portonoff.Text = "Port Open";
  73. ret = true;
  74. }
  75. else//When the port is close
  76. {
  77. serialPort.Open();
  78. Btn_Portonoff.Text = "Port Close";
  79. }
  80. }
  81. catch
  82. {
  83. MessageBox.Show("already port open " + Serial_Name);
  84. }
  85. return ret;
  86. }
  87. public void Serial_TerminalOpen(object serial)
  88. {
  89. this.Debug.Serial_ClassSet(serial);
  90. try
  91. {
  92. this.Debug.Show();
  93. }
  94. catch
  95. {
  96. Debug = new Debug();
  97. this.Debug.Show();
  98. }
  99. }
  100. public void Serial_DataSend(byte[] data)
  101. {
  102. try
  103. {
  104. serialPort.Write(data,0,data.Length);
  105. }
  106. catch (System.Exception ex)
  107. {
  108. MessageBox.Show(ex.Message);
  109. }
  110. }
  111. public void Serial_DataSend(byte[] buffer, int count)
  112. {
  113. try { serialPort.Write(buffer, 0, count); }
  114. catch { MessageBox.Show("Port Open Failed!!!"); }
  115. }
  116. }
  117. }