C# Serial Port reading HEX data

17,127

Alex Farber's method works. Below is my code example:

SerialPort sp = (SerialPort) sender;
// string s = sp.ReadExisting();
// labelSerialMessage.Invoke(this.showSerialPortDelegate, new object[] { s });

int length = sp.BytesToRead;
byte[] buf = new byte[length];

sp.Read(buf, 0, length);
System.Diagnostics.Debug.WriteLine("Received Data:" + buf);

labelSerialMessage.Invoke(this.showSerialPortDelegate, new object[] { 
    System.Text.Encoding.Default.GetString(buf, 0, buf.Length) });
Share:
17,127
radensb
Author by

radensb

Updated on June 04, 2022

Comments

  • radensb
    radensb almost 2 years

    I am writing a C# application to read from several serial COM ports at the same time to analyze the data communication of an IPOD. The data being sent needs to be interpreted as HEX bytes. For example,

    0xFF 0x55 0x01 0x00 0x04 0xC3 0xFF 0x55 ...

    I want to be able to read this and display it in a rich textbox, for example

    0xFF 0x55 0x01 0x00 0x04 0xC3
    0xFF 0x55 ... 
    

    The start of a command includes a header (0xFF 0x55) and the rest is is the command + parameters + checksum.

    What is the best way to go about this?

    I currently have:

    private delegate void SetTextDeleg(string text);
    
    void sp_DataReceivedRx(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(500);
        try
        {
            string data = IPODRxPort.ReadExisting(); // Is this appropriate??
            // Invokes the delegate on the UI thread, and sends the data that was received to the invoked method.
            // ---- The "si_DataReceived" method will be executed on the UI thread which allows populating of the textbox.
            this.BeginInvoke(new SetTextDeleg(si_DataReceivedRx), new object[] { data });
        }
        catch
        { }
    }
    
    private void si_DataReceivedRx(string data)
    {
        int dataLength = data.Length*2;
        double numLines = dataLength / 16.0;
        for (int i = 0; i < numLines; ++i)
            IPODTx_rtxtBox.Text += "\n";
    
        IPODRx_rtxtBox.Text += SpliceText(convertAsciiTextToHex(data), 32) + "\n"; 
    }
    

    I can read data, but it is not in the appropriate format.

    Im just not sure what the best way to get the hex data from the com port and display it line by line by command based on the command header (0xFF 0x55).

    Any Suggestions?