MTDOT-EVB link check code for site survey
Dependencies: DOGS102 GpsParser MTS-Serial NCP5623B libmDot mbed-rtos mbed
Revision 1:4e3ee9c860e3, committed 2015-10-27
- 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
--- 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