📄 console-recording.c
字号:
/* * Copyright (c) 2000, National Research Council of Canada * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. */ /* CD2401 CONSOLE DRIVER DEBUG INFO RECORDING */#ifdef CD2401_RECORD_DEBUG_INFO/* Control individual recording here. That way, we don't clutter console.c */#define CD2401_RECORD_WRITE#define CD2401_RECORD_TX_ISR#define CD2401_RECORD_RX_ISR#define CD2401_RECORD_RE_ISR#define CD2401_RECORD_MODEM_ISR#define CD2401_RECORD_SET_ATTRIBUTE#define CD2401_RECORD_FIRST_OPEN#define CD2401_RECORD_LAST_CLOSE#define CD2401_RECORD_START_REMOTE_TX#define CD2401_RECORD_STOP_REMOTE_TX#define CD2401_RECORD_DRAIN_OUTPUT#define CD2401_RECORD_DELAY/* Call the data recording functions */#ifdef CD2401_RECORD_WRITE#define CD2401_RECORD_WRITE_INFO( args ) cd2401_record_write_info args#else#define CD2401_RECORD_WRITE_INFO( args )#endif#ifdef CD2401_RECORD_TX_ISR#define CD2401_RECORD_TX_ISR_INFO( args ) cd2401_record_tx_isr_info args#define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args ) cd2401_record_tx_isr_spurious_info args#define CD2401_RECORD_TX_ISR_BUSERR_INFO( args ) cd2401_record_tx_isr_buserr_info args#else#define CD2401_RECORD_TX_ISR_INFO( args )#define CD2401_RECORD_TX_ISR_SPURIOUS_INFO( args )#define CD2401_RECORD_TX_ISR_BUSERR_INFO( args )#endif#ifdef CD2401_RECORD_RX_ISR#define CD2401_RECORD_RX_ISR_INFO( args ) cd2401_record_rx_isr_info args#define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args ) cd2401_record_rx_isr_spurious_info args#else#define CD2401_RECORD_RX_ISR_INFO( args )#define CD2401_RECORD_RX_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_RE_ISR#define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args ) cd2401_record_re_isr_spurious_info args#else#define CD2401_RECORD_RE_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_MODEM_ISR#define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args ) cd2401_record_modem_isr_spurious_info args#else#define CD2401_RECORD_MODEM_ISR_SPURIOUS_INFO( args )#endif#ifdef CD2401_RECORD_SET_ATTRIBUTES#define CD2401_RECORD_SET_ATTRIBUTES_INFO( args ) cd2401_record_set_attributes_info args#else#define CD2401_RECORD_SET_ATTRIBUTES_INFO( args )#endif#ifdef CD2401_RECORD_FIRST_OPEN#define CD2401_RECORD_FIRST_OPEN_INFO( args ) cd2401_record_first_open_info args#else#define CD2401_RECORD_FIRST_OPEN_INFO( args )#endif#ifdef CD2401_RECORD_LAST_CLOSE#define CD2401_RECORD_LAST_CLOSE_INFO( args ) cd2401_record_last_close_info args#else#define CD2401_RECORD_LAST_CLOSE_INFO( args )#endif#ifdef CD2401_RECORD_START_REMOTE_TX#define CD2401_RECORD_START_REMOTE_TX_INFO( args ) cd2401_record_start_remote_tx_info args#else#define CD2401_RECORD_START_REMOTE_TX_INFO( args )#endif#ifdef CD2401_RECORD_STOP_REMOTE_TX#define CD2401_RECORD_STOP_REMOTE_TX_INFO( args ) cd2401_record_stop_remote_tx_info args#else#define CD2401_RECORD_STOP_REMOTE_TX_INFO( args )#endif#ifdef CD2401_RECORD_DRAIN_OUTPUT#define CD2401_RECORD_DRAIN_OUTPUT_INFO( args ) cd2401_record_drain_output_info args#else#define CD2401_RECORD_DRAIN_OUTPUT_INFO( args )#endif#ifdef CD2401_RECORD_DELAY#define CD2401_RECORD_DELAY_INFO( args ) cd2401_record_delay_info args#else#define CD2401_RECORD_DELAY_INFO( args )#endif/* Define the data and the recording functions */#define CD2401_DEBUG_BUFFER_SIZE 256#define CD2401_DEBUG_CHAR_BUFSIZE 64#define CD2401_WRITE_INFO 1#define CD2401_TX_ISR_INFO 2#define CD2401_TX_ISR_SPURIOUS_INFO 3#define CD2401_TX_ISR_BUSERR_INFO 4#define CD2401_RX_ISR_INFO 5#define CD2401_RX_ISR_SPURIOUS_INFO 6#define CD2401_RE_ISR_SPURIOUS_INFO 7#define CD2401_MODEM_ISR_SPURIOUS_INFO 8#define CD2401_FIRST_OPEN_INFO 9#define CD2401_LAST_CLOSE_INFO 10#define CD2401_START_REMOTE_TX_INFO 11#define CD2401_STOP_REMOTE_TX_INFO 12#define CD2401_SET_ATTRIBUTE_INFO 13#define CD2401_DRAIN_OUTPUT_INFO 14#define CD2401_DELAY_INFO 15struct cd2401_debug_info { short discriminant; short record_size; union { struct cd2401_write_info { int length; char buffer[CD2401_DEBUG_CHAR_BUFSIZE]; char dmabuf; } write_info; struct cd2401_tx_isr_info { unsigned char channel; unsigned char status; unsigned char initial_ier; unsigned char final_ier; rtems_unsigned8 txEmpty; } tx_isr_info; struct cd2401_tx_isr_spurious_info { unsigned char channel; unsigned char status; unsigned char initial_ier; unsigned char final_ier; unsigned long spurdev; unsigned long spurcount; } tx_isr_spurious_info; struct cd2401_tx_isr_buserr_info { unsigned char channel; unsigned char status; unsigned char initial_ier; unsigned char buserr; unsigned long type; unsigned long addr; } tx_isr_buserr_info; struct cd2401_rx_isr_info { unsigned char channel; int length; char buffer[CD2401_DEBUG_CHAR_BUFSIZE]; } rx_isr_info; struct cd2401_rx_isr_spurious_info { unsigned char channel; unsigned char status; unsigned long spurdev; unsigned long spurcount; } rx_isr_spurious_info; struct cd2401_re_isr_spurious_info { unsigned char channel; unsigned long spurdev; unsigned long spurcount; } re_isr_spurious_info; struct cd2401_modem_isr_spurious_info { unsigned char channel; unsigned long spurdev; unsigned long spurcount; } modem_isr_spurious_info; struct cd2401_first_open_info { unsigned char channel; rtems_unsigned8 init_count; } first_open_info; struct cd2401_last_close_info { unsigned char channel; rtems_unsigned8 init_count; } last_close_info; struct cd2401_start_remote_tx_info { unsigned char channel; } start_remote_tx_info; struct cd2401_stop_remote_tx_info { unsigned char channel; } stop_remote_tx_info; struct cd2401_set_attribute_info { int minor; rtems_unsigned8 need_reinit; rtems_unsigned8 txEmpty; rtems_unsigned8 csize; rtems_unsigned8 cstopb; rtems_unsigned8 parodd; rtems_unsigned8 parenb; rtems_unsigned8 ignpar; rtems_unsigned8 inpck; rtems_unsigned8 hw_flow_ctl; rtems_unsigned8 sw_flow_ctl; rtems_unsigned8 extra_flow_ctl; rtems_unsigned8 icrnl; rtems_unsigned8 igncr; rtems_unsigned8 inlcr; rtems_unsigned8 brkint; rtems_unsigned8 ignbrk; rtems_unsigned8 parmrk; rtems_unsigned8 istrip; rtems_unsigned16 tx_period; rtems_unsigned16 rx_period; rtems_unsigned32 out_baud; rtems_unsigned32 in_baud; } set_attribute_info; struct cd2401_drain_output_info { rtems_unsigned8 txEmpty; rtems_unsigned8 own_buf_A; rtems_unsigned8 own_buf_B; } drain_output_info; struct cd2401_delay_info { rtems_interval start; rtems_interval end; rtems_interval current; unsigned long loop_count; } delay_info; } u;};struct cd2401_debug_info cd2401_debug_buffer[CD2401_DEBUG_BUFFER_SIZE];int cd2401_debug_index = 0;#include <string.h>int cd2401_get_record_size( int size){ /* Not the best way to do this */ return size + 4;} void cd2401_record_write_info( int len, const char * buf, char dmabuf){ int max_length; max_length = (len < CD2401_DEBUG_CHAR_BUFSIZE ) ? len : CD2401_DEBUG_CHAR_BUFSIZE; memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) ); cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_WRITE_INFO; cd2401_debug_buffer[cd2401_debug_index].record_size = cd2401_get_record_size( sizeof( struct cd2401_write_info ) ); cd2401_debug_buffer[cd2401_debug_index].u.write_info.length = len; memcpy ( &(cd2401_debug_buffer[cd2401_debug_index].u.write_info.buffer), buf, max_length ); cd2401_debug_buffer[cd2401_debug_index].u.write_info.dmabuf = dmabuf; cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;}void cd2401_record_tx_isr_info( unsigned char ch, unsigned char status, unsigned char initial_ier, unsigned char final_ier, rtems_unsigned8 txEmpty){ memset( &(cd2401_debug_buffer[cd2401_debug_index]), '\0', sizeof( struct cd2401_debug_info ) ); cd2401_debug_buffer[cd2401_debug_index].discriminant = CD2401_TX_ISR_INFO; cd2401_debug_buffer[cd2401_debug_index].record_size = cd2401_get_record_size( sizeof( struct cd2401_tx_isr_info ) ); cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.channel = ch; cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.status = status; cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.initial_ier = initial_ier; cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.final_ier = final_ier; cd2401_debug_buffer[cd2401_debug_index].u.tx_isr_info.txEmpty = txEmpty; cd2401_debug_index = (cd2401_debug_index + 1 ) % CD2401_DEBUG_BUFFER_SIZE;}void cd2401_record_tx_isr_spurious_info( unsigned char ch, unsigned char status, unsigned char initial_ier, unsigned char final_ier,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -