Example #1
0
        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;
            }
        }