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 + -
显示快捷键?