0 | module System.Linux.Timerfd.Prim
2 | import public Data.C.Ptr
3 | import public System.Linux.Timerfd.Flags
4 | import public System.Linux.Timerfd.Timerfd
5 | import public System.Posix.File.Prim
6 | import public System.Posix.Timer
14 | %foreign "C:li_timerfd_create, linux-idris"
15 | prim__timerfd_create : Bits8 -> Bits32 -> PrimIO CInt
17 | %foreign "C:li_timerfd_settime, linux-idris"
18 | prim__timerfd_settime : Bits32 -> Bits32 -> AnyPtr -> AnyPtr -> PrimIO CInt
20 | %foreign "C:li_timerfd_settime1, linux-idris"
21 | prim__timerfd_settime1 : Bits32 -> Bits32 -> TimeT -> NsecT -> TimeT -> NsecT -> PrimIO CInt
23 | %foreign "C:li_timerfd_gettime, linux-idris"
24 | prim__timerfd_gettime : Bits32 -> AnyPtr -> PrimIO ()
26 | %foreign "C:li_timerfd_read, linux-idris"
27 | prim__timerfd_read : Bits32 -> PrimIO Int64
42 | timerfd : ClockId -> TimerfdFlags -> EPrim Timerfd
43 | timerfd c (F f) = toVal cast $
prim__timerfd_create (clockCode c) f
51 | setitime : Timerfd -> Bits32 -> (new,old : IOTimerspec) -> EPrim ()
52 | setitime t f new old =
53 | toUnit $
prim__timerfd_settime (fileDesc t) f (unwrap new) (unwrap old)
58 | getitime : Timerfd -> (old : IOTimerspec) -> PrimIO ()
59 | getitime t old = prim__timerfd_gettime (fileDesc t) (unwrap old)
69 | readTimerfd : Timerfd -> EPrim Bits64
71 | let r # t := ffi (prim__timerfd_read (fileDesc fd)) t
72 | in if r < 0 then E (inject $
fromNeg r) t else R (cast r) t
80 | setTime : Timerfd -> Bits32 -> Timerspec -> EPrim ()
81 | setTime t f (TS i v) =
82 | toUnit $
prim__timerfd_settime1 (fileDesc t) f i.secs i.nsecs v.secs v.nsecs
86 | getTime : Timerfd -> EPrim Timerspec
88 | withStruct Itimerspec $
\str,t =>
89 | let _ # t := toF1 (getitime fd str) t
90 | ts # t := timerspec str t