Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
src/CloudDataHandler/LogHandler.cpp@283:a09013615589, 2016-10-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |