#pragma once #include namespace ikvm { /* * @class Args * @brief Command line argument parser and storage */ class Args { public: /* * @struct CommandLine * @brief Stores the original command line arguments for later use */ struct CommandLine { /* * @brief Constructs CommandLine object * * @param[in] c - Number of arguments * @param[in] v - Array of arguments */ CommandLine(int c, char** v) : argc(c), argv(v) {} ~CommandLine() = default; CommandLine(const CommandLine&) = default; CommandLine& operator=(const CommandLine&) = default; CommandLine(CommandLine&&) = default; CommandLine& operator=(CommandLine&&) = default; int argc; char** argv; }; /* * @brief Constructs Args object * * @param[in] argc - The number of arguments in the command line call * @param[in] argv - The array of arguments from the command line */ Args(int argc, char* argv[]); ~Args() = default; Args(const Args&) = default; Args& operator=(const Args&) = default; Args(Args&&) = default; Args& operator=(Args&&) = default; /* * @brief Get the original command line arguments * * @return Reference to the CommandLine structure storing the original * command line arguments */ inline const CommandLine& getCommandLine() const { return commandLine; } /* * @brief Get the desired video frame rate * * @return Value of the desired frame rate in frames per second */ inline int getFrameRate() const { return frameRate; } /* * @brief Get the video subsampling * * @return Value of the video subsampling */ inline int getSubsampling() const { return subsampling; } /* * @brief Get the path to the USB keyboard device * * @return Reference to the string storing the path to the keyboard device */ inline const std::string& getKeyboardPath() const { return keyboardPath; } /* * @brief Get the path to the USB mouse device * * @return Reference to the string storing the path to the mouse device */ inline const std::string& getPointerPath() const { return pointerPath; } /* * @brief Get the name of UDC * * @return Reference to the string storing the name of UDC */ inline const std::string& getUdcName() const { return udcName; } /* * @brief Get the path to the V4L2 video device * * @return Reference to the string storing the path to the video device */ inline const std::string& getVideoPath() const { return videoPath; } /* * @brief Get the identical frames detection setting * * @return True if identical frames detection is enabled */ inline bool getCalcFrameCRC() const { return calcFrameCRC; } private: /* @brief Prints the application usage to stderr */ void printUsage(); /* * @brief Desired frame rate (in frames per second) of the video * stream */ int frameRate; /* @brief Desired subsampling (0: 444, 1: 420) */ int subsampling; /* @brief Path to the USB keyboard device */ std::string keyboardPath; /* @brief Path to the USB mouse device */ std::string pointerPath; /* @brief Name of UDC */ std::string udcName; /* @brief Path to the V4L2 video device */ std::string videoPath; /* @brief Identical frames detection */ bool calcFrameCRC; /* @brief Original command line arguments passed to the application */ CommandLine commandLine; }; } // namespace ikvm