📄 prolific.c
字号:
/* * This file is a part of BeOS USB Serial driver project. * Copyright (c) 2003 by Siarzuk Zharski <imker@gmx.li> * * This file may be used under the terms of the BSD License * See the file "License" for details. * * $Source: /cvsroot/sis4be/usb_serial/prolific.c,v $ * $Author: zharik $ * $Revision: 1.2 $ * $Date: 2003/10/05 17:44:52 $ * */#include <KernelExport.h>#include <Drivers.h>#include <USB.h>#include <ttylayer.h>#include "driver.h"#include "prolific.h"status_t add_prolific_device(usb_serial_device *usd, const usb_configuration_info *uci){ struct usb_endpoint_info *comm_epi = NULL; struct usb_endpoint_info *data_out_epi = NULL; struct usb_endpoint_info *data_in_epi = NULL; status_t status = ENODEV; int i = 0; TRACE_FUNCALLS("> add_prolific_device(%08x, %08x)\n", usd, uci); if(uci->interface_count){ struct usb_interface_info *uii = uci->interface[0].active; for(i = 0; i < uii->endpoint_count; i++){ if(uii->endpoint[i].descr->attributes == USB_EP_ATTR_INTERRUPT){ if((uii->endpoint[i].descr->endpoint_address & USB_EP_ADDR_DIR_IN) == USB_EP_ADDR_DIR_IN) /*USB_EP_ADDR_DIR_OUT = 0x0*/ comm_epi = &uii->endpoint[i]; } } /*They say that USB-RSAQ1 has 2 interfaces */ if(uci->interface_count == 2){ uii = uci->interface[1].active; } for(i = 0; i < uii->endpoint_count; i++){ if(uii->endpoint[i].descr->attributes == USB_EP_ATTR_BULK){ if((uii->endpoint[i].descr->endpoint_address & USB_EP_ADDR_DIR_IN) == USB_EP_ADDR_DIR_IN){ data_in_epi = &uii->endpoint[i]; }else{ if(uii->endpoint[i].descr->endpoint_address /*USB_EP_ADDR_DIR_OUT = 0x0*/){ data_out_epi = &uii->endpoint[i]; } } } } if(comm_epi && data_in_epi && data_out_epi){ usd->read_buffer_size = usd->write_buffer_size = usd->interrupt_buffer_size = ROUNDUP(PROLIFIC_BUF_SIZE, 16); status = add_device(usd, uci, comm_epi, data_out_epi, data_in_epi); } } TRACE_FUNCRET("< add_prolific_device returns:%08x\n", status); return status;}status_t reset_prolific_device(usb_serial_device *usd){ status_t status; size_t len = 0; TRACE_FUNCALLS("> reset_prolific_device(%08x)\n", usd); status = (*usb_m->send_request)(usd->dev, USB_REQTYPE_VENDOR | USB_REQTYPE_DEVICE_OUT, PROLIFIC_SET_REQUEST, 0, 0, 0, 0, 0, &len); TRACE_FUNCRET("< reset_prolific_device returns:%08x\n", status); return status;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -