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