mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 11:59:17 +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:
committed by
Beat Küng
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.chan_index = chan_index;
|
||||||
_trigger.hrt_edge_time = edge_time;
|
_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.edge_state = edge_state;
|
||||||
_trigger.overflow = overflow;
|
_trigger.overflow = overflow;
|
||||||
|
|
||||||
@@ -119,7 +124,11 @@ CameraCapture::gpio_interrupt_routine(int irq, void *context, void *arg)
|
|||||||
|
|
||||||
dev->_trigger.chan_index = 0;
|
dev->_trigger.chan_index = 0;
|
||||||
dev->_trigger.hrt_edge_time = hrt_absolute_time();
|
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.edge_state = 0;
|
||||||
dev->_trigger.overflow = 0;
|
dev->_trigger.overflow = 0;
|
||||||
|
|
||||||
@@ -191,7 +200,7 @@ CameraCapture::publish_trigger()
|
|||||||
_rtc_drift_time = pps_capture.rtc_drift_time;
|
_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);
|
_trigger_pub.publish(trigger);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ private:
|
|||||||
struct _trig_s {
|
struct _trig_s {
|
||||||
uint32_t chan_index;
|
uint32_t chan_index;
|
||||||
hrt_abstime hrt_edge_time;
|
hrt_abstime hrt_edge_time;
|
||||||
timespec rtc_edge_time;
|
uint64_t rtc_edge_time;
|
||||||
uint32_t edge_state;
|
uint32_t edge_state;
|
||||||
uint32_t overflow;
|
uint32_t overflow;
|
||||||
} _trigger{};
|
} _trigger{};
|
||||||
|
|||||||
Reference in New Issue
Block a user