PulseView  0.3.0
A Qt-based sigrok GUI
loghandler.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2014 Marcus Comstedt <marcus@mc.pp.se>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifdef ENABLE_DECODE
21 #include <libsigrokdecode/libsigrokdecode.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
22 #endif
23 
24 #include <android/log.h>
25 
26 #include <stdint.h>
27 #include <libsigrok/libsigrok.h>
28 
29 #include "android/loghandler.hpp"
30 
31 namespace pv {
32 
33 int AndroidLogHandler::sr_callback(void *cb_data, int loglevel, const char *format, va_list args)
34 {
35  static const int prio[] = {
36  [SR_LOG_NONE] = ANDROID_LOG_SILENT,
37  [SR_LOG_ERR] = ANDROID_LOG_ERROR,
38  [SR_LOG_WARN] = ANDROID_LOG_WARN,
39  [SR_LOG_INFO] = ANDROID_LOG_INFO,
40  [SR_LOG_DBG] = ANDROID_LOG_DEBUG,
41  [SR_LOG_SPEW] = ANDROID_LOG_VERBOSE,
42  };
43  int ret;
44 
45  /* This specific log callback doesn't need the void pointer data. */
46  (void)cb_data;
47 
48  /* Only output messages of at least the selected loglevel(s). */
49  if (loglevel > sr_log_loglevel_get())
50  return SR_OK;
51 
52  if (loglevel < SR_LOG_NONE)
53  loglevel = SR_LOG_NONE;
54  else if (loglevel > SR_LOG_SPEW)
55  loglevel = SR_LOG_SPEW;
56 
57  ret = __android_log_vprint(prio[loglevel], "sr", format, args);
58 
59  return ret;
60 }
61 
62 int AndroidLogHandler::srd_callback(void *cb_data, int loglevel, const char *format, va_list args)
63 {
64 #ifdef ENABLE_DECODE
65  static const int prio[] = {
66  [SRD_LOG_NONE] = ANDROID_LOG_SILENT,
67  [SRD_LOG_ERR] = ANDROID_LOG_ERROR,
68  [SRD_LOG_WARN] = ANDROID_LOG_WARN,
69  [SRD_LOG_INFO] = ANDROID_LOG_INFO,
70  [SRD_LOG_DBG] = ANDROID_LOG_DEBUG,
71  [SRD_LOG_SPEW] = ANDROID_LOG_VERBOSE,
72  };
73  int ret;
74 
75  /* This specific log callback doesn't need the void pointer data. */
76  (void)cb_data;
77 
78  /* Only output messages of at least the selected loglevel(s). */
79  if (loglevel > srd_log_loglevel_get())
80  return SRD_OK;
81 
82  if (loglevel < SRD_LOG_NONE)
83  loglevel = SRD_LOG_NONE;
84  else if (loglevel > SRD_LOG_SPEW)
85  loglevel = SRD_LOG_SPEW;
86 
87  ret = __android_log_vprint(prio[loglevel], "srd", format, args);
88 
89  return ret;
90 #else
91  return 0;
92 #endif
93 }
94 
96 {
97  sr_log_callback_set(sr_callback, nullptr);
98 #ifdef ENABLE_DECODE
99  srd_log_callback_set(srd_callback, nullptr);
100 #endif
101 }
102 
103 } // namespace pv
static void install_callbacks()
Definition: loghandler.cpp:95
static int srd_callback(void *cb_data, int loglevel, const char *format, va_list args)
Definition: loghandler.cpp:62
static int sr_callback(void *cb_data, int loglevel, const char *format, va_list args)
Definition: loghandler.cpp:33