mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-01 02:55:07 +08:00
camera_capture: remove trig_buffer and replace it with public structure
This commit is contained in:
committed by
Daniel Agar
parent
0ee66c5434
commit
faf535b040
@@ -92,15 +92,10 @@ CameraCapture::capture_callback(uint32_t chan_index,
|
|||||||
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow)
|
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow)
|
||||||
{
|
{
|
||||||
|
|
||||||
struct _trig_s trigger;
|
_trigger.chan_index = chan_index;
|
||||||
|
_trigger.edge_time = edge_time;
|
||||||
trigger.chan_index = chan_index;
|
_trigger.edge_state = edge_state;
|
||||||
trigger.edge_time = edge_time;
|
_trigger.overflow = overflow;
|
||||||
trigger.edge_state = edge_state;
|
|
||||||
trigger.overflow = overflow;
|
|
||||||
|
|
||||||
/* post message to the ring */
|
|
||||||
_trig_buffer->put(&trigger);
|
|
||||||
|
|
||||||
work_queue(HPWORK, &_work_publisher, (worker_t)&CameraCapture::publish_trigger_trampoline, this, 0);
|
work_queue(HPWORK, &_work_publisher, (worker_t)&CameraCapture::publish_trigger_trampoline, this, 0);
|
||||||
}
|
}
|
||||||
@@ -116,43 +111,38 @@ CameraCapture::publish_trigger_trampoline(void *arg)
|
|||||||
void
|
void
|
||||||
CameraCapture::publish_trigger()
|
CameraCapture::publish_trigger()
|
||||||
{
|
{
|
||||||
struct _trig_s trig;
|
|
||||||
bool publish = false;
|
bool publish = false;
|
||||||
|
|
||||||
if (!_trig_buffer->get(&trig)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct camera_trigger_s trigger {};
|
struct camera_trigger_s trigger {};
|
||||||
|
|
||||||
// MODES 1 and 2 are not fully tested
|
// MODES 1 and 2 are not fully tested
|
||||||
if (_camera_capture_mode == 0) {
|
if (_camera_capture_mode == 0) {
|
||||||
trigger.timestamp = trig.edge_time - uint64_t(1000 * _strobe_delay);
|
trigger.timestamp = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
|
||||||
trigger.seq = _capture_seq++;
|
trigger.seq = _capture_seq++;
|
||||||
_last_trig_time = trigger.timestamp;
|
_last_trig_time = trigger.timestamp;
|
||||||
publish = true;
|
publish = true;
|
||||||
|
|
||||||
} else if (_camera_capture_mode == 1) { // Get timestamp of mid-exposure (active high)
|
} else if (_camera_capture_mode == 1) { // Get timestamp of mid-exposure (active high)
|
||||||
if (trig.edge_state == 1) {
|
if (_trigger.edge_state == 1) {
|
||||||
_last_trig_begin_time = trig.edge_time - uint64_t(1000 * _strobe_delay);
|
_last_trig_begin_time = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
|
||||||
|
|
||||||
} else if (trig.edge_state == 0 && _last_trig_begin_time > 0) {
|
} else if (_trigger.edge_state == 0 && _last_trig_begin_time > 0) {
|
||||||
trigger.timestamp = trig.edge_time - ((trig.edge_time - _last_trig_begin_time) / 2);
|
trigger.timestamp = _trigger.edge_time - ((_trigger.edge_time - _last_trig_begin_time) / 2);
|
||||||
trigger.seq = _capture_seq++;
|
trigger.seq = _capture_seq++;
|
||||||
_last_exposure_time = trig.edge_time - _last_trig_begin_time;
|
_last_exposure_time = _trigger.edge_time - _last_trig_begin_time;
|
||||||
_last_trig_time = trigger.timestamp;
|
_last_trig_time = trigger.timestamp;
|
||||||
publish = true;
|
publish = true;
|
||||||
_capture_seq++;
|
_capture_seq++;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // Get timestamp of mid-exposure (active low)
|
} else { // Get timestamp of mid-exposure (active low)
|
||||||
if (trig.edge_state == 0) {
|
if (_trigger.edge_state == 0) {
|
||||||
_last_trig_begin_time = trig.edge_time - uint64_t(1000 * _strobe_delay);
|
_last_trig_begin_time = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
|
||||||
|
|
||||||
} else if (trig.edge_state == 1 && _last_trig_begin_time > 0) {
|
} else if (_trigger.edge_state == 1 && _last_trig_begin_time > 0) {
|
||||||
trigger.timestamp = trig.edge_time - ((trig.edge_time - _last_trig_begin_time) / 2);
|
trigger.timestamp = _trigger.edge_time - ((_trigger.edge_time - _last_trig_begin_time) / 2);
|
||||||
trigger.seq = _capture_seq++;
|
trigger.seq = _capture_seq++;
|
||||||
_last_exposure_time = trig.edge_time - _last_trig_begin_time;
|
_last_exposure_time = _trigger.edge_time - _last_trig_begin_time;
|
||||||
_last_trig_time = trigger.timestamp;
|
_last_trig_time = trigger.timestamp;
|
||||||
publish = true;
|
publish = true;
|
||||||
}
|
}
|
||||||
@@ -160,7 +150,7 @@ CameraCapture::publish_trigger()
|
|||||||
}
|
}
|
||||||
|
|
||||||
trigger.feedback = true;
|
trigger.feedback = true;
|
||||||
_capture_overflows = trig.overflow;
|
_capture_overflows = _trigger.overflow;
|
||||||
|
|
||||||
if (!publish) {
|
if (!publish) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -125,6 +125,8 @@ private:
|
|||||||
uint32_t overflow;
|
uint32_t overflow;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _trig_s _trigger;
|
||||||
|
|
||||||
ringbuffer::RingBuffer *_trig_buffer;
|
ringbuffer::RingBuffer *_trig_buffer;
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
|
|||||||
Reference in New Issue
Block a user