Amir Chaudhary / Mbed OS MTDOT-BOX-EVB-Factory-Firmware

Dependencies:   NCP5623B GpsParser ISL29011 libmDot-mbed5 MTS-Serial MMA845x DOGS102 MPL3115A2

Revision:
12:05435282f899
Parent:
7:a31236c2e75c
--- a/LoRaHandler/LoRaHandler.cpp	Thu Nov 10 22:10:58 2016 +0000
+++ b/LoRaHandler/LoRaHandler.cpp	Tue Oct 09 13:49:30 2018 -0500
@@ -34,7 +34,6 @@
     LoRaHandler* l = (LoRaHandler*)argument;
     osEvent e;
 
-    l->_dot = mDot::getInstance();
     int32_t ret;
     mDot::link_check lc;
     mDot::rssi_stats rs;
@@ -66,13 +65,15 @@
                     l->_tick.detach();
                     l->_activity_led = LoRaHandler::green;
                     break;
-                
+
                 case l_send:
                     l->_mutex.lock();
                     ret = l->_dot->send(send_data);
                     l->_mutex.unlock();
                     if (ret == mDot::MDOT_OK)
                         l->_status = LoRaHandler::send_success;
+                    else if(ret == mDot::MDOT_MAX_PAYLOAD_EXCEEDED)
+                        l->_status = LoRaHandler::send_failure_payload;
                     else
                         l->_status = LoRaHandler::send_failure;
                     osSignalSet(l->_main, loraSignal);
@@ -86,6 +87,15 @@
                     l->_join_attempts++;
                     l->_mutex.unlock();
                     if (ret == mDot::MDOT_OK) {
+                        send_data.clear();
+                        l->_mutex.lock();
+                        l->_dot->send(send_data);
+                        l->_dot->send(send_data);
+                        while(l->_dot->getDataPending()) {
+                            l->_dot->send(send_data);
+                        }
+                        l->_dot->send(send_data);
+                        l->_mutex.unlock();
                         l->_status = LoRaHandler::join_success;
                         osSignalSet(l->_main, loraSignal);
                         l->_tick.detach();
@@ -96,7 +106,7 @@
                         l->_tick.detach();
                         l->_activity_led = LoRaHandler::red;
                     }
-                
+
                     break;
 
                 default:
@@ -107,12 +117,13 @@
     }
 }
 
-LoRaHandler::LoRaHandler(osThreadId main)
-  : _main(main),
+LoRaHandler::LoRaHandler(osThreadId main, mDot* dot)
+    : _main(main),
     _thread(l_worker, (void*)this),
     _status(none),
     _join_attempts(1),
-    _activity_led(XBEE_DIO1, PIN_OUTPUT, PullNone, red)
+    _activity_led(XBEE_DIO1, PIN_OUTPUT, PullNone, red),
+    _dot(dot)
 {
     _link.status = false;
     _activity_led = red;
@@ -128,7 +139,7 @@
 }
 
 bool LoRaHandler::join() {
-        return action(l_join);
+    return action(l_join);
 }
 
 bool LoRaHandler::action(uint8_t c) {