packages feed

bglib 1.0.0.1 → 2.0.0.0

raw patch · 4 files changed

+295/−253 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- BGLib.Types: askSerialPort :: (MonadReader env m, HasSerialPort env) => m SerialPort
- BGLib.Types: class HasSerialPort env
- BGLib.Types: getSerialPort :: HasSerialPort env => env -> SerialPort
+ BGLib.Types: askHandle :: (MonadReader env m, HasHandle env) => m Handle
+ BGLib.Types: class HasHandle env
+ BGLib.Types: getHandle :: HasHandle env => env -> Handle
+ BGLib.Types: instance GHC.Enum.Bounded BGLib.Types.BgCommandClass
+ BGLib.Types: instance GHC.Enum.Bounded BGLib.Types.BgMessageType
+ BGLib.Types: instance GHC.Enum.Bounded BGLib.Types.BgTecnologyType
+ BGLib.Types: packetBlock :: (MonadIO m, MonadReader env m, HasBGChan env) => m a -> m a
+ BGLib.Types: packetBlock_ :: (MonadIO m, MonadReader env m, HasBGChan env) => m a -> m ()
+ BGLib.Types: updateBGChan :: HasBGChan env => TChan BgPacket -> env -> env
- BGLib.Commands: attclientAttributeWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientAttributeWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientExecuteWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m (UInt8, BGResult)
+ BGLib.Commands: attclientExecuteWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m (UInt8, BGResult)
- BGLib.Commands: attclientFindByTypeValue :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientFindByTypeValue :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientFindInformation :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> m (UInt8, BGResult)
+ BGLib.Commands: attclientFindInformation :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> m (UInt8, BGResult)
- BGLib.Commands: attclientIndicateConfirm :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
+ BGLib.Commands: attclientIndicateConfirm :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
- BGLib.Commands: attclientPrepareWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientPrepareWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientReadByGroupType :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientReadByGroupType :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientReadByHandle :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> m (UInt8, BGResult)
+ BGLib.Commands: attclientReadByHandle :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> m (UInt8, BGResult)
- BGLib.Commands: attclientReadByType :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientReadByType :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientReadLong :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> m (UInt8, BGResult)
+ BGLib.Commands: attclientReadLong :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> m (UInt8, BGResult)
- BGLib.Commands: attclientReadMultiple :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientReadMultiple :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attclientWriteCommand :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: attclientWriteCommand :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: attributesRead :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> m (UInt16, UInt16, BGResult, UInt8Array)
+ BGLib.Commands: attributesRead :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> m (UInt16, UInt16, BGResult, UInt8Array)
- BGLib.Commands: attributesReadType :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> m (UInt16, BGResult, UInt8Array)
+ BGLib.Commands: attributesReadType :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> m (UInt16, BGResult, UInt8Array)
- BGLib.Commands: attributesSend :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m BGResult
+ BGLib.Commands: attributesSend :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt8Array -> m BGResult
- BGLib.Commands: attributesUserReadResponse :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8Array -> m ()
+ BGLib.Commands: attributesUserReadResponse :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8Array -> m ()
- BGLib.Commands: attributesUserWriteResponse :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m ()
+ BGLib.Commands: attributesUserWriteResponse :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m ()
- BGLib.Commands: attributesWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt8 -> UInt8Array -> m BGResult
+ BGLib.Commands: attributesWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt8 -> UInt8Array -> m BGResult
- BGLib.Commands: connectionChannelMapGet :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, UInt8Array)
+ BGLib.Commands: connectionChannelMapGet :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, UInt8Array)
- BGLib.Commands: connectionChannelMapSet :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (UInt8, BGResult)
+ BGLib.Commands: connectionChannelMapSet :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (UInt8, BGResult)
- BGLib.Commands: connectionDisconnect :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, BGResult)
+ BGLib.Commands: connectionDisconnect :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, BGResult)
- BGLib.Commands: connectionGetRssi :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, Int8)
+ BGLib.Commands: connectionGetRssi :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, Int8)
- BGLib.Commands: connectionGetStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m UInt8
+ BGLib.Commands: connectionGetStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m UInt8
- BGLib.Commands: connectionSlaveLatencyDisable :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
+ BGLib.Commands: connectionSlaveLatencyDisable :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
- BGLib.Commands: connectionUpdate :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (UInt8, BGResult)
+ BGLib.Commands: connectionUpdate :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (UInt8, BGResult)
- BGLib.Commands: connectionVersionUpdate :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, BGResult)
+ BGLib.Commands: connectionVersionUpdate :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m (UInt8, BGResult)
- BGLib.Commands: dfuFlashSetAddress :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt32 -> m BGResult
+ BGLib.Commands: dfuFlashSetAddress :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt32 -> m BGResult
- BGLib.Commands: dfuFlashUpload :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8Array -> m BGResult
+ BGLib.Commands: dfuFlashUpload :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8Array -> m BGResult
- BGLib.Commands: dfuFlashUploadFinish :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m BGResult
+ BGLib.Commands: dfuFlashUploadFinish :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m BGResult
- BGLib.Commands: dfuReset :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m ()
+ BGLib.Commands: dfuReset :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m ()
- BGLib.Commands: evtAttclientAttributeValue :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientAttributeValue :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttclientFindInformationFound :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientFindInformationFound :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttclientGroupFound :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientGroupFound :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttclientIndicated :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientIndicated :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttclientProcedureCompleted :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> UInt16 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientProcedureCompleted :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> UInt16 -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttclientReadMultipleResponse :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttclientReadMultipleResponse :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttributesStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt16 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttributesStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt16 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttributesUserReadRequest :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttributesUserReadRequest :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtAttributesValue :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtAttributesValue :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtConnectionDisconnected :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> m (Maybe a)) -> m a
+ BGLib.Commands: evtConnectionDisconnected :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> m (Maybe a)) -> m a
- BGLib.Commands: evtConnectionFeatureInd :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtConnectionFeatureInd :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtConnectionStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> BdAddr -> UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtConnectionStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> BdAddr -> UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtConnectionVersionInd :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtConnectionVersionInd :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> m (Maybe a)) -> m a
- BGLib.Commands: evtDfuBoot :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt32 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtDfuBoot :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt32 -> m (Maybe a)) -> m a
- BGLib.Commands: evtFlashPsKey :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt16 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtFlashPsKey :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt16 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtGapScanResponse :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (Int8 -> UInt8 -> BdAddr -> GapAddressType -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a
+ BGLib.Commands: evtGapScanResponse :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (Int8 -> UInt8 -> BdAddr -> GapAddressType -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a
- BGLib.Commands: evtHardwareAdcResult :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtHardwareAdcResult :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt16 -> m (Maybe a)) -> m a
- BGLib.Commands: evtHardwareAnalogComparatorStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt32 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtHardwareAnalogComparatorStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt32 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtHardwareIoPortStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt32 -> UInt8 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtHardwareIoPortStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt32 -> UInt8 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtHardwareSoftTimer :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtHardwareSoftTimer :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSmBondStatus :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> Bool -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSmBondStatus :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> Bool -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSmBondingFail :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSmBondingFail :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> BGResult -> m (Maybe a)) -> m a
- BGLib.Commands: evtSmPasskeyDisplay :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt32 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSmPasskeyDisplay :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt32 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSmPasskeyRequest :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSmPasskeyRequest :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemBoot :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemBoot :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemEndpointWatermarkRx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemEndpointWatermarkRx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemEndpointWatermarkTx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemEndpointWatermarkTx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt8 -> UInt8 -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemNoLicenseKey :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (() -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemNoLicenseKey :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (() -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemProtocolError :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (BGResult -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemProtocolError :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (BGResult -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemScriptFailure :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (UInt16 -> BGResult -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemScriptFailure :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (UInt16 -> BGResult -> m (Maybe a)) -> m a
- BGLib.Commands: evtSystemUsbEnumerated :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => (Bool -> m (Maybe a)) -> m a
+ BGLib.Commands: evtSystemUsbEnumerated :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => (Bool -> m (Maybe a)) -> m a
- BGLib.Commands: flashErasePage :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
+ BGLib.Commands: flashErasePage :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
- BGLib.Commands: flashPsDefrag :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m ()
+ BGLib.Commands: flashPsDefrag :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m ()
- BGLib.Commands: flashPsDump :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m ()
+ BGLib.Commands: flashPsDump :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m ()
- BGLib.Commands: flashPsErase :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> m ()
+ BGLib.Commands: flashPsErase :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> m ()
- BGLib.Commands: flashPsEraseAll :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m ()
+ BGLib.Commands: flashPsEraseAll :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m ()
- BGLib.Commands: flashPsLoad :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> m (BGResult, UInt8Array)
+ BGLib.Commands: flashPsLoad :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> m (BGResult, UInt8Array)
- BGLib.Commands: flashPsSave :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt8Array -> m BGResult
+ BGLib.Commands: flashPsSave :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt8Array -> m BGResult
- BGLib.Commands: flashReadData :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt32 -> UInt8 -> m UInt8Array
+ BGLib.Commands: flashReadData :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt32 -> UInt8 -> m UInt8Array
- BGLib.Commands: flashWriteData :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt32 -> UInt8Array -> m BGResult
+ BGLib.Commands: flashWriteData :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt32 -> UInt8Array -> m BGResult
- BGLib.Commands: gapConnectDirect :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8)
+ BGLib.Commands: gapConnectDirect :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8)
- BGLib.Commands: gapConnectSelective :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8)
+ BGLib.Commands: gapConnectSelective :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8)
- BGLib.Commands: gapDiscover :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => GapDiscoverMode -> m UInt16
+ BGLib.Commands: gapDiscover :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => GapDiscoverMode -> m UInt16
- BGLib.Commands: gapEndProcedure :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt16
+ BGLib.Commands: gapEndProcedure :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt16
- BGLib.Commands: gapSetAdvData :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m BGResult
+ BGLib.Commands: gapSetAdvData :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m BGResult
- BGLib.Commands: gapSetAdvParameters :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt8 -> m BGResult
+ BGLib.Commands: gapSetAdvParameters :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt8 -> m BGResult
- BGLib.Commands: gapSetDirectedConnectableMode :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
+ BGLib.Commands: gapSetDirectedConnectableMode :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
- BGLib.Commands: gapSetFiltering :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => GapScanPolicy -> GapAdvPolicy -> UInt8 -> m BGResult
+ BGLib.Commands: gapSetFiltering :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => GapScanPolicy -> GapAdvPolicy -> UInt8 -> m BGResult
- BGLib.Commands: gapSetInitiatingConParameters :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> m BGResult
+ BGLib.Commands: gapSetInitiatingConParameters :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> m BGResult
- BGLib.Commands: gapSetMode :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => GapDiscoverableMode -> GapConnectableMode -> m BGResult
+ BGLib.Commands: gapSetMode :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => GapDiscoverableMode -> GapConnectableMode -> m BGResult
- BGLib.Commands: gapSetNonresolvableAddress :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => BdAddr -> m BGResult
+ BGLib.Commands: gapSetNonresolvableAddress :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => BdAddr -> m BGResult
- BGLib.Commands: gapSetPrivacyFlags :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m ()
+ BGLib.Commands: gapSetPrivacyFlags :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m ()
- BGLib.Commands: gapSetScanParameters :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt8 -> m BGResult
+ BGLib.Commands: gapSetScanParameters :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt16 -> UInt16 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareAdcRead :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareAdcRead :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareAnalogComparatorConfigIrq :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m BGResult
+ BGLib.Commands: hardwareAnalogComparatorConfigIrq :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m BGResult
- BGLib.Commands: hardwareAnalogComparatorEnable :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m ()
+ BGLib.Commands: hardwareAnalogComparatorEnable :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m ()
- BGLib.Commands: hardwareAnalogComparatorRead :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m (BGResult, UInt8)
+ BGLib.Commands: hardwareAnalogComparatorRead :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m (BGResult, UInt8)
- BGLib.Commands: hardwareGetTimestamp :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt32
+ BGLib.Commands: hardwareGetTimestamp :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt32
- BGLib.Commands: hardwareI2cRead :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> UInt8 -> m (UInt16, UInt8Array)
+ BGLib.Commands: hardwareI2cRead :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> UInt8 -> m (UInt16, UInt8Array)
- BGLib.Commands: hardwareI2cWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> UInt8Array -> m UInt8
+ BGLib.Commands: hardwareI2cWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> UInt8Array -> m UInt8
- BGLib.Commands: hardwareIoPortConfigDirection :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareIoPortConfigDirection :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareIoPortConfigFunction :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareIoPortConfigFunction :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareIoPortConfigIrq :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> Bool -> m BGResult
+ BGLib.Commands: hardwareIoPortConfigIrq :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> Bool -> m BGResult
- BGLib.Commands: hardwareIoPortConfigPull :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> Bool -> m BGResult
+ BGLib.Commands: hardwareIoPortConfigPull :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> Bool -> m BGResult
- BGLib.Commands: hardwareIoPortIrqDirection :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m BGResult
+ BGLib.Commands: hardwareIoPortIrqDirection :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m BGResult
- BGLib.Commands: hardwareIoPortIrqEnable :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareIoPortIrqEnable :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareIoPortRead :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m (BGResult, UInt8, UInt8)
+ BGLib.Commands: hardwareIoPortRead :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m (BGResult, UInt8, UInt8)
- BGLib.Commands: hardwareIoPortWrite :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareIoPortWrite :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareSetRxgain :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m ()
+ BGLib.Commands: hardwareSetRxgain :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m ()
- BGLib.Commands: hardwareSetSoftTimer :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt32 -> UInt8 -> Bool -> m BGResult
+ BGLib.Commands: hardwareSetSoftTimer :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt32 -> UInt8 -> Bool -> m BGResult
- BGLib.Commands: hardwareSetTxpower :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m ()
+ BGLib.Commands: hardwareSetTxpower :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m ()
- BGLib.Commands: hardwareSleepEnable :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m BGResult
+ BGLib.Commands: hardwareSleepEnable :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m BGResult
- BGLib.Commands: hardwareSpiConfig :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> Bool -> Bool -> Bool -> UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: hardwareSpiConfig :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> Bool -> Bool -> Bool -> UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: hardwareSpiTransfer :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (BGResult, UInt8, UInt8Array)
+ BGLib.Commands: hardwareSpiTransfer :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m (BGResult, UInt8, UInt8Array)
- BGLib.Commands: hardwareTimerComparator :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> UInt16 -> m BGResult
+ BGLib.Commands: hardwareTimerComparator :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> UInt16 -> m BGResult
- BGLib.Commands: hardwareUsbEnable :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m BGResult
+ BGLib.Commands: hardwareUsbEnable :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m BGResult
- BGLib.Commands: setBondableMode :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> m ()
+ BGLib.Commands: setBondableMode :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> m ()
- BGLib.Commands: smDeleteBonding :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
+ BGLib.Commands: smDeleteBonding :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m BGResult
- BGLib.Commands: smEncryptStart :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m (UInt8, BGResult)
+ BGLib.Commands: smEncryptStart :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> Bool -> m (UInt8, BGResult)
- BGLib.Commands: smGetBonds :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt8
+ BGLib.Commands: smGetBonds :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt8
- BGLib.Commands: smPasskeyEntry :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt32 -> m BGResult
+ BGLib.Commands: smPasskeyEntry :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt32 -> m BGResult
- BGLib.Commands: smSetOobData :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8Array -> m ()
+ BGLib.Commands: smSetOobData :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8Array -> m ()
- BGLib.Commands: smSetPairingDistributionKeys :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: smSetPairingDistributionKeys :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: smSetParameters :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => Bool -> UInt8 -> SMIOCapabilities -> m ()
+ BGLib.Commands: smSetParameters :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => Bool -> UInt8 -> SMIOCapabilities -> m ()
- BGLib.Commands: smWhitelistBonds :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m (BGResult, UInt8)
+ BGLib.Commands: smWhitelistBonds :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m (BGResult, UInt8)
- BGLib.Commands: startPacketReader :: (MonadIO m, MonadReader env m, HasBGChan env, HasSerialPort env, HasDebug env) => m ()
+ BGLib.Commands: startPacketReader :: (MonadIO m, MonadReader env m, HasBGChan env, HasHandle env, HasDebug env) => m ()
- BGLib.Commands: systemAddressGet :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m BdAddr
+ BGLib.Commands: systemAddressGet :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m BdAddr
- BGLib.Commands: systemAesDecrypt :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8Array -> m UInt8Array
+ BGLib.Commands: systemAesDecrypt :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8Array -> m UInt8Array
- BGLib.Commands: systemAesEncrypt :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8Array -> m UInt8Array
+ BGLib.Commands: systemAesEncrypt :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8Array -> m UInt8Array
- BGLib.Commands: systemAesSetkey :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8Array -> m ()
+ BGLib.Commands: systemAesSetkey :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8Array -> m ()
- BGLib.Commands: systemDelayReset :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => RebootMode -> UInt16 -> m ()
+ BGLib.Commands: systemDelayReset :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => RebootMode -> UInt16 -> m ()
- BGLib.Commands: systemEndpointRx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m (BGResult, UInt8Array)
+ BGLib.Commands: systemEndpointRx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> m (BGResult, UInt8Array)
- BGLib.Commands: systemEndpointSetWatermarks :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
+ BGLib.Commands: systemEndpointSetWatermarks :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m BGResult
- BGLib.Commands: systemEndpointTx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m BGResult
+ BGLib.Commands: systemEndpointTx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8Array -> m BGResult
- BGLib.Commands: systemGetBootloaderCrc :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt16
+ BGLib.Commands: systemGetBootloaderCrc :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt16
- BGLib.Commands: systemGetConnections :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt8
+ BGLib.Commands: systemGetConnections :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt8
- BGLib.Commands: systemGetCounters :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m (UInt8, UInt8, UInt8, UInt8, UInt8)
+ BGLib.Commands: systemGetCounters :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m (UInt8, UInt8, UInt8, UInt8, UInt8)
- BGLib.Commands: systemGetInfo :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m (UInt16, UInt16, UInt16, UInt16, UInt16, UInt8, UInt8)
+ BGLib.Commands: systemGetInfo :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m (UInt16, UInt16, UInt16, UInt16, UInt16, UInt8, UInt8)
- BGLib.Commands: systemHello :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m ()
+ BGLib.Commands: systemHello :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m ()
- BGLib.Commands: systemReset :: (MonadIO m, MonadReader env m, HasSerialPort env, HasDebug env) => RebootMode -> m ()
+ BGLib.Commands: systemReset :: (MonadIO m, MonadReader env m, HasHandle env, HasDebug env) => RebootMode -> m ()
- BGLib.Commands: systemUsbEnumerationStatusGet :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m (BGResult, Bool)
+ BGLib.Commands: systemUsbEnumerationStatusGet :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m (BGResult, Bool)
- BGLib.Commands: systemWhitelistAppend :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
+ BGLib.Commands: systemWhitelistAppend :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
- BGLib.Commands: systemWhitelistClear :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m ()
+ BGLib.Commands: systemWhitelistClear :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m ()
- BGLib.Commands: systemWhitelistRemove :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
+ BGLib.Commands: systemWhitelistRemove :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => BdAddr -> GapAddressType -> m BGResult
- BGLib.Commands: testChannelMode :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m ()
+ BGLib.Commands: testChannelMode :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m ()
- BGLib.Commands: testGetChannelMap :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt8Array
+ BGLib.Commands: testGetChannelMap :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt8Array
- BGLib.Commands: testPhyEnd :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => m UInt16
+ BGLib.Commands: testPhyEnd :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => m UInt16
- BGLib.Commands: testPhyRx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> m ()
+ BGLib.Commands: testPhyRx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> m ()
- BGLib.Commands: testPhyTx :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m ()
+ BGLib.Commands: testPhyTx :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env) => UInt8 -> UInt8 -> UInt8 -> m ()

Files

bglib.cabal view
@@ -1,5 +1,5 @@ name:                bglib-version:             1.0.0.1+version:             2.0.0.0 synopsis:            Implementation of the BGAPI serial protocol description:         This library implements Silicon Labs' (formerly BlueGiga)                      serial protocol to communicate with certain Bluetooth and
examples/bgapitest.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}  import           BGLib.Commands import           BGLib.Types@@ -14,7 +15,7 @@ import           Prelude hiding (print, putStrLn) import qualified Prelude as P import           System.Exit-import           System.Hardware.Serialport+import           System.IO hiding (print, putStrLn)  -- This is our monad stack, most of the application runs inside this. type AppM env a = ReaderT env IO a@@ -29,18 +30,19 @@ -- ReaderT env IO monad stack data App = App     { appOptions :: AppOptions-    , appSerialPort :: SerialPort+    , appHandle  :: Handle     , appBGChan  :: TChan BgPacket     }  -- Instances for our environment to properly serve the library -- functions. -instance HasSerialPort App where-    getSerialPort = appSerialPort+instance HasHandle App where+    getHandle = appHandle  instance HasBGChan App where     getBGChan = appBGChan+    updateBGChan chan app = app{ appBGChan = chan }  instance HasDebug App where     getDebug = appOptDebug . appOptions@@ -97,11 +99,15 @@             )      -- Build the application environment+    -- With certain hardware, you probably want to set baud rate,+    -- stop and parity bits. You can extract the file descriptor+    -- from the Handle and use System.Posix.Terminal functions+    -- to do that, or use the Serial library to open a serial port+    -- and build a Handle out of the file descriptor of the serial+    -- port.     app <- App         <$> return appOpts-        <*> openSerial-            (appOptSerialPort appOpts)-            (SerialPortSettings CS115200 8 One NoParity NoFlowControl 1000)+        <*> openFile (appOptSerialPort appOpts) ReadWriteMode         <*> atomically newBroadcastTChan      -- Run the application@@ -110,7 +116,10 @@         -- Register an event handler for protocol errors.         -- Event handlers are blocking. We use forkApp to make it         -- "run in the background".-        _ <- forkApp $ evtSystemProtocolError $ \reason -> do+        -- The command 'packetBlock' creates a barrier, so new packets+        -- after this are guaranteed to be picked up by the event handlers+        -- in the block.+        packetBlock_ $ forkApp $ evtSystemProtocolError $ \reason -> do             liftIO $ die $ "*** PROTOCOL ERROR " ++ show reason          -- Starts a thread that keeps reading packets from the serial port,@@ -160,20 +169,21 @@         putStrLn $ "Decrypted: " ++ BSS.unpack (fromUInt8Array decrypted)         putStrLn ""         -        _ <- gapDiscover GapDiscoverGeneric+        packetBlock_ $ do+            _ <- gapDiscover GapDiscoverGeneric -        -- Register an event handler for scan responses. Can be done anywhere.-        -- The handler forks a thread that runs forever, and can be terminated-        -- later if necessary.-        _ <- withTimeOut 5000000 $ evtGapScanResponse $ \rssi _ sender _ _ _ -> do-                print rssi-                print sender-                putStrLn ""-                return $ Nothing -- We'd like to listen to further events.+            -- Register an event handler for scan responses. Can be done anywhere.+            -- The handler forks a thread that runs forever, and can be terminated+            -- later if necessary.+            _ <- withTimeOut 5000000 $ evtGapScanResponse $ \rssi _ sender _ _ _ -> do+                    print rssi+                    print sender+                    putStrLn ""+                    return $ Nothing -- We'd like to listen to further events. -        _ <- gapEndProcedure+            gapEndProcedure          putStrLn "Let's cause trouble:"-        s <- askSerialPort-        _ <- liftIO $ send s $ BSS.pack "a"-        liftIO $ threadDelay 5000000+        h <- askHandle+        _ <- liftIO $ BSS.hPut h "a"+        liftIO $ threadDelay 2000000
src/BGLib/Commands.hs view
@@ -145,58 +145,64 @@ import           BGLib.Types import           Control.Concurrent import           Control.Concurrent.STM.TChan+import           Control.Monad.IO.Class import           Control.Monad.Loops+import           Control.Monad.Reader import           Control.Monad.STM import           Data.Binary import qualified Data.ByteString.Lazy as BSL import qualified Data.ByteString as BSS-import           System.Hardware.Serialport-import           Control.Monad.IO.Class-import           Control.Monad.Reader---- Write a BgPacket to a SerialPort-writeBGPacket' :: Bool -> SerialPort -> BgPacket -> IO ()-writeBGPacket' dbg s p = do-    let packetBS = BSL.toStrict $ encode p-    when dbg $ do-        putStr "[DEBUG] WRITE: "-        putStrLn $ show p-    _ <- send s packetBS-    return ()+import           System.IO --- Write the BgPacket to the SerialPort in env asked from the MonadReader-writeBGPacket :: (MonadIO m, MonadReader env m, HasSerialPort env, HasDebug env) => BgPacket -> m ()+-- Write the BgPacket to the Handle in env asked from the MonadReader+writeBGPacket :: (MonadIO m, MonadReader env m, HasHandle env, HasDebug env) => BgPacket -> m () writeBGPacket p = do-    s <- askSerialPort+    h <- askHandle     dbg <- askDebug-    liftIO $ writeBGPacket' dbg s p+    liftIO $ do+        let packetBS = BSL.toStrict $ encode p+        when dbg $ do+            putStr "[DEBUG] WRITE: "+            putStrLn $ show p+        BSS.hPut h packetBS+        return ()+    +readData :: Handle -> Int -> IO BSS.ByteString+readData h n = do+    bs <- BSS.hGet h n+    if  BSS.length bs == n+        then return bs+        else fail "Could not read enough data" --- Read one BgPacket from a SerialPort-readBGPacket' :: Bool -> SerialPort -> IO BgPacket-readBGPacket' dbg s = do-    bgpHeader@BgPacketHeader{..} <- decode <$> BSL.fromStrict <$> recv s 4-    bgpPayload <- toBgPayload <$> recv s (fromIntegral bghLength)-    let p = BgPacket {..}-    when dbg $ do-        putStr "[DEBUG]  READ: "-        putStrLn $ show p-    return p+-- Read one BgPacket from a Handle+readBGPacket :: Bool -> Handle -> IO (Maybe BgPacket)+readBGPacket dbg h = do+    bsHeader <- readData h 4+    let eHeader = decodeOrFail $ BSL.fromStrict bsHeader --- Read one BgPacket from the SerialPort in env asked from the MonadReader---readBGPacket :: (MonadIO m, MonadReader env m, HasSerialPort env) => m BgPacket---readBGPacket = do---    s <- askSerialPort---    liftIO $ readBGPacket' s+    case eHeader of+        Left _ -> do+            when dbg $ do+                putStr $ "[DEBUG] ERROR: decoding header: " ++ bsShowHex bsHeader+            return Nothing+        Right (_, _, bgpHeader@BgPacketHeader{..}) -> do+            bsPayload <- readData h (fromIntegral bghLength)+            let bgpPayload = toBgPayload bsPayload+            let p = BgPacket {..}+            when dbg $ do+                putStr "[DEBUG]  READ: "+                putStrLn $ show p+            return $ Just p  -- Launch a thread that reads packets and sends them down a TChan BgPacket-startPacketReader :: (MonadIO m, MonadReader env m, HasBGChan env, HasSerialPort env, HasDebug env) => m () +startPacketReader :: (MonadIO m, MonadReader env m, HasBGChan env, HasHandle env, HasDebug env) => m ()  startPacketReader = do     c <- askBGChan-    s <- askSerialPort+    h <- askHandle     dbg <- askDebug     _ <- liftIO $ forkIO $ forever $ do-        --putStrLn "* READ *"-        readBGPacket' dbg s >>= atomically . writeTChan c+        Just p <- readBGPacket dbg h+        atomically $ writeTChan c p     return ()  -- Waits for any BgPacket to appear on the TChan@@ -211,30 +217,37 @@         p@BgPacket{..} <- waitForAnyPacket chan         return $ if bgHeaderMatches mt tt cc cid bgpHeader then Just p else Nothing --- eXecute a Command, don't wait for any answer-xCmd' :: (MonadIO m, MonadReader env m, HasSerialPort env, HasDebug env, Binary a ) => BgMessageType -> BgTecnologyType -> BgCommandClass -> UInt8 -> a -> m ()+-- eXecute a Command, don't wait for answer+xCmd' :: (MonadIO m, MonadReader env m, HasHandle env, HasDebug env, Binary a ) => BgMessageType -> BgTecnologyType -> BgCommandClass -> UInt8 -> a -> m () xCmd' mt tt cc cid inp = do     let inpBS = BSL.toStrict $ encode inp     writeBGPacket $ BgPacket (BgPacketHeader mt tt (fromIntegral $ BSS.length inpBS) cc cid) (toBgPayload inpBS)  -- Execute a command, wait for the appropriate answer-xCmd :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env, Binary a, Binary b) => BgMessageType -> BgTecnologyType -> BgCommandClass -> UInt8 -> a -> m b+xCmd :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env, Binary a, Binary b) => BgMessageType -> BgTecnologyType -> BgCommandClass -> UInt8 -> a -> m b xCmd mt tt cc cid inp = do     -- We need to duplicate the channel BEFORE sending the command, so we don't miss the answer by accident     chan <- askDupBGChan     xCmd' mt tt cc cid inp-    decode . BSL.fromStrict . fromBgPayload . bgpPayload <$> ( liftIO $ waitForPacket chan mt tt cc cid )+    p <- liftIO $ waitForPacket chan mt tt cc cid+    let eRes = decodeOrFail $ BSL.fromStrict $ fromBgPayload $ bgpPayload p+    case eRes of+        Left _ -> do+            error "ERROR decoding packet."+        Right (_, _, res) -> +            return res --- Register an event handler.+-- Handle a specific type of packet+-- -- Event handler block by waiting on the TChan provided by the -- environment. One can use forkIO to make event handler run in -- independent threads, or use race with threadDelay to wait for an -- event with a timeout.-registerEventHandler-    :: (Binary a, MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env)+handlePacket+    :: (Binary a, MonadIO m, MonadReader env m, HasHandle env, HasBGChan env)     => BgMessageType -> BgTecnologyType -> BgCommandClass -> UInt8 -> (a -> m (Maybe b)) -> m b-registerEventHandler mt tt cc cid handler = do-    chan <- askDupBGChan+handlePacket mt tt cc cid handler = do+    chan <- askBGChan     go chan     where         go chan = do@@ -277,732 +290,730 @@ ----------------------------------------------------------------------- -- Attribute Client --------------------------------------------------------------------------gapDiscover mode = xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x02 mode - attclientAttributeWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientAttributeWrite = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x05  attclientExecuteWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> Bool -> m (UInt8, BGResult) attclientExecuteWrite = curry $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x0a  attclientFindByTypeValue-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientFindByTypeValue = curry5 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x00  attclientFindInformation-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> m (UInt8, BGResult) attclientFindInformation = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x03  attclientIndicateConfirm-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m BGResult attclientIndicateConfirm = xCmd BgMsgCR BgBlue BgClsAttributeClient 0x07  attclientPrepareWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientPrepareWrite = curry4 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x09  attclientReadByGroupType-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientReadByGroupType = curry4 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x01  attclientReadByHandle-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> m (UInt8, BGResult) attclientReadByHandle = curry $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x04  attclientReadByType-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientReadByType = curry4 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x02  attclientReadLong-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> m (UInt8, BGResult) attclientReadLong = curry $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x08  attclientReadMultiple-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8Array -> m (UInt8, BGResult) attclientReadMultiple = curry $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x0b  attclientWriteCommand-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt8Array -> m (UInt8, BGResult) attclientWriteCommand = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeClient 0x06  evtAttclientAttributeValue-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a evtAttclientAttributeValue-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x05 . uncurry4+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x05 . uncurry4  evtAttclientFindInformationFound-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a evtAttclientFindInformationFound-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x04 . uncurry3+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x04 . uncurry3  evtAttclientGroupFound-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a evtAttclientGroupFound-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x02 . uncurry4+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x02 . uncurry4  evtAttclientIndicated-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> m (Maybe a)) -> m a evtAttclientIndicated-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x00 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x00 . uncurry  evtAttclientProcedureCompleted-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> BGResult -> UInt16 -> m (Maybe a)) -> m a evtAttclientProcedureCompleted-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x01 . uncurry3+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x01 . uncurry3  evtAttclientReadMultipleResponse-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a evtAttclientReadMultipleResponse-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeClient 0x06 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsAttributeClient 0x06 . uncurry  ----------------------------------------------------------------------- -- Attribute Database -----------------------------------------------------------------------  attributesRead-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt16 -> m (UInt16, UInt16, BGResult, UInt8Array) attributesRead = curry $ xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x01  attributesReadType-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> m (UInt16, BGResult, UInt8Array) attributesReadType = xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x02  attributesSend-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt8Array -> m BGResult attributesSend = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x05  attributesUserReadResponse-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8Array -> m () attributesUserReadResponse = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x03  attributesUserWriteResponse-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m () attributesUserWriteResponse = curry $ xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x04  attributesWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt8 -> UInt8Array -> m BGResult attributesWrite = curry3 $ xCmd BgMsgCR BgBlue BgClsAttributeDatabase 0x00  evtAttributesStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt16 -> UInt8 -> m (Maybe a)) -> m a evtAttributesStatus-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeDatabase 0x02 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsAttributeDatabase 0x02 . uncurry  evtAttributesUserReadRequest-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a)) -> m a evtAttributesUserReadRequest-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeDatabase 0x01 . uncurry4+    = handlePacket BgMsgEvent BgBlue BgClsAttributeDatabase 0x01 . uncurry4  evtAttributesValue-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> UInt8Array -> m (Maybe a)) -> m a evtAttributesValue-    = registerEventHandler BgMsgEvent BgBlue BgClsAttributeDatabase 0x00 . uncurry5+    = handlePacket BgMsgEvent BgBlue BgClsAttributeDatabase 0x00 . uncurry5  ----------------------------------------------------------------------- -- Connection -----------------------------------------------------------------------  connectionChannelMapGet-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m (UInt8, UInt8Array) connectionChannelMapGet = xCmd BgMsgCR BgBlue BgClsConnection 0x04  connectionChannelMapSet-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8Array -> m (UInt8, BGResult) connectionChannelMapSet = curry $ xCmd BgMsgCR BgBlue BgClsConnection 0x05  connectionDisconnect-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m (UInt8, BGResult) connectionDisconnect = xCmd BgMsgCR BgBlue BgClsConnection 0x00  connectionGetRssi-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m (UInt8, Int8) connectionGetRssi = xCmd BgMsgCR BgBlue BgClsConnection 0x01  connectionGetStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m UInt8 connectionGetStatus = xCmd BgMsgCR BgBlue BgClsConnection 0x07  connectionSlaveLatencyDisable-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m BGResult connectionSlaveLatencyDisable = xCmd BgMsgCR BgBlue BgClsConnection 0x09  connectionUpdate-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (UInt8, BGResult) connectionUpdate = curry5 $ xCmd BgMsgCR BgBlue BgClsConnection 0x02  connectionVersionUpdate-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m (UInt8, BGResult) connectionVersionUpdate = xCmd BgMsgCR BgBlue BgClsConnection 0x03  evtConnectionDisconnected-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> BGResult -> m (Maybe a)) -> m a evtConnectionDisconnected-    = registerEventHandler BgMsgEvent BgBlue BgClsConnection 0x04 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsConnection 0x04 . uncurry  evtConnectionFeatureInd-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8Array -> m (Maybe a)) -> m a-evtConnectionFeatureInd = registerEventHandler BgMsgEvent BgBlue BgClsConnection 0x02 . uncurry+evtConnectionFeatureInd = handlePacket BgMsgEvent BgBlue BgClsConnection 0x02 . uncurry  evtConnectionStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> BdAddr -> UInt8 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> m (Maybe a))     -> m a-evtConnectionStatus = registerEventHandler BgMsgEvent BgBlue BgClsConnection 0x00 . uncurry8+evtConnectionStatus = handlePacket BgMsgEvent BgBlue BgClsConnection 0x00 . uncurry8  evtConnectionVersionInd-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> UInt16 -> UInt16 -> m (Maybe a)) -> m a-evtConnectionVersionInd = registerEventHandler BgMsgEvent BgBlue BgClsConnection 0x01 . uncurry4+evtConnectionVersionInd = handlePacket BgMsgEvent BgBlue BgClsConnection 0x01 . uncurry4  ----------------------------------------------------------------------- -- Generic Access Profile -----------------------------------------------------------------------  gapConnectDirect-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => BdAddr -> GapAddressType -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8) gapConnectDirect = curry6 $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x03  gapConnectSelective-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt16 -> UInt16 -> UInt16 -> m (BGResult, UInt8) gapConnectSelective = curry4 $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x05  gapDiscover-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => GapDiscoverMode -> m UInt16 gapDiscover = xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x02  gapEndProcedure-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt16 gapEndProcedure = xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x04 ()  gapSetAdvData-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8Array -> m BGResult gapSetAdvData = curry $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x09  gapSetAdvParameters-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt16 -> UInt8 -> m BGResult gapSetAdvParameters = curry3 $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x08  gapSetDirectedConnectableMode-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => BdAddr -> GapAddressType -> m BGResult gapSetDirectedConnectableMode = curry $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x0a  gapSetFiltering-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => GapScanPolicy -> GapAdvPolicy -> UInt8 -> m BGResult gapSetFiltering = curry3 $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x06  gapSetInitiatingConParameters-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt16 -> m BGResult gapSetInitiatingConParameters = curry $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x0b  gapSetMode-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => GapDiscoverableMode -> GapConnectableMode -> m BGResult gapSetMode = curry $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x01  gapSetNonresolvableAddress-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => BdAddr -> m BGResult gapSetNonresolvableAddress = xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x0c  gapSetPrivacyFlags-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m () gapSetPrivacyFlags = curry $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x00  gapSetScanParameters-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt16 -> UInt8 -> m BGResult gapSetScanParameters = curry3 $ xCmd BgMsgCR BgBlue BgClsGenericAccessProfile 0x07  -- Register an event handler for GAP scan responses evtGapScanResponse-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (Int8 -> UInt8 -> BdAddr -> GapAddressType -> UInt8 -> UInt8Array -> m (Maybe a)) -> m a evtGapScanResponse-    = registerEventHandler BgMsgEvent BgBlue BgClsGenericAccessProfile 0x00 . uncurry6+    = handlePacket BgMsgEvent BgBlue BgClsGenericAccessProfile 0x00 . uncurry6  ----------------------------------------------------------------------- -- Hardware -----------------------------------------------------------------------  hardwareAdcRead-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8 -> m BGResult hardwareAdcRead = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x02  hardwareAnalogComparatorConfigIrq-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m BGResult hardwareAnalogComparatorConfigIrq = xCmd BgMsgCR BgBlue BgClsHardware 0x12  hardwareAnalogComparatorEnable-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m () hardwareAnalogComparatorEnable = xCmd BgMsgCR BgBlue BgClsHardware 0x10  hardwareAnalogComparatorRead-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m (BGResult, UInt8) hardwareAnalogComparatorRead = xCmd BgMsgCR BgBlue BgClsHardware 0x11 ()  hardwareGetTimestamp-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt32 hardwareGetTimestamp = xCmd BgMsgCR BgBlue BgClsHardware 0x16 ()  hardwareI2cRead-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> Bool -> UInt8 -> m (UInt16, UInt8Array) hardwareI2cRead = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x0a  hardwareI2cWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> Bool -> UInt8Array -> m UInt8 hardwareI2cWrite = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x0b  hardwareIoPortConfigDirection-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m BGResult hardwareIoPortConfigDirection = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x03  hardwareIoPortConfigFunction-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m BGResult hardwareIoPortConfigFunction = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x04  hardwareIoPortConfigIrq-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> Bool -> m BGResult hardwareIoPortConfigIrq = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x00  hardwareIoPortConfigPull-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> Bool -> m BGResult hardwareIoPortConfigPull = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x05  hardwareIoPortIrqDirection-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> Bool -> m BGResult hardwareIoPortIrqDirection = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x0f  hardwareIoPortIrqEnable-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m BGResult hardwareIoPortIrqEnable = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x0e  hardwareIoPortRead-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m (BGResult, UInt8, UInt8) hardwareIoPortRead = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x07  hardwareIoPortWrite-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8 -> m BGResult hardwareIoPortWrite = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x06  hardwareSetRxgain-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m () hardwareSetRxgain = xCmd BgMsgCR BgBlue BgClsHardware 0x13  hardwareSetSoftTimer-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt32 -> UInt8 -> Bool -> m BGResult hardwareSetSoftTimer = curry3 $ xCmd BgMsgCR BgBlue BgClsHardware 0x01  hardwareSetTxpower-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m () hardwareSetTxpower = xCmd BgMsgCR BgBlue BgClsHardware 0x0c  hardwareSleepEnable-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m BGResult hardwareSleepEnable = xCmd BgMsgCR BgBlue BgClsHardware 0x15  hardwareSpiConfig-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> Bool -> Bool -> Bool -> UInt8 -> UInt8 -> m BGResult hardwareSpiConfig = curry6 $ xCmd BgMsgCR BgBlue BgClsHardware 0x08  hardwareSpiTransfer-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8Array -> m (BGResult, UInt8, UInt8Array) hardwareSpiTransfer = curry $ xCmd BgMsgCR BgBlue BgClsHardware 0x09  hardwareTimerComparator-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8 -> UInt16 -> m BGResult hardwareTimerComparator = curry4 $ xCmd BgMsgCR BgBlue BgClsHardware 0x0d  hardwareUsbEnable-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m BGResult hardwareUsbEnable = xCmd BgMsgCR BgBlue BgClsHardware 0x14  evtHardwareAdcResult-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt16 -> m (Maybe a)) -> m a evtHardwareAdcResult-    = registerEventHandler BgMsgEvent BgBlue BgClsHardware 0x02 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsHardware 0x02 . uncurry  evtHardwareAnalogComparatorStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt32 -> UInt8 -> m (Maybe a)) -> m a evtHardwareAnalogComparatorStatus-    = registerEventHandler BgMsgEvent BgBlue BgClsHardware 0x03 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsHardware 0x03 . uncurry  evtHardwareIoPortStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt32 -> UInt8 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a evtHardwareIoPortStatus-    = registerEventHandler BgMsgEvent BgBlue BgClsHardware 0x00 . uncurry4+    = handlePacket BgMsgEvent BgBlue BgClsHardware 0x00 . uncurry4  evtHardwareSoftTimer-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> m (Maybe a)) -> m a evtHardwareSoftTimer-    = registerEventHandler BgMsgEvent BgBlue BgClsHardware 0x01+    = handlePacket BgMsgEvent BgBlue BgClsHardware 0x01  ----------------------------------------------------------------------- -- Persistent Store -----------------------------------------------------------------------  flashErasePage-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m BGResult flashErasePage = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x06  flashPsDefrag-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m () flashPsDefrag = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x00 ()  flashPsDump-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m () flashPsDump = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x01 ()  flashPsEraseAll-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m () flashPsEraseAll = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x02 ()  flashPsErase-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> m () flashPsErase = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x05  flashPsLoad-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> m (BGResult, UInt8Array) flashPsLoad = xCmd BgMsgCR BgBlue BgClsPersistentStore 0x04  flashPsSave-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt16 -> UInt8Array -> m BGResult flashPsSave = curry $ xCmd BgMsgCR BgBlue BgClsPersistentStore 0x03  flashReadData-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt32 -> UInt8 -> m UInt8Array flashReadData = curry $ xCmd BgMsgCR BgBlue BgClsPersistentStore 0x08  flashWriteData-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt32 -> UInt8Array -> m BGResult flashWriteData = curry $ xCmd BgMsgCR BgBlue BgClsPersistentStore 0x07  evtFlashPsKey-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt16 -> UInt8Array -> m (Maybe a)) -> m a evtFlashPsKey-    = registerEventHandler BgMsgEvent BgBlue BgClsPersistentStore 0x00 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsPersistentStore 0x00 . uncurry  ----------------------------------------------------------------------- -- Security Manager -----------------------------------------------------------------------  smDeleteBonding-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m BGResult smDeleteBonding = xCmd BgMsgCR BgBlue BgClsSecurityManager 0x02  smEncryptStart-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> Bool -> m (UInt8, BGResult) smEncryptStart = curry $ xCmd BgMsgCR BgBlue BgClsSecurityManager 0x00  smGetBonds-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt8 smGetBonds = xCmd BgMsgCR BgBlue BgClsSecurityManager 0x05 ()  smPasskeyEntry-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt32 -> m BGResult smPasskeyEntry = curry $ xCmd BgMsgCR BgBlue BgClsSecurityManager 0x04  setBondableMode-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m () setBondableMode = xCmd BgMsgCR BgBlue BgClsSecurityManager 0x01  smSetOobData-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8Array -> m () smSetOobData = xCmd BgMsgCR BgBlue BgClsSecurityManager 0x06  smSetPairingDistributionKeys-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m BGResult smSetPairingDistributionKeys = curry $ xCmd BgMsgCR BgBlue BgClsSecurityManager 0x08  smSetParameters-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> UInt8 -> SMIOCapabilities -> m () smSetParameters = curry3 $ xCmd BgMsgCR BgBlue BgClsSecurityManager 0x03  smWhitelistBonds-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m (BGResult, UInt8) smWhitelistBonds = xCmd BgMsgCR BgBlue BgClsSecurityManager 0x07 ()  evtSmBondingFail-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> BGResult -> m (Maybe a)) -> m a evtSmBondingFail-    = registerEventHandler BgMsgEvent BgBlue BgClsSecurityManager 0x01 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsSecurityManager 0x01 . uncurry  evtSmBondStatus-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> Bool -> UInt8 -> m (Maybe a)) -> m a evtSmBondStatus-    = registerEventHandler BgMsgEvent BgBlue BgClsSecurityManager 0x04 . uncurry4+    = handlePacket BgMsgEvent BgBlue BgClsSecurityManager 0x04 . uncurry4  evtSmPasskeyDisplay-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt32 -> m (Maybe a)) -> m a evtSmPasskeyDisplay-    = registerEventHandler BgMsgEvent BgBlue BgClsSecurityManager 0x02 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsSecurityManager 0x02 . uncurry  evtSmPasskeyRequest-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> m (Maybe a)) -> m a evtSmPasskeyRequest-    = registerEventHandler BgMsgEvent BgBlue BgClsSecurityManager 0x03+    = handlePacket BgMsgEvent BgBlue BgClsSecurityManager 0x03  ----------------------------------------------------------------------- -- System -----------------------------------------------------------------------  systemAddressGet-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m BdAddr systemAddressGet = xCmd BgMsgCR BgBlue BgClsSystem 0x02 ()  systemAesDecrypt-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8Array -> m UInt8Array systemAesDecrypt = xCmd BgMsgCR BgBlue BgClsSystem 0x11  systemAesEncrypt-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8Array -> m UInt8Array systemAesEncrypt = xCmd BgMsgCR BgBlue BgClsSystem 0x10  systemAesSetkey-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8Array -> m () systemAesSetkey = xCmd BgMsgCR BgBlue BgClsSystem 0x0f  systemDelayReset-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => RebootMode -> UInt16 -> m () systemDelayReset = curry $ xCmd' BgMsgCR BgBlue BgClsSystem 0x14  systemEndpointRx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> m (BGResult, UInt8Array) systemEndpointRx = curry $ xCmd BgMsgCR BgBlue BgClsSystem 0x0d  systemEndpointSetWatermarks-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8 -> m BGResult systemEndpointSetWatermarks = curry3 $ xCmd BgMsgCR BgBlue BgClsSystem 0x0e  systemEndpointTx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8Array -> m BGResult systemEndpointTx = curry $ xCmd BgMsgCR BgBlue BgClsSystem 0x09  systemGetBootloaderCrc-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt16 systemGetBootloaderCrc = xCmd BgMsgCR BgBlue BgClsSystem 0x13 ()  systemGetConnections-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt8 systemGetConnections = xCmd BgMsgCR BgBlue BgClsSystem 0x06 ()  systemGetCounters-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m (UInt8, UInt8, UInt8, UInt8, UInt8) systemGetCounters = xCmd BgMsgCR BgBlue BgClsSystem 0x05 ()  systemGetInfo-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m (UInt16, UInt16, UInt16, UInt16, UInt16, UInt8, UInt8) systemGetInfo = xCmd BgMsgCR BgBlue BgClsSystem 0x08 ()  systemHello-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m () systemHello = xCmd BgMsgCR BgBlue BgClsSystem 0x01 ()  systemReset-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasDebug env)     => RebootMode -> m () systemReset = xCmd' BgMsgCR BgBlue BgClsSystem 0x01  systemUsbEnumerationStatusGet-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m (BGResult, Bool) systemUsbEnumerationStatusGet = xCmd BgMsgCR BgBlue BgClsSystem 0x12 ()  systemWhitelistAppend-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => BdAddr -> GapAddressType -> m BGResult systemWhitelistAppend = curry $ xCmd BgMsgCR BgBlue BgClsSystem 0x0a  systemWhitelistClear-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m () systemWhitelistClear = xCmd BgMsgCR BgBlue BgClsSystem 0x0c ()  systemWhitelistRemove-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => BdAddr -> GapAddressType -> m BGResult systemWhitelistRemove = curry $ xCmd BgMsgCR BgBlue BgClsSystem 0x0b  evtSystemBoot-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt16 -> UInt8 -> UInt8 -> m (Maybe a)) -> m a evtSystemBoot-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x00 . uncurry7+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x00 . uncurry7  evtSystemEndpointWatermarkRx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> m (Maybe a)) -> m a evtSystemEndpointWatermarkRx-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x02 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x02 . uncurry  evtSystemEndpointWatermarkTx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt8 -> UInt8 -> m (Maybe a)) -> m a evtSystemEndpointWatermarkTx-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x03 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x03 . uncurry  evtSystemNoLicenseKey-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (() -> m (Maybe a)) -> m a evtSystemNoLicenseKey-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x05+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x05  evtSystemProtocolError-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (BGResult -> m (Maybe a)) -> m a evtSystemProtocolError-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x06+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x06  evtSystemScriptFailure-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt16 -> BGResult -> m (Maybe a)) -> m a evtSystemScriptFailure-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x04 . uncurry+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x04 . uncurry  evtSystemUsbEnumerated-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (Bool -> m (Maybe a)) -> m a evtSystemUsbEnumerated-    = registerEventHandler BgMsgEvent BgBlue BgClsSystem 0x07+    = handlePacket BgMsgEvent BgBlue BgClsSystem 0x07  ----------------------------------------------------------------------- -- Testing -----------------------------------------------------------------------  testChannelMode-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m () testChannelMode = xCmd BgMsgCR BgBlue BgClsTest 0x06  testGetChannelMap-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt8Array testGetChannelMap = xCmd BgMsgCR BgBlue BgClsTest 0x04 ()  testPhyEnd-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m UInt16 testPhyEnd = xCmd BgMsgCR BgBlue BgClsTest 0x02 ()  testPhyRx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> m () testPhyRx = xCmd BgMsgCR BgBlue BgClsTest 0x01  testPhyTx-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8 -> UInt8 -> UInt8 -> m () testPhyTx = curry3 $ xCmd BgMsgCR BgBlue BgClsTest 0x00 @@ -1011,26 +1022,26 @@ -----------------------------------------------------------------------  dfuFlashSetAddress-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt32 -> m BGResult dfuFlashSetAddress = xCmd BgMsgCR BgBlue BgClsDfu 0x01  dfuFlashUpload-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => UInt8Array -> m BGResult dfuFlashUpload = xCmd BgMsgCR BgBlue BgClsDfu 0x02  dfuFlashUploadFinish-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => m BGResult dfuFlashUploadFinish = xCmd BgMsgCR BgBlue BgClsDfu 0x03 ()  dfuReset-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => Bool -> m () dfuReset = xCmd' BgMsgCR BgBlue BgClsDfu 0x00  evtDfuBoot-    :: (MonadIO m, MonadReader env m, HasSerialPort env, HasBGChan env, HasDebug env)+    :: (MonadIO m, MonadReader env m, HasHandle env, HasBGChan env, HasDebug env)     => (UInt32 -> m (Maybe a)) -> m a-evtDfuBoot = registerEventHandler BgMsgEvent BgBlue BgClsDfu 0x00+evtDfuBoot = handlePacket BgMsgEvent BgBlue BgClsDfu 0x00
src/BGLib/Types.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-}  module BGLib.Types     ( Int8@@ -19,11 +20,13 @@     , fromBgPayload     , toBgPayload     , BgPacket(..)-    , HasSerialPort(..)-    , askSerialPort+    , HasHandle(..)+    , askHandle     , HasBGChan(..)     , askBGChan     , askDupBGChan+    , packetBlock+    , packetBlock_     , HasDebug(..)     , askDebug     , bsShowHex@@ -77,7 +80,7 @@ import qualified Data.Word as W import           Foreign.Storable import           Numeric-import           System.Hardware.Serialport+import           System.IO import           Text.Printf  -- int8           1 byte Signed 8-bit integer@@ -128,9 +131,9 @@     put BdAddr{..} = put fromBdAddr     get = get >>= return . BdAddr -data BgMessageType = BgMsgCR | BgMsgEvent deriving (Eq, Show, Enum)+data BgMessageType = BgMsgCR | BgMsgEvent deriving (Eq, Show, Bounded, Enum) -data BgTecnologyType = BgBlue | BgWifi deriving (Eq, Show, Enum)+data BgTecnologyType = BgBlue | BgWifi deriving (Eq, Show, Bounded, Enum)  data BgCommandClass     = BgClsSystem@@ -143,7 +146,7 @@     | BgClsHardware     | BgClsTest     | BgClsDfu-    deriving (Eq, Show, Enum)+    deriving (Eq, Show, Bounded, Enum)  data BgPacketHeader = BgPacketHeader     { bghMessageType    :: BgMessageType@@ -153,6 +156,15 @@     , bghCommandId      :: UInt8     } deriving Show +enumFromIntegral :: forall a b. (Integral a, Bounded b, Enum b) => a -> Get b+enumFromIntegral i = do+    let mi = fromEnum (minBound :: b)+    let ma = fromEnum (maxBound :: b)+    let ii = fromIntegral i+    if ii >= mi && ii <= ma+        then return $ toEnum ii+        else fail $ "Value out of bounds: " ++ show mi ++ " <= " ++ show ii ++ " <= " ++ show ma+ instance Binary BgPacketHeader where     put BgPacketHeader{..} = do         putWord8@@ -171,11 +183,11 @@              let lHigh = oct0 .&. 0x07 -        let bghMessageType    = toEnum $ fromIntegral $ oct0 `shift` (-7)-        let bghTechnologyType = toEnum $ fromIntegral $ (oct0 `shift` (-3)) .&. 0x0f-        let bghLength         = (fromIntegral lHigh `shift` 8) + (fromIntegral lLow) :: UInt16-        let bghCommandClass   = toEnum $ fromIntegral clsId-        let bghCommandId      = cmdId+        bghMessageType    <- enumFromIntegral $ oct0 `shift` (-7)+        bghTechnologyType <- enumFromIntegral $ (oct0 `shift` (-3)) .&. 0x0f+        let bghLength     =  (fromIntegral lHigh `shift` 8) + (fromIntegral lLow) :: UInt16+        bghCommandClass   <- enumFromIntegral clsId+        let bghCommandId  =  cmdId          return $ BgPacketHeader{..} @@ -209,14 +221,15 @@         bgpPayload <- toBgPayload <$> getByteString (fromIntegral bghLength)         return BgPacket{..} -class HasSerialPort env where-    getSerialPort :: env -> SerialPort+class HasHandle env where+    getHandle :: env -> Handle -askSerialPort :: (MonadReader env m, HasSerialPort env) => m SerialPort-askSerialPort = getSerialPort <$> ask+askHandle :: (MonadReader env m, HasHandle env) => m Handle+askHandle = getHandle <$> ask  class HasBGChan env where     getBGChan :: env -> TChan BgPacket+    updateBGChan :: TChan BgPacket -> env -> env  askBGChan :: (MonadReader env m, HasBGChan env) => m (TChan BgPacket) askBGChan = getBGChan <$> ask@@ -226,6 +239,14 @@     chan <- getBGChan <$> ask     liftIO $ atomically $ dupTChan chan +packetBlock :: (MonadIO m, MonadReader env m, HasBGChan env) => m a -> m a+packetBlock act = do+    newChan <- askDupBGChan+    local (updateBGChan newChan) act++packetBlock_ :: (MonadIO m, MonadReader env m, HasBGChan env) => m a -> m ()+packetBlock_ act = packetBlock act >> return ()+     class HasDebug env where     getDebug :: env -> Bool