module Sound.ALSA.Sequencer.Queue.Status
( T
, get
, copy
, clone
, getQueue
, getEvents
, getTickTime
, getRealTime
) where
import qualified Sound.ALSA.Sequencer.Marshal.Sequencer as Seq
import qualified Sound.ALSA.Sequencer.Marshal.RealTime as RealTime
import qualified Sound.ALSA.Sequencer.Marshal.Queue as Queue
import qualified Sound.ALSA.Sequencer.Area as Area
import qualified Sound.ALSA.Exception as Exc
import Foreign.Ptr (Ptr, )
import Foreign.C.Types (CInt, CUInt, )
import Foreign.Storable (peek, )
import Data.Word (Word32, )
type T = Area.QueueStatus
type T_ = Area.QueueStatus_
get :: Seq.T mode -> Queue.T -> IO T
get (Seq.Cons h) q =
do status <- Area.queue_status_malloc
Exc.checkResult_ "get_queue_status" =<< Area.with_queue_status status
(snd_seq_get_queue_status h (Queue.exp q))
return status
foreign import ccall unsafe "alsa/asoundlib.h snd_seq_get_queue_status"
snd_seq_get_queue_status :: Ptr Seq.Core -> CInt -> Ptr T_ -> IO CInt
copy :: T -> T -> IO ()
clone :: T -> IO T
copy = Area.queue_status_copy
clone = Area.queue_status_clone
foreign import ccall unsafe "alsa/asoundlib.h"
snd_seq_queue_status_get_queue
:: Ptr T_ -> IO CInt
foreign import ccall unsafe "alsa/asoundlib.h"
snd_seq_queue_status_get_events
:: Ptr T_ -> IO CInt
foreign import ccall unsafe "alsa/asoundlib.h"
snd_seq_queue_status_get_tick_time
:: Ptr T_ -> IO Word32
foreign import ccall unsafe "alsa/asoundlib.h"
snd_seq_queue_status_get_real_time
:: Ptr T_ -> IO (Ptr RealTime.T)
foreign import ccall unsafe "alsa/asoundlib.h"
snd_seq_queue_status_get_status
:: Ptr T_ -> IO CUInt
getQueue :: T -> IO Queue.T
getQueue status =
fmap Queue.imp $
Area.with_queue_status status snd_seq_queue_status_get_queue
getEvents :: T -> IO Int
getEvents status =
fmap fromIntegral $
Area.with_queue_status status snd_seq_queue_status_get_events
getTickTime :: T -> IO Word32
getTickTime status =
Area.with_queue_status status snd_seq_queue_status_get_tick_time
getRealTime :: T -> IO RealTime.T
getRealTime status =
peek =<<
Area.with_queue_status status snd_seq_queue_status_get_real_time
_getStatus :: T -> IO CUInt
_getStatus status =
Area.with_queue_status status snd_seq_queue_status_get_status