Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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();
}