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
main.cpp@5:76d46f565551, 2012-09-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |