Hi,
I'm working on a project that requires porting my KEXT driver to DriverKit system extension ( DEXT ). I've managed to re-write most of functions using DriverKit but I couldn't found a function for cancelling a scheduled timer.
What I try to make is waiting for an interrupt with a timeout period. And if the interrupt arrives in certain time period I need to cancel timeout timer and send async response to the user app. I'm also open to the suggestions.
Here is the code fragment for IOKit that I need to convert to DriverKit
// ... initialization code fragment ( error handling parts deleted )
m_timeout_timer = IOTimerEventSource::timerEventSource(this, timer_fired_pc_recv);
IOReturn result = m_workLoop->addEventSource(timer);
// ... starting the timeout counter
m_timeout_timer->setTimeoutMS(timeout_in_ms);
// ... some time later (cancel part)
m_timeout_timer->cancelTimeout();
And equivalent code in DriverKit
// ... initialization code fragment ( error handling parts deleted )
ret = IOTimerDispatchSource::Create(ivars->default_dispatch_queue, &ivars->timer_dispatchSource);
// starting timer
timer_dispatchSource->WakeAtTime(kIOTimerClockMonotonicRaw, currentTime + fiveSecondsInNanoSeconds, twoSecondsInNanoSeconds);
// missing part here
I did see the member method Cancel
in IOTimerDispatchSource
but it is kind of termination to the lifetime of IOTimerDispatchSource