module Graphics.XHB.Gen.Sync (extension, initialize, listSystemCounters, createCounter, destroyCounter, queryCounter, await, changeCounter, setCounter, createAlarm, changeAlarm, destroyAlarm, queryAlarm, setPriority, getPriority, module Graphics.XHB.Gen.Sync.Types) where import Graphics.XHB.Gen.Sync.Types import Graphics.XHB.Connection.Internal import Graphics.XHB.Connection.Extension import Graphics.XHB.Connection.Types import Control.Concurrent.STM import Foreign.C.Types import Data.Binary.Put (runPut) import Graphics.XHB.Shared hiding (Event(..), Error(..)) import Graphics.XHB.Gen.Xproto.Types hiding (deserializeError, deserializeEvent) import qualified Graphics.XHB.Gen.Xproto.Types extension :: ExtensionId extension = "SYNC" initialize :: Graphics.XHB.Connection.Types.Connection -> CARD8 -> CARD8 -> IO (Receipt InitializeReply) initialize c desired_major_version desired_minor_version = do receipt <- newEmptyReceiptIO let req = MkInitialize desired_major_version desired_minor_version putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequestWithReply c chunk receipt return receipt listSystemCounters :: Graphics.XHB.Connection.Types.Connection -> IO (Receipt ListSystemCountersReply) listSystemCounters c = do receipt <- newEmptyReceiptIO let req = MkListSystemCounters putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequestWithReply c chunk receipt return receipt createCounter :: Graphics.XHB.Connection.Types.Connection -> COUNTER -> INT64 -> IO () createCounter c id initial_value = do let req = MkCreateCounter id initial_value putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk destroyCounter :: Graphics.XHB.Connection.Types.Connection -> COUNTER -> IO () destroyCounter c counter = do let req = MkDestroyCounter counter putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk queryCounter :: Graphics.XHB.Connection.Types.Connection -> COUNTER -> IO (Receipt QueryCounterReply) queryCounter c counter = do receipt <- newEmptyReceiptIO let req = MkQueryCounter counter putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequestWithReply c chunk receipt return receipt await :: Graphics.XHB.Connection.Types.Connection -> [WAITCONDITION] -> IO () await c wait_list = do let req = MkAwait wait_list putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk changeCounter :: Graphics.XHB.Connection.Types.Connection -> COUNTER -> INT64 -> IO () changeCounter c counter amount = do let req = MkChangeCounter counter amount putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk setCounter :: Graphics.XHB.Connection.Types.Connection -> COUNTER -> INT64 -> IO () setCounter c counter value = do let req = MkSetCounter counter value putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk createAlarm :: Graphics.XHB.Connection.Types.Connection -> ALARM -> ValueParam CARD32 -> IO () createAlarm c id value = do let req = MkCreateAlarm id value putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk changeAlarm :: Graphics.XHB.Connection.Types.Connection -> ALARM -> ValueParam CARD32 -> IO () changeAlarm c id value = do let req = MkChangeAlarm id value putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk destroyAlarm :: Graphics.XHB.Connection.Types.Connection -> ALARM -> IO () destroyAlarm c alarm = do let req = MkDestroyAlarm alarm putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk queryAlarm :: Graphics.XHB.Connection.Types.Connection -> ALARM -> IO (Receipt QueryAlarmReply) queryAlarm c alarm = do receipt <- newEmptyReceiptIO let req = MkQueryAlarm alarm putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequestWithReply c chunk receipt return receipt setPriority :: Graphics.XHB.Connection.Types.Connection -> CARD32 -> INT32 -> IO () setPriority c id priority = do let req = MkSetPriority id priority putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequest c chunk getPriority :: Graphics.XHB.Connection.Types.Connection -> CARD32 -> IO (Receipt GetPriorityReply) getPriority c id = do receipt <- newEmptyReceiptIO let req = MkGetPriority id putAction <- serializeExtensionRequest c req let chunk = runPut putAction sendRequestWithReply c chunk receipt return receipt