MTDOT-EVB link check code for site survey

Dependencies:   DOGS102 GpsParser MTS-Serial NCP5623B libmDot mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
mfiore
Date:
Tue Oct 27 20:00:23 2015 +0000
Parent:
0:dba397ff987f
Child:
2:b197488a50dc
Commit message:
update sub-libraries, <CTRL><SHIFT><f> for formatting

Changed in this revision

DOGS102.lib Show annotated file Show diff for this revision Revisions of this file
GpsParser.lib Show annotated file Show diff for this revision Revisions of this file
NCP5623B.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/DOGS102.lib	Thu Oct 22 19:45:01 2015 +0000
+++ b/DOGS102.lib	Tue Oct 27 20:00:23 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/Multi-Hackers/code/DOGS102/#3b02b7fb79c9
+http://developer.mbed.org/teams/Multi-Hackers/code/DOGS102/#4a773f4896c7
--- a/GpsParser.lib	Thu Oct 22 19:45:01 2015 +0000
+++ b/GpsParser.lib	Tue Oct 27 20:00:23 2015 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/Multi-Hackers/code/GpsParser/#662aa99c5266
+https://developer.mbed.org/teams/Multi-Hackers/code/GpsParser/#ae35903cd8d2
--- a/NCP5623B.lib	Thu Oct 22 19:45:01 2015 +0000
+++ b/NCP5623B.lib	Tue Oct 27 20:00:23 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/Multi-Hackers/code/NCP5623B/#b28a2dfe05fd
+http://developer.mbed.org/teams/Multi-Hackers/code/NCP5623B/#f0efe8462d0e
--- a/main.cpp	Thu Oct 22 19:45:01 2015 +0000
+++ b/main.cpp	Tue Oct 27 20:00:23 2015 +0000
@@ -19,7 +19,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * 1.00 TAB 10/22/15  Copied from MDOT-EVB-LinkCheck version 1.02. 
+ * 1.00 TAB 10/22/15  Copied from MDOT-EVB-LinkCheck version 1.02.
  *					Added mutex around certain mDot radio commands.
  *					Moved ping check code to callable function. Added sweep
  *					mode, re-wrote join code, and modified button operation
@@ -120,9 +120,9 @@
 uint8_t swp_sf;
 
 const uint8_t sweep_table [2][4] = {
-	{ 11, 14, 18, 20},
-	{mDot::SF_7, mDot::SF_8, mDot::SF_9, mDot::SF_10}
-	};
+    { 11, 14, 18, 20},
+    {mDot::SF_7, mDot::SF_8, mDot::SF_9, mDot::SF_10}
+};
 
 // max size of text string for 6x8 font. Set to 12 if using 8x8 font
 char txtstr[17];
@@ -169,16 +169,16 @@
 
     debugUART.baud(115200);
 
-	printf ("Start program \r\n");
+    printf ("Start program \r\n");
 
     Thread thread_1(pb1_debounce);
     Thread thread_2(pb2_debounce);
 
-	printf("Thread init done\r\n");
+    printf("Thread init done\r\n");
 
     mainThreadID = osThreadGetId();
 
-	printf("Device init start\r\n");
+    printf("Device init start\r\n");
 
     evbBackLight = new NCP5623B(mDoti2c);				// setup backlight and LED 2 driver chip
     evbLCD = new DOGS102(mDotspi, mDot17, mDot13);		// setup LCD
@@ -219,8 +219,8 @@
     mDot15.mode(PullUp);
     mDot16.mode(PullUp);
 
-	printf("Switch IRQs set\r\n");
-	 
+    printf("Switch IRQs set\r\n");
+
     printf("font table address %p\r\n",&font_6x8);
     printf("bitmap address %p\r\n",&MultiTech_Logo);
 
@@ -243,7 +243,7 @@
 
     if (mdot_radio) {
         // reset to default config so we know what state we're in
-        mdot_mutex.lock(); 	// lock mdot before setting configuration 
+        mdot_mutex.lock(); 	// lock mdot before setting configuration
         mdot_radio->resetConfig();
 
         // Setting up LED1 as activity LED
@@ -296,9 +296,9 @@
             log_error(mdot_radio, "failed to set TX data rate", mdot_ret);
         }
 
-		sprintf(txtstr,"DR=%2d Pwr=%2d",(12 - sf_val),pwr_val);
+        sprintf(txtstr,"DR=%2d Pwr=%2d",(12 - sf_val),pwr_val);
         evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
-		printf("%s \r\n",txtstr);
+        printf("%s \r\n",txtstr);
 
         /*
          * Setting packet ACK to 1 try.
@@ -339,78 +339,76 @@
         // attempt to join the network
         printf("joining network\r\n");
         do {
-	        mdot_mutex.lock();		// lock mdot mutex before join attempt
+            mdot_mutex.lock();		// lock mdot mutex before join attempt
             mdot_ret = mdot_radio->joinNetwork();
-	        mdot_mutex.unlock();		// unlock mdot mutex after join attempt so SW1 can work
+            mdot_mutex.unlock();		// unlock mdot mutex after join attempt so SW1 can work
 
             if (mdot_ret != mDot::MDOT_OK) {
-            	log_error(mdot_radio,"failed to join network:", mdot_ret);
+                log_error(mdot_radio,"failed to join network:", mdot_ret);
 
-       			if (toggle_text)
-			    	sprintf(txtstr," > Join Failed <");
-       			else
-			    	sprintf(txtstr," < Join Failed >");
+                if (toggle_text)
+                    sprintf(txtstr," > Join Failed <");
+                else
+                    sprintf(txtstr," < Join Failed >");
 
-		    	evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
+                evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
 
-            	if (mdot_radio->getFrequencyBand() == mDot::FB_868) {
-               		join_delay = mdot_radio->getNextTxMs();
-            	} else {
-                	join_delay = 10;
-            	}
-	            printf("delay = %lu\r\n",join_delay);
-    	        osDelay(join_delay + 1);
-   				toggle_text = !toggle_text;
-			}
-	
-	    /*
-         * Setting TX power and Data Rate for radio just in case user requested by SW2 
-         */
-	        mdot_mutex.lock();		// lock mdot mutex before setting change
-	        mdot_radio->setTxPower(pwr_val);
-	        mdot_radio->setTxDataRate(sf_val);
-	        mdot_mutex.unlock();		// unlock mdot mutex after settings change so SW1 can work
+                if (mdot_radio->getFrequencyBand() == mDot::FB_868) {
+                    join_delay = mdot_radio->getNextTxMs();
+                } else {
+                    join_delay = 10;
+                }
+                printf("delay = %lu\r\n",join_delay);
+                osDelay(join_delay + 1);
+                toggle_text = !toggle_text;
+            }
+
+            /*
+             * Setting TX power and Data Rate for radio just in case user requested by SW2
+             */
+            mdot_mutex.lock();		// lock mdot mutex before setting change
+            mdot_radio->setTxPower(pwr_val);
+            mdot_radio->setTxDataRate(sf_val);
+            mdot_mutex.unlock();		// unlock mdot mutex after settings change so SW1 can work
 
         } while (mdot_ret != mDot::MDOT_OK);
-        
-	    sprintf(txtstr,"*Network Joined*");
-    	evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
+
+        sprintf(txtstr,"*Network Joined*");
+        evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
 
     } else {
-	    sprintf(txtstr,"Radio Init Failed!");
-    	evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
+        sprintf(txtstr,"Radio Init Failed!");
+        evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
         printf("%s\r\n",txtstr);
         exit(1);
     }
 
- 	mdot_gps = new GPSPARSER(&mDotUART);
- 
-    if (!mdot_gps->gpsDetected()){
-   		sprintf(txtstr,"*No GPS Detected*");
-   		evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
-    	printf ("%s\r\n", txtstr);
+    mdot_gps = new GPSPARSER(&mDotUART);
+
+    if (!mdot_gps->gpsDetected()) {
+        sprintf(txtstr,"*No GPS Detected*");
+        evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
+        printf ("%s\r\n", txtstr);
+    } else {
+        main_single = main_sweep = false;
+        do {
+            osSignalWait(0x10, 2000);
+            if (mdot_gps->getLockStatus()) {
+                sprintf(txtstr,"!!GPS locked!!");
+                evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
+                printf("%s \r\n",txtstr);
+            } else {
+                if (toggle_text)
+                    sprintf(txtstr," > no GPS lock <");
+                else
+                    sprintf(txtstr," < no GPS lock >");
+
+                evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
+                printf("%s \r\n",txtstr);
+                toggle_text = !toggle_text;
+            }
+        } while ( !(mdot_gps->getLockStatus()) && (!main_single && !main_sweep));
     }
-    else {
- 		main_single = main_sweep = false;
-    	do {
-	        osSignalWait(0x10, 2000);
-			if (mdot_gps->getLockStatus()){
-	    		sprintf(txtstr,"!!GPS locked!!");
-        		evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
-				printf("%s \r\n",txtstr);
-			}
-			else {
-       			if (toggle_text)
-       				sprintf(txtstr," > no GPS lock <");
-       			else
-      				sprintf(txtstr," < no GPS lock >");
-
-           		evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
-				printf("%s \r\n",txtstr);
-				toggle_text = !toggle_text;
-			}
-   		} while ( !(mdot_gps->getLockStatus()) && (!main_single && !main_sweep));
-   	}	
     osDelay(200);
     evbBackLight->setPWM(NCP5623B::LED_3,16); // enable LED2 on EVB and set to 50% PWM
 
@@ -420,8 +418,8 @@
     osDelay (500);			// allows other threads to process
     printf("shutdown LED:\r\n");
     evbBackLight->shutdown();
-	osDelay(500);
-	/*
+    osDelay(500);
+    /*
      * Main data acquisition loop
      */
     i = 0;
@@ -429,62 +427,58 @@
     do {
 
         // Main program waits until SW2 is pressed.
- 		main_single = main_sweep = false;
+        main_single = main_sweep = false;
 
-		sprintf(txtstr,"Ready for Trigger");
-		evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
- 	 	printf ("%s\r\n", txtstr);
+        sprintf(txtstr,"Ready for Trigger");
+        evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
+        printf ("%s\r\n", txtstr);
 
         osSignalWait(0x10, osWaitForever);
-        
-		if (main_single) {
-			evbLCD->clearBuffer();
-			sprintf(txtstr,"**Single Ping**");
-			evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
 
-			result = ping_check(pwr_val, sf_val);
+        if (main_single) {
+            evbLCD->clearBuffer();
+            sprintf(txtstr,"**Single Ping**");
+            evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+
+            result = ping_check(pwr_val, sf_val);
 
-			if (result != 0)
-				printf("Ping check completed\r\n");
-			else
-				printf("Ping check failed \r\n");
-		}
-		else if (main_sweep) {
+            if (result != 0)
+                printf("Ping check completed\r\n");
+            else
+                printf("Ping check failed \r\n");
+        } else if (main_sweep) {
 
-				evbLCD->clearBuffer();
-				sprintf(txtstr,"**Ping Sweep**");
-				evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+            evbLCD->clearBuffer();
+            sprintf(txtstr,"**Ping Sweep**");
+            evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
 
-		   		printf("start sweep and shutdown LED:\r\n");
-    			evbBackLight->shutdown();
+            printf("start sweep and shutdown LED:\r\n");
+            evbBackLight->shutdown();
 
-				for (swp_pwr = 0; swp_pwr < 4; swp_pwr++)
-				{
-					for (swp_sf = 0; swp_sf < 4; swp_sf++)
-					{	        
-						result = ping_check(sweep_table[0][swp_pwr], sweep_table[1][swp_sf], number_of_pings);
+            for (swp_pwr = 0; swp_pwr < 4; swp_pwr++) {
+                for (swp_sf = 0; swp_sf < 4; swp_sf++) {
+                    result = ping_check(sweep_table[0][swp_pwr], sweep_table[1][swp_sf], number_of_pings);
 
-						if (result != 0)
-							printf("Ping check completed %d attempts\r\n", result);
-						else
-							printf("Ping check failed all attempts\r\n");
+                    if (result != 0)
+                        printf("Ping check completed %d attempts\r\n", result);
+                    else
+                        printf("Ping check failed all attempts\r\n");
 
-						osDelay(1000);
-					}
-				}
-			}
-			else {
-				printf("Got here because of code error.\r\n");
-				osDelay(1000);
-			}
+                    osDelay(1000);
+                }
+            }
+        } else {
+            printf("Got here because of code error.\r\n");
+            osDelay(1000);
+        }
 
     } while(i < 1000);
 
-	printf("End of Test\r\n");
-	
-	evbLCD->clearBuffer();
-	sprintf(txtstr,"Exiting Program");
-	evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+    printf("End of Test\r\n");
+
+    evbLCD->clearBuffer();
+    sprintf(txtstr,"Exiting Program");
+    evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
 }
 
 /*
@@ -492,8 +486,8 @@
  */
 void pb1ISR(void)
 {
-	if (!pb1_low)
-		pb1_low = true;
+    if (!pb1_low)
+        pb1_low = true;
 }
 
 /*
@@ -508,41 +502,41 @@
     while (true) {
 
         if (pb1_low && (mDot08 == 0))
-			count++;
+            count++;
         else {
-        	count = 0;
-        	pb1_low = false;
+            count = 0;
+            pb1_low = false;
         }
-        
-		if (count == 5) {
-			test_now++;
-			
-			if (test_now > 15)   // resets test_now
-				test_now = 0;
+
+        if (count == 5) {
+            test_now++;
+
+            if (test_now > 15)   // resets test_now
+                test_now = 0;
 
-			// selects power output level using upper bits for select
-			switch(test_now >> 2){
-				case 0: 
-					pwr_val = 11;
-					break;
-				case 1:
-					pwr_val = 14;
-					break;
-				case 2:
-					pwr_val = 18;
-					break;
-				case 3:
-					pwr_val = 20;
-			}
-			
-			// sets data rate based on lower bits
-			sf_val = mDot::SF_7 - (test_now & 0x03);
-			
-			sprintf(txtstr,"DR=%2d Pwr=%2d     ",(12 - sf_val),pwr_val);
+            // selects power output level using upper bits for select
+            switch(test_now >> 2) {
+                case 0:
+                    pwr_val = 11;
+                    break;
+                case 1:
+                    pwr_val = 14;
+                    break;
+                case 2:
+                    pwr_val = 18;
+                    break;
+                case 3:
+                    pwr_val = 20;
+            }
+
+            // sets data rate based on lower bits
+            sf_val = mDot::SF_7 - (test_now & 0x03);
+
+            sprintf(txtstr,"DR=%2d Pwr=%2d     ",(12 - sf_val),pwr_val);
             evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
-   			printf("%s \r\n",txtstr);
-		}
-		
+            printf("%s \r\n",txtstr);
+        }
+
         Thread::wait(5);
     }
 }
@@ -552,8 +546,8 @@
  */
 void pb2ISR(void)
 {
-	if (!pb2_low)
-		pb2_low = true;
+    if (!pb2_low)
+        pb2_low = true;
 }
 
 /*
@@ -566,30 +560,29 @@
 
     while (true) {
 
-        if (pb2_low && (mDot09 == 0)){
-			count++;
-			if (count == 100){
-		    // sets LED2 to 50% max current
-				evbBackLight->setPWM(NCP5623B::LED_3,16); // enable LED2 on EVB and set to 50% PWM
-			    evbBackLight->setLEDCurrent(16);
-			}
-		}
-        else {
-			if ((count > 5) && (count <= 100)) {
-				main_single = true;
-				osSignalSet(mainThreadID, 0x10);
-			} else if (count > 100) {
-				main_sweep = true;
-				osSignalSet(mainThreadID, 0x10);
-			}
+        if (pb2_low && (mDot09 == 0)) {
+            count++;
+            if (count == 100) {
+                // sets LED2 to 50% max current
+                evbBackLight->setPWM(NCP5623B::LED_3,16); // enable LED2 on EVB and set to 50% PWM
+                evbBackLight->setLEDCurrent(16);
+            }
+        } else {
+            if ((count > 5) && (count <= 100)) {
+                main_single = true;
+                osSignalSet(mainThreadID, 0x10);
+            } else if (count > 100) {
+                main_sweep = true;
+                osSignalSet(mainThreadID, 0x10);
+            }
 
-        	count = 0;
-        	pb2_low = false;
+            count = 0;
+            pb2_low = false;
         }
-        
+
         Thread::wait(5);
- 	}
- }
+    }
+}
 
 /*
  *  Function that print clear text verion of mDot errors
@@ -600,176 +593,173 @@
 }
 
 // return = number of ping checks that passed
-uint8_t ping_check(uint8_t set_pwr, uint8_t set_sf, uint8_t pings_per_check) 
+uint8_t ping_check(uint8_t set_pwr, uint8_t set_sf, uint8_t pings_per_check)
 {
 
-	uint8_t result = 0;
-	uint8_t ping_cnt;
-	mDot::ping_response ping_data;
-	mDot::rssi_stats rssi_data;
-	mDot::snr_stats snr_data;
-	struct tm gps_timestamp;
-	GPSPARSER::longitude evb_longitude;
-	GPSPARSER::latitude evb_latitude;
-	GPSPARSER::satellite_prn gps_sat_prn;
-	uint8_t gps_fix_quality;
-	int16_t evb_altitude;
-	uint8_t gps_num_satellites;
-	uint8_t gps_fix_status;
+    uint8_t result = 0;
+    uint8_t ping_cnt;
+    mDot::ping_response ping_data;
+    mDot::rssi_stats rssi_data;
+    mDot::snr_stats snr_data;
+    struct tm gps_timestamp;
+    GPSPARSER::longitude evb_longitude;
+    GPSPARSER::latitude evb_latitude;
+    GPSPARSER::satellite_prn gps_sat_prn;
+    uint8_t gps_fix_quality;
+    int16_t evb_altitude;
+    uint8_t gps_num_satellites;
+    uint8_t gps_fix_status;
     std::vector<uint8_t> mdot_data;
 
-	mdot_mutex.lock();		// lock mdot mutex before changing radio parameters
+    mdot_mutex.lock();		// lock mdot mutex before changing radio parameters
     if ((mdot_ret = mdot_radio->setTxPower(set_pwr)) != mDot::MDOT_OK) {
-    	log_error(mdot_radio, "failed to set TX power level", mdot_ret);
+        log_error(mdot_radio, "failed to set TX power level", mdot_ret);
     }
-	if ((mdot_ret = mdot_radio->setTxDataRate(set_sf)) != mDot::MDOT_OK) {
-       	log_error(mdot_radio, "failed to set DataRate value", mdot_ret);
+    if ((mdot_ret = mdot_radio->setTxDataRate(set_sf)) != mDot::MDOT_OK) {
+        log_error(mdot_radio, "failed to set DataRate value", mdot_ret);
     }
-	mdot_mutex.unlock();		// unlock mdot mutex after changing radio parameters
+    mdot_mutex.unlock();		// unlock mdot mutex after changing radio parameters
 
-	for (ping_cnt = 0; ping_cnt < pings_per_check; ping_cnt++) {
-		evbLCD->startUpdate();
-	    evbLCD->clearBuffer();
+    for (ping_cnt = 0; ping_cnt < pings_per_check; ping_cnt++) {
+        evbLCD->startUpdate();
+        evbLCD->clearBuffer();
 
-	    mdot_mutex.lock();		// lock mdot mutex before ping
-		ping_data = mdot_radio->ping();
-		mdot_mutex.unlock();		// unlock mdot mutex after ping
+        mdot_mutex.lock();		// lock mdot mutex before ping
+        ping_data = mdot_radio->ping();
+        mdot_mutex.unlock();		// unlock mdot mutex after ping
 
-		if (ping_data.status == mDot::MDOT_OK) {
-    		rssi_data = mdot_radio->getRssiStats();
-    		snr_data = mdot_radio->getSnrStats();
-			gps_fix_status = mdot_gps->getFixStatus();
-			gps_fix_quality = mdot_gps->getFixQuality();
-			gps_num_satellites = mdot_gps->getNumSatellites();
-			
-			printf ("\r\n GPS Fix Status= %d num of sats = %d\r\n", gps_fix_status, gps_num_satellites);
+        if (ping_data.status == mDot::MDOT_OK) {
+            rssi_data = mdot_radio->getRssiStats();
+            snr_data = mdot_radio->getSnrStats();
+            gps_fix_status = mdot_gps->getFixStatus();
+            gps_fix_quality = mdot_gps->getFixQuality();
+            gps_num_satellites = mdot_gps->getNumSatellites();
+
+            printf ("\r\n GPS Fix Status= %d num of sats = %d\r\n", gps_fix_status, gps_num_satellites);
 
-        	sprintf(txtstr,"PGOOD DR=%2d P=%2d",(12 - set_sf),set_pwr);
-        	evbLCD->writeText(0,0,font_6x8,txtstr,strlen(txtstr));
-			printf("%s \r\n",txtstr);
+            sprintf(txtstr,"PGOOD DR=%2d P=%2d",(12 - set_sf),set_pwr);
+            evbLCD->writeText(0,0,font_6x8,txtstr,strlen(txtstr));
+            printf("%s \r\n",txtstr);
 
-        	sprintf(txtstr,"UP  %3d dBm %2d.%1d",ping_data.rssi, ping_data.snr/10, abs(ping_data.snr)%10);
-        	evbLCD->writeText(0,1,font_6x8,txtstr,strlen(txtstr));
-			printf("Link Quality %s \r\n",txtstr);
+            sprintf(txtstr,"UP  %3d dBm %2d.%1d",ping_data.rssi, ping_data.snr/10, abs(ping_data.snr)%10);
+            evbLCD->writeText(0,1,font_6x8,txtstr,strlen(txtstr));
+            printf("Link Quality %s \r\n",txtstr);
 
-        	sprintf(txtstr,"DWN %3d dBm %2d.%02d",rssi_data.last, snr_data.last/4, abs(snr_data.last)%4*25);
-        	evbLCD->writeText(0,2,font_6x8,txtstr,strlen(txtstr));
-			printf("Link Quality %s \r\n",txtstr);
+            sprintf(txtstr,"DWN %3d dBm %2d.%02d",rssi_data.last, snr_data.last/4, abs(snr_data.last)%4*25);
+            evbLCD->writeText(0,2,font_6x8,txtstr,strlen(txtstr));
+            printf("Link Quality %s \r\n",txtstr);
 
-			mdot_data.clear();
-			mdot_data.push_back(0x1D);			// key for start of data structure
-			mdot_data.push_back(0x1A);			// key for uplink QOS + RF Pwr
-			convertS.f_s = ping_data.rssi;
-			mdot_data.push_back(convertS.t_u[1]);
-			mdot_data.push_back(convertS.t_u[0]);
-			mdot_data.push_back((ping_data.snr/10) & 0xFF);
-			mdot_data.push_back(set_pwr);
+            mdot_data.clear();
+            mdot_data.push_back(0x1D);			// key for start of data structure
+            mdot_data.push_back(0x1A);			// key for uplink QOS + RF Pwr
+            convertS.f_s = ping_data.rssi;
+            mdot_data.push_back(convertS.t_u[1]);
+            mdot_data.push_back(convertS.t_u[0]);
+            mdot_data.push_back((ping_data.snr/10) & 0xFF);
+            mdot_data.push_back(set_pwr);
 
-			mdot_data.push_back(0x1B);			// key for downlink QOS
-			convertS.f_s=rssi_data.last;
-			mdot_data.push_back(convertS.t_u[1]);
-			mdot_data.push_back(convertS.t_u[0]);
-			mdot_data.push_back(snr_data.last);
+            mdot_data.push_back(0x1B);			// key for downlink QOS
+            convertS.f_s=rssi_data.last;
+            mdot_data.push_back(convertS.t_u[1]);
+            mdot_data.push_back(convertS.t_u[0]);
+            mdot_data.push_back(snr_data.last);
 
-	// collect GPS data if GPS device detected
-			if (mdot_gps->gpsDetected() && (set_sf != mDot::SF_10)){
+            // collect GPS data if GPS device detected
+            if (mdot_gps->gpsDetected() && (set_sf != mDot::SF_10)) {
 
-					mdot_data.push_back(0x19);			// key for GPS Lock Status
-					data = ( gps_num_satellites << 4 ) | ( gps_fix_status & 0x0F );
-					mdot_data.push_back(data);
+                mdot_data.push_back(0x19);			// key for GPS Lock Status
+                data = ( gps_num_satellites << 4 ) | ( gps_fix_status & 0x0F );
+                mdot_data.push_back(data);
 
-				if (mdot_gps->getLockStatus()){			// if gps has a lock
-					evb_longitude = mdot_gps->getLongitude();
-					evb_latitude = mdot_gps->getLatitude();
-					evb_altitude = mdot_gps->getAltitude();
-					gps_timestamp = mdot_gps->getTimestamp();
+                if (mdot_gps->getLockStatus()) {			// if gps has a lock
+                    evb_longitude = mdot_gps->getLongitude();
+                    evb_latitude = mdot_gps->getLatitude();
+                    evb_altitude = mdot_gps->getAltitude();
+                    gps_timestamp = mdot_gps->getTimestamp();
 
-	    			sprintf(txtstr,"%3d %2d %2d.%03d",abs(evb_longitude.degrees),evb_longitude.minutes,(evb_longitude.seconds*6)/1000,(evb_longitude.seconds*6)%1000);
+                    sprintf(txtstr,"%3d %2d %2d.%03d",abs(evb_longitude.degrees),evb_longitude.minutes,(evb_longitude.seconds*6)/1000,(evb_longitude.seconds*6)%1000);
 
-	   	 			if (evb_longitude.degrees < 0)
-	    				strncat(txtstr," W",2);
-	    			else
-	    				strncat(txtstr," E",2);
-    				
-	           		evbLCD->writeText(0,3,font_6x8,txtstr,strlen(txtstr));
-					printf("Longitude: %s \r\n",txtstr);
+                    if (evb_longitude.degrees < 0)
+                        strncat(txtstr," W",2);
+                    else
+                        strncat(txtstr," E",2);
 
-	    			sprintf(txtstr,"%3d %2d %2d.%03d",abs(evb_latitude.degrees),evb_latitude.minutes,(evb_latitude.seconds*6)/1000,(evb_latitude.seconds*6)%1000);
+                    evbLCD->writeText(0,3,font_6x8,txtstr,strlen(txtstr));
+                    printf("Longitude: %s \r\n",txtstr);
 
-	    			if (evb_latitude.degrees < 0)
-	    				strncat(txtstr," S",2);
-	    			else
-	    				strncat(txtstr," N",2);
+                    sprintf(txtstr,"%3d %2d %2d.%03d",abs(evb_latitude.degrees),evb_latitude.minutes,(evb_latitude.seconds*6)/1000,(evb_latitude.seconds*6)%1000);
+
+                    if (evb_latitude.degrees < 0)
+                        strncat(txtstr," S",2);
+                    else
+                        strncat(txtstr," N",2);
 
-	            	evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
-					printf("Latitude:  %s \r\n",txtstr);
+                    evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+                    printf("Latitude:  %s \r\n",txtstr);
 
-	    			sprintf(txtstr,"Time %02d:%02d:%02d ",gps_timestamp.tm_hour,gps_timestamp.tm_min,gps_timestamp.tm_sec);
-	            	evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
-					printf("%s \r\n",txtstr);
+                    sprintf(txtstr,"Time %02d:%02d:%02d ",gps_timestamp.tm_hour,gps_timestamp.tm_min,gps_timestamp.tm_sec);
+                    evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
+                    printf("%s \r\n",txtstr);
 
-	    			sprintf(txtstr,"Date %02d/%02d/%04d",gps_timestamp.tm_mon + 1,gps_timestamp.tm_mday,gps_timestamp.tm_year +1900);
-	            	evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
-					printf("%s \r\n\r\n",txtstr);
+                    sprintf(txtstr,"Date %02d/%02d/%04d",gps_timestamp.tm_mon + 1,gps_timestamp.tm_mday,gps_timestamp.tm_year +1900);
+                    evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
+                    printf("%s \r\n\r\n",txtstr);
 
-			// Send GPS data if GSP device locked
-					mdot_data.push_back(0x15);			// key for GPS Latitude
-					mdot_data.push_back(evb_latitude.degrees);
-					mdot_data.push_back(evb_latitude.minutes);
-					convertS.f_s = evb_latitude.seconds;
-					mdot_data.push_back(convertS.t_u[1]);
-					mdot_data.push_back(convertS.t_u[0]);
+                    // Send GPS data if GSP device locked
+                    mdot_data.push_back(0x15);			// key for GPS Latitude
+                    mdot_data.push_back(evb_latitude.degrees);
+                    mdot_data.push_back(evb_latitude.minutes);
+                    convertS.f_s = evb_latitude.seconds;
+                    mdot_data.push_back(convertS.t_u[1]);
+                    mdot_data.push_back(convertS.t_u[0]);
 
-					mdot_data.push_back(0x16);			// key for GPS Longitude
-					convertS.f_s = evb_longitude.degrees;
-					mdot_data.push_back(convertS.t_u[1]);
-					mdot_data.push_back(convertS.t_u[0]);
+                    mdot_data.push_back(0x16);			// key for GPS Longitude
+                    convertS.f_s = evb_longitude.degrees;
+                    mdot_data.push_back(convertS.t_u[1]);
+                    mdot_data.push_back(convertS.t_u[0]);
 
-					mdot_data.push_back(evb_longitude.minutes);
-					convertS.f_s = evb_longitude.seconds;
-					mdot_data.push_back(convertS.t_u[1]);
-					mdot_data.push_back(convertS.t_u[0]);
-		    	}
-		    	else {
-		    		sprintf(txtstr,"no GPS lock");
-	   	    	   	evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
-					printf("%s \r\n",txtstr);
-		    	}
-			}
-	// key for end of data structure		
-			mdot_data.push_back(0x1D);
-		
-	// if SF_10 this sends 11 bytes of data, otherwise sends full data packet
-	        mdot_mutex.lock();		// lock mdot mutex before packet send
-			mdot_ret = mdot_radio->send(mdot_data);
-	        mdot_mutex.unlock();		// unlock mdot mutex after packet send
+                    mdot_data.push_back(evb_longitude.minutes);
+                    convertS.f_s = evb_longitude.seconds;
+                    mdot_data.push_back(convertS.t_u[1]);
+                    mdot_data.push_back(convertS.t_u[0]);
+                } else {
+                    sprintf(txtstr,"no GPS lock");
+                    evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+                    printf("%s \r\n",txtstr);
+                }
+            }
+            // key for end of data structure
+            mdot_data.push_back(0x1D);
+
+            // if SF_10 this sends 11 bytes of data, otherwise sends full data packet
+            mdot_mutex.lock();		// lock mdot mutex before packet send
+            mdot_ret = mdot_radio->send(mdot_data);
+            mdot_mutex.unlock();		// unlock mdot mutex after packet send
 
-			if (mdot_ret  != mDot::MDOT_OK) {
-		       	sprintf(txtstr,"mDot Send failed");
-	            evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
-				log_error(mdot_radio, txtstr, mdot_ret);
-			}
-			else {
-		       	sprintf(txtstr,"mDot Send success");
-	            evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
-				printf("successfully sent data to gateway\r\n");
-				result++;
-			}
-	    }
-	    else {
-			sprintf(txtstr,"Ping Check Failed");
-	        evbLCD->writeText(0,2,font_6x8,txtstr,strlen(txtstr));
-			printf("%s \r\n",txtstr);
-	        sprintf(txtstr,"DR=%2d P=%2d",(12 - set_sf),set_pwr);
-	        evbLCD->writeText(0,3,font_6x8,txtstr,strlen(txtstr));
-			printf("%s \r\n",txtstr);
-			strncpy(txtstr,mDot::getReturnCodeString(ping_data.status).c_str(),17);
-	        evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
-			printf("%s \r\n",txtstr);
-	    }
+            if (mdot_ret  != mDot::MDOT_OK) {
+                sprintf(txtstr,"mDot Send failed");
+                evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
+                log_error(mdot_radio, txtstr, mdot_ret);
+            } else {
+                sprintf(txtstr,"mDot Send success");
+                evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
+                printf("successfully sent data to gateway\r\n");
+                result++;
+            }
+        } else {
+            sprintf(txtstr,"Ping Check Failed");
+            evbLCD->writeText(0,2,font_6x8,txtstr,strlen(txtstr));
+            printf("%s \r\n",txtstr);
+            sprintf(txtstr,"DR=%2d P=%2d",(12 - set_sf),set_pwr);
+            evbLCD->writeText(0,3,font_6x8,txtstr,strlen(txtstr));
+            printf("%s \r\n",txtstr);
+            strncpy(txtstr,mDot::getReturnCodeString(ping_data.status).c_str(),17);
+            evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+            printf("%s \r\n",txtstr);
+        }
 
-		evbLCD->endUpdate();
-		osDelay(1000);
-	}
-	return result;
+        evbLCD->endUpdate();
+        osDelay(1000);
+    }
+    return result;
 }
\ No newline at end of file