{-| A database of USB identifiers.

Databases with vendor names and identifiers can be loaded from string,
file or directly from <http://www.usb.org> or <http://linux-usb.org>.

Example usage:

@
import System.USB.IDDB
import System.USB.IDDB.LinuxUsbIdRepo (staticDb)
import Text.Printf (printf)

main :: IO ()
main = do -- Load a snapshot from the linux-usb.org database.
          db <- 'staticDb'
@

@
          -- Print the name of vendor 0x1d6b
          putStrLn $ maybe \"unknown VID!\" id
                   $ 'vendorName' db 0x1d6b
@

@
          -- Print the ID of \"Linux Foundation\"
          putStrLn $ maybe \"unknown vendor name!\" ('printf' \"0x%04x\")
                   $ 'vendorId' db \"Linux Foundation\"
@

@
          -- Print the name of the product with ID 0x0101 from the
          -- vendor with ID 0x1d6b.
          putStrLn $ maybe \"unknown PID!\" id
                   $ 'productName' db 0x1d6b 0x0101
@

@
          -- Print the ID of the product with the name \"Audio Gadget\"
          -- from the vendor with ID 0x1d6b.
          putStrLn $ maybe \"unknown product name!\" ('printf' \"0x%04x\")
                   $ 'productId' db 0x1d6b \"Audio Gadget\"
@
-}
module System.USB.IDDB
    ( -- *Types
      IDDB

    , ID,         Name
    , VendorID,   VendorName
    , ProductID,  ProductName
    , ClassID,    ClassName
    , SubClassID, SubClassName
    , ProtocolID, ProtocolName

    , emptyDb

      -- *Query database
    , vendorName
    , vendorId
    , productName
    , productId
    , className
    , subClassName
    , protocolName
    )
    where

import System.USB.IDDB.Base