diff --git a/docs/Doxyfile b/docs/Doxyfile index 281b84291d6..d15af4d19c4 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -27,6 +27,8 @@ DOXYFILE_ENCODING = UTF-8 # https://breathe.readthedocs.io/en/latest/markups.html#aliases ALIASES = "rst=^^\verbatim embed:rst:leading-asterisk^^" ALIASES += "endrst=\endverbatim" +ALIASES += "examples=**Examples**\n@code{.cpp}" +ALIASES += "end_examples=@endcode" DISABLE_INDEX = NO DOCBOOK_OUTPUT = doxydocbook diff --git a/docs/source/source_code/source_code.rst b/docs/source/source_code/source_code.rst index 467f331c768..18021991122 100644 --- a/docs/source/source_code/source_code.rst +++ b/docs/source/source_code/source_code.rst @@ -1,56 +1,28 @@ Source Code =========== We are in process of improving the source code documentation. Code should be documented using Doxygen syntax. -Some examples exist in `main.h` and `main.cpp`. In order for documentation within the code to appear in the -rendered docs, the definition of the object must be in a header file, although the documentation itself can (and -should) be in the source file. +Many examples exist throughout the codebase. Example Documentation Blocks ---------------------------- **file.h** -.. code-block:: c - - // functions - int main(int argc, char *argv[]); - -**file.cpp** (with markdown) - .. code-block:: cpp - /** - * @brief Main application entry point. - * @param argc The number of arguments. - * @param argv The arguments. - * - * EXAMPLES: - * ```cpp - * main(1, const char* args[] = {"hello", "markdown", nullptr}); - * ``` - */ - int main(int argc, char *argv[]) { - // do stuff - } - -**file.cpp** (with ReStructuredText) - -.. code-block:: cpp + /** + * @brief Main application entry point. + * @param argc The number of arguments. + * @param argv The arguments. + * + * @examples + * main(1, const char* args[] = {"hello", "markdown", nullptr}); + * @end_examples + */ + int main(int argc, char *argv[]); - /** - * @brief Main application entry point. - * @param argc The number of arguments. - * @param argv The arguments. - * @rst - * EXAMPLES: - * - * .. code-block:: cpp - * main(1, const char* args[] = {"hello", "rst", nullptr}); - * @endrst - */ - int main(int argc, char *argv[]) { - // do stuff - } +.. attention:: The `@examples` and `@end_examples` tags are not standard Doxygen tags. They are custom aliases + we have specified to simplify documenting examples. Do not confuse this with the standard `@example` tag. Source ------ diff --git a/src/entry_handler.cpp b/src/entry_handler.cpp index 8d17b7d270a..ada85265796 100644 --- a/src/entry_handler.cpp +++ b/src/entry_handler.cpp @@ -1,6 +1,6 @@ /** * @file entry_handler.cpp - * @brief Entry point related functions. + * @brief Definitions for entry handling functions. */ // standard includes @@ -27,28 +27,12 @@ extern "C" { using namespace std::literals; -/** - * @brief Launch the Web UI. - * - * EXAMPLES: - * ```cpp - * launch_ui(); - * ``` - */ void launch_ui() { std::string url = "https://localhost:" + std::to_string(net::map_port(confighttp::PORT_HTTPS)); platf::open_url(url); } -/** - * @brief Launch the Web UI at a specific endpoint. - * - * EXAMPLES: - * ```cpp - * launch_ui_with_path("/pin"); - * ``` - */ void launch_ui_with_path(std::string path) { std::string url = "https://localhost:" + std::to_string(net::map_port(confighttp::PORT_HTTPS)) + path; @@ -56,22 +40,10 @@ launch_ui_with_path(std::string path) { } namespace args { - /** - * @brief Reset the user credentials. - * - * @param name The name of the program. - * @param argc The number of arguments. - * @param argv The arguments. - * - * EXAMPLES: - * ```cpp - * creds("sunshine", 2, {"new_username", "new_password"}); - * ``` - */ int creds(const char *name, int argc, char *argv[]) { if (argc < 2 || argv[0] == "help"sv || argv[1] == "help"sv) { - help(name, argc, argv); + help(name); } http::save_user_creds(config::sunshine.credentials_file, argv[0], argv[1]); @@ -79,59 +51,21 @@ namespace args { return 0; } - /** - * @brief Print help to stdout, then exit. - * @param name The name of the program. - * @param argc The number of arguments. (Unused) - * @param argv The arguments. (Unused) - * - * EXAMPLES: - * ```cpp - * help("sunshine", 0, nullptr); - * ``` - */ int - help(const char *name, int argc, char *argv[]) { + help(const char *name) { logging::print_help(name); return 0; } - /** - * @brief Print the version to stdout, then exit. - * @param name The name of the program. (Unused) - * @param argc The number of arguments. (Unused) - * @param argv The arguments. (Unused) - * - * EXAMPLES: - * ```cpp - * version("sunshine", 0, nullptr); - * ``` - */ int - version(const char *name, int argc, char *argv[]) { + version() { // version was already logged at startup return 0; } #ifdef _WIN32 - /** - * @brief Restore global NVIDIA control panel settings. - * - * If Sunshine was improperly terminated, this function restores - * the global NVIDIA control panel settings to the undo file left - * by Sunshine. This function is typically called by the uninstaller. - * - * @param name The name of the program. (Unused) - * @param argc The number of arguments. (Unused) - * @param argv The arguments. (Unused) - * - * EXAMPLES: - * ```cpp - * restore_nvprefs_undo("sunshine", 0, nullptr); - * ``` - */ int - restore_nvprefs_undo(const char *name, int argc, char *argv[]) { + restore_nvprefs_undo() { if (nvprefs_instance.load()) { nvprefs_instance.restore_from_and_delete_undo_file_if_exists(); nvprefs_instance.unload(); @@ -145,11 +79,6 @@ namespace lifetime { char **argv; std::atomic_int desired_exit_code; - /** - * @brief Terminates Sunshine gracefully with the provided exit code. - * @param exit_code The exit code to return from main(). - * @param async Specifies whether our termination will be non-blocking. - */ void exit_sunshine(int exit_code, bool async) { // Store the exit code of the first exit_sunshine() call @@ -166,9 +95,6 @@ namespace lifetime { } } - /** - * @brief Breaks into the debugger or terminates Sunshine if no debugger is attached. - */ void debug_trap() { #ifdef _WIN32 @@ -178,9 +104,6 @@ namespace lifetime { #endif } - /** - * @brief Gets the argv array passed to main(). - */ char ** get_argv() { return argv; @@ -188,10 +111,6 @@ namespace lifetime { } // namespace lifetime #ifdef _WIN32 -/** - * @brief Check if NVIDIA's GameStream software is running. - * @return `true` if GameStream is enabled, `false` otherwise. - */ bool is_gamestream_enabled() { DWORD enabled; @@ -284,14 +203,6 @@ namespace service_ctrl { SC_HANDLE service_handle = NULL; }; - /** - * @brief Check if the service is running. - * - * EXAMPLES: - * ```cpp - * is_service_running(); - * ``` - */ bool is_service_running() { service_controller sc { SERVICE_QUERY_STATUS }; @@ -304,14 +215,6 @@ namespace service_ctrl { return status.dwCurrentState == SERVICE_RUNNING; } - /** - * @brief Start the service and wait for startup to complete. - * - * EXAMPLES: - * ```cpp - * start_service(); - * ``` - */ bool start_service() { service_controller sc { SERVICE_QUERY_STATUS | SERVICE_START }; @@ -338,14 +241,6 @@ namespace service_ctrl { return true; } - /** - * @brief Wait for the UI to be ready after Sunshine startup. - * - * EXAMPLES: - * ```cpp - * wait_for_ui_ready(); - * ``` - */ bool wait_for_ui_ready() { std::cout << "Waiting for Web UI to be ready..."; diff --git a/src/entry_handler.h b/src/entry_handler.h index bdab361cf0c..1c23e27d4e9 100644 --- a/src/entry_handler.h +++ b/src/entry_handler.h @@ -1,6 +1,6 @@ /** * @file entry_handler.h - * @brief Header file for entry point functions. + * @brief Declarations for entry handling functions. */ #pragma once @@ -12,50 +12,149 @@ #include "thread_pool.h" #include "thread_safe.h" -// functions +/** + * @brief Launch the Web UI. + * + * @examples + * launch_ui(); + * @end_examples + */ void launch_ui(); + +/** + * @brief Launch the Web UI at a specific endpoint. + * + * @examples + * launch_ui_with_path("/pin"); + * @end_examples + */ void launch_ui_with_path(std::string path); -#ifdef _WIN32 -// windows only functions -bool -is_gamestream_enabled(); -#endif - +/** + * @brief Functions for handling command line arguments. + */ namespace args { + /** + * @brief Reset the user credentials. + * + * @param name The name of the program. + * @param argc The number of arguments. + * @param argv The arguments. + * + * @examples + * creds("sunshine", 2, {"new_username", "new_password"}); + * @end_examples + */ int creds(const char *name, int argc, char *argv[]); + + /** + * @brief Print help to stdout, then exit. + * @param name The name of the program. + * + * @examples + * help("sunshine"); + * @end_examples + */ int - help(const char *name, int argc, char *argv[]); + help(const char *name); + + /** + * @brief Print the version to stdout, then exit. + * + * @examples + * version(); + * @end_examples + */ int - version(const char *name, int argc, char *argv[]); -#ifdef _WIN32 + version(); + +#if defined(_WIN32) || defined(DOXYGEN) + /** + * @brief Restore global NVIDIA control panel settings. + * + * If Sunshine was improperly terminated, this function restores + * the global NVIDIA control panel settings to the undo file left + * by Sunshine. This function is typically called by the uninstaller. + * + * @examples + * restore_nvprefs_undo(); + * @end_examples + */ int - restore_nvprefs_undo(const char *name, int argc, char *argv[]); + restore_nvprefs_undo(); #endif } // namespace args +/** + * @brief Functions for handling the lifetime of Sunshine. + */ namespace lifetime { extern char **argv; extern std::atomic_int desired_exit_code; + + /** + * @brief Terminates Sunshine gracefully with the provided exit code. + * @param exit_code The exit code to return from main(). + * @param async Specifies whether our termination will be non-blocking. + */ void exit_sunshine(int exit_code, bool async); + + /** + * @brief Breaks into the debugger or terminates Sunshine if no debugger is attached. + */ void debug_trap(); + + /** + * @brief Get the argv array passed to main(). + */ char ** get_argv(); } // namespace lifetime -#ifdef _WIN32 +#if defined(_WIN32) || defined(DOXYGEN) +/** + * @brief Check if NVIDIA's GameStream software is running. + * @return `true` if GameStream is enabled, `false` otherwise. + */ +bool +is_gamestream_enabled(); + +/** + * @brief Namespace for controlling the Sunshine service model on Windows. + */ namespace service_ctrl { + /** + * @brief Check if the service is running. + * + * @examples + * is_service_running(); + * @end_examples + */ bool is_service_running(); + /** + * @brief Start the service and wait for startup to complete. + * + * @examples + * start_service(); + * @end_examples + */ bool start_service(); + /** + * @brief Wait for the UI to be ready after Sunshine startup. + * + * @examples + * wait_for_ui_ready(); + * @end_examples + */ bool wait_for_ui_ready(); } // namespace service_ctrl diff --git a/src/file_handler.cpp b/src/file_handler.cpp index 6f11bb709de..b5c9638a1b8 100644 --- a/src/file_handler.cpp +++ b/src/file_handler.cpp @@ -1,6 +1,6 @@ /** * @file file_handler.cpp - * @brief File handling functions. + * @brief Definitions for file handling functions. */ // standard includes @@ -12,11 +12,6 @@ #include "logging.h" namespace file_handler { - /** - * @brief Get the parent directory of a file or directory. - * @param path The path of the file or directory. - * @return `std::string` : The parent directory. - */ std::string get_parent_directory(const std::string &path) { // remove any trailing path separators @@ -29,11 +24,6 @@ namespace file_handler { return p.parent_path().string(); } - /** - * @brief Make a directory. - * @param path The path of the directory. - * @return `bool` : `true` on success, `false` on failure. - */ bool make_directory(const std::string &path) { // first, check if the directory already exists @@ -44,16 +34,6 @@ namespace file_handler { return std::filesystem::create_directories(path); } - /** - * @brief Read a file to string. - * @param path The path of the file. - * @return `std::string` : The contents of the file. - * - * EXAMPLES: - * ```cpp - * std::string contents = read_file("path/to/file"); - * ``` - */ std::string read_file(const char *path) { if (!std::filesystem::exists(path)) { @@ -65,17 +45,6 @@ namespace file_handler { return std::string { (std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>() }; } - /** - * @brief Writes a file. - * @param path The path of the file. - * @param contents The contents to write. - * @return `int` : `0` on success, `-1` on failure. - * - * EXAMPLES: - * ```cpp - * int write_status = write_file("path/to/file", "file contents"); - * ``` - */ int write_file(const char *path, const std::string_view &contents) { std::ofstream out(path); diff --git a/src/file_handler.h b/src/file_handler.h index 5ff8015c635..8db55b09ab4 100644 --- a/src/file_handler.h +++ b/src/file_handler.h @@ -1,21 +1,61 @@ /** * @file file_handler.h - * @brief Header file for file handling functions. + * @brief Declarations for file handling functions. */ #pragma once #include <string> +/** + * @brief Responsible for file handling functions. + */ namespace file_handler { + /** + * @brief Get the parent directory of a file or directory. + * @param path The path of the file or directory. + * @return `std::string` : The parent directory. + * + * @examples + * std::string parent_dir = get_parent_directory("path/to/file"); + * @end_examples + */ std::string get_parent_directory(const std::string &path); + /** + * @brief Make a directory. + * @param path The path of the directory. + * @return `bool` : `true` on success, `false` on failure. + * + * @examples + * bool dir_created = make_directory("path/to/directory"); + * @end_examples + */ bool make_directory(const std::string &path); + /** + * @brief Read a file to string. + * @param path The path of the file. + * @return `std::string` : The contents of the file. + * + * @examples + * std::string contents = read_file("path/to/file"); + * @end_examples + */ std::string read_file(const char *path); + /** + * @brief Writes a file. + * @param path The path of the file. + * @param contents The contents to write. + * @return `int` : `0` on success, `-1` on failure. + * + * @examples + * int write_status = write_file("path/to/file", "file contents"); + * @end_examples + */ int write_file(const char *path, const std::string_view &contents); } // namespace file_handler diff --git a/src/logging.cpp b/src/logging.cpp index e03bcbf5134..e59711e77d3 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -48,10 +48,9 @@ namespace logging { /** * @brief Deinitialize the logging system. * - * EXAMPLES: - * ```cpp + * @examples * deinit(); - * ``` + * @end_examples */ void deinit() { @@ -66,10 +65,9 @@ namespace logging { * @param log_file The log file to write to. * @returns A deinit_t object that will deinitialize the logging system when it goes out of scope. * - * EXAMPLES: - * ```cpp + * @examples * log_init(2, "sunshine.log"); - * ``` + * @end_examples */ [[nodiscard]] std::unique_ptr<deinit_t> init(int min_log_level, const std::string &log_file) { @@ -172,10 +170,9 @@ namespace logging { /** * @brief Flush the log. * - * EXAMPLES: - * ```cpp + * @examples * log_flush(); - * ``` + * @end_examples */ void log_flush() { @@ -188,10 +185,9 @@ namespace logging { * @brief Print help to stdout. * @param name The name of the program. * - * EXAMPLES: - * ```cpp + * @examples * print_help("sunshine"); - * ``` + * @end_examples */ void print_help(const char *name) { diff --git a/src/main.cpp b/src/main.cpp index ec3aa9b56a1..cf04097246d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,11 +44,11 @@ on_signal(int sig, FN &&fn) { } std::map<std::string_view, std::function<int(const char *name, int argc, char **argv)>> cmd_to_func { - { "creds"sv, args::creds }, - { "help"sv, args::help }, - { "version"sv, args::version }, + { "creds"sv, [](const char *name, int argc, char **argv) { return args::creds(name, argc, argv); } }, + { "help"sv, [](const char *name, int argc, char **argv) { return args::help(name); } }, + { "version"sv, [](const char *name, int argc, char **argv) { return args::version(); } }, #ifdef _WIN32 - { "restore-nvprefs-undo"sv, args::restore_nvprefs_undo }, + { "restore-nvprefs-undo"sv, [](const char *name, int argc, char **argv) { return args::restore_nvprefs_undo(); } }, #endif }; @@ -79,10 +79,9 @@ SessionMonitorWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { * @param argc The number of arguments. * @param argv The arguments. * - * EXAMPLES: - * ```cpp + * @examples * main(1, const char* args[] = {"sunshine", nullptr}); - * ``` + * @end_examples */ int main(int argc, char *argv[]) { diff --git a/src/network.cpp b/src/network.cpp index 2784afebc39..5d6d2f2a365 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -232,10 +232,9 @@ namespace net { * @param port The port to map as a difference from the base port. * @return `std:uint16_t` : The mapped port number. * - * EXAMPLES: - * ```cpp + * @examples * std::uint16_t mapped_port = net::map_port(1); - * ``` + * @end_examples */ std::uint16_t map_port(int port) { diff --git a/src/nvhttp.cpp b/src/nvhttp.cpp index bd8434e5534..68532ba0748 100644 --- a/src/nvhttp.cpp +++ b/src/nvhttp.cpp @@ -616,10 +616,9 @@ namespace nvhttp { * @param name The user supplied name. * @return `true` if the pin is correct, `false` otherwise. * - * EXAMPLES: - * ```cpp + * @examples * bool pin_status = nvhttp::pin("1234", "laptop"); - * ``` + * @end_examples */ bool pin(std::string pin, std::string name) { @@ -1053,10 +1052,9 @@ namespace nvhttp { /** * @brief Start the nvhttp server. * - * EXAMPLES: - * ```cpp + * @examples * nvhttp::start(); - * ``` + * @end_examples */ void start() { @@ -1191,10 +1189,9 @@ namespace nvhttp { /** * @brief Remove all paired clients. * - * EXAMPLES: - * ```cpp + * @examples * nvhttp::erase_all_clients(); - * ``` + * @end_examples */ void erase_all_clients() { @@ -1207,10 +1204,9 @@ namespace nvhttp { /** * @brief Remove single client. * - * EXAMPLES: - * ```cpp + * @examples * nvhttp::unpair_client("4D7BB2DD-5704-A405-B41C-891A022932E1"); - * ``` + * @end_examples */ int unpair_client(std::string uuid) { diff --git a/src/platform/common.h b/src/platform/common.h index e7e72334703..1bb79233078 100644 --- a/src/platform/common.h +++ b/src/platform/common.h @@ -682,10 +682,9 @@ namespace platf { * @param input The input_t instance to use. * @return util::point_t (x, y) * - * EXAMPLES: - * ```cpp + * @examples * auto [x, y] = get_mouse_loc(input); - * ``` + * @end_examples */ util::point_t get_mouse_loc(input_t &input); diff --git a/src/platform/linux/input/legacy_input.cpp b/src/platform/linux/input/legacy_input.cpp index 35534ec445a..d82d98d87f9 100644 --- a/src/platform/linux/input/legacy_input.cpp +++ b/src/platform/linux/input/legacy_input.cpp @@ -1075,10 +1075,9 @@ namespace platf { * @param x Absolute x position. * @param y Absolute y position. * - * EXAMPLES: - * ```cpp + * @examples * x_abs_mouse(input, 0, 0); - * ``` + * @end_examples */ static void x_abs_mouse(input_t &input, float x, float y) { @@ -1129,10 +1128,9 @@ namespace platf { * @param x Absolute x position. * @param y Absolute y position. * - * EXAMPLES: - * ```cpp + * @examples * abs_mouse(input, touch_port, 0, 0); - * ``` + * @end_examples */ void abs_mouse(input_t &input, const touch_port_t &touch_port, float x, float y) { @@ -1161,10 +1159,9 @@ namespace platf { * @param deltaX Relative x position. * @param deltaY Relative y position. * - * EXAMPLES: - * ```cpp + * @examples * x_move_mouse(input, 10, 10); // Move mouse 10 pixels down and right - * ``` + * @end_examples */ static void x_move_mouse(input_t &input, int deltaX, int deltaY) { @@ -1184,10 +1181,9 @@ namespace platf { * @param deltaX Relative x position. * @param deltaY Relative y position. * - * EXAMPLES: - * ```cpp + * @examples * move_mouse(input, 10, 10); // Move mouse 10 pixels down and right - * ``` + * @end_examples */ void move_mouse(input_t &input, int deltaX, int deltaY) { @@ -1219,10 +1215,9 @@ namespace platf { * @param button Which mouse button to emulate. * @param release Whether the event was a press (false) or a release (true) * - * EXAMPLES: - * ```cpp + * @examples * x_button_mouse(input, 1, false); // Press left mouse button - * ``` + * @end_examples */ static void x_button_mouse(input_t &input, int button, bool release) { @@ -1262,10 +1257,9 @@ namespace platf { * @param button Which mouse button to emulate. * @param release Whether the event was a press (false) or a release (true) * - * EXAMPLES: - * ```cpp + * @examples * button_mouse(input, 1, false); // Press left mouse button - * ``` + * @end_examples */ void button_mouse(input_t &input, int button, bool release) { @@ -1349,10 +1343,9 @@ namespace platf { * @param button_pos Which mouse button to emulate for positive scroll. * @param button_neg Which mouse button to emulate for negative scroll. * - * EXAMPLES: - * ```cpp + * @examples * x_scroll(input, 10, 4, 5); - * ``` + * @end_examples */ static void x_scroll(input_t &input, int distance, int button_pos, int button_neg) { @@ -1376,10 +1369,9 @@ namespace platf { * @param input The input_t instance to use. * @param high_res_distance How far to scroll. * - * EXAMPLES: - * ```cpp + * @examples * scroll(input, 1200); - * ``` + * @end_examples */ void scroll(input_t &input, int high_res_distance) { @@ -1410,10 +1402,9 @@ namespace platf { * @param input The input_t instance to use. * @param high_res_distance How far to scroll. * - * EXAMPLES: - * ```cpp + * @examples * hscroll(input, 1200); - * ``` + * @end_examples */ void hscroll(input_t &input, int high_res_distance) { @@ -1455,10 +1446,9 @@ namespace platf { * @param release Whether the event was a press (false) or a release (true). * @param flags SS_KBE_FLAG_* values. * - * EXAMPLES: - * ```cpp + * @examples * x_keyboard(input, 0x5A, false, 0); // Press Z - * ``` + * @end_examples */ static void x_keyboard(input_t &input, uint16_t modcode, bool release, uint8_t flags) { @@ -1490,10 +1480,9 @@ namespace platf { * @param release Whether the event was a press (false) or a release (true). * @param flags SS_KBE_FLAG_* values. * - * EXAMPLES: - * ```cpp + * @examples * keyboard(input, 0x5A, false, 0); // Press Z - * ``` + * @end_examples */ void keyboard_update(input_t &input, uint16_t modcode, bool release, uint8_t flags) { @@ -2107,10 +2096,9 @@ namespace platf { /** * @brief Initialize a new keyboard and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_keyboard = keyboard(); - * ``` + * @end_examples */ evdev_t keyboard() { @@ -2136,10 +2124,9 @@ namespace platf { /** * @brief Initialize a new `uinput` virtual relative mouse and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_mouse = mouse_rel(); - * ``` + * @end_examples */ evdev_t mouse_rel() { @@ -2187,10 +2174,9 @@ namespace platf { /** * @brief Initialize a new `uinput` virtual absolute mouse and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_mouse = mouse_abs(); - * ``` + * @end_examples */ evdev_t mouse_abs() { @@ -2242,10 +2228,9 @@ namespace platf { /** * @brief Initialize a new `uinput` virtual touchscreen and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_touchscreen = touchscreen(); - * ``` + * @end_examples */ evdev_t touchscreen() { @@ -2349,10 +2334,9 @@ namespace platf { /** * @brief Initialize a new `uinput` virtual pen pad and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_penpad = penpad(); - * ``` + * @end_examples */ evdev_t penpad() { @@ -2448,10 +2432,9 @@ namespace platf { /** * @brief Initialize a new `uinput` virtual X360 gamepad and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_x360 = x360(); - * ``` + * @end_examples */ evdev_t x360() { @@ -2525,10 +2508,9 @@ namespace platf { /** * @brief Initialize the input system and return it. * - * EXAMPLES: - * ```cpp + * @examples * auto my_input = input(); - * ``` + * @end_examples */ input_t input() { diff --git a/src/rtsp.cpp b/src/rtsp.cpp index 044b8fbbe8c..9dd732f9f7a 100644 --- a/src/rtsp.cpp +++ b/src/rtsp.cpp @@ -563,10 +563,9 @@ namespace rtsp_stream { * @brief Clear launch sessions. * @param all If true, clear all sessions. Otherwise, only clear timed out and stopped sessions. * - * EXAMPLES: - * ```cpp + * @examples * clear(false); - * ``` + * @end_examples */ void clear(bool all = true) {