MTDOT-EVB link check code for site survey
Dependencies: DOGS102 GpsParser MTS-Serial NCP5623B libmDot mbed-rtos mbed
Diff: main.cpp
- Revision:
- 1:4e3ee9c860e3
- Parent:
- 0:dba397ff987f
--- 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