142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru/*
242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru $License:
342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru   Copyright 2011 InvenSense, Inc.
442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru Licensed under the Apache License, Version 2.0 (the "License");
642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru you may not use this file except in compliance with the License.
742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru You may obtain a copy of the License at
842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru http://www.apache.org/licenses/LICENSE-2.0
1042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
1142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru Unless required by applicable law or agreed to in writing, software
1242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru distributed under the License is distributed on an "AS IS" BASIS,
1342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru See the License for the specific language governing permissions and
1542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru limitations under the License.
1642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru  $
1742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru */
1842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru/******************************************************************************
1942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru * $Id: log_linux.c 5629 2011-06-11 03:13:08Z mcaramello $
2042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru ******************************************************************************/
2142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
2242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru/**
2342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru * @defgroup MPL_LOG
2442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru * @brief Logging facility for the MPL
2542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru *
2642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru * @{
2742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru *      @file     log.c
2842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru *      @brief    Core logging facility functions.
2942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru *
3042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru *
3142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru**/
3242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
3342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include <stdio.h>
3442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include <string.h>
3542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include "log.h"
3642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#include "mltypes.h"
3742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
3842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define LOG_BUFFER_SIZE (256)
3942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
4042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#ifdef WIN32
4142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define snprintf _snprintf
4242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#define vsnprintf _vsnprintf
4342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru#endif
4442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
4542331858975144405f95243be8427084ee7d478dJean-Baptiste Queruint _MLPrintLog (int priority, const char* tag, const char* fmt, ...)
4642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru{
4742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    va_list ap;
4842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    int result;
4942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
5042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    va_start(ap, fmt);
5142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    result = _MLPrintVaLog(priority,tag,fmt,ap);
5242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    va_end(ap);
5342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
5442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    return result;
5542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru}
5642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
5742331858975144405f95243be8427084ee7d478dJean-Baptiste Queruint _MLPrintVaLog(int priority, const char* tag, const char* fmt, va_list args)
5842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru{
5942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    int result;
6042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    char buf[LOG_BUFFER_SIZE];
6142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    char new_fmt[LOG_BUFFER_SIZE];
6242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    char priority_char;
6342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
6442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    if (NULL == fmt) {
6542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        fmt = "";
6642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    }
6742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
6842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    switch (priority) {
6942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_UNKNOWN:
7042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'U';
7142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
7242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_VERBOSE:
7342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'V';
7442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
7542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_DEBUG:
7642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'D';
7742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
7842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_INFO:
7942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'I';
8042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
8142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_WARN:
8242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'W';
8342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
8442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_ERROR:
8542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'E';
8642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
8742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_SILENT:
8842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'S';
8942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
9042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    case MPL_LOG_DEFAULT:
9142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    default:
9242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        priority_char = 'D';
9342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        break;
9442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    };
9542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
9642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    result = snprintf(new_fmt, sizeof(new_fmt), "%c/%s:%s",
9742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru                       priority_char, tag, fmt);
9842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    if (result <= 0) {
9942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        return INV_ERROR_LOG_MEMORY_ERROR;
10042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    }
10142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    result = vsnprintf(buf,sizeof(buf),new_fmt, args);
10242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    if (result <= 0) {
10342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru        return INV_ERROR_LOG_OUTPUT_ERROR;
10442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    }
10542331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
10642331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    result = _MLWriteLog(buf, strlen(buf));
10742331858975144405f95243be8427084ee7d478dJean-Baptiste Queru    return INV_SUCCESS;
10842331858975144405f95243be8427084ee7d478dJean-Baptiste Queru}
10942331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
11042331858975144405f95243be8427084ee7d478dJean-Baptiste Queru/**
11142331858975144405f95243be8427084ee7d478dJean-Baptiste Queru * @}
11242331858975144405f95243be8427084ee7d478dJean-Baptiste Queru**/
11342331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
11442331858975144405f95243be8427084ee7d478dJean-Baptiste Queru
115