Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

src/CloudDataHandler/CloudDataHandler.cpp

Committer:
davidjhoward
Date:
2016-09-20
Revision:
83:0f76cfbb4eba
Parent:
77:43e0a3d9e536
Child:
99:55317f374a94

File content as of revision 83:0f76cfbb4eba:

#include "CloudDataHandler.h"
#include "CloudFileReceiver.h"
#include "MTSLog.h"
#include <stdio.h>
#include "mDot.h"
#include <vector>
#include "rtos.h"
#include "global.h"

bool CloudDataHandlerConnected = false;

void CloudDataHandler(void const *args)
{
    int32_t ret;

    printf("\r%s has started...\n", __func__);

    while ( true ) {
        
        std::string tmp_buffer;
        
        CloudDataHandlerConnected = false;

        if (!GLOBAL_mdot->getNetworkJoinStatus()) {
            logInfo("network not joined, joining network");
            if ((ret = GLOBAL_mdot->joinNetwork()) != mDot::MDOT_OK) {
                logError("failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
                Thread::wait(30000);
                continue;
            }
        }
        
        CloudDataHandlerConnected = true;

        osEvent evt = CloudDataHandlerMailBox.get(5000);
        if (evt.status == osEventMail) {
            CloudDataHandlerReq_t *mail = (CloudDataHandlerReq_t*)evt.value.p;
            logInfo("Cloud Data Handler Mail Received: Entry: %s", mail->packet);
            tmp_buffer = mail->packet;
            CloudDataHandlerMailBox.free(mail);
            break;
        } else {
//            logInfo("Cloud Data Handler no MAIL\r\n");
            tmp_buffer = "{\"mtype\":\"20\"}";
        }
        
        std::vector<uint8_t> data(tmp_buffer.begin(), tmp_buffer.end());

        // send the data to the gateway
        if ((ret = GLOBAL_mdot->send(data)) != mDot::MDOT_OK) {
            logError("failed to send", ret, mDot::getReturnCodeString(ret).c_str());
        } else {
            logInfo("Sent to gateway: %s", tmp_buffer.c_str());
            std::vector<uint8_t> rcvData(256);
            rcvData.clear();
            if ((ret = GLOBAL_mdot->recv(rcvData)) == mDot::MDOT_OK) {
                if (!rcvData.empty()) {
                    std::string rcv_string(rcvData.begin(), rcvData.end());
                    logInfo("Received Data: %s", rcv_string.c_str());
                    CloudFileReceiver( &rcv_string, GLOBAL_mdot );
                }
            }
        }
    }
}