A Wireshark Sniffer Software for xbed Lpc1768
Dependencies: MxRadioRF2xx Queue mbed
Fork of MxSniffer by
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 }
Generated on Sun Jul 24 2022 15:29:43 by 1.7.2