camera_capture: remove trig_buffer and replace it with public structure

This commit is contained in:
DanielePettenuzzo
2018-11-13 17:00:19 +01:00
committed by Daniel Agar
parent 0ee66c5434
commit faf535b040
2 changed files with 18 additions and 26 deletions
+16 -26
View File
@@ -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