Macos OS X-如何访问USB打印机
我尝试为OSX编写一个应用程序,它可以在连接USB的XPrinterXP-370b上打印条形码。 我使用IOKit库 我可以在我的代码中获取此打印机的设备对象,即Macos OS X-如何访问USB打印机,macos,printing,usb,iokit,Macos,Printing,Usb,Iokit,我尝试为OSX编写一个应用程序,它可以在连接USB的XPrinterXP-370b上打印条形码。 我使用IOKit库 我可以在我的代码中获取此打印机的设备对象,即io\u service\t设备。然后我创建ioubdebeviceinterface**dev并使用(*dev)->usbdevicepen(dev)打开设备 如何将任何消息发送到此设备?我尝试: IOReturn WriteToDeviceZ(IOUSBDeviceInterface **dev, UInt16 length, UI
io\u service\t设备代码>。然后我创建ioubdebeviceinterface**dev代码>并使用(*dev)->usbdevicepen(dev)打开设备代码>
如何将任何消息发送到此设备?我尝试:
IOReturn WriteToDeviceZ(IOUSBDeviceInterface **dev, UInt16 length, UInt8 writeBuffer[])
{
IOUSBDevRequest request;
IOReturn kr;
USBDeviceAddress address;
kr = (*dev)->GetDeviceAddress(dev, &address);
if (kr != kIOReturnSuccess)
{
printf("No address err 0x%x\n", kr);
return kr;
}
request.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBVendor, kUSBDevice);
request.bRequest = 0xa0;
request.wValue = address;
request.wIndex = 0;
request.wLength = length;
request.pData = writeBuffer;
return (*dev)->DeviceRequest(dev, &request);
}
但ii返回错误
kr = WriteToDeviceZ(dev, sizeof(array), array);
if (kr != kIOReturnSuccess)
{
printf("WriteToDevice reset returned err 0x%x\n", kr);
(*dev)->USBDeviceClose(dev);
(*dev)->Release(dev);
return kr;
}
WriteToDevice reset returned err 0xe000404f
也许还有另一种方法可以通过USB与打印机交互?大多数USB设备的主协议通常不通过设备请求实现。相反,每个设备通常有一个或多个USB接口,每个接口都有一个或多个端点。您可以通过管道与这些端点通信。在macOS上,您可以使用CreateInterfaceIterator
枚举设备的接口,以获得iOnBinterfaceInterface
句柄(或者,如果它是复合/众所周知的设备类型,您可以在IOKit匹配期间直接匹配接口),然后使用ReadPipe
/writepe
函数系列读取/写入管道。(有一些变量带有异步和/或TO(超时)后缀,我最常用的是ReadPipeAsyncTO
/WritePipeAsyncTO
,因为它们给了您最多的控制权。)我如何从“iOubDeviceInterface”获得iOubInInterface
?我尝试一下。但是迭代器没有任何interfaceRefsIOIBfindInterfaceRequest请求;io_迭代器\u t迭代器;io_服务接口EF;(*dev)->CreateInterfaceIterator(开发、请求和初始化);而((interfaceRef=IOIteratorNext(intIterator))!=0{}
您需要填写请求结构。设置request.bInterfaceClass=kiousbfinderfacedontcare;request.bInterfaceSubClass=kiousbfinderfacedontcare;request.bInterfaceProtocol=kiousbfinderfacedontcare;request.bAlternateSetting=kiousbfinderfacedontcare代码>为我工作。现在我有了设备接口