private async void Button_sendFile_ClickAsync(object sender, EventArgs e) { if (_sendComing > 0) { _sendComing++; } else if (_sendComing == 0) { if (textBox_fileName.Text != "" && textBox_sendNum.Text != "" && ushort.TryParse(textBox_sendNum.Text, out ushort repeat) && ushort.TryParse(textBox_delay.Text, out ushort delay) && ushort.TryParse(textBox_strDelay.Text, out ushort strDelay)) { _sendComing = 1; button_Send.Enabled = false; button_closeport.Enabled = false; button_openFile.Enabled = false; button_sendFile.Text = "Stop"; textBox_fileName.Enabled = false; textBox_sendNum.Enabled = false; textBox_delay.Enabled = false; textBox_strDelay.Enabled = false; for (var n = 0; n < repeat; n++) { string outStr; long length = 0; if (repeat > 1) { outStr = "\r\nSend cycle " + (n + 1).ToString() + "/" + repeat.ToString() + "\r\n"; } else { outStr = ""; } _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now, TextLogger.TextLogger.TextFormat.PlainText); try { length = new FileInfo(textBox_fileName.Text).Length; } catch (Exception ex) { MessageBox.Show("\r\nError opening file " + textBox_fileName.Text + ": " + ex.Message); } if (!checkBox_hexFileOpen.Checked) //binary data read { if (radioButton_byByte.Checked) //byte-by-byte { var tmpBuffer = new byte[length]; try { tmpBuffer = File.ReadAllBytes(textBox_fileName.Text); } catch (Exception ex) { MessageBox.Show("\r\nError reading file " + textBox_fileName.Text + ": " + ex.Message); } try { for (var m = 0; m < tmpBuffer.Length; m++) { serialPort1.Write(tmpBuffer, m, 1); progressBar1.Value = (n * tmpBuffer.Length + m) * 100 / (repeat * tmpBuffer.Length); if (strDelay > 0) { await TaskEx.Delay(strDelay); } if (_sendComing > 1) { m = tmpBuffer.Length; } byte[] outByte = new[] { tmpBuffer[m] }; outStr = Accessory.ConvertByteArrayToString(tmpBuffer); _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now); } } catch (Exception ex) { _logger.AddText("Error sending to port " + serialPort1.PortName + ": " + ex.Message, (byte)DataDirection.Error, DateTime.Now, TextLogger.TextLogger.TextFormat.PlainText); } } else //stream { var tmpBuffer = new byte[length]; progressBar1.Value = 0; try { tmpBuffer = File.ReadAllBytes(textBox_fileName.Text); } catch (Exception ex) { MessageBox.Show("\r\nError reading file " + textBox_fileName.Text + ": " + ex.Message); } try { for (var m = 0; m < tmpBuffer.Length; m++) { serialPort1.Write(tmpBuffer, m, 1); progressBar1.Value = (n * tmpBuffer.Length + m) * 100 / (repeat * tmpBuffer.Length); } } catch (Exception ex) { _logger.AddText("Error sending to port " + serialPort1.PortName + ": " + ex.Message, (byte)DataDirection.Error, DateTime.Now, TextLogger.TextLogger.TextFormat.PlainText); } progressBar1.Value = 100; outStr = Accessory.ConvertByteArrayToString(tmpBuffer); _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now); } } else //hex text read { if (radioButton_byString.Checked) //String-by-string { string[] tmpBuffer = { }; try { tmpBuffer = File.ReadAllLines(textBox_fileName.Text); } catch (Exception ex) { MessageBox.Show("\r\nError reading file " + textBox_fileName.Text + ": " + ex.Message); } for (var m = 0; m < tmpBuffer.Length; m++) { tmpBuffer[m] = Accessory.CheckHexString(tmpBuffer[m]); } try { for (var m = 0; m < tmpBuffer.Length; m++) { var s = Accessory.ConvertHexToByteArray(tmpBuffer[m]); serialPort1.Write(s, 0, s.Length); outStr = Accessory.ConvertHexToString(tmpBuffer[m]); _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now); progressBar1.Value = (n * tmpBuffer.Length + m) * 100 / (repeat * tmpBuffer.Length); if (strDelay > 0) { await TaskEx.Delay(strDelay); } if (_sendComing > 1) { m = tmpBuffer.Length; } } } catch (Exception ex) { _logger.AddText("Error sending to port " + serialPort1.PortName + ": " + ex.Message, (byte)DataDirection.Error, DateTime.Now, TextLogger.TextLogger.TextFormat.PlainText); } } else if (radioButton_byByte.Checked) //byte-by-byte { var tmpBuffer = ""; try { length = new FileInfo(textBox_fileName.Text).Length; tmpBuffer = File.ReadAllText(textBox_fileName.Text); } catch (Exception ex) { MessageBox.Show("\r\nError reading file " + textBox_fileName.Text + ": " + ex.Message); } tmpBuffer = Accessory.CheckHexString(tmpBuffer); try { for (var m = 0; m < tmpBuffer.Length; m += 3) { var outByte = tmpBuffer.Substring(m, 3); serialPort1.Write(Accessory.ConvertHexToByteArray(outByte), 0, 1); progressBar1.Value = (n * tmpBuffer.Length + m) * 100 / (repeat * tmpBuffer.Length); if (strDelay > 0) { await TaskEx.Delay(strDelay); } if (_sendComing > 1) { m = tmpBuffer.Length; } outStr = Accessory.ConvertHexToString(outByte); _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now); } } catch (Exception ex) { MessageBox.Show("Error sending to port " + serialPort1.PortName + ": " + ex.Message); } } else //raw stream { var tmpBuffer = ""; progressBar1.Value = 0; try { tmpBuffer = Accessory.CheckHexString(File.ReadAllText(textBox_fileName.Text)); } catch (Exception ex) { MessageBox.Show("\r\nError reading file " + textBox_fileName.Text + ": " + ex.Message); } try { for (var m = 0; m < tmpBuffer.Length; m += 3) { serialPort1.Write(Accessory.ConvertHexToByteArray(tmpBuffer.Substring(m, 3)), 0, 1); progressBar1.Value = (n * tmpBuffer.Length + m) * 100 / (repeat * tmpBuffer.Length); } } catch (Exception ex) { _logger.AddText("Error sending to port " + serialPort1.PortName + ": " + ex.Message, (byte)DataDirection.Error, DateTime.Now, TextLogger.TextLogger.TextFormat.PlainText); } progressBar1.Value = 100; outStr = Accessory.ConvertHexToString(tmpBuffer); _logger.AddText(outStr, (byte)DataDirection.Sent, DateTime.Now); } } if (repeat > 1 && delay > 0) { await TaskEx.Delay(delay); } if (_sendComing > 1) { n = repeat; } } button_Send.Enabled = true; button_closeport.Enabled = true; button_openFile.Enabled = true; button_sendFile.Text = "Send file"; textBox_fileName.Enabled = true; textBox_sendNum.Enabled = true; textBox_delay.Enabled = true; textBox_strDelay.Enabled = true; } _sendComing = 0; } }