Output all properties and options

This commit is contained in:
Kamil Trzcinski 2022-07-08 12:12:30 +02:00
parent 9051518082
commit b4668aa320
7 changed files with 42 additions and 17 deletions

View File

@ -51,7 +51,14 @@ void camera_http_option(http_worker_t *worker, FILE *stream)
bool headers = false; bool headers = false;
http_enum_params(worker, stream, camera_http_set_option, &headers); http_enum_params(worker, stream, camera_http_set_option, &headers);
if (!headers) { if (!headers) {
http_404(stream, "No options passed.\r\n"); http_404(stream, "");
fprintf(stream, "No options passed.\r\n");
}
fprintf(stream, "\r\nSet: /option?name=value\r\n\r\n");
if (camera) {
device_dump_options(camera->camera, stream);
} }
} }

View File

@ -211,6 +211,13 @@ int device_video_force_key(device_t *dev)
return 0; return 0;
} }
void device_dump_options(device_t *dev, FILE *stream)
{
if (dev || dev->hw->device_dump_options) {
dev->hw->device_dump_options(dev, stream);
}
}
int device_set_fps(device_t *dev, int desired_fps) int device_set_fps(device_t *dev, int desired_fps)
{ {
if (!dev || dev->hw->device_set_fps(dev, desired_fps) < 0) if (!dev || dev->hw->device_set_fps(dev, desired_fps) < 0)

View File

@ -2,6 +2,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h>
typedef struct buffer_s buffer_t; typedef struct buffer_s buffer_t;
typedef struct buffer_list_s buffer_list_t; typedef struct buffer_list_s buffer_list_t;
@ -13,6 +14,7 @@ typedef struct device_hw_s {
void (*device_close)(device_t *dev); void (*device_close)(device_t *dev);
int (*device_set_decoder_start)(device_t *dev, bool do_on); int (*device_set_decoder_start)(device_t *dev, bool do_on);
int (*device_video_force_key)(device_t *dev); int (*device_video_force_key)(device_t *dev);
void (*device_dump_options)(device_t *dev, FILE *stream);
int (*device_set_fps)(device_t *dev, int desired_fps); int (*device_set_fps)(device_t *dev, int desired_fps);
int (*device_set_option)(device_t *dev, const char *key, const char *value); int (*device_set_option)(device_t *dev, const char *key, const char *value);
@ -65,6 +67,7 @@ int device_set_stream(device_t *dev, bool do_on);
int device_set_decoder_start(device_t *dev, bool do_on); int device_set_decoder_start(device_t *dev, bool do_on);
int device_video_force_key(device_t *dev); int device_video_force_key(device_t *dev);
void device_dump_options(device_t *dev, FILE *stream);
int device_set_fps(device_t *dev, int desired_fps); int device_set_fps(device_t *dev, int desired_fps);
int device_set_option_string(device_t *dev, const char *option, const char *value); int device_set_option_string(device_t *dev, const char *option, const char *value);
void device_set_option_list(device_t *dev, const char *option_list); void device_set_option_list(device_t *dev, const char *option_list);

View File

@ -17,22 +17,12 @@ libcamera::ControlInfoMap::Map libcamera_control_list(device_t *dev)
return controls_map; return controls_map;
} }
void libcamera_device_dump(device_t *dev) void libcamera_device_dump_options(device_t *dev, FILE *stream)
{ {
auto &properties = dev->libcamera->camera->properties(); auto &properties = dev->libcamera->camera->properties();
auto idMap = properties.idMap(); auto idMap = properties.idMap();
for (auto const &control : libcamera_control_list(dev)) { fprintf(stream, "Properties:\n");
if (!control.first)
continue;
auto control_id = control.first;
auto control_key = libcamera_device_option_normalize(control_id->name());
auto control_info = control.second;
LOG_VERBOSE(dev, "Available control: %s (%08x, type=%d): %s",
control_id->name().c_str(), control_id->id(), control_id->type(), control_info.toString().c_str());
}
for (auto const &control : properties) { for (auto const &control : properties) {
if (!control.first) if (!control.first)
@ -46,8 +36,25 @@ void libcamera_device_dump(device_t *dev)
control_id_name = control_id_info->name(); control_id_name = control_id_info->name();
} }
LOG_VERBOSE(dev, "Property: %s (%08x, type=%d): %s", fprintf(stream, "- property: %s (%08x, type=%d): %s\n",
control_id_name.c_str(), control_id, control_value.type(), control_value.toString().c_str()); control_id_name.c_str(), control_id, control_value.type(),
control_value.toString().c_str());
}
fprintf(stream, "\n");
fprintf(stream, "Options:\n");
for (auto const &control : libcamera_control_list(dev)) {
if (!control.first)
continue;
auto control_id = control.first;
auto control_key = libcamera_device_option_normalize(control_id->name());
auto control_info = control.second;
fprintf(stream, "- available option: %s (%08x, type=%d): %s\n",
control_id->name().c_str(), control_id->id(), control_id->type(),
control_info.toString().c_str());
} }
} }
@ -80,8 +87,6 @@ int libcamera_device_open(device_t *dev)
} }
LOG_INFO(dev, "Device path=%s opened", dev->path); LOG_INFO(dev, "Device path=%s opened", dev->path);
libcamera_device_dump(dev);
return 0; return 0;
error: error:

View File

@ -4,6 +4,7 @@
device_hw_t libcamera_device_hw = { device_hw_t libcamera_device_hw = {
.device_open = libcamera_device_open, .device_open = libcamera_device_open,
.device_close = libcamera_device_close, .device_close = libcamera_device_close,
.device_dump_options = libcamera_device_dump_options,
.device_set_fps = libcamera_device_set_fps, .device_set_fps = libcamera_device_set_fps,
.device_set_option = libcamera_device_set_option, .device_set_option = libcamera_device_set_option,

View File

@ -57,6 +57,7 @@ typedef struct buffer_libcamera_s {
int libcamera_device_open(device_t *dev); int libcamera_device_open(device_t *dev);
void libcamera_device_close(device_t *dev); void libcamera_device_close(device_t *dev);
void libcamera_device_dump_options(device_t *dev, FILE *stream);
int libcamera_device_set_fps(device_t *dev, int desired_fps); int libcamera_device_set_fps(device_t *dev, int desired_fps);
int libcamera_device_set_option(device_t *dev, const char *key, const char *value); int libcamera_device_set_option(device_t *dev, const char *key, const char *value);

View File

@ -55,6 +55,7 @@
The commands available on some cameras:<br> The commands available on some cameras:<br>
<br> <br>
<ul> <ul>
<li><a href="option">/option</a> see all options.</li>
<li><a href="option?AfTrigger=1">/option?AfTrigger=1</a> trigger auto focus.</li> <li><a href="option?AfTrigger=1">/option?AfTrigger=1</a> trigger auto focus.</li>
</ul> </ul>
</li> </li>