Added receive timestamp for each data record in XML output

This commit is contained in:
Stefan Wahren 2012-05-29 20:17:05 +02:00
parent 9fd35b781b
commit 0cb23161e7
3 changed files with 25 additions and 3 deletions

View File

@ -1367,6 +1367,8 @@ mbus_disconnect(mbus_handle * handle)
int
mbus_recv_frame(mbus_handle * handle, mbus_frame *frame)
{
int result = 0;
if (handle == NULL)
{
MBUS_ERROR("%s: Invalid M-Bus handle for receive.\n", __PRETTY_FUNCTION__);
@ -1375,13 +1377,20 @@ mbus_recv_frame(mbus_handle * handle, mbus_frame *frame)
if (handle->is_serial)
{
return mbus_serial_recv_frame(handle->m_serial_handle, frame);
result = mbus_serial_recv_frame(handle->m_serial_handle, frame);
}
else
{
return mbus_tcp_recv_frame(handle->m_tcp_handle, frame);
result = mbus_tcp_recv_frame(handle->m_tcp_handle, frame);
}
return 0;
if (frame != NULL)
{
/* set timestamp to receive time */
time(&(frame->timestamp));
}
return result;
}
int

View File

@ -2563,6 +2563,9 @@ mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data)
// clean up...
return (-2);
}
// copy timestamp
memcpy((void *)&(record->timestamp), (void *)&(frame->timestamp), sizeof(time_t));
// read and parse DIB (= DIF + DIFE)
@ -3275,6 +3278,8 @@ mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int fram
static char buff[8192];
char str_encoded[768];
size_t len = 0;
struct tm * timeinfo;
char timestamp[21];
int val;
if (record)
@ -3314,6 +3319,11 @@ mbus_data_variable_record_xml(mbus_data_record *record, int record_cnt, int fram
mbus_str_xml_encode(str_encoded, mbus_data_record_value(record), sizeof(str_encoded));
len += snprintf(&buff[len], sizeof(buff) - len, " <Value>%s</Value>\n", str_encoded);
timeinfo = gmtime ( &(record->timestamp) );
strftime(timestamp,20,"%Y-%m-%dT%H:%M:%S",timeinfo);
len += snprintf(&buff[len], sizeof(buff) - len, " <Timestamp>%s</Timestamp>\n", timestamp);
len += snprintf(&buff[len], sizeof(buff) - len, " </DataRecord>\n\n");
return buff;

View File

@ -83,6 +83,7 @@ typedef struct _mbus_frame {
size_t data_size;
int type;
time_t timestamp;
//mbus_frame_data frame_data;
@ -145,6 +146,8 @@ typedef struct _mbus_data_record {
u_char data[234];
size_t data_len;
time_t timestamp;
void *next;
} mbus_data_record;