Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/usb/serial/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  navman.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * Navman Serial USB driver
 *
 * Copyright (C) 2006 Greg Kroah-Hartman <gregkh@suse.de>
 *
 * TODO:
 * Add termios method that uses copy_hw but also kills all echo
 * flags as the navman is rx only so cannot echo.
 */


#include <linux/gfp.h>
#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>

static const struct usb_device_id id_table[] = {
 { USB_DEVICE(0x0a99, 0x0001) }, /* Talon Technology device */
 { USB_DEVICE(0x0df7, 0x0900) }, /* Mobile Action i-gotU */
 { },
};
MODULE_DEVICE_TABLE(usb, id_table);

static void navman_read_int_callback(struct urb *urb)
{
 struct usb_serial_port *port = urb->context;
 unsigned char *data = urb->transfer_buffer;
 int status = urb->status;
 int result;

 switch (status) {
 case 0:
  /* success */
  break;
 case -ECONNRESET:
 case -ENOENT:
 case -ESHUTDOWN:
  /* this urb is terminated, clean up */
  dev_dbg(&port->dev, "%s - urb shutting down with status: %d\n",
   __func__, status);
  return;
 default:
  dev_dbg(&port->dev, "%s - nonzero urb status received: %d\n",
   __func__, status);
  goto exit;
 }

 usb_serial_debug_data(&port->dev, __func__, urb->actual_length, data);

 if (urb->actual_length) {
  tty_insert_flip_string(&port->port, data, urb->actual_length);
  tty_flip_buffer_push(&port->port);
 }

exit:
 result = usb_submit_urb(urb, GFP_ATOMIC);
 if (result)
  dev_err(&urb->dev->dev,
   "%s - Error %d submitting interrupt urb\n",
   __func__, result);
}

static int navman_open(struct tty_struct *tty, struct usb_serial_port *port)
{
 int result = 0;

 if (port->interrupt_in_urb) {
  dev_dbg(&port->dev, "%s - adding interrupt input for treo\n",
   __func__);
  result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
  if (result)
   dev_err(&port->dev,
    "%s - failed submitting interrupt urb, error %d\n",
    __func__, result);
 }
 return result;
}

static void navman_close(struct usb_serial_port *port)
{
 usb_kill_urb(port->interrupt_in_urb);
}

static int navman_write(struct tty_struct *tty, struct usb_serial_port *port,
   const unsigned char *buf, int count)
{
 /*
 * This device can't write any data, only read from the device
 */

 return -EOPNOTSUPP;
}

static struct usb_serial_driver navman_device = {
 .driver = {
  .name =  "navman",
 },
 .id_table =  id_table,
 .num_ports =  1,
 .open =   navman_open,
 .close =   navman_close,
 .write =   navman_write,
 .read_int_callback = navman_read_int_callback,
};

static struct usb_serial_driver * const serial_drivers[] = {
 &navman_device, NULL
};

module_usb_serial_driver(serial_drivers, id_table);

MODULE_DESCRIPTION("Navman USB Serial driver");
MODULE_LICENSE("GPL v2");

Messung V0.5
C=95 H=93 G=93

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.