A Wireshark Sniffer Software for xbed Lpc1768

Dependencies:   MxRadioRF2xx Queue mbed

Fork of MxSniffer by Fred Qian

Committer:
fredqian
Date:
Thu Apr 09 09:44:42 2015 +0000
Revision:
0:63b823e4d493
init commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }