ip2trace.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*******************************************************************************
  2. *
  3. *   (c) 1998 by Computone Corporation
  4. *
  5. ********************************************************************************
  6. *
  7. *
  8. *   PACKAGE:     Linux tty Device Driver for IntelliPort family of multiport
  9. *                serial I/O controllers.
  10. *
  11. *   DESCRIPTION: Interpretive trace dump utility
  12. *
  13. *******************************************************************************/
  14. #include <sys/time.h>
  15. #include <sys/types.h>
  16. #include <unistd.h>
  17. #include <stdio.h>
  18. #include <signal.h>
  19. #include <sys/stat.h>
  20. #include <fcntl.h>
  21. #include <ctype.h>
  22. #include "ip2trace.h"
  23. unsigned long namebuf[100];
  24. struct { 
  25. int wrap,
  26. size,
  27. o_strip,
  28. o_stuff,
  29. strip,
  30. stuff;
  31. unsigned long buf[1000];
  32. } tbuf;
  33. struct sigaction act;
  34. typedef enum { kChar, kInt, kAddr, kHex } eFormat;
  35. int active = 1;
  36. void quit() { active = 0; }
  37. int main (int argc, char *argv[])
  38. {
  39.    int   fd = open ( "/dev/ip2trace", O_RDONLY );
  40.    int   cnt, i;
  41. unsigned long ts, td;
  42.    struct timeval timeout;
  43.    union ip2breadcrumb bc;
  44. eFormat fmt = kHex;
  45.    if ( fd < 0 )
  46.    {
  47.       printf ( "Can't open device /dev/ip2tracen" );
  48.       exit ( 1 );
  49.    }
  50.    act.sa_handler = quit;
  51.    /*act.sa_mask = 0;*/
  52. sigemptyset(&act.sa_mask);
  53.    act.sa_flags = 0;
  54.    act.sa_restorer = NULL;
  55.    sigaction ( SIGTERM, &act, NULL );
  56. ioctl ( fd,  1, namebuf );
  57. printf ( "iiSendPendingMail %pn",        namebuf[0] );
  58. printf ( "i2InitChannels %pn",           namebuf[1] );
  59. printf ( "i2QueueNeeds %pn",             namebuf[2] );
  60. printf ( "i2QueueCommands %pn",          namebuf[3] );
  61. printf ( "i2GetStatus %pn",              namebuf[4] );
  62. printf ( "i2Input %pn",                  namebuf[5] );
  63. printf ( "i2InputFlush %pn",             namebuf[6] );
  64. printf ( "i2Output %pn",                 namebuf[7] );
  65. printf ( "i2FlushOutput %pn",            namebuf[8] );
  66. printf ( "i2DrainWakeup %pn",            namebuf[9] );
  67. printf ( "i2DrainOutput %pn",            namebuf[10] );
  68. printf ( "i2OutputFree %pn",             namebuf[11] );
  69. printf ( "i2StripFifo %pn",              namebuf[12] );
  70. printf ( "i2StuffFifoBypass %pn",        namebuf[13] );
  71. printf ( "i2StuffFifoFlow %pn",          namebuf[14] );
  72. printf ( "i2StuffFifoInline %pn",        namebuf[15] );
  73. printf ( "i2ServiceBoard %pn",           namebuf[16] );
  74. printf ( "serviceOutgoingFifo %pn",      namebuf[17] );
  75. printf ( "ip2_init %pn",                 namebuf[18] ); 
  76. printf ( "ip2_init_board %pn",           namebuf[19] ); 
  77. printf ( "find_eisa_board %pn",          namebuf[20] );  
  78. printf ( "set_irq %pn",                  namebuf[21] );  
  79. printf ( "ex_details %pn",               namebuf[22] );  
  80. printf ( "ip2_interrupt %pn",            namebuf[23] );  
  81. printf ( "ip2_poll %pn",                 namebuf[24] );  
  82. printf ( "service_all_boards %pn",        namebuf[25] );  
  83. printf ( "do_input %pn",                 namebuf[27] );  
  84. printf ( "do_status %pn",                namebuf[26] );  
  85. printf ( "open_sanity_check %pn",        namebuf[27] );  
  86. printf ( "open_block_til_ready %pn",     namebuf[28] );   
  87. printf ( "ip2_open %pn",                 namebuf[29] );  
  88. printf ( "ip2_close %pn",                namebuf[30] );  
  89. printf ( "ip2_hangup %pn",               namebuf[31] );  
  90. printf ( "ip2_write %pn",                namebuf[32] );  
  91. printf ( "ip2_putchar %pn",              namebuf[33] );  
  92. printf ( "ip2_flush_chars %pn",          namebuf[34] );  
  93. printf ( "ip2_write_room %pn",           namebuf[35] );  
  94. printf ( "ip2_chars_in_buf %pn",         namebuf[36] );  
  95. printf ( "ip2_flush_buffer %pn",         namebuf[37] );  
  96. //printf ( "ip2_wait_until_sent %pn",      namebuf[38] );  
  97. printf ( "ip2_throttle %pn",             namebuf[39] );  
  98. printf ( "ip2_unthrottle %pn",           namebuf[40] );  
  99. printf ( "ip2_ioctl %pn",                namebuf[41] );  
  100. printf ( "get_modem_info %pn",           namebuf[42] );  
  101. printf ( "set_modem_info %pn",           namebuf[43] );  
  102. printf ( "get_serial_info %pn",          namebuf[44] );  
  103. printf ( "set_serial_info %pn",          namebuf[45] );  
  104. printf ( "ip2_set_termios %pn",          namebuf[46] );  
  105. printf ( "ip2_set_line_discipline %pn",  namebuf[47] );  
  106. printf ( "set_line_characteristics %pn", namebuf[48] );  
  107. printf("n-------------------------n");
  108. printf("Start of tracen");
  109.    while ( active ) {
  110.       cnt = read ( fd, &tbuf, sizeof tbuf );
  111.       if ( cnt ) {
  112.          if ( tbuf.wrap ) {
  113.             printf ( "nTrace buffer: wrap=%d, strip=%d, stuff=%dn",
  114.                      tbuf.wrap, tbuf.strip, tbuf.stuff );
  115.          }
  116.          for ( i = 0, bc.value = 0; i < cnt; ++i ) {
  117. if ( !bc.hdr.codes ) {
  118. td = tbuf.buf[i] - ts;
  119. ts = tbuf.buf[i++];
  120. bc.value = tbuf.buf[i];
  121. printf ( "n(%d) Port %3d ", ts, bc.hdr.port );
  122. fmt = kHex;
  123. switch ( bc.hdr.cat )
  124. {
  125. case ITRC_INIT:
  126. printf ( "Init       %d: ", bc.hdr.label );
  127. break;
  128. case ITRC_OPEN:
  129. printf ( "Open       %d: ", bc.hdr.label );
  130. break;
  131. case ITRC_CLOSE:
  132. printf ( "Close      %d: ", bc.hdr.label );
  133. break;
  134. case ITRC_DRAIN:
  135. printf ( "Drain      %d: ", bc.hdr.label );
  136. fmt = kInt;
  137. break;
  138. case ITRC_IOCTL:
  139. printf ( "Ioctl      %d: ", bc.hdr.label );
  140. break;
  141. case ITRC_FLUSH:
  142. printf ( "Flush      %d: ", bc.hdr.label );
  143. break;
  144. case ITRC_STATUS:
  145. printf ( "GetS       %d: ", bc.hdr.label );
  146. break;
  147. case ITRC_HANGUP:
  148. printf ( "Hangup     %d: ", bc.hdr.label );
  149. break;
  150. case ITRC_INTR:
  151. printf ( "*Intr      %d: ", bc.hdr.label );
  152. break;
  153. case ITRC_SFLOW:
  154. printf ( "SFlow      %d: ", bc.hdr.label );
  155. fmt = kInt;
  156. break;
  157. case ITRC_SBCMD:
  158. printf ( "Bypass CMD %d: ", bc.hdr.label );
  159. fmt = kInt;
  160. break;
  161. case ITRC_SICMD:
  162. printf ( "Inline CMD %d: ", bc.hdr.label );
  163. fmt = kInt;
  164. break;
  165. case ITRC_MODEM:
  166. printf ( "Modem      %d: ", bc.hdr.label );
  167. break;
  168. case ITRC_INPUT:
  169. printf ( "Input      %d: ", bc.hdr.label );
  170. break;
  171. case ITRC_OUTPUT:
  172. printf ( "Output     %d: ", bc.hdr.label );
  173. fmt = kInt;
  174. break;
  175. case ITRC_PUTC:
  176. printf ( "Put char   %d: ", bc.hdr.label );
  177. fmt = kChar;
  178. break;
  179. case ITRC_QUEUE:
  180. printf ( "Queue CMD  %d: ", bc.hdr.label );
  181. fmt = kInt;
  182. break;
  183. case ITRC_STFLW:
  184. printf ( "Stat Flow  %d: ", bc.hdr.label );
  185. fmt = kInt;
  186. break;
  187. case ITRC_SFIFO:
  188. printf ( "SFifo      %d: ", bc.hdr.label );
  189. break;
  190. case ITRC_VERIFY:
  191. printf ( "Verfy      %d: ", bc.hdr.label );
  192. fmt = kHex;
  193. break;
  194. case ITRC_WRITE:
  195. printf ( "Write      %d: ", bc.hdr.label );
  196. fmt = kChar;
  197. break;
  198. case ITRC_ERROR:
  199. printf ( "ERROR      %d: ", bc.hdr.label );
  200. fmt = kInt;
  201. break;
  202. default:
  203. printf ( "%08x          ", tbuf.buf[i] );
  204. break;
  205. }
  206. }
  207. else 
  208. {
  209.                --bc.hdr.codes;
  210. switch ( fmt )
  211. {
  212. case kChar:
  213. printf ( "%c (0x%02x) ", 
  214. isprint ( tbuf.buf[i] ) ? tbuf.buf[i] : '.', tbuf.buf[i] );
  215. break;
  216. case kInt:
  217. printf ( "%d ", tbuf.buf[i] );
  218. break;
  219. case kAddr:
  220. case kHex:
  221. printf ( "0x%x ", tbuf.buf[i] );
  222. break;
  223. }
  224. }
  225.          }
  226.       }
  227.       fflush ( stdout );
  228.       timeout.tv_sec = 0;
  229.       timeout.tv_usec = 250;
  230.       select ( 0, NULL, NULL, NULL, &timeout );
  231.    }
  232. printf("n-------------------------n");
  233. printf("End of tracen");
  234.    close ( fd );
  235. }