2

次のコード スニペットを使用して、Mac 内のすべての AppleUSBCDCACMData IOClass デバイスのリストを抽出しようとしています (Apple サンプル コードの小規模な変更のみ)。このデバイスは、7 つの /dev/cu.usbmodemx デバイス ノードを作成する USB モデムです。

    error = IOMasterPort(MACH_PORT_NULL, &masterPort);  

if(error){
    return ;
}
else{
    matchingDict = IOServiceMatching("AppleUSBCDCACMData");
    IOServiceGetMatchingServices(masterPort,matchingDict,&modem_iterator);
    while(usbDevice = IOIteratorNext(modem_iterator))
    {

            }

私の観察では、IOServiceGetMatchingServices によって返された反復子は空です (つまり、反復するものは何もありません)。しかし、「AppleUSBCDCACMControl」をパラメーターとして IOServiceMatching に渡すと、7 つの要素のリストの反復子が取得されます。これは IORegistryExplorer ビューに準拠しています。 ここでIORegistryExplorer のスクリーンショットを参照してください。http://tumblr.deepak.dk/post/1666218968/ioregistryexplorer 私はいくつかの非標準の独自の IOClasses でも​​同じ問題に直面したためです。これは、AppleUSBCDC ドライバーをロードする任意の USB モデム (3g/HSDPA) を使用して再現できます。

私は何を間違っていますか?

4

1 に答える 1

2

IOServiceregisterService()オブジェクトは、呼び出された後にのみ照合できます。AppleUSBCDCACMControlこれを行いますが、AppleUSBCDCACMDataしません。

于 2010-11-24T08:50:53.900 に答える