Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Fri Oct 28 16:28:44 2016 +0000
Revision:
283:a09013615589
Parent:
238:e35cac576620
Child:
284:cc72206ea8e0
More updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidjhoward 283:a09013615589 1 #include "global.h"
davidjhoward 283:a09013615589 2 #include <stdio.h>
davidjhoward 283:a09013615589 3 #include <sstream>
davidjhoward 283:a09013615589 4 #include <iostream>
davidjhoward 116:7337ed514891 5 #include "LogHandler.h"
davidjhoward 116:7337ed514891 6 #include "LogLocalApi.h"
davidjhoward 283:a09013615589 7 #include "LoggerApi.h"
davidjhoward 283:a09013615589 8 #include "BLEDataHandler.h"
davidjhoward 116:7337ed514891 9 #include "CloudFileReceiver.h"
davidjhoward 116:7337ed514891 10 #include "MTSLog.h"
davidjhoward 116:7337ed514891 11
davidjhoward 116:7337ed514891 12 Mail<LoggerQueue_t, 16> LoggerQueue;
davidjhoward 116:7337ed514891 13
davidjhoward 123:ce602c91a9c3 14 size_t LoggerXmitLength = LOG_BYTES_PER_ENTRY;
davidjhoward 116:7337ed514891 15
davidjhoward 149:950c90425f7c 16 int last_min=8;
davidjhoward 149:950c90425f7c 17
davidjhoward 123:ce602c91a9c3 18 bool LogHandler( bool joined )
davidjhoward 116:7337ed514891 19 {
davidjhoward 116:7337ed514891 20 int32_t ret;
davidjhoward 123:ce602c91a9c3 21 char buffer[LOG_BYTES_PER_ENTRY];
davidjhoward 116:7337ed514891 22 std::string tmp_buffer;
davidjhoward 123:ce602c91a9c3 23 bool log_in_eeprom=false;
davidjhoward 123:ce602c91a9c3 24 bool log_to_send=false;
davidjhoward 116:7337ed514891 25
davidjhoward 116:7337ed514891 26 osEvent evt = LoggerQueue.get(50);
davidjhoward 123:ce602c91a9c3 27 if( (evt.status == osEventMail) ) {
davidjhoward 123:ce602c91a9c3 28 // pull the log event from the queue, even if we are not joined
davidjhoward 116:7337ed514891 29 LoggerQueue_t *LoggerEvent = (LoggerQueue_t*)evt.value.p;
davidjhoward 116:7337ed514891 30 logInfo("Log Msg Received: log entry: %s", LoggerEvent->log_entry);
davidjhoward 123:ce602c91a9c3 31 strncpy( buffer, LoggerEvent->log_entry, (LoggerXmitLength-1) );
davidjhoward 123:ce602c91a9c3 32 tmp_buffer.assign(buffer);
davidjhoward 123:ce602c91a9c3 33 log_to_send = true;
davidjhoward 123:ce602c91a9c3 34 // printf("%s:%d: Found Log Event on LoggerQueue to send to cloud\r\n", __func__, __LINE__);
davidjhoward 123:ce602c91a9c3 35 LoggerQueue.free(LoggerEvent);
davidjhoward 123:ce602c91a9c3 36 }
davidjhoward 123:ce602c91a9c3 37
davidjhoward 123:ce602c91a9c3 38 if( (evt.status == osEventMail) && (joined == false) ) {
davidjhoward 123:ce602c91a9c3 39 // if we pulled a log from the queue put it in the EEPROM
davidjhoward 123:ce602c91a9c3 40 LogLocalApi( tmp_buffer.c_str() );
davidjhoward 123:ce602c91a9c3 41 // printf("%s:%d: Not Connected, Putting Logger event In EEPROM\r\n", __func__, __LINE__);
davidjhoward 123:ce602c91a9c3 42 return false;
davidjhoward 123:ce602c91a9c3 43 }
davidjhoward 123:ce602c91a9c3 44
davidjhoward 123:ce602c91a9c3 45 if( (evt.status != osEventMail) && joined == true) {
davidjhoward 123:ce602c91a9c3 46 // nothing on the queue, see if there is anything in the EEPROM to send.
davidjhoward 123:ce602c91a9c3 47 log_in_eeprom = LogLocalApi_PopEntry( buffer );
davidjhoward 123:ce602c91a9c3 48 if( log_in_eeprom == true ) {
davidjhoward 116:7337ed514891 49 tmp_buffer.assign(buffer);
davidjhoward 123:ce602c91a9c3 50 log_to_send = true;
davidjhoward 149:950c90425f7c 51 // printf("%s:%d: Found Log Event in EEPROM to send to cloud\r\n", __func__, __LINE__);
davidjhoward 149:950c90425f7c 52 } else {
davidjhoward 123:ce602c91a9c3 53 // printf("%s:%d: Nothing in EEPROM\r\n", __func__, __LINE__);
davidjhoward 116:7337ed514891 54 }
davidjhoward 116:7337ed514891 55 }
davidjhoward 116:7337ed514891 56
davidjhoward 123:ce602c91a9c3 57 if( log_to_send == false ) {
davidjhoward 149:950c90425f7c 58 struct tm *ts;
davidjhoward 149:950c90425f7c 59 time_t curr_sec;
davidjhoward 149:950c90425f7c 60
davidjhoward 149:950c90425f7c 61 curr_sec = time(0);
davidjhoward 149:950c90425f7c 62 ts = localtime(&curr_sec);
davidjhoward 149:950c90425f7c 63 // printf("curr_sec=%ld, min=%d (last=%d) min-mod-5=%d\r\n", curr_sec, ts->tm_min, last_min, (ts->tm_min%5) );
davidjhoward 149:950c90425f7c 64 if( ((ts->tm_min%1) == 0) && (ts->tm_min != last_min) ) {
davidjhoward 149:950c90425f7c 65 last_min = ts->tm_min;
davidjhoward 149:950c90425f7c 66 // no event log to send, send the heart beat message.
davidjhoward 149:950c90425f7c 67 printf("%s:%d: sending heart beat, hr=%d min=%d\r\n", __func__, __LINE__, ts->tm_hour, ts->tm_min);
davidjhoward 149:950c90425f7c 68 tmp_buffer = "{\"mtype\":\"20\"}";
davidjhoward 149:950c90425f7c 69 } else {
davidjhoward 149:950c90425f7c 70 // printf("%s:%d: Nothing to send to the cloud\r\n", __func__, __LINE__);
davidjhoward 283:a09013615589 71 if( CloudDataHandler_RcvFile != true ) {
davidjhoward 149:950c90425f7c 72 return false;
davidjhoward 149:950c90425f7c 73 }
davidjhoward 149:950c90425f7c 74 printf("%s:%d: currently receiveing a file\r\n", __func__, __LINE__);
davidjhoward 149:950c90425f7c 75 // send so we get another packet from gateway.
davidjhoward 149:950c90425f7c 76 tmp_buffer = "{\"mtype\":\"20\"}";
davidjhoward 149:950c90425f7c 77 }
davidjhoward 123:ce602c91a9c3 78 }
davidjhoward 123:ce602c91a9c3 79
davidjhoward 123:ce602c91a9c3 80 if( joined == true ) {
davidjhoward 116:7337ed514891 81 std::vector<uint8_t> data(tmp_buffer.begin(), tmp_buffer.end());
davidjhoward 116:7337ed514891 82 if ((ret = GLOBAL_mdot->send(data)) == mDot::MDOT_OK) {
davidjhoward 123:ce602c91a9c3 83 // printf("%s:%d: Successful send to cloud\r\n", __func__, __LINE__);
davidjhoward 116:7337ed514891 84 return true;
davidjhoward 116:7337ed514891 85 }
davidjhoward 123:ce602c91a9c3 86 // printf("failed to send, ret=%d, %s\r\n", ret, mDot::getReturnCodeString(ret).c_str());
davidjhoward 116:7337ed514891 87 }
davidjhoward 116:7337ed514891 88
davidjhoward 123:ce602c91a9c3 89 if( log_to_send == true ) {
davidjhoward 123:ce602c91a9c3 90 // We had a log event ready to send but didn't send it.
davidjhoward 123:ce602c91a9c3 91 // Store it in the EEPROM for the next attempt.
davidjhoward 123:ce602c91a9c3 92 // printf("%s:%d: Could not send Log Event to cloud, store in EEPROM\r\n", __func__, __LINE__);
davidjhoward 123:ce602c91a9c3 93 LogLocalApi( tmp_buffer.c_str() );
davidjhoward 149:950c90425f7c 94 } else {
davidjhoward 123:ce602c91a9c3 95 // printf("%s:%d: Could not send to cloud, nothing to store in EEPROM\r\n", __func__, __LINE__);
davidjhoward 123:ce602c91a9c3 96 }
davidjhoward 116:7337ed514891 97 return false;
davidjhoward 283:a09013615589 98 }
davidjhoward 283:a09013615589 99
davidjhoward 283:a09013615589 100 void CDH_ReplyToHandler( std::string &id, int status, float value )
davidjhoward 283:a09013615589 101 {
davidjhoward 283:a09013615589 102 std::ostringstream reply_oss;
davidjhoward 283:a09013615589 103
davidjhoward 283:a09013615589 104 LoggerQueue_t *LoggerEvent = LoggerQueue.alloc();
davidjhoward 283:a09013615589 105 memset( LoggerEvent->log_entry, 0, sizeof(LoggerEvent->log_entry) );
davidjhoward 283:a09013615589 106
davidjhoward 283:a09013615589 107 reply_oss << "{ \"mtype\":1001, \"mbreply\":{ \"id\":\"" << id.c_str() << "\"," "\"status\":\"0\"," "\"value\":\"" << value << "\"} }";
davidjhoward 283:a09013615589 108 std::string string_reply = reply_oss.str();
davidjhoward 283:a09013615589 109 strncpy( LoggerEvent->log_entry, string_reply.c_str(), (sizeof(LoggerEvent->log_entry)-1));
davidjhoward 283:a09013615589 110 printf("%s:%d: Reply is: %s\r\n",__func__,__LINE__, LoggerEvent->log_entry);
davidjhoward 283:a09013615589 111 LoggerEvent->position = 0;
davidjhoward 283:a09013615589 112 LoggerQueue.put(LoggerEvent);
davidjhoward 283:a09013615589 113 }
davidjhoward 283:a09013615589 114
davidjhoward 283:a09013615589 115 void ReplyToHandler( ThreadName_t replyTo, std::string &id, int ret, float value )
davidjhoward 283:a09013615589 116 {
davidjhoward 283:a09013615589 117 if( replyTo == BLE_HANDLER ) {
davidjhoward 283:a09013615589 118 BLE_ReplyToHandler( id, ret, value );
davidjhoward 283:a09013615589 119 } else if( replyTo == CLOUD_DATA_HANDLER ) {
davidjhoward 283:a09013615589 120 CDH_ReplyToHandler( id, ret, value );
davidjhoward 283:a09013615589 121 } else {
davidjhoward 283:a09013615589 122 logError("Unknown Thread for Command Reply");
davidjhoward 283:a09013615589 123 }
davidjhoward 116:7337ed514891 124 }