Add float support to binary event log.

Bug: 20664753
Change-Id: Ib4752bd785496dab5bb4d4979d5d80f662adbdfa
This commit is contained in:
Jeff Brown 2015-04-28 12:47:02 -07:00
parent f0d2473735
commit 44193d9eae
3 changed files with 36 additions and 3 deletions

View file

@ -492,6 +492,7 @@ typedef enum {
EVENT_TYPE_LONG = 1,
EVENT_TYPE_STRING = 2,
EVENT_TYPE_LIST = 3,
EVENT_TYPE_FLOAT = 4,
} AndroidEventLogType;
#define sizeof_AndroidEventLogType sizeof(typeof_AndroidEventLogType)
#define typeof_AndroidEventLogType unsigned char
@ -510,6 +511,13 @@ typedef enum {
sizeof(longBuf)); \
}
#endif
#ifndef LOG_EVENT_FLOAT
#define LOG_EVENT_FLOAT(_tag, _value) { \
float floatBuf = _value; \
(void) android_btWriteLog(_tag, EVENT_TYPE_FLOAT, &floatBuf, \
sizeof(floatBuf)); \
}
#endif
#ifndef LOG_EVENT_STRING
#define LOG_EVENT_STRING(_tag, _value) \
(void) __android_log_bswrite(_tag, _value);

View file

@ -26,6 +26,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <sys/param.h>
#include <log/logd.h>
@ -432,7 +433,7 @@ static inline uint64_t get8LE(const uint8_t* src)
low = src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
high = src[4] | (src[5] << 8) | (src[6] << 16) | (src[7] << 24);
return ((long long) high << 32) | (long long) low;
return ((uint64_t) high << 32) | (uint64_t) low;
}
@ -490,7 +491,7 @@ static int android_log_printBinaryEvent(const unsigned char** pEventData,
case EVENT_TYPE_LONG:
/* 64-bit signed long */
{
long long lval;
uint64_t lval;
if (eventDataLen < 8)
return -1;
@ -498,7 +499,30 @@ static int android_log_printBinaryEvent(const unsigned char** pEventData,
eventData += 8;
eventDataLen -= 8;
outCount = snprintf(outBuf, outBufLen, "%lld", lval);
outCount = snprintf(outBuf, outBufLen, "%" PRId64, lval);
if (outCount < outBufLen) {
outBuf += outCount;
outBufLen -= outCount;
} else {
/* halt output */
goto no_room;
}
}
break;
case EVENT_TYPE_FLOAT:
/* float */
{
uint32_t ival;
float fval;
if (eventDataLen < 4)
return -1;
ival = get4LE(eventData);
fval = *(float*)&ival;
eventData += 4;
eventDataLen -= 4;
outCount = snprintf(outBuf, outBufLen, "%f", fval);
if (outCount < outBufLen) {
outBuf += outCount;
outBufLen -= outCount;

View file

@ -21,6 +21,7 @@
# 2: long
# 3: string
# 4: list
# 5: float
#
# The data unit is a number taken from the following list:
# 1: Number of objects