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 Sep 20 21:57:21 2012 +0000
Revision:
5:76d46f565551
Parent:
4:15064c0a5b00
using my fork of Simon Ford Terminal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cbayley 0:cb9d37ec851e 1 // Relay bytes received as SPI slave to PC-USB-Serial
cbayley 0:cb9d37ec851e 2
cbayley 2:60e6df8211f2 3 #include <string>
cbayley 0:cb9d37ec851e 4 #include "mbed.h"
cbayley 3:b8bad606d4f2 5 //#include "Terminal.h"
cbayley 0:cb9d37ec851e 6 #include "MODSERIAL.h"
cbayley 2:60e6df8211f2 7 #include "stripe.h"
cbayley 3:b8bad606d4f2 8 #include "TinyQueue.h"
cbayley 0:cb9d37ec851e 9
cbayley 2:60e6df8211f2 10
cbayley 3:b8bad606d4f2 11 MODSERIAL pc(USBTX,NC,4096);
cbayley 4:15064c0a5b00 12 Serial wt(NC,p10);
cbayley 4:15064c0a5b00 13 Serial r8(NC,p14);
cbayley 3:b8bad606d4f2 14
cbayley 0:cb9d37ec851e 15 DigitalOut ledCTS(LED1);
cbayley 0:cb9d37ec851e 16 DigitalOut ledRTS(LED2);
cbayley 0:cb9d37ec851e 17 //DigitalOut ledOV(LED4);
cbayley 0:cb9d37ec851e 18 Timeout toCTSLed;
cbayley 0:cb9d37ec851e 19 Timeout toRTSLed;
cbayley 3:b8bad606d4f2 20 Timeout icto;
cbayley 0:cb9d37ec851e 21 /*InterruptIn nCTS(p11);
cbayley 0:cb9d37ec851e 22 InterruptIn nRTS(p12);
cbayley 0:cb9d37ec851e 23 */
cbayley 0:cb9d37ec851e 24 DigitalIn nCTS(p18);
cbayley 0:cb9d37ec851e 25 DigitalIn nRTS(p19);
cbayley 2:60e6df8211f2 26 tinyQ_t outQ;
cbayley 0:cb9d37ec851e 27
cbayley 0:cb9d37ec851e 28 #define BAUD (115200)
cbayley 0:cb9d37ec851e 29
cbayley 3:b8bad606d4f2 30
cbayley 3:b8bad606d4f2 31 Stripe * pStripe;
cbayley 0:cb9d37ec851e 32
cbayley 3:b8bad606d4f2 33 Stripe* newStripe()
cbayley 3:b8bad606d4f2 34 {
cbayley 3:b8bad606d4f2 35 static char alt;
cbayley 3:b8bad606d4f2 36 return new Stripe(249+(alt++%2)*4,124,19);
cbayley 3:b8bad606d4f2 37 }
cbayley 2:60e6df8211f2 38
cbayley 0:cb9d37ec851e 39 void offCTSLed(void)
cbayley 0:cb9d37ec851e 40 {
cbayley 0:cb9d37ec851e 41 ledCTS = 0;
cbayley 0:cb9d37ec851e 42 }
cbayley 0:cb9d37ec851e 43
cbayley 0:cb9d37ec851e 44 void onCTSLed(void)
cbayley 0:cb9d37ec851e 45 {
cbayley 0:cb9d37ec851e 46 ledCTS = 1;
cbayley 0:cb9d37ec851e 47 toCTSLed.attach(offCTSLed,0.1);
cbayley 0:cb9d37ec851e 48 }
cbayley 0:cb9d37ec851e 49
cbayley 0:cb9d37ec851e 50 void offRTSLed(void)
cbayley 0:cb9d37ec851e 51 {
cbayley 0:cb9d37ec851e 52 ledRTS = 0;
cbayley 0:cb9d37ec851e 53 }
cbayley 0:cb9d37ec851e 54
cbayley 0:cb9d37ec851e 55 void onRTSLed(void)
cbayley 0:cb9d37ec851e 56 {
cbayley 0:cb9d37ec851e 57 ledRTS = 1;
cbayley 0:cb9d37ec851e 58 toRTSLed.attach(offRTSLed,0.1);
cbayley 0:cb9d37ec851e 59 }
cbayley 0:cb9d37ec851e 60
cbayley 0:cb9d37ec851e 61 void ctsFall(void)
cbayley 0:cb9d37ec851e 62 {
cbayley 0:cb9d37ec851e 63 onCTSLed();
cbayley 0:cb9d37ec851e 64 }
cbayley 0:cb9d37ec851e 65
cbayley 0:cb9d37ec851e 66 void rtsFall(void)
cbayley 0:cb9d37ec851e 67 {
cbayley 0:cb9d37ec851e 68 onRTSLed();
cbayley 0:cb9d37ec851e 69 }
cbayley 0:cb9d37ec851e 70
cbayley 3:b8bad606d4f2 71 /* flush Stripes after no activity */
cbayley 3:b8bad606d4f2 72 void flush( void )
cbayley 3:b8bad606d4f2 73 {
cbayley 4:15064c0a5b00 74 Qpush(&outQ, (void*)pStripe);
cbayley 4:15064c0a5b00 75 pStripe = newStripe();
cbayley 3:b8bad606d4f2 76 }
cbayley 3:b8bad606d4f2 77
cbayley 0:cb9d37ec851e 78 // This function is called when a character goes into the RX buffer.
cbayley 3:b8bad606d4f2 79 void rxCallbackWT(void) {
cbayley 3:b8bad606d4f2 80 if ( ! pStripe->inbyte(wt.getc()) )
cbayley 3:b8bad606d4f2 81 {
cbayley 3:b8bad606d4f2 82 Qpush(&outQ, (void*)pStripe);
cbayley 3:b8bad606d4f2 83 pStripe = newStripe();
cbayley 3:b8bad606d4f2 84 }
cbayley 3:b8bad606d4f2 85 icto.attach(flush,0.5);
cbayley 0:cb9d37ec851e 86 }
cbayley 3:b8bad606d4f2 87
cbayley 3:b8bad606d4f2 88 void rxCallbackR8(void) {
cbayley 3:b8bad606d4f2 89 if ( ! pStripe->outbyte(r8.getc()) )
cbayley 3:b8bad606d4f2 90 {
cbayley 3:b8bad606d4f2 91 Qpush(&outQ, (void*)pStripe);
cbayley 3:b8bad606d4f2 92 pStripe = newStripe();
cbayley 3:b8bad606d4f2 93 }
cbayley 4:15064c0a5b00 94 //icto.attach(flush,0.5);
cbayley 0:cb9d37ec851e 95 }
cbayley 0:cb9d37ec851e 96
cbayley 0:cb9d37ec851e 97 int main()
cbayley 0:cb9d37ec851e 98 {
cbayley 0:cb9d37ec851e 99 char c=0;
cbayley 3:b8bad606d4f2 100
cbayley 0:cb9d37ec851e 101 pc.baud(BAUD);
cbayley 0:cb9d37ec851e 102 wt.baud(BAUD);
cbayley 0:cb9d37ec851e 103 r8.baud(BAUD);
cbayley 2:60e6df8211f2 104
cbayley 4:15064c0a5b00 105 //nCTS.mode(PullUp);
cbayley 4:15064c0a5b00 106 //nRTS.mode(PullUp);
cbayley 4:15064c0a5b00 107
cbayley 3:b8bad606d4f2 108
cbayley 3:b8bad606d4f2 109 wt.attach(&rxCallbackWT, Serial::RxIrq);
cbayley 3:b8bad606d4f2 110 r8.attach(&rxCallbackR8, Serial::RxIrq);
cbayley 0:cb9d37ec851e 111
cbayley 1:2ca85ee43b49 112 pc.printf("==== Snoop dog ready... ===\n");
cbayley 2:60e6df8211f2 113
cbayley 3:b8bad606d4f2 114 pStripe = newStripe();
cbayley 0:cb9d37ec851e 115
cbayley 0:cb9d37ec851e 116 while(1)
cbayley 0:cb9d37ec851e 117 {
cbayley 3:b8bad606d4f2 118 Stripe * pStripe;
cbayley 0:cb9d37ec851e 119
cbayley 3:b8bad606d4f2 120 if ( Qpop(&outQ,(void**)&pStripe) )
cbayley 0:cb9d37ec851e 121 {
cbayley 3:b8bad606d4f2 122 while ( c = pStripe->getc() )
cbayley 3:b8bad606d4f2 123 pc.putc(c);
cbayley 1:2ca85ee43b49 124
cbayley 3:b8bad606d4f2 125 delete pStripe;
cbayley 1:2ca85ee43b49 126 }
cbayley 0:cb9d37ec851e 127 }
cbayley 1:2ca85ee43b49 128 }