| 247 | std::string id_vendor = "unknown"; |
| 248 | }; |
| 249 | Udevaddm_info get_udev_adm_info(const std::string &v4l2_device, |
| 250 | std::shared_ptr<spdlog::logger> &m_console) { |
| 251 | Udevaddm_info ret{}; |
| 252 | const auto udev_info_opt = |
| 253 | OHDUtil::run_command_out(fmt::format("udevadm info {}", v4l2_device)); |
| 254 | if (udev_info_opt == std::nullopt) { |
| 255 | m_console->debug("udev_info no result"); |
| 256 | return {}; |
| 257 | } |
| 258 | const auto &udev_info = udev_info_opt.value(); |
| 259 | // check for device name |
| 260 | std::smatch model_result; |
| 261 | const std::regex model_regex{"ID_MODEL=([\\w]+)"}; |
| 262 | if (std::regex_search(udev_info, model_result, model_regex)) { |
| 263 | if (model_result.size() == 2) { |
| 264 | ret.id_model = model_result[1]; |
| 265 | } |
| 266 | } |
| 267 | // check for device vendor |
| 268 | std::smatch vendor_result; |
| 269 | const std::regex vendor_regex{"ID_VENDOR=([\\w]+)"}; |
| 270 | if (std::regex_search(udev_info, vendor_result, vendor_regex)) { |
| 271 | if (vendor_result.size() == 2) { |
| 272 | ret.id_vendor = vendor_result[1]; |
| 273 | } |
| 274 | } |
| 275 | return ret; |
| 276 | } |
| 277 | |
| 278 | static std::string v4l2_capability_to_string(const v4l2_capability caps) { |
| 279 | return fmt::format("driver:{},bus_info:{}", (const char *)caps.driver, |