troubleshooting Question

C# Problem translating Comm functions from VB.Net

Avatar of luciepaul
luciepaul asked on
Visual Basic Classic.NET ProgrammingC#
6 Comments1 Solution889 ViewsLast Modified:
The two enclosed proc works perfectly in VB2008 but I'm unable to translate them correctly to C#
If I am understanding well the doc I need to use "static" features but they don't compile.
I'm quite sure the error will be obvious to an expert !
Thanks for the help  

Original VB2008 Code:

Public Function OpenCommPort(ByVal SaxComm As CommStudio.SaxComm, ByVal nCommPort As Integer) As Integer

        Dim vInput As Object

        If (SaxComm.PortOpen = True) Then
            If (SaxComm.CommPort = "COM" & CStr(nCommPort)) Then 'correct comm port already open
                OpenCommPort = nCommPort
                Exit Function
            Else 'port open, but wrong comm port
                SaxComm.PortOpen = False    'close the port before re-assigning CommPort
            End If
        End If

        SaxComm.CommPort = nCommPort    'can not re-assign unless comm port closed

        On Error Resume Next 'skip error messages from appearing
        SaxComm.PortOpen = True

        If (SaxComm.PortOpen = True) Then
            ' Comm Port open OK
            SaxComm.InputLen = 0
            vInput = SaxComm.Input  'Clear Buffer and reset count
        End If

        OpenCommPort = nCommPort

    End Function

    Private Sub RxOEMDF1()

        Static vInput As Object

        If blnInSync Then 'In-sync
            If vInput(SaxComm1.InBufferCount >= 3) Then
                SaxComm1.InputLen = 3 'get next 3 characters
                vInput = SaxComm1.Input
                nNoDataCtr = TB1_TWO_SEC

                ' put data in Byte array
                naByte(1) = vInput(0)
                naByte(2) = vInput(1)
                naByte(3) = vInput(2)

                ' test frame
                If ((naByte(1) >= &H80) And (naByte(2) < &H80) And (naByte(3) < &H80)) Then
                    ' Frame OK
                    nSpO2_Status = naByte(1) And &H7C
                    nFloatByte(1) = naByte(1) And &H3
                    nFloatByte(2) = naByte(2)
                    nFloatByte(3) = naByte(3)
                    blnNewFrame = True      ' signal New Frame
                    blnNewPacket = True     ' signal New Packet
                Else ' out of sync
                    blnInSync = False
                End If ' Frame test
            End If ' There was 3 characters

        Else ' Not-in-sync
            If vInput Then '(SaxComm1.InBufferCount >= 1) Then
                SaxComm1.InputLen = 1 'to get one character
                vInput = SaxComm1.Input 'get character
                nNoDataCtr = TB1_TWO_SEC

                ' shift byte into Byte array
                naByte(1) = naByte(2)
                naByte(2) = naByte(3)
                naByte(3) = vInput(0)

                ' test frame
                If ((naByte(1) >= &H80) And (naByte(2) < &H80) And (naByte(3) < &H80)) Then
                    ' Frame OK
                    nSpO2_Status = naByte(1) And &H7C
                    nFloatByte(1) = naByte(1) And &H3
                    nFloatByte(2) = naByte(2)
                    nFloatByte(3) = naByte(3)
                    blnInSync = True
                End If ' Frame OK
            End If ' There was a character

        End If ' Else Not-in-sync

    End Sub

My translated code

private void RxOEMDF1()
    {
        //In-sync
        if (blnInSync)
        {
           
            if SaxComm1.InBufferCount >= 3
            {
                SaxComm1.InputLen = 3;
                //get next 3 characters
                static_RxOEMDF1_vInput = SaxComm1.Input;
                nNoDataCtr = TB1_TWO_SEC;

                // put data in Byte array
                naByte(1) = static_RxOEMDF1_vInput(0);
                naByte(2) = static_RxOEMDF1_vInput(1);
                naByte(3) = static_RxOEMDF1_vInput(2);

                // test frame
                if (((naByte(1) >= 0x80) & (naByte(2) < 0x80) & (naByte(3) < 0x80)))
                {
                    // Frame OK
                    nSpO2_Status = naByte(1) & 0x7c;
                    nFloatByte(1) = naByte(1) & 0x3;
                    nFloatByte(2) = naByte(2);
                    nFloatByte(3) = naByte(3);
                    blnNewFrame = true;
                    
                    // signal New Frame
                    blnNewPacket = true;
                    
                    // signal New Packet
                    // out of sync
                }
                else
                {
                    blnInSync = false;
                }
                // Frame test
            }
            // There was 3 characters

            // Not-in-sync
        }
        else
        {
            (SaxComm1.InBufferCount >= 1) Then
            if (static_RxOEMDF1_vInput)
            {
                SaxComm1.InputLen = 1;
                //to get one character
                static_RxOEMDF1_vInput = SaxComm1.Input;
                //get character
                nNoDataCtr = TB1_TWO_SEC;

                // shift byte into Byte array
                naByte(1) = naByte(2);
                naByte(2) = naByte(3);
                naByte(3) = static_RxOEMDF1_vInput(0);

                // test frame
                if (((naByte(1) >= 0x80) & (naByte(2) < 0x80) & (naByte(3) < 0x80)))
                {
                    // Frame OK
                    nSpO2_Status = naByte(1) & 0x7c;
                    nFloatByte(1) = naByte(1) & 0x3;
                    nFloatByte(2) = naByte(2);
                    nFloatByte(3) = naByte(3);
                    blnInSync = true;
                }
                // Frame OK
            }
            // There was a character

        }
        // Else Not-in-sync

    }
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 6 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 6 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros