mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
Set rtc_edge_time also in capture_callback
When using an FMU channel as PPS capture GPIO, the rtc_edge_time is now set as well. The delay between actual capture and callback is compensated with the elapsed time of the rtc clock.
This commit is contained in:
parent
43bc6db99e
commit
3e4031cf0f
@ -106,6 +106,11 @@ CameraCapture::capture_callback(uint32_t chan_index, hrt_abstime edge_time, uint
|
||||
{
|
||||
_trigger.chan_index = chan_index;
|
||||
_trigger.hrt_edge_time = edge_time;
|
||||
|
||||
timespec tv{};
|
||||
px4_clock_gettime(CLOCK_REALTIME, &tv);
|
||||
_trigger.rtc_edge_time = ts_to_abstime(&tv) - hrt_elapsed_time(&edge_time);
|
||||
|
||||
_trigger.edge_state = edge_state;
|
||||
_trigger.overflow = overflow;
|
||||
|
||||
@ -119,7 +124,11 @@ CameraCapture::gpio_interrupt_routine(int irq, void *context, void *arg)
|
||||
|
||||
dev->_trigger.chan_index = 0;
|
||||
dev->_trigger.hrt_edge_time = hrt_absolute_time();
|
||||
px4_clock_gettime(CLOCK_REALTIME, &dev->_trigger.rtc_edge_time);
|
||||
|
||||
timespec tv{};
|
||||
px4_clock_gettime(CLOCK_REALTIME, &tv);
|
||||
dev->_trigger.rtc_edge_time = ts_to_abstime(&tv);
|
||||
|
||||
dev->_trigger.edge_state = 0;
|
||||
dev->_trigger.overflow = 0;
|
||||
|
||||
@ -191,7 +200,7 @@ CameraCapture::publish_trigger()
|
||||
_rtc_drift_time = pps_capture.rtc_drift_time;
|
||||
}
|
||||
|
||||
trigger.timestamp_utc = ts_to_abstime(&_trigger.rtc_edge_time) + _rtc_drift_time;
|
||||
trigger.timestamp_utc = _trigger.rtc_edge_time + _rtc_drift_time;
|
||||
|
||||
_trigger_pub.publish(trigger);
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ private:
|
||||
struct _trig_s {
|
||||
uint32_t chan_index;
|
||||
hrt_abstime hrt_edge_time;
|
||||
timespec rtc_edge_time;
|
||||
uint64_t rtc_edge_time;
|
||||
uint32_t edge_state;
|
||||
uint32_t overflow;
|
||||
} _trigger{};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user