⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acm.c

📁 usb to rs232 converter source code
💻 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/acm.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 "acm.h"status_t add_acm_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_acm_device(%08x, %08x)\n", usd, uci);  for(i=0; i < uci->interface_count; i++){    usb_interface_descriptor *uid =                         uci->interface[i].active->descr;    if(uid->interface_class == USB_INT_CLASS_CDC &&         uid->interface_subclass == USB_INT_SUBCLASS_ABSTRACT_CONTROL_MODEL &&            uid->num_endpoints == 1){      comm_epi = uci->interface[i].active->endpoint;    }      if(uid->interface_class == USB_INT_CLASS_CDC_DATA &&        (uid->interface_subclass == 2 || // ?????????????            uid->interface_subclass == USB_INT_SUBCLASS_DATA)){      if(uid->num_endpoints == 2){        data_out_epi = &uci->interface[i].active->endpoint[0];        data_in_epi = &uci->interface[i].active->endpoint[1];      }   }   if(comm_epi && data_out_epi && data_in_epi)     break;  }    if(comm_epi && data_out_epi && data_in_epi){    status = add_device(usd, uci, comm_epi, data_out_epi, data_in_epi);  }    TRACE_FUNCRET("< add_acm_device returns:%08x\n", status);  return status;}status_t reset_acm_device(usb_serial_device *usd){  status_t status = B_OK;  TRACE_FUNCALLS("> reset_acm_device(%08x)\n", usd);  TRACE_FUNCRET("< reset_acm_device returns:%08x\n", status);  return status;}status_t set_line_coding_acm(usb_serial_device *usd,                             usb_serial_line_coding *line_coding){  size_t len = 0;  status_t status = B_OK;  TRACE_FUNCALLS("> set_line_coding_acm(%08x, {%d, %02x, %02x, %02x})\n",                                       usd, line_coding->speed,                                       line_coding->stopbits,                                       line_coding->parity,                                       line_coding->databits);  status = (*usb_m->send_request)(usd->dev,                                  USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_OUT,                                  SET_LINE_CODING, 0x0, 0x0,                                  sizeof(usb_serial_line_coding),                                  line_coding,                                  sizeof(usb_serial_line_coding), &len);  TRACE_FUNCRET("< set_line_coding_acm returns:%08x\n", status);  return status;}status_t set_control_line_state_acm(usb_serial_device *usd, uint16 state){  size_t len = 0;  status_t status = B_OK;  TRACE_FUNCALLS("> set_control_line_state_acm(%08x, %04x)\n", usd, state);  status = (*usb_m->send_request)(usd->dev,                                  USB_REQTYPE_CLASS | USB_REQTYPE_INTERFACE_OUT,                                  SET_CONTROL_LINE_STATE, state, 0, 0, 0, 0,                                  &len);  TRACE_FUNCRET("< set_control_line_state_acm returns:%08x\n", status);  return status;}void on_read_acm(usb_serial_device *usd, char **buf, size_t *num_bytes){}void on_write_acm(usb_serial_device *usd, const char *buf, size_t *num_bytes){  if(*num_bytes > usd->write_buffer_size)    *num_bytes = usd->write_buffer_size;  memcpy(usd->write_buffer, buf, *num_bytes);}void on_close_acm(usb_serial_device *usd){  TRACE_FUNCALLS("> add_acm_device(%08x)\n", usd);  (*usb_m->cancel_queued_transfers)(usd->pipe_read);  (*usb_m->cancel_queued_transfers)(usd->pipe_write);  (*usb_m->cancel_queued_transfers)(usd->pipe_control);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -