A Wireshark Sniffer Software for xbed Lpc1768

Dependencies:   MxRadioRF2xx Queue mbed

Fork of MxSniffer by Fred Qian

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include"MxRadio.h"
00002 #include"Queue.h"
00003 DigitalOut myled1(LED1);
00004 DigitalOut myled2(LED2);
00005 DigitalOut myled3(LED3);
00006 Serial pc(USBTX,USBRX);
00007 cMxRadio MxRadio(P0_18, P0_17, P0_15, P0_20, P2_11,P2_12, P2_13);
00008 DigitalOut led1(LED1);
00009 DigitalOut led2(LED2);
00010 DigitalOut led3(LED3);
00011 DigitalOut led4(LED4);
00012 #define CURRENTCHAN 11
00013 #define BAUDRATE 38400
00014 
00015 static QUEUE rxqueue=QUEUE();
00016 static char sniffercount=0;
00017 uint8_t i;
00018 uint8_t currentchan;
00019 Timer mytimer;
00020 
00021 char usrcmd='p';
00022 char usrcmd2='p';
00023 void setLed(char value)
00024 {
00025     led1=!led1;
00026     led2=sniffercount % 2;
00027     led3=(sniffercount / 2) % 2;
00028     led4=(sniffercount / 4) % 2;
00029 }
00030 uint8_t* recievehandler(uint8_t len, uint8_t* frm, uint8_t lqi, int8_t ed,uint8_t crc_fail)
00031 {
00032     setLed(sniffercount++);
00033     uint8_t packetindex=rxqueue.inqueue();
00034     if (packetindex==RFQUENEMAX) //maybe full
00035                         return frm;
00036     rxqueue.RfData[packetindex].length=len;
00037     memcpy(rxqueue.RfData[packetindex].rbuf,frm,len);
00038     return frm;
00039 }
00040 void serialhandler()
00041 {
00042     led1=!led1;
00043     usrcmd=pc.getc();
00044     if(usrcmd=='p')//parms
00045     {
00046                         MxRadio.setState(STATE_OFF,true);
00047                         pc.printf("channel:%d\n",currentchan);
00048                         wait_ms(500);
00049                         MxRadio.begin(currentchan);
00050     }
00051     else//-chan
00052     {
00053                         if (usrcmd2!='p')
00054                         {
00055                                             MxRadio.setState(STATE_OFF,true);
00056                                             currentchan=usrcmd-'0'+(usrcmd2-'0')*10; //toiny
00057                                             pc.printf("channel:%d\n",currentchan);
00058                                             wait_ms(500);
00059                                             MxRadio.begin(currentchan);
00060                                             usrcmd2='p';
00061                                             return;
00062                         }
00063     }
00064     usrcmd2=usrcmd;
00065 }
00066 int  main()
00067 {
00068     currentchan=CURRENTCHAN;
00069     pc.baud(BAUDRATE);
00070     pc.attach(&serialhandler);
00071     rxqueue.init_queue();
00072     pc.printf("MxSniffer 1.0 for 802.15.4\n");
00073     MxRadio.begin(currentchan);
00074     MxRadio.attachReceiveFrame(recievehandler);
00075     led2=led3=led4=1;
00076     while (1)
00077     {
00078                         uint8_t packdataindex_tx=rxqueue.dequeue();
00079                         if (packdataindex_tx==RFQUENEMAX) //队列空
00080                                             continue ;
00081                         pc.putc(0x01);
00082                         pc.putc(rxqueue.RfData[packdataindex_tx].length+8);
00083                         unsigned long passedsecond=mytimer.read_ms()/1000;
00084                         unsigned long passedmillis=mytimer.read_ms()%1000;
00085                         pc.putc(passedsecond&0xff);
00086                         pc.putc((passedsecond>>8)&0xff);
00087                         pc.putc((passedsecond>>16)&0xff);
00088                         pc.putc((passedsecond>>24)&0xff);
00089                         pc.putc(passedmillis&0xff);
00090                         pc.putc((passedmillis>>8)&0xff);
00091                         pc.putc((passedmillis>>16)&0xff);
00092                         pc.putc((passedmillis>>24)&0xff);
00093                         for (int i=0;i<rxqueue.RfData[packdataindex_tx].length;i++)
00094                                             pc.putc(rxqueue.RfData[packdataindex_tx].rbuf[i]);
00095                         pc.putc(0x04);
00096     }
00097 }