A Wireshark Sniffer Software for xbed Lpc1768
Dependencies: MxRadioRF2xx Queue mbed
Fork of MxSniffer by
main.cpp@0:63b823e4d493, 2015-04-09 (annotated)
- Committer:
- fredqian
- Date:
- Thu Apr 09 09:44:42 2015 +0000
- Revision:
- 0:63b823e4d493
init commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fredqian | 0:63b823e4d493 | 1 | #include"MxRadio.h" |
fredqian | 0:63b823e4d493 | 2 | #include"Queue.h" |
fredqian | 0:63b823e4d493 | 3 | DigitalOut myled1(LED1); |
fredqian | 0:63b823e4d493 | 4 | DigitalOut myled2(LED2); |
fredqian | 0:63b823e4d493 | 5 | DigitalOut myled3(LED3); |
fredqian | 0:63b823e4d493 | 6 | Serial pc(USBTX,USBRX); |
fredqian | 0:63b823e4d493 | 7 | cMxRadio MxRadio(P0_18, P0_17, P0_15, P0_20, P2_11,P2_12, P2_13); |
fredqian | 0:63b823e4d493 | 8 | DigitalOut led1(LED1); |
fredqian | 0:63b823e4d493 | 9 | DigitalOut led2(LED2); |
fredqian | 0:63b823e4d493 | 10 | DigitalOut led3(LED3); |
fredqian | 0:63b823e4d493 | 11 | DigitalOut led4(LED4); |
fredqian | 0:63b823e4d493 | 12 | #define CURRENTCHAN 11 |
fredqian | 0:63b823e4d493 | 13 | #define BAUDRATE 38400 |
fredqian | 0:63b823e4d493 | 14 | |
fredqian | 0:63b823e4d493 | 15 | static QUEUE rxqueue=QUEUE(); |
fredqian | 0:63b823e4d493 | 16 | static char sniffercount=0; |
fredqian | 0:63b823e4d493 | 17 | uint8_t i; |
fredqian | 0:63b823e4d493 | 18 | uint8_t currentchan; |
fredqian | 0:63b823e4d493 | 19 | Timer mytimer; |
fredqian | 0:63b823e4d493 | 20 | |
fredqian | 0:63b823e4d493 | 21 | char usrcmd='p'; |
fredqian | 0:63b823e4d493 | 22 | char usrcmd2='p'; |
fredqian | 0:63b823e4d493 | 23 | void setLed(char value) |
fredqian | 0:63b823e4d493 | 24 | { |
fredqian | 0:63b823e4d493 | 25 | led1=!led1; |
fredqian | 0:63b823e4d493 | 26 | led2=sniffercount % 2; |
fredqian | 0:63b823e4d493 | 27 | led3=(sniffercount / 2) % 2; |
fredqian | 0:63b823e4d493 | 28 | led4=(sniffercount / 4) % 2; |
fredqian | 0:63b823e4d493 | 29 | } |
fredqian | 0:63b823e4d493 | 30 | uint8_t* recievehandler(uint8_t len, uint8_t* frm, uint8_t lqi, int8_t ed,uint8_t crc_fail) |
fredqian | 0:63b823e4d493 | 31 | { |
fredqian | 0:63b823e4d493 | 32 | setLed(sniffercount++); |
fredqian | 0:63b823e4d493 | 33 | uint8_t packetindex=rxqueue.inqueue(); |
fredqian | 0:63b823e4d493 | 34 | if (packetindex==RFQUENEMAX) //maybe full |
fredqian | 0:63b823e4d493 | 35 | return frm; |
fredqian | 0:63b823e4d493 | 36 | rxqueue.RfData[packetindex].length=len; |
fredqian | 0:63b823e4d493 | 37 | memcpy(rxqueue.RfData[packetindex].rbuf,frm,len); |
fredqian | 0:63b823e4d493 | 38 | return frm; |
fredqian | 0:63b823e4d493 | 39 | } |
fredqian | 0:63b823e4d493 | 40 | void serialhandler() |
fredqian | 0:63b823e4d493 | 41 | { |
fredqian | 0:63b823e4d493 | 42 | led1=!led1; |
fredqian | 0:63b823e4d493 | 43 | usrcmd=pc.getc(); |
fredqian | 0:63b823e4d493 | 44 | if(usrcmd=='p')//parms |
fredqian | 0:63b823e4d493 | 45 | { |
fredqian | 0:63b823e4d493 | 46 | MxRadio.setState(STATE_OFF,true); |
fredqian | 0:63b823e4d493 | 47 | pc.printf("channel:%d\n",currentchan); |
fredqian | 0:63b823e4d493 | 48 | wait_ms(500); |
fredqian | 0:63b823e4d493 | 49 | MxRadio.begin(currentchan); |
fredqian | 0:63b823e4d493 | 50 | } |
fredqian | 0:63b823e4d493 | 51 | else//-chan |
fredqian | 0:63b823e4d493 | 52 | { |
fredqian | 0:63b823e4d493 | 53 | if (usrcmd2!='p') |
fredqian | 0:63b823e4d493 | 54 | { |
fredqian | 0:63b823e4d493 | 55 | MxRadio.setState(STATE_OFF,true); |
fredqian | 0:63b823e4d493 | 56 | currentchan=usrcmd-'0'+(usrcmd2-'0')*10; //toiny |
fredqian | 0:63b823e4d493 | 57 | pc.printf("channel:%d\n",currentchan); |
fredqian | 0:63b823e4d493 | 58 | wait_ms(500); |
fredqian | 0:63b823e4d493 | 59 | MxRadio.begin(currentchan); |
fredqian | 0:63b823e4d493 | 60 | usrcmd2='p'; |
fredqian | 0:63b823e4d493 | 61 | return; |
fredqian | 0:63b823e4d493 | 62 | } |
fredqian | 0:63b823e4d493 | 63 | } |
fredqian | 0:63b823e4d493 | 64 | usrcmd2=usrcmd; |
fredqian | 0:63b823e4d493 | 65 | } |
fredqian | 0:63b823e4d493 | 66 | int main() |
fredqian | 0:63b823e4d493 | 67 | { |
fredqian | 0:63b823e4d493 | 68 | currentchan=CURRENTCHAN; |
fredqian | 0:63b823e4d493 | 69 | pc.baud(BAUDRATE); |
fredqian | 0:63b823e4d493 | 70 | pc.attach(&serialhandler); |
fredqian | 0:63b823e4d493 | 71 | rxqueue.init_queue(); |
fredqian | 0:63b823e4d493 | 72 | pc.printf("MxSniffer 1.0 for 802.15.4\n"); |
fredqian | 0:63b823e4d493 | 73 | MxRadio.begin(currentchan); |
fredqian | 0:63b823e4d493 | 74 | MxRadio.attachReceiveFrame(recievehandler); |
fredqian | 0:63b823e4d493 | 75 | led2=led3=led4=1; |
fredqian | 0:63b823e4d493 | 76 | while (1) |
fredqian | 0:63b823e4d493 | 77 | { |
fredqian | 0:63b823e4d493 | 78 | uint8_t packdataindex_tx=rxqueue.dequeue(); |
fredqian | 0:63b823e4d493 | 79 | if (packdataindex_tx==RFQUENEMAX) //队列空 |
fredqian | 0:63b823e4d493 | 80 | continue ; |
fredqian | 0:63b823e4d493 | 81 | pc.putc(0x01); |
fredqian | 0:63b823e4d493 | 82 | pc.putc(rxqueue.RfData[packdataindex_tx].length+8); |
fredqian | 0:63b823e4d493 | 83 | unsigned long passedsecond=mytimer.read_ms()/1000; |
fredqian | 0:63b823e4d493 | 84 | unsigned long passedmillis=mytimer.read_ms()%1000; |
fredqian | 0:63b823e4d493 | 85 | pc.putc(passedsecond&0xff); |
fredqian | 0:63b823e4d493 | 86 | pc.putc((passedsecond>>8)&0xff); |
fredqian | 0:63b823e4d493 | 87 | pc.putc((passedsecond>>16)&0xff); |
fredqian | 0:63b823e4d493 | 88 | pc.putc((passedsecond>>24)&0xff); |
fredqian | 0:63b823e4d493 | 89 | pc.putc(passedmillis&0xff); |
fredqian | 0:63b823e4d493 | 90 | pc.putc((passedmillis>>8)&0xff); |
fredqian | 0:63b823e4d493 | 91 | pc.putc((passedmillis>>16)&0xff); |
fredqian | 0:63b823e4d493 | 92 | pc.putc((passedmillis>>24)&0xff); |
fredqian | 0:63b823e4d493 | 93 | for (int i=0;i<rxqueue.RfData[packdataindex_tx].length;i++) |
fredqian | 0:63b823e4d493 | 94 | pc.putc(rxqueue.RfData[packdataindex_tx].rbuf[i]); |
fredqian | 0:63b823e4d493 | 95 | pc.putc(0x04); |
fredqian | 0:63b823e4d493 | 96 | } |
fredqian | 0:63b823e4d493 | 97 | } |