Changeset 6028ec8 in mainline for uspace/lib/usb/src/debug.c


Ignore:
Timestamp:
2011-02-01T11:28:09Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0b31409
Parents:
632ed68
Message:

Add generic logging functions

See ticket #52.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/debug.c

    r632ed68 r6028ec8  
    11/*
    2  * Copyright (c) 2010 Vojtech Horky
     2 * Copyright (c) 2010-2011 Vojtech Horky
    33 * All rights reserved.
    44 *
     
    6161static FIBRIL_MUTEX_INITIALIZE(tag_list_guard);
    6262
     63/** Level of logging messages. */
     64static usb_log_level_t log_level = USB_LOG_LEVEL_WARNING;
     65/** Prefix for logging messages. */
     66static const char *log_prefix = "usb";
     67/** Serialization mutex for logging functions. */
     68static FIBRIL_MUTEX_INITIALIZE(log_serializer);
     69
    6370/** Find or create new tag with given name.
    6471 *
     
    155162}
    156163
     164/** Enable logging.
     165 *
     166 * @param level Maximal enabled level (including this one).
     167 * @param message_prefix Prefix for each printed message.
     168 */
     169void usb_log_enable(usb_log_level_t level, const char *message_prefix)
     170{
     171        log_prefix = message_prefix;
     172        log_level = level;
     173}
     174
     175
     176static const char *log_level_name(usb_log_level_t level)
     177{
     178        switch (level) {
     179                case USB_LOG_LEVEL_FATAL:
     180                        return " FATAL";
     181                case USB_LOG_LEVEL_ERROR:
     182                        return " ERROR";
     183                case USB_LOG_LEVEL_WARNING:
     184                        return " WARN";
     185                case USB_LOG_LEVEL_INFO:
     186                        return " info";
     187                default:
     188                        return "";
     189        }
     190}
     191
     192/** Print logging message.
     193 *
     194 * @param level Verbosity level of the message.
     195 * @param format Formatting directive.
     196 */
     197void usb_log_printf(usb_log_level_t level, const char *format, ...)
     198{
     199        if (level > log_level) {
     200                return;
     201        }
     202
     203        FILE *stream = NULL;
     204        switch (level) {
     205                case USB_LOG_LEVEL_FATAL:
     206                case USB_LOG_LEVEL_ERROR:
     207                        stream = stderr;
     208                        break;
     209                default:
     210                        stream = stdout;
     211                        break;
     212        }
     213        assert(stream != NULL);
     214
     215        va_list args;
     216        va_start(args, format);
     217
     218        fibril_mutex_lock(&log_serializer);
     219        fprintf(stream, "[%s]%s: ", log_prefix, log_level_name(level));
     220        vfprintf(stream, format, args);
     221        fibril_mutex_unlock(&log_serializer);
     222
     223        va_end(args);
     224}
    157225
    158226/**
Note: See TracChangeset for help on using the changeset viewer.