add camera capture mode and edge params

This commit is contained in:
DanielePettenuzzo 2018-08-21 22:19:26 +02:00 committed by Daniel Agar
parent d49752141d
commit 42e2bd47c4
3 changed files with 62 additions and 5 deletions

View File

@ -54,6 +54,8 @@ CameraCapture::CameraCapture() :
_command_ack_pub(nullptr),
_command_sub(-1),
_camera_capture_feedback(false),
_camera_capture_mode(0),
_camera_capture_edge(0),
_capture_seq(0),
_last_fall_time(0),
_last_exposure_time(0),
@ -69,6 +71,12 @@ CameraCapture::CameraCapture() :
_p_camera_capture_feedback = param_find("CAM_CAP_FBACK");
param_get(_p_camera_capture_feedback, &_camera_capture_feedback);
_p_camera_capture_mode = param_find("CAM_CAP_MODE");
param_get(_p_camera_capture_mode, &_camera_capture_mode);
_p_camera_capture_edge = param_find("CAM_CAP_EDGE");
param_get(_p_camera_capture_edge, &_camera_capture_edge);
if (_camera_capture_feedback != 0) {
struct camera_trigger_s trigger = {};
_trigger_pub = orb_advertise(ORB_ID(camera_trigger), &trigger);
@ -88,7 +96,13 @@ CameraCapture::capture_callback(uint32_t chan_index,
if (_last_fall_time > 0) {
struct camera_trigger_s trigger {};
trigger.timestamp = edge_time - ((edge_time - _last_fall_time) / 2); // Get timestamp of mid-exposure
if (_camera_capture_mode == 0) {
trigger.timestamp = hrt_absolute_time();
} else {
trigger.timestamp = edge_time - ((edge_time - _last_fall_time) / 2); // Get timestamp of mid-exposure
}
trigger.seq = _capture_seq++;
if (_camera_capture_feedback != 0) {
@ -182,12 +196,26 @@ CameraCapture::set_capture_control(bool enabled)
{
if (enabled) {
// register callbacks
//up_input_capture_set(4, Both, 0, &CameraCapture::capture_trampoline, this);
up_input_capture_set(5, Falling, 0, &CameraCapture::capture_trampoline, this);
switch (_camera_capture_edge) {
case 0:
up_input_capture_set(5, Rising, 0, &CameraCapture::capture_trampoline, this);
break;
case 1:
up_input_capture_set(5, Falling, 0, &CameraCapture::capture_trampoline, this);
break;
case 2:
up_input_capture_set(5, Both, 0, &CameraCapture::capture_trampoline, this);
break;
default:
break;
}
_capture_enabled = true;
} else {
//up_input_capture_set(4, Disabled, 0, NULL, NULL);
up_input_capture_set(5, Disabled, 0, NULL, NULL);
_capture_enabled = false;
}

View File

@ -114,6 +114,10 @@ private:
float _strobe_delay;
param_t _p_camera_capture_feedback;
int32_t _camera_capture_feedback;
param_t _p_camera_capture_mode;
int32_t _camera_capture_mode;
param_t _p_camera_capture_edge;
int32_t _camera_capture_edge;
// Signal capture statistics
uint32_t _capture_seq;

View File

@ -53,10 +53,35 @@ PARAM_DEFINE_FLOAT(CAM_CAP_DELAY, 1.0f);
/**
* Camera capture feedback
*
* Enables camera feedback from hotshoe on camera..
* Enables camera capture feedback
*
* @boolean
* @group Camera Control
* @reboot_required true
*/
PARAM_DEFINE_INT32(CAM_CAP_FBACK, 0);
/**
* Camera capture timestamping mode
*
* Change time measurement
*
* @value 0 Get absolute timestamp
* @value 1 Get timestamp of mid exposure
*
* @group Camera Control
* @reboot_required true
*/
PARAM_DEFINE_INT32(CAM_CAP_MODE, 0);
/**
* Camera capture edge
*
* @value 0 Rising edge
* @value 1 Falling edge
* @value 2 Both edges
*
* @group Camera Control
* @reboot_required true
*/
PARAM_DEFINE_INT32(CAM_CAP_EDGE, 0);