/* テクノキット専用 */ #define USB_VENDOR 0x12ed #define USB_PRODUCT 0x1003 /* USB初期化 */ struct usb_bus *morphy_init() { usb_init(); usb_find_busses(); usb_find_devices(); return( usb_get_busses() ); } /* Morphy-USBIOを見つける */ struct usb_device *morphy_find(struct usb_bus *busses, struct usb_device *dev) { struct usb_bus *bus; for(bus=busses; bus; bus=bus->next){ for(dev=bus->devices; dev; dev=dev->next) { if( (dev->descriptor.idVendor==USB_VENDOR) && (dev->descriptor.idProduct==USB_PRODUCT) ){ return( dev ); } } } return( NULL ); } /* USBIOオープン */ struct usb_dev_handle *morphy_open(struct usb_device *dev) { struct usb_dev_handle *udev = NULL; udev=usb_open(dev); if( (udev=usb_open(dev))==NULL ){ printf("usb_open Error.(%s)\n",usb_strerror()); exit(1); } if( usb_set_configuration(udev,dev->config->bConfigurationValue)<0 ){ printf("usb_set_configuration Error.(%s)\n",usb_strerror()); } if( usb_claim_interface(udev,dev->config->interface->altsetting->bInterfaceNumber)<0 ){ if( usb_detach_kernel_driver_np(udev,dev->config->interface->altsetting->bInterfaceNumber)<0 ){ printf("usb_detach_kernel_driver_np Error.(%s)\n",usb_strerror()); } } if( usb_claim_interface(udev,dev->config->interface->altsetting->bInterfaceNumber)<0 ){ printf("usb_claim_interface Error.(%s)\n",usb_strerror()); } return(udev); } /* USBIOクローズ */ void morphy_close(struct usb_dev_handle *udev) { if( usb_close(udev)<0 ){ printf("usb_close Error.(%s)\n",usb_strerror()); } }