From ddca582551dd19a7e332824679fb2cd9e2502c48 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 12 Apr 2022 09:23:46 +0200 Subject: [PATCH] Automatically reconnect --- cmd/camera-streamer.c | 24 ++++++++++++++++-------- device/camera/camera.h | 1 + 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cmd/camera-streamer.c b/cmd/camera-streamer.c index 61c3dd6..7063a2f 100644 --- a/cmd/camera-streamer.c +++ b/cmd/camera-streamer.c @@ -38,6 +38,7 @@ camera_options_t camera_options = { .allow_dma = true, .high_res_factor = 1.0, .low_res_factor = 0.0, + .auto_reconnect = 0, .h264 = { .options = "video_bitrate_mode=0" OPTION_VALUE_LIST_SEP @@ -98,6 +99,7 @@ option_t all_options[] = { DEFINE_OPTION(camera, high_res_factor, float), DEFINE_OPTION(camera, low_res_factor, float), DEFINE_OPTION_PTR(camera, options, list), + DEFINE_OPTION(camera, auto_reconnect, uint), DEFINE_OPTION_PTR(camera, isp.options, list), DEFINE_OPTION_PTR(camera, jpeg.options, list), @@ -118,26 +120,32 @@ int main(int argc, char *argv[]) int http_fd = -1; int ret = -1; const char *env; - camera_t *camera; if (parse_opts(all_options, argc, argv) < 0) { return -1; } - camera = camera_open(&camera_options); - if (!camera) { - goto error; - } - http_fd = http_server(&http_options, http_methods); if (http_fd < 0) { goto error; } - ret = camera_run(camera); + while (true) { + camera_t *camera = camera_open(&camera_options); + if (camera) { + ret = camera_run(camera); + camera_close(camera); + } + + if (camera_options.auto_reconnect > 0) { + LOG_INFO(NULL, "Automatically reconnecting in %d seconds...", camera_options.auto_reconnect); + sleep(camera_options.auto_reconnect); + } else { + break; + } + } error: close(http_fd); - camera_close(camera); return ret; } diff --git a/device/camera/camera.h b/device/camera/camera.h index 1446b0c..5804b93 100644 --- a/device/camera/camera.h +++ b/device/camera/camera.h @@ -22,6 +22,7 @@ typedef struct camera_options_s { bool allow_dma; float high_res_factor; float low_res_factor; + int auto_reconnect; char options[CAMERA_OPTIONS_LENGTH];