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