Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Fri Sep 30 12:22:20 2016 +0000
Revision:
149:950c90425f7c
Parent:
125:f11cc566d073
Child:
238:e35cac576620
base for virtual inputs/outputs

Who changed what in which revision?

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