Serial UART snooper. Connect RX and TX of the UUT to 2 x RX pins on mbed to inspect the traffic in both directions

Dependencies:   MODSERIAL Terminal mbed

Committer:
cbayley
Date:
Thu Aug 02 21:23:04 2012 +0000
Revision:
3:b8bad606d4f2
Parent:
2:60e6df8211f2
Version 2.6; Got buffering right  - none on input and plenty on output. bytes are fed into 'Stripes'  on input interrupts and Stripes are queued for output.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cbayley 2:60e6df8211f2 1 #include <stdio.h>
cbayley 2:60e6df8211f2 2 #include <stdlib.h>
cbayley 2:60e6df8211f2 3 #include <stdarg.h>
cbayley 2:60e6df8211f2 4 #include "stripe.h"
cbayley 2:60e6df8211f2 5 #include "mbed.h"
cbayley 2:60e6df8211f2 6
cbayley 2:60e6df8211f2 7 #define sprintf mysprintf
cbayley 2:60e6df8211f2 8
cbayley 2:60e6df8211f2 9 int mysprintf( char * str, const char * format, ... )
cbayley 2:60e6df8211f2 10 {
cbayley 2:60e6df8211f2 11 char s[50];
cbayley 2:60e6df8211f2 12 va_list ap;
cbayley 2:60e6df8211f2 13
cbayley 2:60e6df8211f2 14 va_start(ap,format);
cbayley 2:60e6df8211f2 15 vsprintf(s,format,ap);
cbayley 2:60e6df8211f2 16 va_end(ap);
cbayley 2:60e6df8211f2 17
cbayley 2:60e6df8211f2 18 strncpy(str,s,strlen(s));
cbayley 2:60e6df8211f2 19 return strlen(s);
cbayley 2:60e6df8211f2 20 }
cbayley 2:60e6df8211f2 21
cbayley 2:60e6df8211f2 22 Stripe::Stripe( uint8_t bc, uint8_t oc, uint8_t ic )
cbayley 2:60e6df8211f2 23 {
cbayley 2:60e6df8211f2 24
cbayley 2:60e6df8211f2 25 memset((void*)&(this->strip),0x20,sizeof(Strip));
cbayley 2:60e6df8211f2 26 sprintf(this->strip.bgc, "\033[48;5;%03um", bc );
cbayley 2:60e6df8211f2 27 sprintf(this->strip.row[0].fgc, "\033[38;5;%03um", oc );
cbayley 2:60e6df8211f2 28 sprintf(this->strip.row[1].fgc, "\033[38;5;%03um", ic );
cbayley 2:60e6df8211f2 29 sprintf(this->strip.row[0].eol, "\n\r" );
cbayley 2:60e6df8211f2 30 sprintf(this->strip.row[1].eol, "\n\r" );
cbayley 2:60e6df8211f2 31 this->wp = 0;
cbayley 2:60e6df8211f2 32 this->rp =0;
cbayley 2:60e6df8211f2 33
cbayley 2:60e6df8211f2 34 }
cbayley 2:60e6df8211f2 35
cbayley 2:60e6df8211f2 36
cbayley 2:60e6df8211f2 37 int Stripe::advance( void )
cbayley 2:60e6df8211f2 38 {
cbayley 3:b8bad606d4f2 39 if ( ++ wp >= 16 )
cbayley 2:60e6df8211f2 40 return 0;
cbayley 2:60e6df8211f2 41 else
cbayley 2:60e6df8211f2 42 return 1;
cbayley 2:60e6df8211f2 43 }
cbayley 2:60e6df8211f2 44
cbayley 2:60e6df8211f2 45 int Stripe::inbyte( uint8_t b )
cbayley 2:60e6df8211f2 46 {
cbayley 3:b8bad606d4f2 47 sprintf(&strip.row[1].hex[wp*3], "%02X ", b );
cbayley 2:60e6df8211f2 48
cbayley 2:60e6df8211f2 49 if (b >=0x20 && b<=0x80)
cbayley 2:60e6df8211f2 50 {
cbayley 3:b8bad606d4f2 51 strip.row[1].asc[wp] = b;
cbayley 2:60e6df8211f2 52 }else{
cbayley 3:b8bad606d4f2 53 strip.row[1].asc[wp] = '.';
cbayley 2:60e6df8211f2 54 }
cbayley 3:b8bad606d4f2 55 return advance();
cbayley 2:60e6df8211f2 56 }
cbayley 2:60e6df8211f2 57
cbayley 2:60e6df8211f2 58 int Stripe::outbyte( uint8_t b )
cbayley 2:60e6df8211f2 59 {
cbayley 3:b8bad606d4f2 60 sprintf(&strip.row[0].hex[wp*3], "%02X ", b );
cbayley 2:60e6df8211f2 61
cbayley 2:60e6df8211f2 62 if (b >=0x20 && b<=0x80)
cbayley 2:60e6df8211f2 63 {
cbayley 3:b8bad606d4f2 64 strip.row[0].asc[wp] = b;
cbayley 2:60e6df8211f2 65 }else{
cbayley 3:b8bad606d4f2 66 strip.row[0].asc[wp] = '.';
cbayley 2:60e6df8211f2 67 }
cbayley 3:b8bad606d4f2 68 return advance();
cbayley 2:60e6df8211f2 69 }
cbayley 2:60e6df8211f2 70
cbayley 3:b8bad606d4f2 71 uint8_t Stripe::getc( void )
cbayley 2:60e6df8211f2 72 {
cbayley 2:60e6df8211f2 73 char c;
cbayley 2:60e6df8211f2 74
cbayley 3:b8bad606d4f2 75 while ( rp < sizeof(strip) )
cbayley 2:60e6df8211f2 76 {
cbayley 3:b8bad606d4f2 77 c = ((char*)(&strip))[rp++];
cbayley 2:60e6df8211f2 78 if (c)
cbayley 2:60e6df8211f2 79 return c;
cbayley 2:60e6df8211f2 80 }
cbayley 2:60e6df8211f2 81 return 0;
cbayley 2:60e6df8211f2 82 }