使用I / O套件访问串行至USB设备

时间:2011-02-15 21:16:16

标签: c cocoa macos usb iokit

我有以下问题:我有一台Wintec WBT-202 GPS设备,它能够通过USB将实时位置数据作为NMEA数据传输。在这个USB内部它只是一个USB到串行桥,它使用标准的usbser.sys驱动程序在Windows下运行。

我的问题是让它在Mac OS X下运行。

硬件 USB GPS鼠标使用Atmel AT91SAM7S256芯片,该芯片也负责USB接口。

Mac OS X下的

问题没有任何问题。在/dev下没有创建新的角色设备来使该设备可访问。

在Windows下,使用标准驱动程序usbser.sys。只有一个.inf文件将vendorID和productID指向此驱动程序。 从在Windows上使用Snoopy Pro(USB嗅探软件)我知道,一旦设备正确初始化,它就会将数据作为ASCII NMEA字符串发送,这就是我想要的。

问题1 Mac OS X是否有usbser.sys等效内容?如果是,可以使用无代码kext来确保驱动程序匹配正确吗?

如果这不起作用,我会使用用户空间的IOKit向设备发送和接收消息。我仍然对这将如何工作有疑问,因为我不完全理解苹果的文档。如果连接了USB设备,则会发生驱动程序匹配。如果找不到司机会怎么样。

问题2 是否可以加载一些通用USB驱动程序,我可以在内核中从用户空间“与之交谈”?我如何知道正确的驱动程序已加载?

问题3 我看到在WWDC08中有一个“入门I / O Kit”会话有没有办法访问这个会话视频?

我附上了一些USBProbe日志和I / O注册表摘录。

关于如何开始哪些文档提供体面的教程的任何评论都将非常感谢。

我查看了Amit Singh的 Mac OS X Internals - A System Internals ,Apple的文档“I / O Kit入门”,“I / O Kit基础指南”和USB私有数据样本。

附录

USB探头

Full Speed device @ 8 (0xFD360000): .............................................   Communication device: "WINTEC WBT202 CDC"
    Port Information:   0x0019
           Captive
           External Device
           Connected
           Enabled
    Device Descriptor   
        Descriptor Version Number:   0x0200
        Device Class:   2   (Communication)
        Device Subclass:   0
        Device Protocol:   0
        Device MaxPacketSize:   8
        Device VendorID/ProductID:   0x03EB/0x6119   (Atmel Corporation)
        Device Version Number:   0x0100
        Number of Configurations:   1
        Manufacturer String:   0 (none)
        Product String:   1 "WINTEC WBT202 CDC"
        Serial Number String:   0 (none)
    Configuration Descriptor   
        Length (and contents):   67
            Raw Descriptor (hex)    0000: 09 02 43 00 02 01 00 C0  32 09 04 00 00 01 02 02  
            Raw Descriptor (hex)    0010: 00 00 05 24 00 10 01 05  24 01 01 00 04 24 02 02  
            Raw Descriptor (hex)    0020: 05 24 06 00 01 07 05 83  03 40 00 0A 09 04 01 00  
            Raw Descriptor (hex)    0030: 02 0A 00 00 00 07 05 01  02 40 00 00 07 05 82 02  
            Raw Descriptor (hex)    0040: 40 00 00 
        Number of Interfaces:   2
        Configuration Value:   1
        Attributes:   0xC0 (self-powered)
        MaxPower:   100 ma
        Interface #0 - Communications-Control   
            Alternate Setting   0
            Number of Endpoints   1
            Interface Class:   2   (Communications-Control)
            Interface Subclass;   2
            Interface Protocol:   0
            Comm Class Header Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 00 10 01 
            Comm Class Call Management Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 01 01 00 
            Comm Class Abstract Control Management Functional Descriptor   
                Raw Descriptor (hex)   0000: 04 24 02 02 
            Comm Class Union Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 06 00 01 
            Endpoint 0x83 - Interrupt Input   
                Address:   0x83  (IN)
                Attributes:   0x03  (Interrupt no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   10 ms
        Interface #1 - Communications-Data/Unknown Comm Class Model   
            Alternate Setting   0
            Number of Endpoints   2
            Interface Class:   10   (Communications-Data)
            Interface Subclass;   0   (Unknown Comm Class Model)
            Interface Protocol:   0
            Endpoint 0x01 - Bulk Output   
                Address:   0x01  (OUT)
                Attributes:   0x02  (Bulk no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   0 ms
            Endpoint 0x82 - Bulk Input   
                Address:   0x82  (IN)
                Attributes:   0x02  (Bulk no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   0 ms

IO注册表

 8: WINTEC WBT202 CDC@fd360000  <class IOUSBDevice>
     AppleUSBCDC  <class AppleUSBCDC>
     IOUSBInterface@0  <class IOUSBInterface>
         AppleUSBCDCACMControl  <class AppleUSBCDCACMControl>
     IOUSBInterface@1  <class IOUSBInterface>
   bcdDevice   256 (0x100)
   bDeviceClass   2 (0x2)
   bDeviceProtocol   0 (0x0)
   bDeviceSubClass   0 (0x0)
   bMaxPacketSize0   8 (0x8)
   bNumConfigurations   1 (0x1)
   Bus Power Available   250 (0xfa)
   Device Speed   1 (0x1)
   idProduct   24857 (0x6119)
   idVendor   1003 (0x3eb)
   iManufacturer   0 (0x0)
   IOCFPlugInTypes   
       9dc7b780-9ec0-11d4-a54f-000a27052861   IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle
   IOGeneralInterest   IOCommand is not serializable
   IOUserClientClass   IOUSBDeviceUserClientV2
   iProduct   1 (0x1)
   iSerialNumber   0 (0x0)
   locationID   -46792704 (0xfd360000)
   Low Power Displayed   No
   non-removable   yes
   PortNum   6 (0x6)
   Requested Power   50 (0x32)
   sessionID   1167822359 (0x459b8e17459b8e17)
   USB Address   5 (0x5)
   USB Product Name   WINTEC WBT202 CDC

USB探测器登录设备附加

   12.719 [5]   AppleUSBHub[0x6805a00]::ProcessStatusChanged found (0x      40) in statusChangedBitmap
   12.719 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (1)
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: port 6 obtained runLock
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.719 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   12.719 [5]   AppleUSBEHCI[0x65ea000]::FindControlBulkEndpoint (inactive) - linking to active list: 65997c0
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0101)/change(0x0001)
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - change 4 clearing feature 0x10.
   12.719 [5]   AppleUSBHub[0x6805a00]::ClearPortFeature port/feature (60010) - clearing
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - status(0x0101) - change(0x0000) - before call to (4) handler function
   12.719 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - handling port 6 changes (101,0).
   12.719 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler port (6) - waiting 100 ms before asserting reset
   12.819 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 - no existing device found on port
   12.820 [4]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler port 6 status(0101)/change(0000) - no error from GetPortStatus
   12.820 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 - device detected, calling AddDevice
   12.820 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (2)
   12.820 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 done, ending.
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err (0) on return from  call to (4) handler function
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - start
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0101)/change(0x0000)
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err = 0 - done, releasing _runLock
   12.820 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (1)
   12.820 [3]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(269), outstandingIO(0), _interruptReadPending(false) - rearming read
   12.820 [5]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(269) - spawning _checkForActivePortsThread
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - bus 0x65ea000 - acquiring dev zero lock
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - about to obtain device zero lock
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - not already locked - obtaining
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - setting _devZeroLock to true
   12.820 [5]   AppleUSBEHCI[0x65ea000]: Acquired Device Zero
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - resetting port
   12.820 [5]   AppleUSBHub[0x6805a00]::SetPortFeature port/feature (60004) - setting
   12.821 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - (err = 0) done - returning .
   12.821 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (0)
   12.879 [5]   AppleUSBHub[0x6805a00]::ProcessStatusChanged found (0x      40) in statusChangedBitmap
   12.879 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (1)
   12.879 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: port 6 obtained runLock
   12.879 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: delaying 100ms before first GetPortStatus after a reset of port 6
   12.879 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0103)/change(0x0010)
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - change 1 clearing feature 0x14.
   12.979 [5]   AppleUSBHub[0x6805a00]::ClearPortFeature port/feature (60014) - clearing
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - status(0x0103) - change(0x0000) - before call to (1) handler function
   12.979 [5]   ***** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - start - status(0x0103) change (0x0000)
   12.979 [5]   **1** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - delaying 10 ms
   12.989 [5]   **2** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - found full speed device
   12.989 [5]   **2** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - configuring dev zero
   12.989 [5]   AppleUSBEHCI[0x65ea000]::ConfigureDeviceZero, new method called with hub:3, port:6
   12.989 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, high speed ancestor hub:3, port:6
   12.989 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   12.989 [3]   AppleUSBEHCI[0x65ea000]::UIMCreateControlEndpoint(0, 0, 8, 1 @(3, 6))
   12.989 [5]   **3** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - getting dev zero desc
   12.990 [5]   **3** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, using 8 for maxPacketSize
   12.992 [5]   **5** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, Releasing DeviceZero after successful SetAddress to 5
   12.992 [5]   AppleUSBEHCI[0x65ea000]::UIMDeleteEndpoint: unlinking async endpoint
   12.993 [5]   AppleUSBEHCI[0x65ea000]::UIMDeleteEndpoint: Deallocating 0x68bd700
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - about to release device zero lock
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - releasing lock
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - wakeup done
   12.993 [5]   AppleUSBEHCI[0x65ea000]:: Released Device Zero
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, new method called with hub:3, port:6
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, high speed ancestor hub:3, port:6
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice: addr=5, speed=full, power=500
   12.993 [5]   IOUSBDevice @ 5 (500mA available, full speed)
   12.993 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   12.993 [3]   AppleUSBEHCI[0x65ea000]::UIMCreateControlEndpoint(5, 0, 8, 1 @(3, 6))
   12.993 [5]   IOUSBDevice[0xd335c00]::GetDeviceDescriptor (size 18)
   12.994 [5]   IOUSBDevice[0xd335c00]::GetStringDescriptor Got string descriptor 1, length 36, got 36
   12.994 [5]   **10** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler -  port 6, at addr: 5, Successful
   12.994 [5]   AppleUSBHub[0x6805a00]::GetPortInformation  for port[6]
   12.995 [5]   WINTEC WBT202 CDC[0xd335c00]::GetDeviceInformation  Hub device name is HubDevice at USB address 3
   12.995 [5]   AppleUSBHub[0x6656800]::GetPortInformation  for port[3]
   12.995 [5]   AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - Port 6 of Hub at 0xfd300000 (USB Address: 5), calling registerService for device WINTEC WBT202 CDC
   12.995 [5]   AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, err = 0, ALL DONE
   12.995 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err (0) on return from  call to (1) handler function
   12.995 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err = 0 - done, releasing _runLock
   12.995 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (0)
   12.995 [3]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(274), outstandingIO(0), _interruptReadPending(false) - rearming read
   12.995 [5]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(274) - spawning _checkForActivePortsThread
   12.999 [5]   Finding device driver for WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDC, score: 69000, wildCard = 0
   12.999 [5]   Finding device driver for WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 106999, wildCard = 3
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::handleOpen - [0xdd78880] is not an IOUSBInterface
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::TakeGetConfigLock - calling through to ChangeGetConfigLock
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::ChangeGetConfigLock - setting _GETCONFIGLOCK to true
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetFullConfigurationDescriptor - Index (0) - getting first 4 bytes of config descriptor
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetConfigDescriptor (length: 4)
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetFullConfigurationDescriptor - Index (0) - getting full 67 bytes of config descriptor
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetConfigDescriptor (length: 67)
   13.003 [5]   WINTEC WBT202 CDC[0xd335c00]::ReleaseGetConfigLock - calling through to ChangeGetConfigLock
   13.003 [5]   WINTEC WBT202 CDC[0xd335c00]::ChangeGetConfigLock - setting _GETCONFIGLOCK to false and calling commandWakeup
   13.503 [5]   WINTEC WBT202 CDC[0xd335c00]::TerminateInterfaces interfaceList 0 terminate: 1
   13.503 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration to 1
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  Found InterfaceDescription[0] = 0x68bc889
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  Found InterfaceDescription[1] = 0x68bc8ac
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces interfaceArray 0x6de9b00
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces  matching to interface = 0x8261700
   13.553 [5]   Finding driver for interface #0 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   13.567 [5]   Finding driver for interface #0 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMControl, score: 50000, wildCard = 0
   13.570 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   13.570 [5]   AppleUSBEHCI[0x65ea000]: UIMCreateInterruptEndpoint endpoint does NOT exist (this is normal)
   13.570 [5]   AppleUSBEHCI[0x65ea000]::AllocateInterruptBandwidth - pED[0x68bd780] _speed(1)
   13.570 [3]   AppleUSBEHCITTInfo[0x682b400]::AllocatePeriodicBandwidth: pSPE[0x6f8ae40]
   13.570 [5]   AppleUSBEHCISplitPeriodicEndpoint[0x6f8ae40]::FindStartFrameAndStartTime - _FSBytesUsed (78)
   13.570 [5]   AppleUSBEHCISplitPeriodicEndpoint[0x6f8ae40]::FindStartFrameAndStartTime - using Start Time entry found - _startFrame(1) _startTime(36)
   13.570 [5]   AppleUSBEHCI[0x65ea000]::AllocateInterruptBandwidth - returning 0x0(success)
   13.571 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   13.573 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces  matching to interface = 0xd337700
   13.621 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   13.636 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.024 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.075 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   14.089 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.090 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.266 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.315 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   14.330 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.330 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.334 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  returning success

编辑:在设备附加后附加来自console.app的日志文件摘录

16.02.11 09:05:55   kernel  0        0 AppleUSBCDCACMControl: getFunctionalDescriptors - Descriptors are incorrect, checking...
16.02.11 09:05:55   kernel  0        1 AppleUSBCDCACMData: start - Find CDC driver for data interface failed

4 个答案:

答案 0 :(得分:3)

我从发布到Apple的USB邮件列表中得到的答案是,Apple AppleUSBCDCACMData驱动程序中存在一个错误,导致无法完成其工作。我在Apple的雷达上提出了一个错误,希望他们能尽快修复它。

答案 1 :(得分:2)

看起来系统的CDC驱动程序正确匹配,应创建/dev/ttyusbmodem* IIRC,如果不能正常工作,我会检查系统日志中的错误消息。

答案 2 :(得分:0)

如果你是USB驱动程序编程器,你应该下载AppleUSBCDCDriver项目的源代码,该项目包含AppleUSBCDCDriver.kext,AppleUSBCDCACMControl.kext,AppleUSBCDCACMData.kext,AppleUSBCDCECMControl.kext,AppleUSBCDCECMData.kext。

我能保证的是,你肯定可以通过修复代码并构建自己的驱动程序来解决这个问题。(记得改变驱动程序的类名。)

我可以确认的是,AppleUSBCDCDriver主要是根据标准通信设备类规范设计的,包括Apple开发团队的考虑,这个问题不应该是一个错误。

在Mac OS上,驱动程序匹配主要是根据驱动程序的info.plist,就像Windows上的.inf文件一样。

答案 3 :(得分:0)

AppleUSBCDCACMData中提到的错误有一种解决方法。您需要为呼叫管理描述符分配接口。你把它设置为00。

你表示:

Comm Class Call Management Functional Descriptor
Raw Descriptor (hex) 0000: 05 24 01 01 00

缺乏和分配。使用ATMEL USB库,它看起来像这样:

// Class-specific call management functional descriptor`
{ sizeof(CDCCallManagementDescriptor),
CDCGenericDescriptor_INTERFACE,
CDCGenericDescriptor_CALLMANAGEMENT,
CDCCallManagementDescriptor_SELFCALLMANAGEMENT,
1 // <--needed for MacOS
}