f53x_linsnooper_main.c

来自「8051试验程序 基础教材」· C语言 代码 · 共 805 行 · 第 1/3 页

C
805
字号
    {
        UART_Send_CRLF();
        UART_Send_Word( "Slave response frame:", 21 );
        UART_Send_CRLF();
    }

    /* NAD */                               // Address of the slave node
    if (LIN_IDENTIFIER == 0x3C || LIN_IDENTIFIER == 0x3D || LIN_DATA[2] == 0xF2)
    {
        UART_Send_SPACE();
        if ( LIN_DATA[2] == 0xD0 || LIN_DATA[2] == 0xF0 )   // SID or RSID
        {
            UART_Send_Word( "Initial NAD: ", 13);
            UART_Send_DEC( LIN_DATA[0], 0);
        }
        else if ( LIN_DATA[0] == 0 )    // Go-to-sleep-command
            UART_Send_Word( "Go to sleep command", 19 );
        else if ( LIN_DATA[0] < 127 )   //  Diagnostic slave node addresses
        {
            UART_Send_Word( "Diagnostic slave node address: ", 31 );
            UART_Send_DEC( LIN_DATA[0], 0);
        }
        else if ( LIN_DATA[0] == 127 )// Reserved for broadcast
            UART_Send_Word( "Broadcast", 9 );
        else                                    // Free usage of frame
            UART_Send_Word( "Free usage frame", 10 );
        UART_Send_CRLF();
    }

    /* PCI */                               // Protocol Control Information
    if (LIN_IDENTIFIER == 0x3C || LIN_IDENTIFIER == 0x3D || LIN_DATA[2] == 0xF2)
        {
        switch ( LIN_DATA[1] & 0xF0 )
        {
            case 0x00:                      // SF Frame Type
                    UART_Send_Word( " Single Frame", 13 );
                    UART_Send_CRLF();
                    UART_Send_Word( " Number of used data bytes: ", 28 );
                    UART_Send_DEC( (LIN_DATA[1] & 0x0F) - 1, 0 );
                    if ( LIN_IDENTIFIER == 0x3C )
                    {
                        UART_Send_Word( " + SID", 6 );
                    }
                    else
                    {
                        UART_Send_Word( " + RSID", 7 );
                    }
                    break;

            case 0x10:                      // FF Frame Type
                    UART_Send_Word( " First Frame", 12 );
                    UART_Send_CRLF();
                    UART_Send_Word( " Total number of data bytes: ", 29 );
                    length = ((LIN_DATA[1] & 0x0F) << 8) + LIN_DATA[2] - 1;
                    i = length / 1000;
                    UART_Send_DEC( i, 0 );
                    length = length - i * 1000;
                    i = length / 100;
                    UART_Send_DEC( i, 0 );
                    length = length - i * 100;
                    i = length / 10;
                    UART_Send_DEC( i, 0 );
                    length = length - i * 10;
                    UART_Send_DEC( length, 0 );
                    if ( LIN_IDENTIFIER == 0x3C )
                        UART_Send_Word( " + SID", 6 );
                    else
                        UART_Send_Word( " + RSID", 7 );
                    break;

            case 0x20:                      // CF Frame Type
                    UART_Send_Word( " Continuation Frame", 19 );
                    UART_Send_CRLF();
                    UART_Send_Word( " Frame counter: ", 16 );
                    UART_Send_DEC( LIN_DATA[1] & 0x0F, 1 );
                    break;

            default:                            // Unknown Frame Type
                    UART_Send_Word( " Unknown PCI Frame Type", 23 );
                    break;
        }
        UART_Send_CRLF();
    }

    /* SID or RSID */                       // Service Identifier  Specifies
    if ( LIN_IDENTIFIER == 0x3C )       // Master
    {
        switch ( LIN_DATA[2] )
        {
            case 0xB0:                      // Assign NAD
                    UART_Send_Word( " Assign NAD request:", 20 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Supplier ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[4], 1 );
                    UART_Send_HEX( LIN_DATA[3], 0 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Function ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[6], 1 );
                    UART_Send_HEX( LIN_DATA[5], 0 );
                    UART_Send_CRLF();
                    UART_Send_Word( "      New NAD: ", 15 );
                    UART_Send_DEC( LIN_DATA[7], 1 );
                    break;

            case 0xB1:                      // Assign frame ID
                    UART_Send_Word( " Assign frame ID request:", 25 );
                    UART_Send_CRLF();
                    UART_Send_Word( "   Supplier ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[4], 1 );
                    UART_Send_HEX( LIN_DATA[3], 0 );
                    UART_Send_CRLF();
                    UART_Send_Word( "    Message ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[6], 1 );
                    UART_Send_HEX( LIN_DATA[5], 0 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Protected ID: ", 15 );
                    UART_Send_DEC( LIN_DATA[7], 1 );
                    break;

            case 0xB2:                      // Read by identifier request
                    UART_Send_Word( " Read by ID request:", 20 );
                    UART_Send_CRLF();
                    UART_Send_Word( "   Identifier: ", 15 );
                    UART_Send_DEC( LIN_DATA[3], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Supplier ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[5], 1 );
                    UART_Send_HEX( LIN_DATA[4], 0 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Function ID: ", 15 );
                    UART_Send_HEX( LIN_DATA[7], 1 );
                    UART_Send_HEX( LIN_DATA[6], 0 );
                    break;

            case 0xB3:                      // Conditional change NAD
                    UART_Send_Word( " Conditional change NAD request:", 32 );
                    UART_Send_CRLF();
                    UART_Send_Word( "       ID: ", 11 );
                    UART_Send_DEC( LIN_DATA[3], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "     Byte: ", 11 );
                    UART_Send_HEX( LIN_DATA[4], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "     Mask: ", 11 );
                    UART_Send_HEX( LIN_DATA[5], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "   Invert: ", 11 );
                    UART_Send_HEX( LIN_DATA[6], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  New NAD: ", 11 );
                    UART_Send_DEC( LIN_DATA[7], 1 );
                    break;

            case 0xB4:                      // Data dump
                    UART_Send_Word( " Data dump request:", 19 );
                    UART_Send_CRLF();
                    for ( i=0; i<5 ;i++ )
                    {
                        UART_Send_Word( "  D", 3 );
                        UART_Send_DEC( i+1, 0 );
                        UART_Send_Word( ": ", 2 );
                        UART_Send_HEX( LIN_DATA[i+3], 1 );
                        UART_Send_CRLF();
                    }
                    break;

            default:                            // Unknown SID
                    UART_Send_Word( " Unknown SID Type", 17 );
                    break;
        }
        UART_Send_CRLF();
    }
    if ( LIN_IDENTIFIER == 0x3D || LIN_DATA[2] == 0xF2 )    // Slave
    {
        switch ( LIN_DATA[2] )
        {
            case 0xF0:                      // Assign NAD
                    UART_Send_Word( " Assign NAD response", 20 );
                    UART_Send_CRLF();
                    break;

            case 0xF1:                      // Assign frame ID
                    UART_Send_Word( " Assign frame ID response", 25 );
                    UART_Send_CRLF();
                    break;

            case 0xF2:                      // Read by identifier request
                    UART_Send_Word( " Read by ID response:", 21 );
                    UART_Send_CRLF();
                    if ( LIN_IDENTIFIER == 0 )
                    {
                        UART_Send_Word( "  LIN Product Identification", 28 );
                        UART_Send_CRLF();
                        UART_Send_Word( "   Supplier ID: ", 16 );
                        UART_Send_HEX( LIN_DATA[4], 1 );
                        UART_Send_HEX( LIN_DATA[3], 0 );
                        UART_Send_CRLF();
                        UART_Send_Word( "   Function ID: ", 16 );
                        UART_Send_HEX( LIN_DATA[6], 1 );
                        UART_Send_HEX( LIN_DATA[5], 0 );
                        UART_Send_CRLF();
                        UART_Send_Word( "       Variant: ", 16 );
                        UART_Send_DEC( LIN_DATA[7], 1 );
                    }
                    else if ( LIN_IDENTIFIER == 1 )
                    {
                        UART_Send_Word( "  Serial number: ", 17 );
                        UART_Send_HEX( LIN_DATA[6], 1 );
                        UART_Send_HEX( LIN_DATA[5], 0 );
                        UART_Send_HEX( LIN_DATA[4], 0 );
                        UART_Send_HEX( LIN_DATA[3], 0 );
                    }
                    else if ( LIN_IDENTIFIER < 16 )
                        UART_Send_Word( "  Reserved Identifier", 21 );
                    else if ( LIN_IDENTIFIER < 32 )
                    {
                        UART_Send_Word( "  Message ID ", 13 );
                        UART_Send_DEC( LIN_IDENTIFIER - 15, 1 );
                        UART_Send_Word( ": ", 2);
                        UART_Send_HEX( LIN_DATA[4], 1);
                        UART_Send_HEX( LIN_DATA[3], 0);
                        if ( LIN_DATA[5] != 0xFF )
                        {
                            UART_Send_CRLF();
                            UART_Send_Word( "   Protected ID: ", 17);
                            UART_Send_HEX( LIN_DATA[5], 1);
                        }
                    }
                    else if ( LIN_IDENTIFIER < 64 )
                        UART_Send_Word( "  User definied data", 20 );
                    else
                        UART_Send_Word( "  Reserved Identifier", 21 );
                    break;

            case 0xF3:                      // Conditional change NAD
                    UART_Send_Word( " Conditional change NAD response", 32 );
                    UART_Send_CRLF();
                    break;

            case 0xF4:                      // Data dump
                    UART_Send_Word( " Data dump response", 19 );
                    UART_Send_CRLF();
                    break;

            case 0x7F:
                    UART_Send_Word( " Negative response:", 19 );
                    UART_Send_CRLF();
                    UART_Send_Word( "  Requested SID: ", 17 );
                    UART_Send_HEX( LIN_DATA[3], 1 );
                    UART_Send_CRLF();
                    UART_Send_Word( "     Error code: ", 17 );
                    UART_Send_HEX( LIN_DATA[4], 1 );
                    break;
            default:                            // Unknown RSID
                    UART_Send_Word( " Unknown RSID Type", 18 );
                    break;
        }
        UART_Send_CRLF();
    }
    UART_Send_CRLF();
}


//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?