![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ping pong with modifiable parameters
Revision 9:58c61a425d06, committed 2019-11-12
- Comitter:
- nimita23
- Date:
- Tue Nov 12 20:18:22 2019 +0000
- Parent:
- 8:2952eeb51ceb
- Commit message:
- first public commit
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 2952eeb51ceb -r 58c61a425d06 main.cpp --- a/main.cpp Mon Sep 09 21:24:04 2019 +0000 +++ b/main.cpp Tue Nov 12 20:18:22 2019 +0000 @@ -25,14 +25,18 @@ long unsigned RF_FREQUENCY = 500000000; // Hz RadioLoRaSpreadingFactors_t spreading_factor = LORA_SF7; RadioLoRaBandwidths_t bandwidth = LORA_BW_500; +RadioLoRaCodingRates_t coding_rate = LORA_CR_4_5; int TX_OUTPUT_POWER = 10; //The range of the output power is [-18..+13] dBm bool isMaster = true; Serial s( USBTX, USBRX ); // serial object for AT commands char serial_buffer[buffer_size]; // buffer to save incoming data -int serial_buffer_index = 0; // index array for buffer +char serial_buffer2[buffer_size]; // second buffer to save incoming data +int serial_buffer_where=0; // index array for buffer +int serial_buffer2_where=0; // index array for second buffer bool serial_end_line = false; // searching for end line + uint8_t BufferSize = BUFFER_SIZE; uint8_t Buffer[BUFFER_SIZE]; @@ -53,7 +57,7 @@ void OnTxTimeout( void ); void OnRxTimeout( void ); void OnRxError( IrqErrorCode_t ); -void parser(); +void parser(char*); void LoRa_init(); @@ -86,41 +90,64 @@ void serialRx() { - int j; - while(s.readable()) { - char character=s.getc(); - if(( (int)character==10 || (int)character==13) && serial_end_line) { - serial_end_line=true; + + while(s.readable()) { // read all data from serial + char character=s.getc(); // get a char form serial + if(((int)character==10 || (int)character==13) && serial_end_line) { // search for end line /r or /n + serial_end_line=true; // end was find in the previous charascter, skip continue; } else { - serial_end_line=false; + serial_end_line=false; // clear serial_end_line flag } - if(serial_buffer_index != buffer_fill) { - serial_buffer[serial_buffer_index++] = character; - if(serial_buffer_index == buffer_size) { - serial_buffer[buffer_size-1] = '\0'; - serial_buffer_index=buffer_fill; + if(serial_buffer_where!=buffer_fill && !(serial_buffer2_where != 0 && serial_buffer2_where!=buffer_fill)) { + serial_buffer[serial_buffer_where++]=character; + if(serial_buffer_where==buffer_size) { // check if incoming data are smaller than buffer size + serial_buffer[buffer_size-1]='\0'; // posibility to lost data, if the incoming data are too big + serial_buffer_where=buffer_fill; // set index array to indicate buffer fill continue; } - if(character == 13 || character == 10) { - serial_buffer[serial_buffer_index-1] = '\0'; - serial_buffer_index = buffer_fill; - serial_end_line = true; + if(character==13 || character==10) { // if end of line (\r \n) is indicated, prepare the buffer to serialGetBuffer + serial_buffer[serial_buffer_where-1]='\0'; // set end of buffer with 0 + serial_buffer_where=buffer_fill; // set index array to indicate buffer fill + serial_end_line=true; // end of line was find, set serial_end_line flag + } + } else if(serial_buffer2_where!=buffer_fill) { // same for second buffer + serial_buffer2[serial_buffer2_where++]=character; + if(serial_buffer2_where==buffer_size) { + serial_buffer2[buffer_size-1]='\0'; + serial_buffer2_where=buffer_fill; + continue; + } + if(character==13 || character==10) { + serial_buffer2[serial_buffer2_where-1]='\0'; + serial_buffer2_where=buffer_fill; + serial_end_line=true; } } } - if(serial_buffer_index==buffer_fill && serial_end_line != true) { - printf("Input too long to be parsed\n\r"); - serial_buffer_index = 0; +} + +int serialGetBuffer(char * & data) +{ + if(serial_buffer_where==buffer_fill && serial_buffer2_where==buffer_fill) { + data=serial_buffer; + //memcpy(data, serial_buffer, strlen(serial_buffer)+1); + serial_buffer_where=0; + return 2; + } else if(serial_buffer2_where==buffer_fill) { + data=serial_buffer2; + //memcpy(data, serial_buffer2, strlen(serial_buffer2)+1); + serial_buffer2_where=0; + return 1; + } else if(serial_buffer_where==buffer_fill) { + data=serial_buffer; + //memcpy(data, serial_buffer, strlen(serial_buffer)+1); + serial_buffer_where=0; + return 1; + } else { + data = NULL; + return 0; } - else if(serial_end_line == true) { - serial_buffer_index = 0; - if(sscanf (serial_buffer,"%d",&j)) { // sscanf for searching integer - printf("From PC:%d.\n\r" ,j); // write to serial incoming integer - } - parser(); - } - } /*! @@ -136,7 +163,7 @@ modulationParams.PacketType = PACKET_TYPE_LORA; modulationParams.Params.LoRa.SpreadingFactor = spreading_factor; modulationParams.Params.LoRa.Bandwidth = bandwidth; - modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5; + modulationParams.Params.LoRa.CodingRate = coding_rate; PacketParams.PacketType = PACKET_TYPE_LORA; PacketParams.Params.LoRa.PreambleLength = 0x08; @@ -193,6 +220,10 @@ while( 1 ) { Radio.ProcessIrqs( ); + char *data; + serialGetBuffer(data); + if(data) + parser(data); switch( AppState ) { case APP_RX: @@ -347,11 +378,11 @@ } -void parser() { - printf("%s\n\r", serial_buffer); +void parser(char* serial_in) { + printf("%s\n\r", serial_in); char command[10]; long val; - if(sscanf(serial_buffer, "%10s %lu", command, &val) != 2){ + if(sscanf(serial_in, "%10s %lu", command, &val) != 2){ printf("Invalid Input\n\r"); return; } @@ -399,6 +430,25 @@ printf("enter spreading factor between 5 and 12\n\r"); return; } + } + else if(strcmp(command, "CR") == 0) { + switch(val) { + case 45: + coding_rate = LORA_CR_4_5; + break; + case 46: + coding_rate = LORA_CR_4_6; + break; + case 47: + coding_rate = LORA_CR_4_7; + break; + case 48: + coding_rate = LORA_CR_4_8; + break; + default: + printf("enter valid coding rate\n\r"); + return; + } printf("Spreading factor changed to %lu\n\r", val); LoRa_init(); } @@ -439,6 +489,13 @@ printf("15, 10, 7\n\r"); return; } + + + // TODO separate master slave + // TODO make a separate lorawan compatible + // TODO view current settings + // TODO stop display + // ncurses printf("LoRa bandwidth changed to %lu\n\r", val); LoRa_init(); }