module System.USB.IDDB.Base
( IDDB(..)
, ProductDB
, ClassDB, SubClassDB, ProtocolDB
, emptyDb
, vendorName
, vendorId
, productName
, productId
, className
, subClassName
, protocolName
, audioClassTerminalTypeName
, videoClassTerminalTypeName
, hidDescTypeName
, hidDescItemName
, hidDescCountryCodeName
, hidUsagePageName
, hidUsageName
, physicalDescBiasName
, physicalDescItemName
, langName
, subLangName
, getDataFileName
)
where
import qualified Data.IntMap as IM
import qualified Data.Map as MP
#ifdef BUILD_WITH_CABAL
import Paths_usb_id_database ( getDataFileName )
#else
getDataFileName :: FilePath -> IO FilePath
getDataFileName = return
#endif
type ProductDB = ( MP.Map String Int
, IM.IntMap String
)
type ClassDB = IM.IntMap (String, SubClassDB)
type SubClassDB = IM.IntMap (String, ProtocolDB)
type ProtocolDB = IM.IntMap String
data IDDB = IDDB { dbVendorNameId :: MP.Map String Int
, dbVendorIdName :: IM.IntMap String
, dbProducts :: IM.IntMap ProductDB
, dbClasses :: ClassDB
, dbAudioCTType :: IM.IntMap String
, dbVideoCTType :: IM.IntMap String
, dbHIDDescType :: IM.IntMap String
, dbHIDDescItem :: IM.IntMap String
, dbHIDDescCCode :: IM.IntMap String
, dbHIDUsage :: IM.IntMap (String, IM.IntMap String)
, dbPhysDescBias :: IM.IntMap String
, dbPhysDescItem :: IM.IntMap String
, dbLanguages :: IM.IntMap (String, IM.IntMap String)
}
emptyDb :: IDDB
emptyDb = IDDB { dbVendorNameId = MP.empty
, dbVendorIdName = IM.empty
, dbProducts = IM.empty
, dbClasses = IM.empty
, dbAudioCTType = IM.empty
, dbVideoCTType = IM.empty
, dbHIDDescType = IM.empty
, dbHIDDescItem = IM.empty
, dbHIDDescCCode = IM.empty
, dbHIDUsage = IM.empty
, dbPhysDescBias = IM.empty
, dbPhysDescItem = IM.empty
, dbLanguages = IM.empty
}
vendorName :: IDDB
-> Int
-> Maybe String
vendorName db vid = IM.lookup vid $ dbVendorIdName db
vendorId :: IDDB
-> String
-> Maybe Int
vendorId db name = MP.lookup name $ dbVendorNameId db
productName :: IDDB
-> Int
-> Int
-> Maybe String
productName db vid pid = IM.lookup pid . snd =<< IM.lookup vid (dbProducts db)
productId :: IDDB
-> Int
-> String
-> Maybe Int
productId db vid name = MP.lookup name . fst =<< IM.lookup vid (dbProducts db)
className :: IDDB
-> Int
-> Maybe String
className db cid = fmap fst . IM.lookup cid $ dbClasses db
subClassName :: IDDB
-> Int
-> Int
-> Maybe String
subClassName db cid scid = fmap fst $ IM.lookup scid . snd
=<< IM.lookup cid (dbClasses db)
protocolName :: IDDB
-> Int
-> Int
-> Int
-> Maybe String
protocolName db cid scid protId = IM.lookup protId . snd
=<< IM.lookup scid . snd
=<< IM.lookup cid (dbClasses db)
audioClassTerminalTypeName :: IDDB
-> Int
-> Maybe String
audioClassTerminalTypeName db actid = IM.lookup actid (dbAudioCTType db)
videoClassTerminalTypeName :: IDDB
-> Int
-> Maybe String
videoClassTerminalTypeName db actid = IM.lookup actid (dbVideoCTType db)
hidDescTypeName :: IDDB
-> Int
-> Maybe String
hidDescTypeName db hidid = IM.lookup hidid (dbHIDDescType db)
hidDescItemName :: IDDB
-> Int
-> Maybe String
hidDescItemName db hidid = IM.lookup hidid (dbHIDDescItem db)
hidDescCountryCodeName :: IDDB
-> Int
-> Maybe String
hidDescCountryCodeName db hidid = IM.lookup hidid (dbHIDDescCCode db)
hidUsagePageName :: IDDB
-> Int
-> Maybe String
hidUsagePageName db upid = fmap fst $ IM.lookup upid (dbHIDUsage db)
hidUsageName :: IDDB
-> Int
-> Int
-> Maybe String
hidUsageName db upid uid = IM.lookup uid . snd
=<< IM.lookup upid (dbHIDUsage db)
physicalDescBiasName :: IDDB
-> Int
-> Maybe String
physicalDescBiasName db phyid = IM.lookup phyid (dbPhysDescBias db)
physicalDescItemName :: IDDB
-> Int
-> Maybe String
physicalDescItemName db phyid = IM.lookup phyid (dbPhysDescItem db)
langName :: IDDB
-> Int
-> Maybe String
langName db lid = fmap fst . IM.lookup lid $ dbLanguages db
subLangName :: IDDB
-> Int
-> Int
-> Maybe String
subLangName db lid slid = IM.lookup slid . snd
=<< IM.lookup lid (dbLanguages db)