From f5e48ebf447ec15ba653fa3524e9b9de8e5eb736 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 22 Jan 2019 05:03:54 +0200 Subject: cam: Extract option parser to separate file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And turn it into an OptionsParser object. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund Signed-off-by: Niklas Söderlund --- src/cam/main.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/cam/main.cpp (limited to 'src/cam/main.cpp') diff --git a/src/cam/main.cpp b/src/cam/main.cpp new file mode 100644 index 00000000..22211670 --- /dev/null +++ b/src/cam/main.cpp @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * main.cpp - cam - The libcamera swiss army knife + */ + +#include +#include +#include + +#include + +#include "options.h" + +using namespace libcamera; + +OptionsParser::Options options; + +enum { + OptCamera = 'c', + OptHelp = 'h', + OptList = 'l', +}; + +static int parseOptions(int argc, char *argv[]) +{ + OptionsParser parser; + + parser.addOption(OptCamera, "Specify which camera to operate on", + "camera", OptionsParser::ArgumentRequired, + "camera"); + parser.addOption(OptHelp, "Display this help message", "help"); + parser.addOption(OptList, "List all cameras", "list"); + + options = std::move(parser.parse(argc, argv)); + if (!options.valid()) + return -EINVAL; + + if (argc == 1 || options.isSet(OptHelp)) { + parser.usage(); + return 1; + } + + return 0; +} + +int main(int argc, char **argv) +{ + int ret; + + ret = parseOptions(argc, argv); + if (ret < 0) + return EXIT_FAILURE; + + CameraManager *cm = CameraManager::instance(); + + ret = cm->start(); + if (ret) { + std::cout << "Failed to start camera manager: " + << strerror(-ret) << std::endl; + return EXIT_FAILURE; + } + + if (options.isSet(OptList)) { + std::cout << "Available cameras:" << std::endl; + for (const std::shared_ptr &camera : cm->cameras()) + std::cout << "- " << camera->name() << std::endl; + } + + if (options.isSet(OptCamera)) { + std::shared_ptr cam = cm->get(options[OptCamera]); + + if (cam) { + std::cout << "Using camera " << cam->name() << std::endl; + } else { + std::cout << "Camera " << options[OptCamera] + << " not found" << std::endl; + } + } + + cm->stop(); + + return 0; +} -- cgit v1.2.1