1895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/*
2895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall $License:
3895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall   Copyright 2011 InvenSense, Inc.
4895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
5895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Licensed under the Apache License, Version 2.0 (the "License");
6895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall you may not use this file except in compliance with the License.
7895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall You may obtain a copy of the License at
8895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
9895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall http://www.apache.org/licenses/LICENSE-2.0
10895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
11895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall Unless required by applicable law or agreed to in writing, software
12895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall distributed under the License is distributed on an "AS IS" BASIS,
13895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall See the License for the specific language governing permissions and
15895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall limitations under the License.
16895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall  $
17895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall */
18895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/******************************************************************************
19895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * $Id: log_linux.c 5629 2011-06-11 03:13:08Z mcaramello $
20895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall ******************************************************************************/
21895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
22895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/**
23895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * @defgroup MPL_LOG
24895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * @brief Logging facility for the MPL
25895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *
26895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * @{
27895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *      @file     log.c
28895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *      @brief    Core logging facility functions.
29895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *
30895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall *
31895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall**/
32895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
33895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include <stdio.h>
34895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include <string.h>
35895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "log.h"
36895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#include "mltypes.h"
37895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
38895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define LOG_BUFFER_SIZE (256)
39895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
40895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#ifdef WIN32
41895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define snprintf _snprintf
42895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#define vsnprintf _vsnprintf
43895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall#endif
44895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
45895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint _MLPrintLog (int priority, const char* tag, const char* fmt, ...)
46895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall{
47895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    va_list ap;
48895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    int result;
49895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
50895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    va_start(ap, fmt);
51895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    result = _MLPrintVaLog(priority,tag,fmt,ap);
52895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    va_end(ap);
53895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
54895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    return result;
55895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall}
56895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
57895401859313187f15a800e62d43e6bcbf48fadaJP Abgrallint _MLPrintVaLog(int priority, const char* tag, const char* fmt, va_list args)
58895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall{
59895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    int result;
60895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    char buf[LOG_BUFFER_SIZE];
61895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    char new_fmt[LOG_BUFFER_SIZE];
62895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    char priority_char;
63895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
64895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    if (NULL == fmt) {
65895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        fmt = "";
66895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    }
67895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
68895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    switch (priority) {
69895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_UNKNOWN:
70895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'U';
71895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
72895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_VERBOSE:
73895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'V';
74895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
75895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_DEBUG:
76895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'D';
77895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
78895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_INFO:
79895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'I';
80895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
81895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_WARN:
82895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'W';
83895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
84895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_ERROR:
85895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'E';
86895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
87895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_SILENT:
88895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'S';
89895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
90895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    case MPL_LOG_DEFAULT:
91895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    default:
92895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        priority_char = 'D';
93895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        break;
94895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    };
95895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
96895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    result = snprintf(new_fmt, sizeof(new_fmt), "%c/%s:%s",
97895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall                       priority_char, tag, fmt);
98895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    if (result <= 0) {
99895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        return INV_ERROR_LOG_MEMORY_ERROR;
100895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    }
101895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    result = vsnprintf(buf,sizeof(buf),new_fmt, args);
102895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    if (result <= 0) {
103895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall        return INV_ERROR_LOG_OUTPUT_ERROR;
104895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    }
105895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
106895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    result = _MLWriteLog(buf, strlen(buf));
107895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall    return INV_SUCCESS;
108895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall}
109895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
110895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall/**
111895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall * @}
112895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall**/
113895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
114895401859313187f15a800e62d43e6bcbf48fadaJP Abgrall
115