EventManager: Add optional debug printing

pull/56/head
Kyle Schwarz 2023-04-27 18:52:17 +00:00
parent 2f7c3a2dda
commit b6d9ef4c7e
2 changed files with 26 additions and 0 deletions

View File

@ -110,6 +110,10 @@ for(size_t i = 0; i < messageCount; i++) {
icsneo_closeDevice(myDevice); icsneo_closeDevice(myDevice);
``` ```
### Debugging
To enable debug printing set the `LIBICSNEO_PRINT_EVENTS` environmental variable to the desired `APIEvent::Severity` level, all `Event`s greater than or equal to that level will be printed to stderr. For example, to print all warnings and errors: `LIBICSNEO_PRINT_EVENTS=32`.
## Building from Source ## Building from Source
### FTD3XX ### FTD3XX
Some devices require FTD3XX for USB communication so the [FTDI D3XX library](https://ftdichip.com/drivers/d3xx-drivers/) will be automatically downloaded and included. If you would like to use a system copy of D3XX instead you can set `FTD3XX_ROOT` to the path containing `f3d3xx.h` (`-DFTD3XX_ROOT=<path to directory containing ftd3xx.h>`). Some devices require FTD3XX for USB communication so the [FTDI D3XX library](https://ftdichip.com/drivers/d3xx-drivers/) will be automatically downloaded and included. If you would like to use a system copy of D3XX instead you can set `FTD3XX_ROOT` to the path containing `f3d3xx.h` (`-DFTD3XX_ROOT=<path to directory containing ftd3xx.h>`).

View File

@ -1,5 +1,8 @@
#include "icsneo/api/eventmanager.h" #include "icsneo/api/eventmanager.h"
#include <memory> #include <memory>
#include <optional>
#include <iostream>
#include <cstdlib>
using namespace icsneo; using namespace icsneo;
@ -33,6 +36,25 @@ void EventManager::cancelErrorDowngradingOnCurrentThread() {
void EventManager::add(APIEvent event) { void EventManager::add(APIEvent event) {
if(destructing) if(destructing)
return; return;
static const auto printLevel = []() -> std::optional<uint8_t> {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
#endif
const auto level = std::getenv("LIBICSNEO_PRINT_EVENTS");
#ifdef _MSC_VER
#pragma warning(pop)
#endif
if(!level)
return std::nullopt;
try {
return (uint8_t)std::stoi(level);
} catch (std::invalid_argument const&) {
return std::nullopt;
}
}();
if(printLevel && (uint8_t)event.getSeverity() >= *printLevel)
std::cerr << event.describe() << std::endl;
if(event.getSeverity() == APIEvent::Severity::Error) { if(event.getSeverity() == APIEvent::Severity::Error) {
// if the error was added on a thread that downgrades errors (non-user thread) // if the error was added on a thread that downgrades errors (non-user thread)
std::lock_guard<std::mutex> lk(downgradedThreadsMutex); std::lock_guard<std::mutex> lk(downgradedThreadsMutex);