summaryrefslogtreecommitdiff
path: root/src/cam/cam.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-01-22 05:03:54 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-01-22 14:04:09 +0100
commitf5e48ebf447ec15ba653fa3524e9b9de8e5eb736 (patch)
tree8b0b926612198fffa218e77a6d557f539aafc44f /src/cam/cam.cpp
parentfba3d0460750fb4123d66f55315dbd9b34cc3d90 (diff)
cam: Extract option parser to separate file
And turn it into an OptionsParser object. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/cam/cam.cpp')
-rw-r--r--src/cam/cam.cpp144
1 files changed, 0 insertions, 144 deletions
diff --git a/src/cam/cam.cpp b/src/cam/cam.cpp
deleted file mode 100644
index 0f795be7..00000000
--- a/src/cam/cam.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Copyright (C) 2019, Google Inc.
- *
- * main.cpp - cam-ctl a tool to interact with the library
- */
-
-#include <getopt.h>
-#include <iomanip>
-#include <iostream>
-#include <map>
-#include <string.h>
-
-#include <libcamera/libcamera.h>
-
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
-
-using namespace std;
-using namespace libcamera;
-
-enum Option {
- OptCamera = 'c',
- OptHelp = 'h',
- OptList = 'l',
- OptLast = 0,
-};
-
-struct OptionInfo {
- Option id;
- const char *name;
- const char *arguments;
- const char *description;
-};
-
-static struct OptionInfo option_info[] = {
- { OptCamera, "camera", "<camera>", "Specify which camera to operate on" },
- { OptHelp, "help", nullptr, "Display this help message" },
- { OptList, "list", nullptr, "List all cameras" },
- { OptLast, nullptr, nullptr, nullptr },
-};
-
-std::map<Option, std::string> options;
-
-void usage()
-{
- struct OptionInfo *info;
-
- cout << "Options:" << endl;
- for (info = option_info; info->id != OptLast; info++) {
- string arg(info->name);
-
- if (info->arguments)
- arg += string(" ") + info->arguments;
-
- cout << " -" << static_cast<char>(info->id) << " --" <<
- setw(20) << left << arg << " - " <<
- info->description << endl;
- }
-}
-
-int parseOptions(int argc, char **argv)
-{
- char short_options[ARRAY_SIZE(option_info) * 2 + 1];
- struct option long_options[ARRAY_SIZE(option_info)];
- struct OptionInfo *info;
- unsigned ids = 0, idl = 0;
-
- memset(short_options, 0, sizeof(short_options));
- memset(long_options, 0, sizeof(long_options));
-
- for (info = option_info; info->id != OptLast; info++) {
- short_options[ids++] = info->id;
- if (info->arguments)
- short_options[ids++] = ':';
-
- long_options[idl].name = info->name;
- long_options[idl].has_arg =
- info->arguments ? required_argument : no_argument;
- long_options[idl].flag = 0;
- long_options[idl].val = info->id;
- idl++;
- }
-
- while (true) {
- int c = getopt_long(argc, argv, short_options, long_options, nullptr);
-
- if (c == -1)
- break;
-
- if (!isalpha(c))
- return EXIT_FAILURE;
-
- options[static_cast<Option>(c)] = optarg ? string(optarg) : "";
- }
-
- return 0;
-}
-
-bool optSet(Option opt)
-{
- return options.count(opt) != 0;
-}
-
-int main(int argc, char **argv)
-{
- int ret;
-
- ret = parseOptions(argc, argv);
- if (ret == EXIT_FAILURE)
- return ret;
-
- if (argc == 1 || optSet(OptHelp)) {
- usage();
- return 0;
- }
-
- CameraManager *cm = CameraManager::instance();
-
- ret = cm->start();
- if (ret) {
- cout << "Failed to start camera manager: " << strerror(-ret) << endl;
- return EXIT_FAILURE;
- }
-
- if (optSet(OptList)) {
- cout << "Available cameras:" << endl;
- for (const std::shared_ptr<Camera> &camera : cm->cameras())
- cout << "- " << camera->name() << endl;
- }
-
- if (optSet(OptCamera)) {
- std::shared_ptr<Camera> cam = cm->get(options[OptCamera]);
-
- if (cam) {
- cout << "Using camera " << cam->name() << endl;
- } else {
- cout << "Camera " << options[OptCamera] << " not found" << endl;
- }
- }
-
- cm->stop();
-
- return 0;
-}