1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* This file is used to define the internal protocol for the Android Logger */ 18 19 #ifndef _SYSTEM_CORE_INCLUDE_PRIVATE_ANDROID_LOGGER_H_ 20 #define _SYSTEM_CORE_INCLUDE_PRIVATE_ANDROID_LOGGER_H_ 21 22 #include <stdint.h> 23 24 #include <log/log.h> 25 #include <log/log_read.h> 26 27 #define LOGGER_MAGIC 'l' 28 29 /* Header Structure to pstore */ 30 typedef struct __attribute__((__packed__)) { 31 uint8_t magic; 32 uint16_t len; 33 uint16_t uid; 34 uint16_t pid; 35 } android_pmsg_log_header_t; 36 37 /* Header Structure to logd, and second header for pstore */ 38 typedef struct __attribute__((__packed__)) { 39 typeof_log_id_t id; 40 uint16_t tid; 41 log_time realtime; 42 } android_log_header_t; 43 44 /* Event Header Structure to logd */ 45 typedef struct __attribute__((__packed__)) { 46 int32_t tag; // Little Endian Order 47 } android_event_header_t; 48 49 /* Event payload EVENT_TYPE_INT */ 50 typedef struct __attribute__((__packed__)) { 51 int8_t type; // EVENT_TYPE_INT 52 int32_t data; // Little Endian Order 53 } android_event_int_t; 54 55 /* Event with single EVENT_TYPE_INT */ 56 typedef struct __attribute__((__packed__)) { 57 android_event_header_t header; 58 android_event_int_t payload; 59 } android_log_event_int_t; 60 61 /* Event payload EVENT_TYPE_LONG */ 62 typedef struct __attribute__((__packed__)) { 63 int8_t type; // EVENT_TYPE_LONG 64 int64_t data; // Little Endian Order 65 } android_event_long_t; 66 67 /* Event with single EVENT_TYPE_LONG */ 68 typedef struct __attribute__((__packed__)) { 69 android_event_header_t header; 70 android_event_long_t payload; 71 } android_log_event_long_t; 72 73 /* 74 * Event payload EVENT_TYPE_STRING 75 * 76 * Danger: do not embed this structure into another structure. 77 * This structure uses a flexible array member, and when 78 * compiled using g++, __builtin_object_size(data, 1) returns 79 * a bad value. This is possibly a g++ bug, or a bug due to 80 * the fact that flexible array members are not supported 81 * in C++. 82 * http://stackoverflow.com/questions/4412749/are-flexible-array-members-valid-in-c 83 */ 84 typedef struct __attribute__((__packed__)) { 85 int8_t type; // EVENT_TYPE_STRING; 86 int32_t length; // Little Endian Order 87 char data[]; 88 } android_event_string_t; 89 90 /* Event with single EVENT_TYPE_STRING */ 91 typedef struct __attribute__((__packed__)) { 92 android_event_header_t header; 93 int8_t type; // EVENT_TYPE_STRING; 94 int32_t length; // Little Endian Order 95 char data[]; 96 } android_log_event_string_t; 97 98 #endif 99