#include "iokitusb.h" int main(int, char**) { init(); usb_device_t *device= finddevice(0xbb4, 0xce); int ret; // open ret = device->USBDeviceOpenSeize (&device); printf("USBDeviceOpenSeize -> %d\n", ret); // ret = device->CreateDeviceAsyncEventSource (&device, &priv->cfSource); // printf("CreateDeviceAsyncEventSource -> %d\n", ret); int selected_config= 1; int selected_interface= 1; int selected_alt= 1; ret = device->SetConfiguration (&device, selected_config); printf("SetConfiguration -> %d\n", ret); SInt32 score; io_cf_plugin_ref_t *plugInInterface = NULL; ret = IOCreatePlugInInterfaceForService (selected_interface, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &plugInInterface, &score); printf("IOCreatePlugInInterfaceForService -> %d score=%d\n", ret, score); #define usb_interface_t IOUSBInterfaceInterface300 usb_interface_t **ppinterface; ret = (*plugInInterface)->QueryInterface(plugInInterface, CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID), (void**)&ppinterface); printf("plug.query(usbif) -> %d\n", ret); usb_interface_t *interface= *ppinterface;; ret = interface->USBInterfaceOpen(&interface); printf("USBInterfaceOpen -> %d\n", ret); ret = interface->SetAlternateInterface (&interface, selected_alt); printf("SetAlternateInterface -> %d\n", ret); IOUSBDevRequestTO req; req.bmRequestType = 0x21; req.bRequest = 3; req.wValue = 0; req.wIndex = 0; req.wLength = 0; req.pData = 0; req.wLenDone = 0; req.noDataTimeout = 10000; req.completionTimeout = 10000; ret = device->DeviceRequestTO(&device, &req); printf("DeviceRequestTO -> %d\n", ret); int seloutpipe= 1; int selinpipe= 2; ret = interface->WritePipe(&interface, seloutpipe, (void*)"\r", 2); printf("WritePipe -> %d\n", ret); char reply[2048]; UInt32 replylen= 2047; ret = interface->ReadPipe(&interface, selinpipe, reply, &replylen); reply[2047]= 0; if (replylen<2048) reply[replylen]= 0; printf("ReadPipe -> %d: %d : %s\n", ret, replylen, reply); deinit(); return 0; }