embkernel
 All Classes Functions Variables Typedefs Groups Pages
LibLog.cpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #include "LibLog.hpp"
7 #include "LibStringFormat.hpp"
8 #include "LibCfg.hpp"
9 #include <stdarg.h>
10 
11 LibLog::LEVEL LibLog::sLevel = LEVEL_OFF;
12 LibStreamOut* LibLog::sStream = 0;
13 RtosSemaphore LibLog::sSema(1, 1);
14 
15 void LibLog::setStream(LibStreamOut* stream) {
16  sSema.take(Rtos::TICK_INFINITE);
17  sStream = stream;
18  sSema.give(Rtos::TICK_INFINITE);
19 }
20 
21 void LibLog::setLevel(LEVEL level) {
22  sLevel = level;
23 }
24 
25 int LibLog::printf(LEVEL level, const char* string, ...) {
26  sSema.take(Rtos::TICK_INFINITE);
27  if (level < sLevel) {
28  sSema.give(Rtos::TICK_INFINITE);
29  return 0;
30  }
31  if (sStream == 0) {
32  sSema.give(Rtos::TICK_INFINITE);
33  return 0;
34  }
35 
36  int len;
37  va_list varg;
38 
39  va_start(varg, string);
40 
41  len = LibStringFormat::vprintf(*sStream, string, varg);
42  flush();
43  sSema.give(Rtos::TICK_INFINITE);
44  va_end(varg);
45  return len;
46 }
47 
48 __attribute__((weak)) void LibLog::flush() {
49 
50 }
51