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.
Diff: ICE-Application/src/DataHandler/LoggerApi.cpp
- Revision:
- 0:61364762ee0e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ICE-Application/src/DataHandler/LoggerApi.cpp Tue Jan 24 19:05:33 2017 +0000 @@ -0,0 +1,152 @@ +#include "LoggerApi.h" +#include "LogHandler.h" +#include "DataHandler.h" +#include "ICELog.h" +#include "global.h" +#include <sstream> +#include <iostream> +#include <time.h> +#include <stdio.h> + + +void EventLoggerApi( EventReasonStruct_t &eventReason ) +{ + time_t curr_sec = time(0); + + LoggerQueue_t *LoggerEvent = LoggerQueue.alloc(); + memset( LoggerEvent->log_entry, 0, sizeof(LoggerEvent->log_entry) ); + +// std::ostringstream log_event; +// log_event << "tag:"<< iter->first.c_str() << " value:" << float_value; + + snprintf( LoggerEvent->log_entry, sizeof(LoggerEvent->log_entry), + "{""\"mtype\":\"%d\",""\"t\":\"%ld\",""\"e\":\"%d\",""\"i\":\"%s\",""\"iv\":\"%2.2f\",""\"o\":\"%s\",""\"ov\":\"%2.2f\"}", + EVENT_LOG_MTYPE, curr_sec, eventReason.eventReason, eventReason.inputTag, eventReason.inputValue, + eventReason.outputTag, eventReason.outputValue ); + LoggerEvent->position = 0; + LoggerQueue.put(LoggerEvent); + + logInfo("len=%d: %s", strlen(LoggerEvent->log_entry), LoggerEvent->log_entry ); + + PeriodicLogger( true ); +} + +void DeviceConnectedLoggerApi( unsigned int connected ) +{ + time_t curr_sec = time(NULL); + LoggerQueue_t *LoggerEvent = LoggerQueue.alloc(); + + memset( LoggerEvent->log_entry, 0, sizeof(LoggerEvent->log_entry) ); + + snprintf( LoggerEvent->log_entry, sizeof(LoggerEvent->log_entry), + "{""\"mtype\":\"%d\",""\"t\":\"%ld\",""\"e\":\"%u\" }", + DEVICE_CONN_MTYPE, curr_sec, connected); + LoggerEvent->position = 0; + LoggerQueue.put(LoggerEvent); + + logInfo("len=%d: %s", strlen(LoggerEvent->log_entry), LoggerEvent->log_entry); + printf("\rlen = %d: %s\n", strlen(LoggerEvent->log_entry), LoggerEvent->log_entry); + + PeriodicLogger( true ); +} + + +void LiveData2Message( const char *liveData, char *messageString, int len ) +{ + time_t curr_sec = time(0); + memset( messageString, 0, len ); + snprintf( messageString, len, "{""\"mtype\":\"%d\",""\"t\":\"%ld\",%s}", LIVE_DATA_MTYPE, curr_sec, liveData ); + logInfo("%s:%d: packetLen=%d: %s", __func__,__LINE__,strlen(messageString), messageString ); +} + +void LiveDataLoggerApi( const char *liveData ) +{ + time_t curr_sec = time(0); + + LoggerQueue_t *LoggerEvent = LoggerQueue.alloc(); + + LiveData2Message( liveData, LoggerEvent->log_entry, sizeof(LoggerEvent->log_entry) ); + + LoggerEvent->position = 0; + LoggerQueue.put(LoggerEvent); + + logInfo("dataLen=%d, packetLen=%d: %s", strlen(liveData), strlen(LoggerEvent->log_entry), LoggerEvent->log_entry ); +} + +void PeriodicLogger( bool force ) +{ + bool log_sent=false; + std::ostringstream log_event; + + int map_count = ModbusRegisterMap.size(); + int collected_count = 0; + + log_event << "\"lr\":["; + std::map<std::string, ModbusRegister>::iterator iter; + for (iter = ModbusRegisterMap.begin(); iter != ModbusRegisterMap.end(); ++iter) { + + collected_count = collected_count + 1; + + log_event << "{\"t\":"<< "\"" << iter->first.c_str() << "\"," << "\"v\":"<< "\"" << RegisterValueMap[iter->first].float_value<< "\"},"; + log_sent = false; + if( log_event.str().size() >= 150 ) { + std::string str = log_event.str(); + str.erase( str.size() - 1 ); + if( collected_count == map_count ) { + str.append("],\"seq\":\"0\""); + } else { + str.append("],\"seq\":\"1\""); + } +// printf("%s:%d: Logging %s : len=%d\r\n", __func__, __LINE__, str.c_str(), str.length() ); + LiveDataLoggerApi( str.c_str() ); + log_event.str(""); + log_event.clear(); + log_event << "\"lr\":["; + log_sent = true; + } + } + if( log_sent == false ) { + std::string str = log_event.str(); + str.erase( str.size() - 1 ); + str.append("],\"seq\":\"0\""); + if( str.length() > 20 ) { +// printf("%s:%d: Logging %s : len=%d\r\n", __func__, __LINE__, str.c_str(), str.length() ); + LiveDataLoggerApi( str.c_str() ); + } + } +} + +void GetCurrentReadings( char *currentReadings, int len ) +{ + //bool log_sent=false; + std::ostringstream log_event; + + log_event << "\"lr\":["; + std::map<std::string, ModbusRegister>::iterator iter; + for (iter = ModbusRegisterMap.begin(); iter != ModbusRegisterMap.end(); ++iter) { + log_event << "{\"t\":"<< "\"" << iter->first.c_str() << "\"," << "\"v\":"<< "\"" << RegisterValueMap[iter->first].float_value<< "\"},"; + } + + std::string str = log_event.str(); + str.erase( str.size() - 1 ); + str.append("],\"seq\":\"0\""); + LiveData2Message( str.c_str(), currentReadings, len ); +// printf("GetCurrentReadings: packetLen=%d: %s, str.size(%d), (%s)\r\n", strlen(currentReadings), currentReadings, str.size(), str.c_str() ); +} + +void GetTagReadings( std::vector<std::string> RequestedTags, char *currentReadings, int len ) +{ + std::ostringstream log_event; + + log_event << "\"lr\":["; + std::vector<std::string>::iterator iter; + for (iter = RequestedTags.begin(); iter != RequestedTags.end(); ++iter) { + log_event << "{\"t\":"<< "\"" << iter->c_str() << "\"," << "\"v\":"<< "\"" << RegisterValueMap[*iter].float_value<< "\"},"; + } + + std::string str = log_event.str(); + str.erase( str.size() - 1 ); + str.append("]"); + LiveData2Message( str.c_str(), currentReadings, len ); +// printf("GetCurrentReadings: packetLen=%d: %s, str.size(%d), (%s)\r\n", strlen(currentReadings), currentReadings, str.size(), str.c_str() ); +} \ No newline at end of file