global variables prefix

This commit is contained in:
Maxim Devaev
2022-07-21 16:29:20 +03:00
parent 11f0b80228
commit 9ab9561803
6 changed files with 69 additions and 69 deletions

View File

@@ -151,12 +151,12 @@ int main(int argc, char *argv[]) {
case _O_COUNT: OPT_NUMBER("--count", count, 0, LLONG_MAX, 0); case _O_COUNT: OPT_NUMBER("--count", count, 0, LLONG_MAX, 0);
case _O_INTERVAL: OPT_LDOUBLE("--interval", interval, 0, 60); case _O_INTERVAL: OPT_LDOUBLE("--interval", interval, 0, 60);
case _O_LOG_LEVEL: OPT_NUMBER("--log-level", us_log_level, US_LOG_LEVEL_INFO, US_LOG_LEVEL_DEBUG, 0); case _O_LOG_LEVEL: OPT_NUMBER("--log-level", us_g_log_level, US_LOG_LEVEL_INFO, US_LOG_LEVEL_DEBUG, 0);
case _O_PERF: OPT_SET(us_log_level, US_LOG_LEVEL_PERF); case _O_PERF: OPT_SET(us_g_log_level, US_LOG_LEVEL_PERF);
case _O_VERBOSE: OPT_SET(us_log_level, US_LOG_LEVEL_VERBOSE); case _O_VERBOSE: OPT_SET(us_g_log_level, US_LOG_LEVEL_VERBOSE);
case _O_DEBUG: OPT_SET(us_log_level, US_LOG_LEVEL_DEBUG); case _O_DEBUG: OPT_SET(us_g_log_level, US_LOG_LEVEL_DEBUG);
case _O_FORCE_LOG_COLORS: OPT_SET(us_log_colored, true); case _O_FORCE_LOG_COLORS: OPT_SET(us_g_log_colored, true);
case _O_NO_LOG_COLORS: OPT_SET(us_log_colored, false); case _O_NO_LOG_COLORS: OPT_SET(us_g_log_colored, false);
case _O_HELP: _help(stdout); return 0; case _O_HELP: _help(stdout); return 0;
case _O_VERSION: puts(US_VERSION); return 0; case _O_VERSION: puts(US_VERSION); return 0;
@@ -330,7 +330,7 @@ static void _help(FILE *fp) {
SAY(" --log-level <N> ──── Verbosity level of messages from 0 (info) to 3 (debug)."); SAY(" --log-level <N> ──── Verbosity level of messages from 0 (info) to 3 (debug).");
SAY(" Enabling debugging messages can slow down the program."); SAY(" Enabling debugging messages can slow down the program.");
SAY(" Available levels: 0 (info), 1 (performance), 2 (verbose), 3 (debug)."); SAY(" Available levels: 0 (info), 1 (performance), 2 (verbose), 3 (debug).");
SAY(" Default: %d.\n", us_log_level); SAY(" Default: %d.\n", us_g_log_level);
SAY(" --perf ───────────── Enable performance messages (same as --log-level=1). Default: disabled.\n"); SAY(" --perf ───────────── Enable performance messages (same as --log-level=1). Default: disabled.\n");
SAY(" --verbose ────────── Enable verbose messages and lower (same as --log-level=2). Default: disabled.\n"); SAY(" --verbose ────────── Enable verbose messages and lower (same as --log-level=2). Default: disabled.\n");
SAY(" --debug ──────────── Enable debug messages and lower (same as --log-level=3). Default: disabled.\n"); SAY(" --debug ──────────── Enable debug messages and lower (same as --log-level=3). Default: disabled.\n");

View File

@@ -23,8 +23,8 @@
#include "logging.h" #include "logging.h"
enum us_log_level_t us_log_level; enum us_log_level_t us_g_log_level;
bool us_log_colored; bool us_g_log_colored;
pthread_mutex_t us_log_mutex; pthread_mutex_t us_g_log_mutex;

View File

@@ -45,23 +45,23 @@ enum us_log_level_t {
}; };
extern enum us_log_level_t us_log_level; extern enum us_log_level_t us_g_log_level;
extern bool us_log_colored; extern bool us_g_log_colored;
extern pthread_mutex_t us_log_mutex; extern pthread_mutex_t us_g_log_mutex;
#define US_LOGGING_INIT { \ #define US_LOGGING_INIT { \
us_log_level = US_LOG_LEVEL_INFO; \ us_g_log_level = US_LOG_LEVEL_INFO; \
us_log_colored = isatty(2); \ us_g_log_colored = isatty(2); \
US_MUTEX_INIT(us_log_mutex); \ US_MUTEX_INIT(us_g_log_mutex); \
} }
#define US_LOGGING_DESTROY US_MUTEX_DESTROY(us_log_mutex) #define US_LOGGING_DESTROY US_MUTEX_DESTROY(us_g_log_mutex)
#define US_LOGGING_LOCK US_MUTEX_LOCK(us_log_mutex) #define US_LOGGING_LOCK US_MUTEX_LOCK(us_g_log_mutex)
#define US_LOGGING_UNLOCK US_MUTEX_UNLOCK(us_log_mutex) #define US_LOGGING_UNLOCK US_MUTEX_UNLOCK(us_g_log_mutex)
#define US_COLOR_GRAY "\x1b[30;1m" #define US_COLOR_GRAY "\x1b[30;1m"
@@ -84,7 +84,7 @@ extern pthread_mutex_t us_log_mutex;
} }
#define US_SEP_DEBUG(x_ch) { \ #define US_SEP_DEBUG(x_ch) { \
if (us_log_level >= US_LOG_LEVEL_DEBUG) { \ if (us_g_log_level >= US_LOG_LEVEL_DEBUG) { \
US_SEP_INFO(x_ch); \ US_SEP_INFO(x_ch); \
} \ } \
} }
@@ -93,7 +93,7 @@ extern pthread_mutex_t us_log_mutex;
#define US_LOG_PRINTF_NOLOCK(x_label_color, x_label, x_msg_color, x_msg, ...) { \ #define US_LOG_PRINTF_NOLOCK(x_label_color, x_label, x_msg_color, x_msg, ...) { \
char m_tname_buf[US_MAX_THREAD_NAME] = {0}; \ char m_tname_buf[US_MAX_THREAD_NAME] = {0}; \
us_thread_get_name(m_tname_buf); \ us_thread_get_name(m_tname_buf); \
if (us_log_colored) { \ if (us_g_log_colored) { \
fprintf(stderr, US_COLOR_GRAY "-- " x_label_color x_label US_COLOR_GRAY \ fprintf(stderr, US_COLOR_GRAY "-- " x_label_color x_label US_COLOR_GRAY \
" [%.03Lf %9s]" " -- " US_COLOR_RESET x_msg_color x_msg US_COLOR_RESET, \ " [%.03Lf %9s]" " -- " US_COLOR_RESET x_msg_color x_msg US_COLOR_RESET, \
us_get_now_monotonic(), m_tname_buf, ##__VA_ARGS__); \ us_get_now_monotonic(), m_tname_buf, ##__VA_ARGS__); \
@@ -130,25 +130,25 @@ extern pthread_mutex_t us_log_mutex;
} }
#define US_LOG_PERF(x_msg, ...) { \ #define US_LOG_PERF(x_msg, ...) { \
if (us_log_level >= US_LOG_LEVEL_PERF) { \ if (us_g_log_level >= US_LOG_LEVEL_PERF) { \
US_LOG_PRINTF(US_COLOR_CYAN, "PERF ", US_COLOR_CYAN, x_msg, ##__VA_ARGS__); \ US_LOG_PRINTF(US_COLOR_CYAN, "PERF ", US_COLOR_CYAN, x_msg, ##__VA_ARGS__); \
} \ } \
} }
#define US_LOG_PERF_FPS(x_msg, ...) { \ #define US_LOG_PERF_FPS(x_msg, ...) { \
if (us_log_level >= US_LOG_LEVEL_PERF) { \ if (us_g_log_level >= US_LOG_LEVEL_PERF) { \
US_LOG_PRINTF(US_COLOR_YELLOW, "PERF ", US_COLOR_YELLOW, x_msg, ##__VA_ARGS__); \ US_LOG_PRINTF(US_COLOR_YELLOW, "PERF ", US_COLOR_YELLOW, x_msg, ##__VA_ARGS__); \
} \ } \
} }
#define US_LOG_VERBOSE(x_msg, ...) { \ #define US_LOG_VERBOSE(x_msg, ...) { \
if (us_log_level >= US_LOG_LEVEL_VERBOSE) { \ if (us_g_log_level >= US_LOG_LEVEL_VERBOSE) { \
US_LOG_PRINTF(US_COLOR_BLUE, "VERB ", US_COLOR_BLUE, x_msg, ##__VA_ARGS__); \ US_LOG_PRINTF(US_COLOR_BLUE, "VERB ", US_COLOR_BLUE, x_msg, ##__VA_ARGS__); \
} \ } \
} }
#define US_LOG_VERBOSE_PERROR(x_msg, ...) { \ #define US_LOG_VERBOSE_PERROR(x_msg, ...) { \
if (us_log_level >= US_LOG_LEVEL_VERBOSE) { \ if (us_g_log_level >= US_LOG_LEVEL_VERBOSE) { \
char m_perror_buf[1024] = {0}; \ char m_perror_buf[1024] = {0}; \
char *m_perror_ptr = us_errno_to_string(errno, m_perror_buf, 1023); \ char *m_perror_ptr = us_errno_to_string(errno, m_perror_buf, 1023); \
US_LOG_PRINTF(US_COLOR_BLUE, "VERB ", US_COLOR_BLUE, x_msg ": %s", ##__VA_ARGS__, m_perror_ptr); \ US_LOG_PRINTF(US_COLOR_BLUE, "VERB ", US_COLOR_BLUE, x_msg ": %s", ##__VA_ARGS__, m_perror_ptr); \
@@ -156,7 +156,7 @@ extern pthread_mutex_t us_log_mutex;
} }
#define US_LOG_DEBUG(x_msg, ...) { \ #define US_LOG_DEBUG(x_msg, ...) { \
if (us_log_level >= US_LOG_LEVEL_DEBUG) { \ if (us_g_log_level >= US_LOG_LEVEL_DEBUG) { \
US_LOG_PRINTF(US_COLOR_GRAY, "DEBUG", US_COLOR_GRAY, x_msg, ##__VA_ARGS__); \ US_LOG_PRINTF(US_COLOR_GRAY, "DEBUG", US_COLOR_GRAY, x_msg, ##__VA_ARGS__); \
} \ } \
} }

View File

@@ -23,7 +23,7 @@
#include "gpio.h" #include "gpio.h"
us_gpio_s us_gpio = { us_gpio_s us_g_gpio = {
.path = "/dev/gpiochip0", .path = "/dev/gpiochip0",
.consumer_prefix = "ustreamer", .consumer_prefix = "ustreamer",
@@ -51,42 +51,42 @@ static void _gpio_output_destroy(us_gpio_output_s *output);
void us_gpio_init(void) { void us_gpio_init(void) {
assert(us_gpio.chip == NULL); assert(us_g_gpio.chip == NULL);
if ( if (
us_gpio.prog_running.pin >= 0 us_g_gpio.prog_running.pin >= 0
|| us_gpio.stream_online.pin >= 0 || us_g_gpio.stream_online.pin >= 0
|| us_gpio.has_http_clients.pin >= 0 || us_g_gpio.has_http_clients.pin >= 0
) { ) {
US_MUTEX_INIT(us_gpio.mutex); US_MUTEX_INIT(us_g_gpio.mutex);
US_LOG_INFO("GPIO: Using chip device: %s", us_gpio.path); US_LOG_INFO("GPIO: Using chip device: %s", us_g_gpio.path);
if ((us_gpio.chip = gpiod_chip_open(us_gpio.path)) != NULL) { if ((us_g_gpio.chip = gpiod_chip_open(us_g_gpio.path)) != NULL) {
_gpio_output_init(&us_gpio.prog_running); _gpio_output_init(&us_g_gpio.prog_running);
_gpio_output_init(&us_gpio.stream_online); _gpio_output_init(&us_g_gpio.stream_online);
_gpio_output_init(&us_gpio.has_http_clients); _gpio_output_init(&us_g_gpio.has_http_clients);
} else { } else {
US_LOG_PERROR("GPIO: Can't initialize chip device %s", us_gpio.path); US_LOG_PERROR("GPIO: Can't initialize chip device %s", us_g_gpio.path);
} }
} }
} }
void us_gpio_destroy(void) { void us_gpio_destroy(void) {
_gpio_output_destroy(&us_gpio.prog_running); _gpio_output_destroy(&us_g_gpio.prog_running);
_gpio_output_destroy(&us_gpio.stream_online); _gpio_output_destroy(&us_g_gpio.stream_online);
_gpio_output_destroy(&us_gpio.has_http_clients); _gpio_output_destroy(&us_g_gpio.has_http_clients);
if (us_gpio.chip != NULL) { if (us_g_gpio.chip != NULL) {
gpiod_chip_close(us_gpio.chip); gpiod_chip_close(us_g_gpio.chip);
us_gpio.chip = NULL; us_g_gpio.chip = NULL;
US_MUTEX_DESTROY(us_gpio.mutex); US_MUTEX_DESTROY(us_g_gpio.mutex);
} }
} }
int us_gpio_inner_set(us_gpio_output_s *output, bool state) { int us_gpio_inner_set(us_gpio_output_s *output, bool state) {
int retval = 0; int retval = 0;
assert(us_gpio.chip != NULL); assert(us_g_gpio.chip != NULL);
assert(output->line != NULL); assert(output->line != NULL);
assert(output->state != state); // Must be checked in macro for the performance assert(output->state != state); // Must be checked in macro for the performance
US_MUTEX_LOCK(us_gpio.mutex); US_MUTEX_LOCK(us_g_gpio.mutex);
if (gpiod_line_set_value(output->line, (int)state) < 0) { \ if (gpiod_line_set_value(output->line, (int)state) < 0) { \
US_LOG_PERROR("GPIO: Can't write value %d to line %s (will be disabled)", state, output->consumer); \ US_LOG_PERROR("GPIO: Can't write value %d to line %s (will be disabled)", state, output->consumer); \
@@ -94,18 +94,18 @@ int us_gpio_inner_set(us_gpio_output_s *output, bool state) {
retval = -1; retval = -1;
} }
US_MUTEX_UNLOCK(us_gpio.mutex); US_MUTEX_UNLOCK(us_g_gpio.mutex);
return retval; return retval;
} }
static void _gpio_output_init(us_gpio_output_s *output) { static void _gpio_output_init(us_gpio_output_s *output) {
assert(us_gpio.chip != NULL); assert(us_g_gpio.chip != NULL);
assert(output->line == NULL); assert(output->line == NULL);
US_ASPRINTF(output->consumer, "%s::%s", us_gpio.consumer_prefix, output->role); US_ASPRINTF(output->consumer, "%s::%s", us_g_gpio.consumer_prefix, output->role);
if (output->pin >= 0) { if (output->pin >= 0) {
if ((output->line = gpiod_chip_get_line(us_gpio.chip, output->pin)) != NULL) { if ((output->line = gpiod_chip_get_line(us_g_gpio.chip, output->pin)) != NULL) {
if (gpiod_line_request_output(output->line, output->consumer, 0) < 0) { if (gpiod_line_request_output(output->line, output->consumer, 0) < 0) {
US_LOG_PERROR("GPIO: Can't request pin=%d as %s", output->pin, output->consumer); US_LOG_PERROR("GPIO: Can't request pin=%d as %s", output->pin, output->consumer);
_gpio_output_destroy(output); _gpio_output_destroy(output);

View File

@@ -56,7 +56,7 @@ typedef struct {
} us_gpio_s; } us_gpio_s;
extern us_gpio_s us_gpio; extern us_gpio_s us_g_gpio;
void us_gpio_init(void); void us_gpio_init(void);
@@ -73,15 +73,15 @@ int us_gpio_inner_set(us_gpio_output_s *output, bool state);
} }
INLINE void us_gpio_set_prog_running(bool state) { INLINE void us_gpio_set_prog_running(bool state) {
SET_STATE(us_gpio.prog_running, state); SET_STATE(us_g_gpio.prog_running, state);
} }
INLINE void us_gpio_set_stream_online(bool state) { INLINE void us_gpio_set_stream_online(bool state) {
SET_STATE(us_gpio.stream_online, state); SET_STATE(us_g_gpio.stream_online, state);
} }
INLINE void us_gpio_set_has_http_clients(bool state) { INLINE void us_gpio_set_has_http_clients(bool state) {
SET_STATE(us_gpio.has_http_clients, state); SET_STATE(us_g_gpio.has_http_clients, state);
} }
#undef SET_STATE #undef SET_STATE

View File

@@ -437,11 +437,11 @@ int options_parse(us_options_s *options, us_device_s *dev, us_encoder_s *enc, us
# undef ADD_SINK # undef ADD_SINK
# ifdef WITH_GPIO # ifdef WITH_GPIO
case _O_GPIO_DEVICE: OPT_SET(us_gpio.path, optarg); case _O_GPIO_DEVICE: OPT_SET(us_g_gpio.path, optarg);
case _O_GPIO_CONSUMER_PREFIX: OPT_SET(us_gpio.consumer_prefix, optarg); case _O_GPIO_CONSUMER_PREFIX: OPT_SET(us_g_gpio.consumer_prefix, optarg);
case _O_GPIO_PROG_RUNNING: OPT_NUMBER("--gpio-prog-running", us_gpio.prog_running.pin, 0, 256, 0); case _O_GPIO_PROG_RUNNING: OPT_NUMBER("--gpio-prog-running", us_g_gpio.prog_running.pin, 0, 256, 0);
case _O_GPIO_STREAM_ONLINE: OPT_NUMBER("--gpio-stream-online", us_gpio.stream_online.pin, 0, 256, 0); case _O_GPIO_STREAM_ONLINE: OPT_NUMBER("--gpio-stream-online", us_g_gpio.stream_online.pin, 0, 256, 0);
case _O_GPIO_HAS_HTTP_CLIENTS: OPT_NUMBER("--gpio-has-http-clients", us_gpio.has_http_clients.pin, 0, 256, 0); case _O_GPIO_HAS_HTTP_CLIENTS: OPT_NUMBER("--gpio-has-http-clients", us_g_gpio.has_http_clients.pin, 0, 256, 0);
# endif # endif
# ifdef HAS_PDEATHSIG # ifdef HAS_PDEATHSIG
@@ -457,12 +457,12 @@ int options_parse(us_options_s *options, us_device_s *dev, us_encoder_s *enc, us
# endif # endif
case _O_NOTIFY_PARENT: OPT_SET(server->notify_parent, true); case _O_NOTIFY_PARENT: OPT_SET(server->notify_parent, true);
case _O_LOG_LEVEL: OPT_NUMBER("--log-level", us_log_level, US_LOG_LEVEL_INFO, US_LOG_LEVEL_DEBUG, 0); case _O_LOG_LEVEL: OPT_NUMBER("--log-level", us_g_log_level, US_LOG_LEVEL_INFO, US_LOG_LEVEL_DEBUG, 0);
case _O_PERF: OPT_SET(us_log_level, US_LOG_LEVEL_PERF); case _O_PERF: OPT_SET(us_g_log_level, US_LOG_LEVEL_PERF);
case _O_VERBOSE: OPT_SET(us_log_level, US_LOG_LEVEL_VERBOSE); case _O_VERBOSE: OPT_SET(us_g_log_level, US_LOG_LEVEL_VERBOSE);
case _O_DEBUG: OPT_SET(us_log_level, US_LOG_LEVEL_DEBUG); case _O_DEBUG: OPT_SET(us_g_log_level, US_LOG_LEVEL_DEBUG);
case _O_FORCE_LOG_COLORS: OPT_SET(us_log_colored, true); case _O_FORCE_LOG_COLORS: OPT_SET(us_g_log_colored, true);
case _O_NO_LOG_COLORS: OPT_SET(us_log_colored, false); case _O_NO_LOG_COLORS: OPT_SET(us_g_log_colored, false);
case _O_HELP: _help(stdout, dev, enc, stream, server); return 1; case _O_HELP: _help(stdout, dev, enc, stream, server); return 1;
case _O_VERSION: puts(US_VERSION); return 1; case _O_VERSION: puts(US_VERSION); return 1;
@@ -676,8 +676,8 @@ static void _help(FILE *fp, us_device_s *dev, us_encoder_s *enc, us_stream_s *st
# ifdef WITH_GPIO # ifdef WITH_GPIO
SAY("GPIO options:"); SAY("GPIO options:");
SAY("═════════════"); SAY("═════════════");
SAY(" --gpio-device </dev/path> ───── Path to GPIO character device. Default: %s.\n", us_gpio.path); SAY(" --gpio-device </dev/path> ───── Path to GPIO character device. Default: %s.\n", us_g_gpio.path);
SAY(" --gpio-consumer-prefix <str> ── Consumer prefix for GPIO outputs. Default: %s.\n", us_gpio.consumer_prefix); SAY(" --gpio-consumer-prefix <str> ── Consumer prefix for GPIO outputs. Default: %s.\n", us_g_gpio.consumer_prefix);
SAY(" --gpio-prog-running <pin> ───── Set 1 on GPIO pin while uStreamer is running. Default: disabled.\n"); SAY(" --gpio-prog-running <pin> ───── Set 1 on GPIO pin while uStreamer is running. Default: disabled.\n");
SAY(" --gpio-stream-online <pin> ──── Set 1 while streaming. Default: disabled.\n"); SAY(" --gpio-stream-online <pin> ──── Set 1 while streaming. Default: disabled.\n");
SAY(" --gpio-has-http-clients <pin> ─ Set 1 while stream has at least one client. Default: disabled.\n"); SAY(" --gpio-has-http-clients <pin> ─ Set 1 while stream has at least one client. Default: disabled.\n");
@@ -702,7 +702,7 @@ static void _help(FILE *fp, us_device_s *dev, us_encoder_s *enc, us_stream_s *st
SAY(" --log-level <N> ──── Verbosity level of messages from 0 (info) to 3 (debug)."); SAY(" --log-level <N> ──── Verbosity level of messages from 0 (info) to 3 (debug).");
SAY(" Enabling debugging messages can slow down the program."); SAY(" Enabling debugging messages can slow down the program.");
SAY(" Available levels: 0 (info), 1 (performance), 2 (verbose), 3 (debug)."); SAY(" Available levels: 0 (info), 1 (performance), 2 (verbose), 3 (debug).");
SAY(" Default: %d.\n", us_log_level); SAY(" Default: %d.\n", us_g_log_level);
SAY(" --perf ───────────── Enable performance messages (same as --log-level=1). Default: disabled.\n"); SAY(" --perf ───────────── Enable performance messages (same as --log-level=1). Default: disabled.\n");
SAY(" --verbose ────────── Enable verbose messages and lower (same as --log-level=2). Default: disabled.\n"); SAY(" --verbose ────────── Enable verbose messages and lower (same as --log-level=2). Default: disabled.\n");
SAY(" --debug ──────────── Enable debug messages and lower (same as --log-level=3). Default: disabled.\n"); SAY(" --debug ──────────── Enable debug messages and lower (same as --log-level=3). Default: disabled.\n");