packages feed

usb-id-database 0.3.0.1 → 0.4

raw patch · 7 files changed

+286/−208 lines, 7 filesdep −binarydep −download

Dependencies removed: binary, download

Files

System/USB/IDDB.hs view
@@ -1,8 +1,14 @@ {-| 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>.+Databases with vendor names and identifiers can be loaded from string or file. +To get the most up-to-date database download the files directly from+<http://www.usb.org>+or+<http://linux-usb.org>.++Each database's module contains an URL to the database file.+ Example usage:  @@@ -45,13 +51,6 @@     ( -- *Types       IDDB -    , ID,         Name-    , VendorID,   VendorName-    , ProductID,  ProductName-    , ClassID,    ClassName-    , SubClassID, SubClassName-    , ProtocolID, ProtocolName-     , emptyDb        -- *Query database@@ -62,6 +61,17 @@     , className     , subClassName     , protocolName+    , audioClassTerminalTypeName+    , videoClassTerminalTypeName+    , hidDescTypeName+    , hidDescItemName+    , hidDescCountryCodeName+    , hidUsagePageName+    , hidUsageName+    , physicalDescBiasName+    , physicalDescItemName+    , langName+    , subLangName     )     where 
System/USB/IDDB/Base.hs view
@@ -3,12 +3,8 @@ module System.USB.IDDB.Base     ( IDDB(..) -    , ID,         Name-    , VendorID,   VendorName-    , ProductID,  ProductName,  ProductDB-    , ClassID,    ClassName,    ClassDB-    , SubClassID, SubClassName, SubClassDB-    , ProtocolID, ProtocolName, ProtocolDB+    , ProductDB+    , ClassDB, SubClassDB, ProtocolDB      , emptyDb @@ -19,13 +15,22 @@     , className     , subClassName     , protocolName+    , audioClassTerminalTypeName+    , videoClassTerminalTypeName+    , hidDescTypeName+    , hidDescItemName+    , hidDescCountryCodeName+    , hidUsagePageName+    , hidUsageName+    , physicalDescBiasName+    , physicalDescItemName+    , langName+    , subLangName      , getDataFileName     )     where -import Data.Binary ( Binary(..), Get )- import qualified Data.IntMap as IM import qualified Data.Map    as MP @@ -40,34 +45,28 @@ -- Types ------------------------------------------------------------------------------- -type ID          = Int-type Name        = String--type VendorID    = ID-type ProductID   = ID-type ClassID     = ID-type SubClassID  = ID-type ProtocolID  = ID--type VendorName   = Name-type ProductName  = Name-type ClassName    = Name-type SubClassName = Name-type ProtocolName = Name--type ProductDB  = ( MP.Map ProductName ProductID-                  , IM.IntMap ProductName+type ProductDB  = ( MP.Map String Int+                  , IM.IntMap String                   )-type ClassDB    = IM.IntMap (ClassName, SubClassDB)-type SubClassDB = IM.IntMap (SubClassName, ProtocolDB)-type ProtocolDB = IM.IntMap ProtocolName+type ClassDB    = IM.IntMap (String, SubClassDB)+type SubClassDB = IM.IntMap (String, ProtocolDB)+type ProtocolDB = IM.IntMap String  -- |A database of USB identifiers. Contains both vendor identifiers -- and product identifiers.-data IDDB = IDDB { dbVendorNameId :: MP.Map VendorName VendorID-                 , dbVendorIdName :: IM.IntMap VendorName+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)                  }  -- |An empty database.@@ -76,56 +75,119 @@                , 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                }  ---------------------------------------------------------------------------------- Binary serialisation----------------------------------------------------------------------------------instance Binary IDDB where-    put db = put ( dbVendorNameId db-                 , dbVendorIdName db-                 , dbProducts     db-                 , dbClasses      db-                 )--    get = do (a, b, c, d) <- get :: Get ( MP.Map VendorName VendorID-                                        , IM.IntMap VendorName-                                        , IM.IntMap ProductDB-                                        , ClassDB-                                        )-             return IDDB { dbVendorNameId = a-                         , dbVendorIdName = b-                         , dbProducts     = c-                         , dbClasses      = d-                         }--------------------------------------------------------------------------------- -- Query database ------------------------------------------------------------------------------- -vendorName :: IDDB -> VendorID -> Maybe VendorName+vendorName :: IDDB -- ^Database+           -> Int  -- ^Vendor identifier+           -> Maybe String vendorName db vid = IM.lookup vid $ dbVendorIdName db -vendorId :: IDDB -> VendorName -> Maybe VendorID+vendorId :: IDDB   -- ^Database+         -> String -- ^Vendor name+         -> Maybe Int vendorId db name = MP.lookup name $ dbVendorNameId db -productName :: IDDB -> VendorID -> ProductID -> Maybe ProductName+productName :: IDDB -- ^Database+            -> Int  -- ^Vendor identifier+            -> Int  -- ^Product identifier+            -> Maybe String productName db vid pid = IM.lookup pid . snd =<< IM.lookup vid (dbProducts db) -productId :: IDDB -> VendorID -> ProductName -> Maybe ProductID+productId :: IDDB   -- ^Database+          -> Int    -- ^Vendor identifier+          -> String -- ^Product name+          -> Maybe Int productId db vid name = MP.lookup name . fst =<< IM.lookup vid (dbProducts db) -className :: IDDB -> ClassID -> Maybe ClassName+className :: IDDB -- ^Database+          -> Int  -- ^Class identifier+          -> Maybe String className db cid = fmap fst . IM.lookup cid $ dbClasses db -subClassName :: IDDB -> ClassID -> SubClassID -> Maybe SubClassName+subClassName :: IDDB -- ^Database+             -> Int  -- ^Class identifier+             -> Int  -- ^Sub class identifier+             -> Maybe String subClassName db cid scid = fmap fst $   IM.lookup scid . snd                                     =<< IM.lookup cid (dbClasses db) -protocolName :: IDDB -> ClassID -> SubClassID -> ProtocolID -> Maybe ProtocolName+protocolName :: IDDB -- ^Database+             -> Int  -- ^Class identifier+             -> Int  -- ^Sub class identifier+             -> Int  -- ^Protocol identifier+             -> Maybe String protocolName db cid scid protId =   IM.lookup protId . snd                                 =<< IM.lookup scid   . snd                                 =<< IM.lookup cid (dbClasses db) +audioClassTerminalTypeName :: IDDB -- ^Database+                           -> Int  -- ^Audio class terminal type identifier+                           -> Maybe String+audioClassTerminalTypeName db actid = IM.lookup actid (dbAudioCTType db) +videoClassTerminalTypeName :: IDDB -- ^Database+                           -> Int  -- ^Video class terminal type identifier+                           -> Maybe String+videoClassTerminalTypeName db actid = IM.lookup actid (dbVideoCTType db)++hidDescTypeName :: IDDB -- ^Database+                -> Int  -- ^HID descriptor type identifier+                -> Maybe String+hidDescTypeName db hidid = IM.lookup hidid (dbHIDDescType db)++hidDescItemName :: IDDB -- ^Database+                -> Int  -- ^HID descriptor item identifier+                -> Maybe String+hidDescItemName db hidid = IM.lookup hidid (dbHIDDescItem db)++hidDescCountryCodeName :: IDDB -- ^Database+                       -> Int  -- ^HID descriptor country code identifier+                       -> Maybe String+hidDescCountryCodeName db hidid = IM.lookup hidid (dbHIDDescCCode db)++hidUsagePageName :: IDDB -- ^Database+                 -> Int  -- ^HID usage page identifier+                 -> Maybe String+hidUsagePageName db upid = fmap fst $ IM.lookup upid (dbHIDUsage db)++hidUsageName :: IDDB -- ^Database+             -> Int  -- ^HID usage page identifier+             -> Int  -- ^HID usage identifier+             -> Maybe String+hidUsageName db upid uid =   IM.lookup uid . snd+                         =<< IM.lookup upid (dbHIDUsage db)++physicalDescBiasName :: IDDB -- ^Database+                     -> Int  -- ^Physical descriptor bias identifier+                     -> Maybe String+physicalDescBiasName db phyid = IM.lookup phyid (dbPhysDescBias db)++physicalDescItemName :: IDDB -- ^Database+                     -> Int  -- ^Physical descriptor item identifier+                     -> Maybe String+physicalDescItemName db phyid = IM.lookup phyid (dbPhysDescItem db)++langName :: IDDB -- ^Database+         -> Int  -- ^Primary language identifier+         -> Maybe String+langName db lid = fmap fst . IM.lookup lid $ dbLanguages db++subLangName :: IDDB -- ^Database+            -> Int  -- ^Primary language identifier+            -> Int  -- ^Sub language identifier+            -> Maybe String+subLangName db lid slid =   IM.lookup slid . snd+                        =<< IM.lookup lid (dbLanguages db)
System/USB/IDDB/LinuxUsbIdRepo.hs view
@@ -1,125 +1,147 @@+{-| Functions to acquire a database from <http://linux-usb.org>. -}+ module System.USB.IDDB.LinuxUsbIdRepo     ( parseDb     , staticDb     , fromFile-    , fromWeb+    , dbURL     ) where +import Control.Arrow        ( second ) import Control.Monad        ( fmap )+import Data.Char            ( isSpace ) import Data.List            ( lines, unlines, isPrefixOf ) import Data.Maybe           ( fromJust )-import Network.Download     ( openURIString ) import Numeric              ( readHex ) import Parsimony-import Parsimony.Char       ( char, hexDigit, spaces, tab )+import Parsimony.Char       ( char, string, hexDigit, tab ) import System.IO            ( FilePath, readFile ) import System.USB.IDDB.Base import System.USB.IDDB.Misc ( eitherMaybe, swap, restOfLine ) -import qualified Data.IntMap as IM ( IntMap, fromList )-import qualified Data.Map    as MP ( Map,    fromList )-+import qualified Data.IntMap as IM+import qualified Data.Map    as MP  -- |Construct a database from a string in the format used by -- <http://linux-usb.org>. parseDb :: String -> Maybe IDDB-parseDb = eitherMaybe . parse dbParser . stripComments-    where-      stripComments :: String -> String-      stripComments = unlines . filter (not . isPrefixOf "#") . lines+parseDb = eitherMaybe . parse dbParser . stripBoring +-- |Remove comments and empty lines.+stripBoring :: String -> String+stripBoring = unlines+            . filter (\xs -> not (isComment xs) && not (isEmpty xs))+            . lines++isComment :: String -> Bool+isComment = isPrefixOf "#"++isEmpty :: String -> Bool+isEmpty = all isSpace+ dbParser :: Parser String IDDB-dbParser = do spaces-              (vendorNameId, vendorIdName, productDB) <- lexeme vendorSection-              classDB <- classSection+dbParser = do (vendorNameId, vendorIdName, productDB) <- vendorSection+              classDB <- genericSection (label "C") 2 id+                         . genericSection tab 2 id+                           . genericSection (count 2 tab) 2 fst+                             $ return ()+              at      <- simpleSection "AT" 4+              hid     <- simpleSection "HID" 2+              r       <- simpleSection "R" 2+              bias    <- simpleSection "BIAS" 1+              phy     <- simpleSection "PHY" 2+              hut     <- genericSection (label "HUT") 2 id+                         . genericSection tab 3 fst+                           $ return ()+              l       <- genericSection (label "L") 4 id+                         . genericSection tab 2 fst+                           $ return ()+              hcc     <- simpleSection "HCC" 2+              vt      <- simpleSection "VT" 4                return IDDB { dbVendorNameId = vendorNameId                           , dbVendorIdName = vendorIdName                           , dbProducts     = productDB                           , dbClasses      = classDB+                          , dbAudioCTType  = at+                          , dbVideoCTType  = vt+                          , dbHIDDescType  = hid+                          , dbHIDDescItem  = r+                          , dbHIDDescCCode = hcc+                          , dbHIDUsage     = hut+                          , dbPhysDescBias = bias+                          , dbPhysDescItem = phy+                          , dbLanguages    = l                           }     where-      lexeme :: Parser String a -> Parser String a-      lexeme p = do x <- p-                    spaces-                    return x-       hexId :: Num n => Int -> Parser String n       hexId d = do ds <- count d hexDigit                    case readHex ds of                      [(n, _)]  -> return n                      _         -> error "impossible" -      vendorSection :: Parser String ( MP.Map VendorName VendorID-                                     , IM.IntMap VendorName+      label :: String -> Parser String ()+      label n = string n >> char ' ' >> return ()++      -- Top level section without subsections.+      simpleSection :: String -> Int -> Parser String (IM.IntMap String)+      simpleSection sym idSize = genericSection (string sym >> char ' ')+                                                idSize fst $ return ()++      genericSection :: (Parser String p)+                     -> Int+                     -> ((String, s) -> r)+                     -> Parser String s+                     -> Parser String (IM.IntMap r)+      genericSection prefix idSize convert =+          fmap (IM.fromList . map (second convert))+          . many . try . genericItem prefix idSize++      genericItem :: (Parser String p)+                  -> Int+                  -> Parser String s+                  -> Parser String (Int, (String, s))+      genericItem prefix idSize sub = do+          _        <- prefix+          itemId   <- hexId idSize+          _        <- count 2 $ char ' '+          itemName <- restOfLine+          s        <- sub+          return (itemId, (itemName, s))++      vendorSection :: Parser String ( MP.Map String Int+                                     , IM.IntMap String                                      , IM.IntMap ProductDB                                      )-      vendorSection = do xs <- lexeme $ many vendorParser-                         return ( MP.fromList [(name, vid) | (vid, name, _)   <- xs]-                                , IM.fromList [(vid, name) | (vid, name, _)   <- xs]-                                , IM.fromList [(vid, pdb)  | (vid, _,    pdb) <- xs]-                                )+      vendorSection = do+        xs <- many (try (vendorParser <?> "vendor"))+        return ( MP.fromList [(name, vid) | (vid, name, _)   <- xs]+               , IM.fromList [(vid, name) | (vid, name, _)   <- xs]+               , IM.fromList [(vid, pdb)  | (vid, _,    pdb) <- xs]+               ) -      vendorParser :: Parser String (VendorID, VendorName, ProductDB)-      vendorParser = do vid  <- hexId 4-                        count 2 $ char ' '-                        name <- restOfLine-                        products <- many productParser-                        return ( vid-                               , name-                               , ( MP.fromList $ fmap swap products-                                 , IM.fromList products-                                 )-                               )+      vendorParser :: Parser String (Int, String, ProductDB)+      vendorParser = do+        vid      <- hexId 4+        _        <- count 2 $ char ' '+        name     <- restOfLine+        products <- many (productParser <?> "product")+        return ( vid+               , name+               , ( MP.fromList $ fmap swap products+                 , IM.fromList products+                 )+               ) -      productParser :: Parser String (ProductID, ProductName)-      productParser = do tab+      productParser :: Parser String (Int, String)+      productParser = do _    <- tab                          pid  <- hexId 4-                         count 2 $ char ' '+                         _    <- count 2 $ char ' '                          name <- restOfLine                          return (pid, name) -      classSection :: Parser String ClassDB-      classSection = do xs <- lexeme $ many classParser-                        return $ IM.fromList xs--      classParser :: Parser String (ClassID, (ClassName, SubClassDB))-      classParser = do char 'C'-                       char ' '-                       cid  <- hexId 2-                       count 2 $ char ' '-                       name <- restOfLine-                       subClasses <- many subClassParser-                       return ( cid-                              , (name, IM.fromList subClasses)-                              )--      subClassParser :: Parser String (SubClassID, (SubClassName, ProtocolDB))-      subClassParser = do tab-                          scid <- hexId 2-                          count 2 $ char ' '-                          name <- restOfLine-                          protocols <- many (try protocolParser)-                          return ( scid-                                 , (name, IM.fromList protocols)-                                 )--      protocolParser :: Parser String (ProtocolID, ProtocolName)-      protocolParser = do count 2 tab-                          protId <- hexId 2-                          count 2 $ char ' '-                          name <- restOfLine-                          return (protId, name)---- |Construct a database from the data available at--- <http://linux-usb.org/usb.ids>.-fromWeb :: IO (Maybe IDDB)-fromWeb = fmap ( either (const Nothing)-                        parseDb-               ) $ openURIString dbURL---- |Load a vendor database from file. If the file can not be read for--- some reason an error will be thrown.+-- |Load a database from file. If the file can not be read for some reason an+-- error will be thrown. fromFile :: FilePath -> IO (Maybe IDDB) fromFile = fmap parseDb . readFile @@ -127,9 +149,13 @@ --  supplied with the package. staticDb :: IO IDDB staticDb = getDataFileName staticDbPath >>= fmap fromJust . fromFile--staticDbPath :: FilePath-staticDbPath = "usb_id_repo_db.txt"+    where+      staticDbPath :: FilePath+      staticDbPath = "usb_id_repo_db.txt" +-- |<http://linux-usb.org/usb.ids>+--+-- The source of the database. Download this file for the most up-to-date+-- version. dbURL :: String dbURL = "http://linux-usb.org/usb.ids"
System/USB/IDDB/UsbDotOrg.hs view
@@ -1,17 +1,18 @@+{-| Functions to acquire a database from <http://www.usb.org>. -}+ module System.USB.IDDB.UsbDotOrg     ( parseDb     , staticDb     , fromFile-    , fromWeb+    , dbURL     ) where  import Control.Monad        ( fmap ) import Data.Maybe           ( fromJust )-import Network.Download     ( openURIString ) import Parsimony import Parsimony.Char       ( char, digit ) import System.IO            ( FilePath, readFile )-import System.USB.IDDB.Base ( IDDB(..), VendorID, VendorName+import System.USB.IDDB.Base ( IDDB(..)                             , getDataFileName                             ) import System.USB.IDDB.Misc ( eitherMaybe, swap, restOfLine )@@ -25,14 +26,24 @@ parseDb = eitherMaybe . parse staticDbParser  staticDbParser :: Parser String IDDB-staticDbParser = do vendors <- many vendorParser-                    return IDDB { dbVendorNameId = MP.fromList $ fmap swap vendors-                                , dbVendorIdName = IM.fromList vendors-                                , dbProducts = IM.empty-                                , dbClasses  = IM.empty-                                }+staticDbParser = do+  vendors <- many vendorParser+  return IDDB { dbVendorNameId = MP.fromList $ fmap swap vendors+              , dbVendorIdName = IM.fromList vendors+              , 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+              }     where-      vendorParser :: Parser String (VendorID, VendorName)+      vendorParser :: Parser String (Int, String)       vendorParser = do vid  <- many1 digit                         char '|'                         name <- restOfLine@@ -43,24 +54,18 @@ fromFile :: FilePath -> IO (Maybe IDDB) fromFile = fmap parseDb . readFile --- |Construct a database from the list of companies available at---  <http://www.usb.org/developers/tools/comp_dump>. The website---  informs us that: /"Remember this list changes almost daily, be/---  /sure to get a fresh copy when you use the tools"/. However, the---  list seems to be quite stable. Using this function more than once---  a day is probably overkill.-fromWeb :: IO (Maybe IDDB)-fromWeb = fmap ( either (const Nothing)-                        parseDb-               ) $ openURIString dbURL- staticDbPath :: FilePath staticDbPath = "usb_dot_org_db.txt" -dbURL :: String-dbURL = "http://www.usb.org/developers/tools/comp_dump"- -- |Load a database from a snapshot of the usb.org database which is --  supplied with the package. staticDb :: IO IDDB staticDb = getDataFileName staticDbPath >>= fmap fromJust . fromFile++-- |<http://www.usb.org/developers/tools/comp_dump>+--+-- The source of the database. Download this file for the most up-to-date+-- version.+dbURL :: String+dbURL = "http://www.usb.org/developers/tools/comp_dump"+
example.hs view
@@ -26,12 +26,3 @@           -- from the vendor with ID 0x1d6b.           putStrLn $ maybe "unknown product name!" (printf "0x%04x")                    $ productId db 0x1d6b "Audio Gadget"--          putStrLn $ maybe "unknown class" id-                   $ className db 0xe0--          putStrLn $ maybe "unknown subclass" id-                   $ subClassName db 0xe0 1--          putStrLn $ maybe "unknown protocol" id-                   $ protocolName db 0xe0 1 2
usb-id-database.cabal view
@@ -1,5 +1,5 @@ name:          usb-id-database-version:       0.3.0.1+version:       0.4 cabal-version: >=1.6 build-type:    Simple stability:     provisional@@ -11,8 +11,9 @@ category:      System synopsis:      A database of USB identifiers description:-  Functions to find the names associated with numerical vendor and-  product identifiers.+  Functions to find the names associated with various identifiers from the USB+  specification. This is useful if you want to display full human-readable names+  instead of cryptic numeric codes.  extra-source-files: example.hs data-files: usb_dot_org_db.txt@@ -28,10 +29,8 @@  library   build-depends: base        >= 3 && < 4.2-               , binary      == 0.5.*                , bytestring  == 0.9.*                , containers  == 0.2.*-               , download    == 0.3.*                , parsimony   >= 1 && < 1.1   ghc-options: -Wall   cpp-options: -DBUILD_WITH_CABAL
usb_dot_org_db.txt view
@@ -19,7 +19,6 @@ 1060|SMSC 1062|Integrated Device Technology 1071|Molex Inc.-1072|Fujitsu Component Limited 1074|Unisys Corp. 1080|Advanced Micro Devices 1085|Lexmark International Inc.@@ -230,7 +229,6 @@ 2554|Mtek Vision 2578|Cambridge Silicon Radio Ltd. 2580|Spacelabs Healthcare-2582|Trek Technology (S) Pte Ltd 2583|HOYA Corporation 2593|Medtronic Physio Control Corp. 2631|Hirose Electric@@ -255,7 +253,6 @@ 2856|Kenwood Corporation 2876|Olivetti S.p.A 2894|Musical Electronics Ltd.-2900|Sinbon Electronics Co., Ltd. 2922|Maxim Integrated Products 2965|ASIX Electronics Corporation 2967|O2 Micro, Inc.@@ -311,14 +308,12 @@ 3562|UTECH Electronic (D.G.) Co., Ltd. 3607|Walex Electronic Ltd. 3619|Liou Yuane International Ltd.-3636|Micro Computer Control Corp. 3641|Smart Modular Technologies, Inc. 3642|Neostar Technology Co., Ltd. 3675|Union Power Information Industrial Co., Ltd. 3677|Neltron Industrial Co., Ltd. 3690|Megawin Technology Co., Ltd. 3698|Hsi-Chin Electronics Co., Ltd.-3714|Ching Tai Electric Wire & Cable Co., Ltd. 3715|Shin An Wire & Cable Co. 3724|Well Force Electronic Co., Ltd 3725|MediaTek Inc.@@ -348,7 +343,6 @@ 4027|Bitwise Systems, Inc. 4046|Sony Ericsson Mobile Communications AB 4087|CHI SHING COMPUTER ACCESSORIES CO., LTD.-4100|LG Electronics Inc. 4134|Newly Corporation 4168|Targus Group International 4172|AMCO TEC International Inc.@@ -388,6 +382,7 @@ 4716|Aristocrat Technologies 4717|Bel Stewart 4721|Foxda Technology Industrial (Shenzhen) Co., Ltd.+4742|MARVELL SEMICONDUCTOR, INC. 4756|RISO KAGAKU CORP. 4779|Honey Bee Electronic International Ltd. 4792|Zhejiang Xinya Electronic Technology Co., Ltd.@@ -441,7 +436,6 @@ 5488|ALLTOP TECHNOLOGY CO., LTD. 5499|Ketron SRL 5510|Sitor Electronics (Shenzhen) Co., Ltd.-5517|Oakley Inc. 5528|Kunshan Guoji Electronics Co., Ltd. 5538|Freescale Semiconductor, Inc. 5546|Gearway Electronics (Dong Guan) Co., Ltd.@@ -480,7 +474,6 @@ 6133|K.K. Rocky 6134|Unicomp, Inc 6193|Gwo Jinn Industries Co., Ltd.-6194|Huizhou Shenghua Industrial Co., Ltd. 6228|Memory Devices Ltd. 6242|Teridian Semiconductor Corp. 6257|Aveo Technology Corp.@@ -502,7 +495,6 @@ 6537|Nuconn Technology Corp. 6541|Fairchild Imaging 6556|Richnex Microelectronics Corporation-6568|Biforst Technology Inc. 6607|Parrot SA 6632|Industrial Technology Research Institute 6639|Pak Heng Technology (Shenzhen) Co., Ltd.@@ -559,9 +551,7 @@ 7329|Symwave, Inc. 7347|Aces Electronic Co., Ltd. 7348|OPEX CORPORATION-7358|Texas Instruments - Stellaris 7359|FORTAT SKYMARK INDUSTRIAL COMPANY-7360|PlantSense 7370|NextWave Broadband Inc. 7390|Telecommunications Technology Association (TTA) 7391|WonTen Technology Co., Ltd.@@ -618,15 +608,7 @@ 7911|EPCOS 7912|ONDA COMMUNICATION S.p.a. 7913|PC PARTNER LIMITED-7936|YUEQING ZHONGLI COMPUTER ELECTRONICS CO., LTD.-7950|Inflexis Corporation-7951|Action Technology (SZ) Co., Ltd.-7952|LTW TECHNOLOGY CO., LTD.-7953|VIRAGE LOGIC-7954|Photometrics 7958|Olidata SpA-7965|How Weih Precision Metal (Shenzhen) Co., Ltd.-7968|Shenzhen Tenwei Electronics Co., Ltd. 7977|Analogix Semiconductor, Inc. 7985|SASKEN COMMUNICATION TECH LTD. 7989|Amphenol Shouh Min Industry@@ -697,4 +679,7 @@ 8457|VIA Labs, Inc. 8469|Alliance Material Co., Ltd. 8470|KT Tech Inc.+8492|Shenzhen Linoya Electronic Co., Ltd.+8493|Dong Guan City Marubeni Electronic Co., Ltd.+8494|Amphenol AssembleTech (Xiamen) Co., Ltd. 8888|Motorola MDS