mirror of https://github.com/OpenIPC/firmware.git
126 lines
2.1 KiB
C
126 lines
2.1 KiB
C
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/ioctl.h>
|
|
#include <unistd.h>
|
|
|
|
#define LOGGER_ENTRY_MAX_LEN (4 * 1024)
|
|
#define LOGGER_FLUSH_LOG _IO(__LOGGERIO, 4)
|
|
#define __LOGGERIO 0xAE
|
|
|
|
struct logger_entry {
|
|
uint16_t len;
|
|
uint16_t __pad;
|
|
int32_t pid;
|
|
int32_t tid;
|
|
int32_t sec;
|
|
int32_t nsec;
|
|
char msg[4096];
|
|
} entry;
|
|
|
|
enum android_LogPriority {
|
|
ANDROID_LOG_UNKNOWN = 0,
|
|
ANDROID_LOG_DEFAULT,
|
|
ANDROID_LOG_VERBOSE,
|
|
ANDROID_LOG_DEBUG,
|
|
ANDROID_LOG_INFO,
|
|
ANDROID_LOG_WARN,
|
|
ANDROID_LOG_ERROR,
|
|
ANDROID_LOG_FATAL,
|
|
ANDROID_LOG_SILENT,
|
|
};
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int fd;
|
|
int msize;
|
|
int readsize;
|
|
int numread;
|
|
|
|
if (argc > 1) {
|
|
if (strcmp(argv[1], "-c") == 0) {
|
|
fd = open("/dev/log_main", O_WRONLY);
|
|
if (fd < 0) {
|
|
perror("Error opening /dev/log_main\n");
|
|
return -1;
|
|
}
|
|
ioctl(fd, LOGGER_FLUSH_LOG);
|
|
close(fd);
|
|
return 0;
|
|
} else {
|
|
printf("Usage: %s [-c] [-h]\n", argv[0]);
|
|
printf("Options:\n");
|
|
printf(" -c Clear the log\n");
|
|
printf(" -h Show this help\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
fd = open("/dev/log_main", O_RDONLY);
|
|
if (fd < 0) {
|
|
perror("Error opening /dev/log_main\n");
|
|
return -1;
|
|
}
|
|
|
|
int pos;
|
|
while (1) {
|
|
numread = read(fd, &entry, LOGGER_ENTRY_MAX_LEN);
|
|
if (numread < 1) {
|
|
perror("Error: ");
|
|
strerror(errno);
|
|
return -1;
|
|
}
|
|
|
|
char *tag = entry.msg;
|
|
char *prog = entry.msg + 1;
|
|
char *msg = entry.msg + strlen(entry.msg) + 1;
|
|
char tagbyte;
|
|
|
|
switch (*tag) {
|
|
case ANDROID_LOG_UNKNOWN:
|
|
tagbyte = 'U';
|
|
break;
|
|
|
|
case ANDROID_LOG_DEFAULT:
|
|
tagbyte = '*';
|
|
break;
|
|
|
|
case ANDROID_LOG_VERBOSE:
|
|
tagbyte = 'V';
|
|
break;
|
|
|
|
case ANDROID_LOG_DEBUG:
|
|
tagbyte = 'D';
|
|
break;
|
|
|
|
case ANDROID_LOG_INFO:
|
|
tagbyte = 'I';
|
|
break;
|
|
|
|
case ANDROID_LOG_WARN:
|
|
tagbyte = 'W';
|
|
break;
|
|
|
|
case ANDROID_LOG_ERROR:
|
|
tagbyte = 'E';
|
|
break;
|
|
|
|
case ANDROID_LOG_FATAL:
|
|
tagbyte = 'F';
|
|
break;
|
|
|
|
case ANDROID_LOG_SILENT:
|
|
tagbyte = 'S';
|
|
break;
|
|
|
|
default:
|
|
tagbyte = '?';
|
|
break;
|
|
}
|
|
|
|
printf("%c/%s(%5d): %s", tagbyte, prog, entry.pid, msg);
|
|
}
|
|
}
|