Display_Lib_RPI 2.5.0
A C++ Library to connect electronic displays to Linux single board computers.
Loading...
Searching...
No Matches
utility_data_RDL.hpp
Go to the documentation of this file.
1
11#pragma once
12
13#include <string>
14#include <utility>
15#include <iostream>
16#include <ostream>
17#include <sstream>
18#include <fstream>
19#include <source_location>
20#include <chrono>
21#include <iomanip>
22#include <ctime>
23#include <cstdlib>
24#include <filesystem>
25#include <cmath> // For std::cos, std::sin std::lerp
26
28namespace rdlib_config
29{
30 void loadConfig();
31 bool isLoggingEnabled();
32 bool isDebugEnabled();
33 std::string getErrorLogPath();
34}
35
37namespace rdlib_maths
38{
39 int mapValue(int x, int in_min, int in_max, int out_min, int out_max);
40 float sineFromDegrees(float angle);
41 float cosineFromDegrees(float angle);
42 uint16_t generateColor(uint8_t value);
43 uint16_t blend565(uint16_t c1, uint16_t c2, uint8_t amount);
44}
45
47namespace rdlib_log
48{
49
50std::ostream& operator<<(std::ostream& os, const std::source_location& location);
51
56template<typename DATA_T>
57class logData {
58 public:
65 logData(std::string str, DATA_T data, const std::source_location& loc =
66 std::source_location::current())
67 : errorString(std::move(str)), userData(std::move(data)), errorLocation(loc) {
69 logError();
70 }
71 }
76 std::string& what() { return errorString; }
81 const std::string& what() const noexcept { return errorString; }
86 const std::source_location& where() const noexcept { return errorLocation; }
91 DATA_T& data() { return userData; }
96 const DATA_T& data() const noexcept { return userData; }
97
98private:
99 std::string errorString;
100 DATA_T userData;
101 const std::source_location errorLocation;
106 void logError() const {
107 std::ofstream logFile(rdlib_config::getErrorLogPath(), std::ios::app);
108 if (logFile) {
109 // Get current time
110 auto now = std::chrono::system_clock::now();
111 auto timeT = std::chrono::system_clock::to_time_t(now);
112 logFile << "[" << std::put_time(std::localtime(&timeT), "%Y-%m-%d %H:%M:%S") << "]\n"
113 << "Info: " << errorString << "\n"
114 << "Data: " << userData << "\n"
115 << "Location: " << errorLocation << "\n"
116 << "-----------------------------\n";
117 } else {
118 std::cerr << "Failed to open log file: " << rdlib_config::getErrorLogPath() << "\n";
119 perror("Error reason"); // Print system error message
120 }
121 }
122};
123
124}
Exception class template for handling and logging errors.
Definition utility_data_RDL.hpp:57
const DATA_T & data() const noexcept
Retrieves the user-defined data (const version).
Definition utility_data_RDL.hpp:96
const std::source_location errorLocation
Definition utility_data_RDL.hpp:101
DATA_T & data()
Retrieves the user-defined data.
Definition utility_data_RDL.hpp:91
const std::string & what() const noexcept
Retrieves the error message (const version).
Definition utility_data_RDL.hpp:81
DATA_T userData
Definition utility_data_RDL.hpp:100
logData(std::string str, DATA_T data, const std::source_location &loc=std::source_location::current())
Constructs an OmegaException with an error message and user data.
Definition utility_data_RDL.hpp:65
std::string & what()
Retrieves the error message.
Definition utility_data_RDL.hpp:76
void logError() const
Logs the error message to a file. If the logfile cannot be opened, an error message is printed to std...
Definition utility_data_RDL.hpp:106
std::string errorString
Definition utility_data_RDL.hpp:99
const std::source_location & where() const noexcept
Retrieves the source location of the exception.
Definition utility_data_RDL.hpp:86
Name space for config file related utilities.
Definition utility_data_RDL.hpp:29
void loadConfig()
This function loads the config file into program.
Definition utility_data_RDL.cpp:157
bool isDebugEnabled()
retrieve the debug enabled setting , true for debug on
Definition utility_data_RDL.cpp:210
std::string getErrorLogPath()
retrieve the log file path setting
Definition utility_data_RDL.cpp:217
bool isLoggingEnabled()
retrieve the logging enabled setting , true for logging on
Definition utility_data_RDL.cpp:203
Name space for log file related utilities.
Definition utility_data_RDL.hpp:48
std::ostream & operator<<(std::ostream &os, const std::source_location &location)
Overloaded stream insertion operator for std::source_location.
Definition utility_data_RDL.cpp:132
Name space for maths related utilities.
Definition utility_data_RDL.hpp:38
uint16_t generateColor(uint8_t value)
This function is designed to return a color in the 16-bit RGB format based on the input value,...
Definition utility_data_RDL.cpp:73
float sineFromDegrees(float angle)
Computes the sine of an angle given in degrees. This function converts the input angle from degrees t...
Definition utility_data_RDL.cpp:55
uint16_t blend565(uint16_t c1, uint16_t c2, uint8_t amount)
: Blend two RGB565 colors using 8-bit mix factor
Definition utility_data_RDL.cpp:98
float cosineFromDegrees(float angle)
Computes the cosine of an angle given in degrees. This function converts the input angle from degrees...
Definition utility_data_RDL.cpp:42
int mapValue(int x, int in_min, int in_max, int out_min, int out_max)
Maps a value from one range to another using linear interpolation. This function takes an input value...
Definition utility_data_RDL.cpp:29