-------------------------------------------------------------------------------- -- | -- Module : Sound.ALSA.Sequencer.Queue.Status -- Copyright : (c) Henning Thielemann, 2010 -- (c) Iavor S. Diatchki, 2007 -- License : BSD3 -- -- Maintainer: Henning Thielemann -- Stability : provisional -- -- This module contains functions for working with sequencer queue. -- Reference: -- -------------------------------------------------------------------------------- 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 "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 "alsa/asoundlib.h" snd_seq_queue_status_get_queue :: Ptr T_ -> IO CInt foreign import ccall "alsa/asoundlib.h" snd_seq_queue_status_get_events :: Ptr T_ -> IO CInt foreign import ccall "alsa/asoundlib.h" snd_seq_queue_status_get_tick_time :: Ptr T_ -> IO Word32 foreign import ccall "alsa/asoundlib.h" snd_seq_queue_status_get_real_time :: Ptr T_ -> IO (Ptr RealTime.T) foreign import ccall "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 {- This function shall return status bits of the queue, but the ALSA headers do not define any bits. I would prefer a data type that handles this bitfield. -} _getStatus :: T -> IO CUInt _getStatus status = Area.with_queue_status status snd_seq_queue_status_get_status