private void Enable_ReadLine_Queue(int readline_timeout_time = 1000)
 {
     _readline_usage = UART_READLINE_USAGE.ENQUEUE_TILL_ACK;
     _serialPort.ReadTimeout = readline_timeout_time;
 }
 public void ReadSerialPortThread()
 {
     while (_continue_serial_read_write)
     {
         if (_readline_usage == UART_READLINE_USAGE.ENQUEUE_TILL_ACK)
         {
             try
             {
                 string message = _serialPort.ReadLine();
                 //this.AppendSerialMessageLog(message);
                 //                        UART_MSG.Enqueue(message);
                 if (message == "\x0dOK")
                 {
                     _readline_receive_OK = true;
                     _readline_usage = UART_READLINE_USAGE.FREERUN;
                 }
                 else
                 {
                     UART_MSG.Enqueue(message);
                 }
             }
             catch (TimeoutException)
             {
                 Set_ReadLine_Timeout_Flag();
                 Disable_ReadLine_Queue();
             }
         }
         else if (_readline_usage == UART_READLINE_USAGE.WAIT_SINGLE_LINE)
         {
             try
             {
                 string message = _serialPort.ReadLine();
                 UART_MSG.Enqueue(message);
                 _readline_read_oneline = true;
                 _readline_usage = UART_READLINE_USAGE.FREERUN;
             }
             catch (TimeoutException)
             {
                 Set_ReadLine_Timeout_Flag();
             }
         }
         else if (_readline_usage == UART_READLINE_USAGE.WAIT_ACK)
         {
             try
             {
                 string message = _serialPort.ReadLine();
                 //this.AppendSerialMessageLog(message);
                 //                        UART_MSG.Enqueue(message);
                 if (message == "\x0dOK")
                 {
                     _readline_receive_OK = true;
                     _readline_usage = UART_READLINE_USAGE.FREERUN;
                 }
                 else
                 {
                 }
                 this.AppendSerialMessageLog(message);
             }
             catch (TimeoutException)
             {
                 Set_ReadLine_Timeout_Flag();
             }
         }
         else if (_readline_usage == UART_READLINE_USAGE.FREERUN)
         {
             try
             {
                 int DataLength = _serialPort.BytesToRead;
                 if (DataLength > 0)
                 {
                     string message = _serialPort.ReadExisting();
                     this.AppendSerialMessageLog(message);
                 }
             }
             catch (TimeoutException)
             {
             }
         }
     }
 }
 private void Disable_ReadLine_Queue()
 {
     _readline_usage = UART_READLINE_USAGE.FREERUN;
     _serialPort.ReadTimeout = SerialPort.InfiniteTimeout;
 }
 private void Start_Read_OneLine_Queue(int readline_timeout_time = 3000)
 {
     _readline_read_oneline = false;
     _readline_usage = UART_READLINE_USAGE.WAIT_SINGLE_LINE;
     _serialPort.ReadTimeout = readline_timeout_time;
 }