abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 4
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 22
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 3
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 2
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 771 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripojeni)

kozzi avatar 4.3.2006 12:33 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripojeni)
Přečteno: 4046×
Vyresil jsem problem s modemem Anydata uz nemusite pri kazdym odpojeni modem vypnout a znovu zapnout abyste se mohli pripojit. Ztravil jsem na tom 48 h vkuse a nakonec reseni trvalo 1 minutu ach jo :-( a proto to nezdelim zadarmo odpoved na tento problem sdelim az nekdo spravne odpovi na moji otazku jaka je ma oblibena distribuce tak zdar hodne stesti opovedi piste na kozzi11@gmail.com nebo na kozzi@tiscali.cz
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

Odpovědi

4.3.2006 18:42 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Ahoj,

pokud pokud se nechceš podělit o informace, tak sem raději vůbec nepiš.

Pokud sem nenapíšeš řešení tvého problému, tak tohle vlákno smažu, nemá totiž žádnou hodnotu.
-- Nezdar není hanbou, hanbou je strach z pokusu.
kozzi avatar 4.3.2006 18:56 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Jelikoz je navod slozity a nemam ho kde presentovat tak jsem vyse napsal svuj email na ktery kdyz mi nekdo napise tak mu informace poskytnu uz jsem tak jednou ucini A pokud muj prvni prispevek vyznel jako ze se o informace nechcu delit tak to se omlouvam tak to urcite nebylo mysleno
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
4.3.2006 19:11 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
A to je problém to popsat zde ? Obzvláště jak je to na 1 minutu jak píšeš ?

Fakt pokud to tu nemíníš napsat tak se na to vykašli a rači sem nic nepiš.
4.3.2006 19:25 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Když už jsi někomu ten email napsal, tak proč ho sem prostě nepastneš?
-- Nezdar není hanbou, hanbou je strach z pokusu.
kozzi avatar 4.3.2006 19:40 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
upravou ovladace pl2303.c z jadra ze slozky */drivers/usb/serial/ potrebne upravy v souboru pl2303.c jsou: -nahradit kazdej retezec pl2303 za retezec anydata -nahradit kazdej retezec PL2303 za ANYDATA pozn: je dulezite abyjste dodrzeli velikost pismen na nahrazeni pouzite svuj oblibeny textovy editor ja pouzil GVim. Jo a doufam ze vasto nenapadne delat rucne :D. - potom najdete oblast ktera vypada nejak takto (je nekde kolem 50 radku)

static struct usb_device_id id_table [] = {
    { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) },
    { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID_RSAQ2) },
    { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID_RSAQ3) },
    { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID_PHAROS) },
    { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
    { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
    { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) },
    { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) },
    { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) },
    { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) },
    { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) },
    { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) },
    { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) },
    { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
    { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
    { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
    { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
    { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) },
    { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) },
    { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
    { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
    { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
    { USB_DEVICE( NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID ) },
    { }                    /* Terminating entry */
};
 

a upravte ji nasledovne:


static struct usb_device_id id_table [] = {
    { USB_DEVICE(ANYDATA_VENDOR_ID, PL2303_PRODUCT_ID) },
    { }                    /* Terminating entry */
};


- potom se jeste musi vymazat par radku nekde na radku 790 puvodne to tam vypada takto:

static void anydata_update_line_status(struct usb_serial_port *port,
                      unsigned char *data,
                      unsigned int actual_length)
{

    struct anydata_private *priv = usb_get_serial_port_data(port);
    unsigned long flags;
    u8 status_idx = UART_STATE;
    u8 length = UART_STATE;

    if ((le16_to_cpu(port->serial->dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
        (le16_to_cpu(port->serial->dev-> descriptor.idProduct) == SIEMENS_PRODUCT_ID_X65 ||
         le16_to_cpu(port->serial->dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_SX1 ||
         le16_to_cpu(port->serial->dev->descriptor.idProduct ) == SIEMENS_PRODUCT_ID_X75)) {
        length = 1;
        status_idx = 0;
    }

    if (actual_length < length)
        goto exit;



po uprave asi takto:

static void anydata_update_line_status(struct usb_serial_port *port,
                      unsigned char *data,
                      unsigned int actual_length)
{

    struct anydata_private *priv = usb_get_serial_port_data(port);
    unsigned long flags;
    u8 status_idx = UART_STATE;
    u8 length = UART_STATE;

        if (actual_length < length)
        goto exit;


potom jsem otevrel pl2303.h a upravil ho takhle:

/*
 * ANYDATA USB to serial adaptor driver header file
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 */
#define ANYDATA_VENDOR_ID    0x16d5
#define ANYDATA_PRODUCT_ID    0x6501

pozn vyse uvedenej soubor pl2303.h je celej takze tam nic vic nebude vsechno ostatni jsem smazal
a ulozi ho jako anydata.h
Tak to jsou vsechny zmeny ktere jsem provedl pak jsem jen dal skompilovat jadru a hotovo kompilaci jadra a jeho nastavenim se zde zabivat nebudu.
Poznamka vyzkouseno na jadrech rady 2.6.15 a 2.6.16-rc*
u nizsich jader by bylo zapotrebi stahnout patch z http://dastych.sh.cvut.cz/~jtra/stuff/anydata/index.html
opatchovat jadro a pak udelat vyse zminene upravy.
vjadrech 2.6.15 a novejsich je sice jiz anydata.h ale ten je nefunkcni takze ho prepiste vyse uvedenymi zmenami to vlastne plati i pro nizsi rady jader po opatchovani. k zavedeni pouzivam prikaz:
modprobe anydata
vse jede v pohode nastaveni internetu mam pres pppconfig.
v /dev ho najdete pod nazvem ttyUSB0 ja ho mam v /dev/tts/USB0 (Archlinux).
jestli jsem neco zapomnel tak mi napiste objasnim. 
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
4.3.2006 19:53 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Akorát nechápu proč to popisujete tak podrobně nebylo by lepší soubor upravit a použit na to program diff a výstup programu dát zde ?

A nemusel by to každý přepisovat použil by normálně patch :-)

Viz: man diff, man patch :-)
kozzi avatar 4.3.2006 19:59 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
jelikoz vyrabet patch neumim a nemam zajem se to ucit mam spostu jinich satrosti ale je fakt ze je nacase se to naucit dik za pripominku
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
4.3.2006 20:03 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Na tom není nic složitého viz man diff :-) jednoduše vememe originál a skopírujeme upravíme a potom originál a upravený porovnáme viz: man diff no a máme rozdíly které vystavíme :-)
kozzi avatar 4.3.2006 20:09 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Jo mate pravdu je to fakt docela lehky dokonce kdyz zadam diff --help tak mi to da ceskou napovedu no neni ten svet krasnej ne ze bych neumel anglicky ale cestina me vzdy potesi :D uz vyrabim ten patch
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
4.3.2006 21:01 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Tak jsem to sepsal viz:

FAQ Jak vytvořit soubor patch ?
6.3.2006 17:00 eugen4 | skóre: 6
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
v podstatě stejný postup se dá použít na jádro 2.4, kromě té funkce anydata_update_line_status, kterou jádro 2.4 nemá
31.3.2006 01:02 Jávim
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Můžete se trošku podrobněji rozepsat? Snažil jsem se upravit debianí (2.4.27-2-386) pl2303.o modul dle diffů zde (ručně) a výsledkem je hromádka hlášek "... unresolved symbol ..." Hned zpočátku se přiznám bez mučení, že programování v C mě postihlo minimálně a hrábání se v jádře prakticky vůbec :( Předem děkuji za nakopnutí správným směrem ...

J.

PS: Příklad jedné hlášky v plném znění: /lib/modules/2.4.27-2-386/kernel/drivers/usb/serial/anydata.o: /lib/modules/2.4.27-2-386/kernel/drivers/usb/serial/anydata.o: unresolved symbol usb_serial_register_Rsmp_6eca79c8
3.4.2006 17:41 Jávim
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Tak jsem se ukecal a překompiloval jsem si vlastní jádro ... již tedy frčím ... díky za návod.
4.3.2006 20:26 Jirka | skóre: 36
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Vzpomen si na sebe az budes chtit od nekoho pomoct. Nedavno tu byla anketa, jestli se lidi citi byt cleny komunity. Komunita je o pomoci bez jakychkoliv podminek. Lidi co pro tebe spravuji tento server, kernel Linuxu, tvoji oblibenou distribuci za to asi taky nechteji prachy, ze? Spousta lidi taky nad nejakym problemem stravila spousty casu a nechteji za to penize. Treba Zdenek Burda ma na sve strance paradni navody na reseni ne zrovna trivialnich problemu (treba LDAP o kterem v cestine mnoho nenajdes)a nedela kolem toho komedie.

Jsem pro, aby se tento thread vymazal.
4.3.2006 20:27 Jirka | skóre: 36
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Heh, tak sorry. V zachvatu vzteku jsem se nepodival na ostatni posty v threadu. Ted vypadam jako debil. Omlouvam se.
kozzi avatar 4.3.2006 22:33 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj

*** anydata.orig.c	2006-02-03 07:03:08.000000000 +0100
--- anydata.c	2006-03-05 18:41:28.000000000 +0100
***************
*** 1,86 ****
  /*
!  * AnyData CDMA Serial USB driver
   *
!  * Copyright (C) 2005 Greg Kroah-Hartman <gregkh@suse.de>
   *
-  *	This program is free software; you can redistribute it and/or
-  *	modify it under the terms of the GNU General Public License version
-  *	2 as published by the Free Software Foundation.
   */
  
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/tty.h>
  #include <linux/module.h>
  #include <linux/usb.h>
  #include "usb-serial.h"
  
  static struct usb_device_id id_table [] = {
! 	{ USB_DEVICE(0x16d5, 0x6501) },	/* AirData CDMA device */
! 	{ },
  };
- MODULE_DEVICE_TABLE(usb, id_table);
  
! /* if overridden by the user, then use their value for the size of the
!  * read and write urbs */
! static int buffer_size;
! static int debug;
  
  static struct usb_driver anydata_driver = {
  	.name =		"anydata",
  	.probe =	usb_serial_probe,
  	.disconnect =	usb_serial_disconnect,
  	.id_table =	id_table,
! 	.no_dynamic_id = 	1,
  };
  
! static int anydata_open(struct usb_serial_port *port, struct file *filp)
! {
! 	char *buffer;
! 	int result = 0;
  
! 	dbg("%s - port %d", __FUNCTION__, port->number);
  
- 	if (buffer_size) {
- 		/* override the default buffer sizes */
- 		buffer = kmalloc(buffer_size, GFP_KERNEL);
- 		if (!buffer) {
- 			dev_err(&port->dev, "%s - out of memory.\n",
- 				__FUNCTION__);
- 			return -ENOMEM;
- 		}
- 		kfree (port->read_urb->transfer_buffer);
- 		port->read_urb->transfer_buffer = buffer;
- 		port->read_urb->transfer_buffer_length = buffer_size;
- 
- 		buffer = kmalloc(buffer_size, GFP_KERNEL);
- 		if (!buffer) {
- 			dev_err(&port->dev, "%s - out of memory.\n",
- 				__FUNCTION__);
- 			return -ENOMEM;
- 		}
- 		kfree (port->write_urb->transfer_buffer);
- 		port->write_urb->transfer_buffer = buffer;
- 		port->write_urb->transfer_buffer_length = buffer_size;
- 		port->bulk_out_size = buffer_size;
- 	}
- 
- 	/* Start reading from the device */
- 	usb_fill_bulk_urb(port->read_urb, port->serial->dev,
- 			  usb_rcvbulkpipe(port->serial->dev,
- 				  	  port->bulk_in_endpointAddress),
- 			  port->read_urb->transfer_buffer,
- 			  port->read_urb->transfer_buffer_length,
- 			  usb_serial_generic_write_bulk_callback, port);
- 	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
- 	if (result)
- 		dev_err(&port->dev,
- 			"%s - failed submitting read urb, error %d\n",
- 			__FUNCTION__, result);
- 
- 	return result;
- }
  
  static struct usb_serial_driver anydata_device = {
  	.driver = {
  		.owner =	THIS_MODULE,
--- 1,131 ----
  /*
!  * Prolific ANYDATA USB to serial adaptor driver
!  * Based on ANYDATA USB driver
   *
!  * Copyright (C) 2006 Daniel Kozak (kozzi11@gmail.com)
!  * 
!  * Original driver for 2.2.x by anonymous
!  *
!  *	This program is free software; you can redistribute it and/or modify
!  *	it under the terms of the GNU General Public License as published by
!  *	the Free Software Foundation; either version 2 of the License.
!  *
!  * See Documentation/usb/usb-serial.txt for more information on using this driver
   *
   */
  
+ #include <linux/config.h>
  #include <linux/kernel.h>
+ #include <linux/errno.h>
  #include <linux/init.h>
+ #include <linux/slab.h>
  #include <linux/tty.h>
+ #include <linux/tty_driver.h>
+ #include <linux/tty_flip.h>
+ #include <linux/serial.h>
  #include <linux/module.h>
+ #include <linux/moduleparam.h>
+ #include <linux/spinlock.h>
+ #include <asm/uaccess.h>
  #include <linux/usb.h>
  #include "usb-serial.h"
+ #include "anydata.h"
+ 
+ /*
+  * Version Information
+  */
+ #define DRIVER_DESC "Prolific ANYDATA USB to serial adaptor driver"
+ 
+ static int debug;
+ 
+ #define ANYDATA_CLOSING_WAIT	(30*HZ)
+ 
+ #define ANYDATA_BUF_SIZE		1024
+ #define ANYDATA_TMP_BUF_SIZE	1024
+ 
+ struct anydata_buf {
+ 	unsigned int	buf_size;
+ 	char		*buf_buf;
+ 	char		*buf_get;
+ 	char		*buf_put;
+ };
  
  static struct usb_device_id id_table [] = {
! 	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) },
! 				/* Terminating entry */
  };
  
! MODULE_DEVICE_TABLE (usb, id_table);
  
  static struct usb_driver anydata_driver = {
  	.name =		"anydata",
  	.probe =	usb_serial_probe,
  	.disconnect =	usb_serial_disconnect,
  	.id_table =	id_table,
! 	//.no_dynamic_id = 	1,
  };
  
! #define SET_LINE_REQUEST_TYPE		0x21
! #define SET_LINE_REQUEST		0x20
  
! #define SET_CONTROL_REQUEST_TYPE	0x21
! #define SET_CONTROL_REQUEST		0x22
! #define CONTROL_DTR			0x01
! #define CONTROL_RTS			0x02
! 
! #define BREAK_REQUEST_TYPE		0x21
! #define BREAK_REQUEST			0x23	
! #define BREAK_ON			0xffff
! #define BREAK_OFF			0x0000
! 
! #define GET_LINE_REQUEST_TYPE		0xa1
! #define GET_LINE_REQUEST		0x21
! 
! #define VENDOR_WRITE_REQUEST_TYPE	0x40
! #define VENDOR_WRITE_REQUEST		0x01
! 
! #define VENDOR_READ_REQUEST_TYPE	0xc0
! #define VENDOR_READ_REQUEST		0x01
! 
! #define UART_STATE			0x08
! #define UART_STATE_TRANSIENT_MASK	0x74
! #define UART_DCD			0x01
! #define UART_DSR			0x02
! #define UART_BREAK_ERROR		0x04
! #define UART_RING			0x08
! #define UART_FRAME_ERROR		0x10
! #define UART_PARITY_ERROR		0x20
! #define UART_OVERRUN_ERROR		0x40
! #define UART_CTS			0x80
! 
! /* function prototypes for a ANYDATA serial converter */
! static int anydata_open (struct usb_serial_port *port, struct file *filp);
! static void anydata_close (struct usb_serial_port *port, struct file *filp);
! static int anydata_ioctl (struct usb_serial_port *port, struct file *file,
! 			 unsigned int cmd, unsigned long arg);
! static void anydata_read_int_callback (struct urb *urb, struct pt_regs *regs);
! static void anydata_read_bulk_callback (struct urb *urb, struct pt_regs *regs);
! static void anydata_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
! static int anydata_write (struct usb_serial_port *port,
! 			 const unsigned char *buf, int count);
! static void anydata_send (struct usb_serial_port *port);
! static int anydata_write_room(struct usb_serial_port *port);
! static int anydata_chars_in_buffer(struct usb_serial_port *port);
! static void anydata_break_ctl(struct usb_serial_port *port,int break_state);
! static int anydata_startup (struct usb_serial *serial);
! static void anydata_shutdown (struct usb_serial *serial);
! static struct anydata_buf *anydata_buf_alloc(unsigned int size);
! static void anydata_buf_free(struct anydata_buf *pb);
! static void anydata_buf_clear(struct anydata_buf *pb);
! static unsigned int anydata_buf_data_avail(struct anydata_buf *pb);
! static unsigned int anydata_buf_space_avail(struct anydata_buf *pb);
! static unsigned int anydata_buf_put(struct anydata_buf *pb, const char *buf,
! 	unsigned int count);
! static unsigned int anydata_buf_get(struct anydata_buf *pb, char *buf,
! 	unsigned int count);
  
  
+ /* All of the device info needed for the ANYDATA SIO serial converter */
  static struct usb_serial_driver anydata_device = {
  	.driver = {
  		.owner =	THIS_MODULE,
***************
*** 92,123 ****
  	.num_bulk_out =		NUM_DONT_CARE,
  	.num_ports =		1,
  	.open =			anydata_open,
  };
  
! static int __init anydata_init(void)
  {
  	int retval;
  
  	retval = usb_serial_register(&anydata_device);
  	if (retval)
! 		return retval;
  	retval = usb_register(&anydata_driver);
  	if (retval)
! 		usb_serial_deregister(&anydata_device);
  	return retval;
  }
  
! static void __exit anydata_exit(void)
  {
! 	usb_deregister(&anydata_driver);
! 	usb_serial_deregister(&anydata_device);
  }
  
  module_init(anydata_init);
  module_exit(anydata_exit);
  MODULE_LICENSE("GPL");
  
  module_param(debug, bool, S_IRUGO | S_IWUSR);
  MODULE_PARM_DESC(debug, "Debug enabled or not");
! module_param(buffer_size, int, 0);
! MODULE_PARM_DESC(buffer_size, "Size of the transfer buffers");
--- 137,942 ----
  	.num_bulk_out =		NUM_DONT_CARE,
  	.num_ports =		1,
  	.open =			anydata_open,
+ 	.close =		anydata_close,
+ 	.write =		anydata_write,
+ 	.ioctl =		anydata_ioctl,
+ 	.break_ctl =		anydata_break_ctl,
+ 	.read_bulk_callback =	anydata_read_bulk_callback,
+ 	.read_int_callback =	anydata_read_int_callback,
+ 	.write_bulk_callback =	anydata_write_bulk_callback,
+ 	.write_room =		anydata_write_room,
+ 	.chars_in_buffer =	anydata_chars_in_buffer,
+ 	.attach =		anydata_startup,
+ 	.shutdown =		anydata_shutdown,
+ };
+ 
+ enum anydata_type {
+ 	type_0,		/* don't know the difference between type 0 and */
+ 	type_1,		/* type 1, until someone from prolific tells us... */
+ 	HX,		/* HX version of the anydata chip */
+ };
+ 
+ struct anydata_private {
+ 	spinlock_t lock;
+ 	struct anydata_buf *buf;
+ 	int write_urb_in_use;
+ 	wait_queue_head_t delta_msr_wait;
+ 	u8 line_control;
+ 	u8 line_status;
+ 	u8 termios_initialized;
+ 	enum anydata_type type;
  };
  
! 
! static int anydata_startup (struct usb_serial *serial)
! {
! 	struct anydata_private *priv;
! 	enum anydata_type type = type_0;
! 	int i;
! 
! 	if (serial->dev->descriptor.bDeviceClass == 0x02)
! 		type = type_0;
! 	else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40)
! 		type = HX;
! 	else if (serial->dev->descriptor.bDeviceClass == 0x00)
! 		type = type_1;
! 	else if (serial->dev->descriptor.bDeviceClass == 0xFF)
! 		type = type_1;
! 	dbg("device type: %d", type);
! 
! 	for (i = 0; i < serial->num_ports; ++i) {
! 		priv = kmalloc (sizeof (struct anydata_private), GFP_KERNEL);
! 		if (!priv)
! 			goto cleanup;
! 		memset (priv, 0x00, sizeof (struct anydata_private));
! 		spin_lock_init(&priv->lock);
! 		priv->buf = anydata_buf_alloc(ANYDATA_BUF_SIZE);
! 		if (priv->buf == NULL) {
! 			kfree(priv);
! 			goto cleanup;
! 		}
! 		init_waitqueue_head(&priv->delta_msr_wait);
! 		priv->type = type;
! 		usb_set_serial_port_data(serial->port[i], priv);
! 	}
! 	return 0;
! 
! cleanup:
! 	for (--i; i>=0; --i) {
! 		priv = usb_get_serial_port_data(serial->port[i]);
! 		anydata_buf_free(priv->buf);
! 		kfree(priv);
! 		usb_set_serial_port_data(serial->port[i], NULL);
! 	}
! 	return -ENOMEM;
! }
! 
! static int set_control_lines (struct usb_device *dev, u8 value)
  {
  	int retval;
+ 	
+ 	retval = usb_control_msg (dev, usb_sndctrlpipe (dev, 0),
+ 				  SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE,
+ 				  value, 0, NULL, 0, 100);
+ 	dbg("%s - value = %d, retval = %d", __FUNCTION__, value, retval);
+ 	return retval;
+ }
+ 
+ static int anydata_write (struct usb_serial_port *port,  const unsigned char *buf, int count)
+ {
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned long flags;
+ 
+ 	dbg("%s - port %d, %d bytes", __FUNCTION__, port->number, count);
+ 
+ 	if (!count)
+ 		return count;
+ 
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	count = anydata_buf_put(priv->buf, buf, count);
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ 	anydata_send(port);
+ 
+ 	return count;
+ }
+ 
+ static void anydata_send(struct usb_serial_port *port)
+ {
+ 	int count, result;
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned long flags;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 
+ 	if (priv->write_urb_in_use) {
+ 		spin_unlock_irqrestore(&priv->lock, flags);
+ 		return;
+ 	}
+ 
+ 	count = anydata_buf_get(priv->buf, port->write_urb->transfer_buffer,
+ 		port->bulk_out_size);
+ 
+ 	if (count == 0) {
+ 		spin_unlock_irqrestore(&priv->lock, flags);
+ 		return;
+ 	}
+ 
+ 	priv->write_urb_in_use = 1;
+ 
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ 	usb_serial_debug_data(debug, &port->dev, __FUNCTION__, count, port->write_urb->transfer_buffer);
+ 
+ 	port->write_urb->transfer_buffer_length = count;
+ 	port->write_urb->dev = port->serial->dev;
+ 	result = usb_submit_urb (port->write_urb, GFP_ATOMIC);
+ 	if (result) {
+ 		dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __FUNCTION__, result);
+ 		priv->write_urb_in_use = 0;
+ 		// TODO: reschedule anydata_send
+ 	}
+ 
+ 	schedule_work(&port->work);
+ }
+ 
+ static int anydata_write_room(struct usb_serial_port *port)
+ {
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	int room = 0;
+ 	unsigned long flags;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	room = anydata_buf_space_avail(priv->buf);
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ 	dbg("%s - returns %d", __FUNCTION__, room);
+ 	return room;
+ }
+ 
+ static int anydata_chars_in_buffer(struct usb_serial_port *port)
+ {
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	int chars = 0;
+ 	unsigned long flags;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	chars = anydata_buf_data_avail(priv->buf);
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ 	dbg("%s - returns %d", __FUNCTION__, chars);
+ 	return chars;
+ }
+ 
+ 
+ 
+ static int anydata_open (struct usb_serial_port *port, struct file *filp)
+ {
+ 	struct usb_serial *serial = port->serial;
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned char *buf;
+ 	int result;
+ 
+ 	dbg("%s -  port %d", __FUNCTION__, port->number);
+ 
+ 	if (priv->type != HX) {
+ 		usb_clear_halt(serial->dev, port->write_urb->pipe);
+ 		usb_clear_halt(serial->dev, port->read_urb->pipe);
+ 	}
+ 
+ 	buf = kmalloc(10, GFP_KERNEL);
+ 	if (buf==NULL)
+ 		return -ENOMEM;
+ 
+ #define FISH(a,b,c,d)								\
+ 	result=usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev,0),	\
+ 			       b, a, c, d, buf, 1, 100);			\
+ 	dbg("0x%x:0x%x:0x%x:0x%x  %d - %x",a,b,c,d,result,buf[0]);
+ 
+ #define SOUP(a,b,c,d)								\
+ 	result=usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev,0),	\
+ 			       b, a, c, d, NULL, 0, 100);			\
+ 	dbg("0x%x:0x%x:0x%x:0x%x  %d",a,b,c,d,result);
+ 
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
+ 	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0x0404, 0);
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8383, 0);
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
+ 	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0x0404, 1);
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
+ 	FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8383, 0);
+ 	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0, 1);
+ 	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 1, 0);
+ 
+ 	if (priv->type == HX) {
+ 		/* HX chip */
+ 		SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 2, 0x44);
+ 		/* reset upstream data pipes */
+           	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 8, 0);
+         	SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 9, 0);
+ 	} else {
+ 		SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 2, 0x24);
+ 	}
+ 
+ 	kfree(buf);
+ 
+ 	/* Setup termios */
+ 	//FIXME: need to assert RTS and DTR if CRTSCTS off
+ 
+ 	dbg("%s - submitting read urb", __FUNCTION__);
+ 	port->read_urb->dev = serial->dev;
+ 	result = usb_submit_urb (port->read_urb, GFP_KERNEL);
+ 	if (result) {
+ 		dev_err(&port->dev, "%s - failed submitting read urb, error %d\n", __FUNCTION__, result);
+ 		anydata_close (port, NULL);
+ 		return -EPROTO;
+ 	}
+ 
+ 	dbg("%s - submitting interrupt urb", __FUNCTION__);
+ 	port->interrupt_in_urb->dev = serial->dev;
+ 	result = usb_submit_urb (port->interrupt_in_urb, GFP_KERNEL);
+ 	if (result) {
+ 		dev_err(&port->dev, "%s - failed submitting interrupt urb, error %d\n", __FUNCTION__, result);
+ 		anydata_close (port, NULL);
+ 		return -EPROTO;
+ 	}
+ 	return 0;
+ }
+ 
+ 
+ static void anydata_close (struct usb_serial_port *port, struct file *filp)
+ {
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned long flags;
+ 	unsigned int c_cflag;
+ 	int bps;
+ 	long timeout;
+ 	wait_queue_t wait;						\
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	/* wait for data to drain from the buffer */
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	timeout = ANYDATA_CLOSING_WAIT;
+ 	init_waitqueue_entry(&wait, current);
+ 	add_wait_queue(&port->tty->write_wait, &wait);
+ 	for (;;) {
+ 		set_current_state(TASK_INTERRUPTIBLE);
+ 		if (anydata_buf_data_avail(priv->buf) == 0
+ 		|| timeout == 0 || signal_pending(current)
+ 		|| !usb_get_intfdata(port->serial->interface))	/* disconnect */
+ 			break;
+ 		spin_unlock_irqrestore(&priv->lock, flags);
+ 		timeout = schedule_timeout(timeout);
+ 		spin_lock_irqsave(&priv->lock, flags);
+ 	}
+ 	set_current_state(TASK_RUNNING);
+ 	remove_wait_queue(&port->tty->write_wait, &wait);
+ 	/* clear out any remaining data in the buffer */
+ 	anydata_buf_clear(priv->buf);
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ 	/* wait for characters to drain from the device */
+ 	/* (this is long enough for the entire 256 byte */
+ 	/* anydata hardware buffer to drain with no flow */
+ 	/* control for data rates of 1200 bps or more, */
+ 	/* for lower rates we should really know how much */
+ 	/* data is in the buffer to compute a delay */
+ 	/* that is not unnecessarily long) */
+ 	bps = tty_get_baud_rate(port->tty);
+ 	if (bps > 1200)
+ 		timeout = max((HZ*2560)/bps,HZ/10);
+ 	else
+ 		timeout = 2*HZ;
+ 	schedule_timeout_interruptible(timeout);
+ 
+ 	/* shutdown our urbs */
+ 	dbg("%s - shutting down urbs", __FUNCTION__);
+ 	usb_kill_urb(port->write_urb);
+ 	usb_kill_urb(port->read_urb);
+ 	usb_kill_urb(port->interrupt_in_urb);
+ 
+ 	if (port->tty) {
+ 		c_cflag = port->tty->termios->c_cflag;
+ 		if (c_cflag & HUPCL) {
+ 			/* drop DTR and RTS */
+ 			spin_lock_irqsave(&priv->lock, flags);
+ 			priv->line_control = 0;
+ 			spin_unlock_irqrestore (&priv->lock, flags);
+ 			set_control_lines (port->serial->dev, 0);
+ 		}
+ 	}
+ }
+ 
+ 
+ 
+ static int wait_modem_info(struct usb_serial_port *port, unsigned int arg)
+ {
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned long flags;
+ 	unsigned int prevstatus;
+ 	unsigned int status;
+ 	unsigned int changed;
+ 
+ 	spin_lock_irqsave (&priv->lock, flags);
+ 	prevstatus = priv->line_status;
+ 	spin_unlock_irqrestore (&priv->lock, flags);
+ 
+ 	while (1) {
+ 		interruptible_sleep_on(&priv->delta_msr_wait);
+ 		/* see if a signal did it */
+ 		if (signal_pending(current))
+ 			return -ERESTARTSYS;
+ 		
+ 		spin_lock_irqsave (&priv->lock, flags);
+ 		status = priv->line_status;
+ 		spin_unlock_irqrestore (&priv->lock, flags);
+ 		
+ 		changed=prevstatus^status;
+ 		
+ 		if (((arg & TIOCM_RNG) && (changed & UART_RING)) ||
+ 		    ((arg & TIOCM_DSR) && (changed & UART_DSR)) ||
+ 		    ((arg & TIOCM_CD)  && (changed & UART_DCD)) ||
+ 		    ((arg & TIOCM_CTS) && (changed & UART_CTS)) ) {
+ 			return 0;
+ 		}
+ 		prevstatus = status;
+ 	}
+ 	/* NOTREACHED */
+ 	return 0;
+ }
+ 
+ static int anydata_ioctl (struct usb_serial_port *port, struct file *file, unsigned int cmd, unsigned long arg)
+ {
+ 	dbg("%s (%d) cmd = 0x%04x", __FUNCTION__, port->number, cmd);
+ 
+ 	switch (cmd) {
+ 		case TIOCMIWAIT:
+ 			dbg("%s (%d) TIOCMIWAIT", __FUNCTION__,  port->number);
+ 			return wait_modem_info(port, arg);
+ 
+ 		default:
+ 			dbg("%s not supported = 0x%04x", __FUNCTION__, cmd);
+ 			break;
+ 	}
+ 
+ 	return -ENOIOCTLCMD;
+ }
+ 
+ static void anydata_break_ctl (struct usb_serial_port *port, int break_state)
+ {
+ 	struct usb_serial *serial = port->serial;
+ 	u16 state;
+ 	int result;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	if (break_state == 0)
+ 		state = BREAK_OFF;
+ 	else
+ 		state = BREAK_ON;
+ 	dbg("%s - turning break %s", __FUNCTION__, state==BREAK_OFF ? "off" : "on");
+ 
+ 	result = usb_control_msg (serial->dev, usb_sndctrlpipe (serial->dev, 0),
+ 				  BREAK_REQUEST, BREAK_REQUEST_TYPE, state, 
+ 				  0, NULL, 0, 100);
+ 	if (result)
+ 		dbg("%s - error sending break = %d", __FUNCTION__, result);
+ }
+ 
+ 
+ static void anydata_shutdown (struct usb_serial *serial)
+ {
+ 	int i;
+ 	struct anydata_private *priv;
+ 
+ 	dbg("%s", __FUNCTION__);
+ 
+ 	for (i = 0; i < serial->num_ports; ++i) {
+ 		priv = usb_get_serial_port_data(serial->port[i]);
+ 		if (priv) {
+ 			anydata_buf_free(priv->buf);
+ 			kfree(priv);
+ 			usb_set_serial_port_data(serial->port[i], NULL);
+ 		}
+ 	}		
+ }
+ 
+ static void anydata_update_line_status(struct usb_serial_port *port,
+ 				      unsigned char *data,
+ 				      unsigned int actual_length)
+ {
+ 
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	unsigned long flags;
+ 	u8 status_idx = UART_STATE;
+ 	u8 length = UART_STATE + 1;
+ 
  
+ 
+ 	if (actual_length < length)
+ 		goto exit;
+ 
+         /* Save off the uart status for others to look at */
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	priv->line_status = data[status_idx];
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 
+ exit:
+ 	return;
+ }
+ 
+ static void anydata_read_int_callback (struct urb *urb, struct pt_regs *regs)
+ {
+ 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+ 	unsigned char *data = urb->transfer_buffer;
+ 	unsigned int actual_length = urb->actual_length;
+ 	int status;
+ 
+ 	dbg("%s (%d)", __FUNCTION__, port->number);
+ 
+ 	switch (urb->status) {
+ 	case 0:
+ 		/* success */
+ 		break;
+ 	case -ECONNRESET:
+ 	case -ENOENT:
+ 	case -ESHUTDOWN:
+ 		/* this urb is terminated, clean up */
+ 		dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
+ 		return;
+ 	default:
+ 		dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
+ 		goto exit;
+ 	}
+ 
+ 	usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
+ 	anydata_update_line_status(port, data, actual_length);
+ 
+ exit:
+ 	status = usb_submit_urb (urb, GFP_ATOMIC);
+ 	if (status)
+ 		dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with result %d\n",
+ 			__FUNCTION__, status);
+ }
+ 
+ 
+ static void anydata_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
+ {
+ 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	struct tty_struct *tty;
+ 	unsigned char *data = urb->transfer_buffer;
+ 	unsigned long flags;
+ 	int i;
+ 	int result;
+ 	u8 status;
+ 	char tty_flag;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	if (urb->status) {
+ 		dbg("%s - urb->status = %d", __FUNCTION__, urb->status);
+ 		if (!port->open_count) {
+ 			dbg("%s - port is closed, exiting.", __FUNCTION__);
+ 			return;
+ 		}
+ 		if (urb->status == -EPROTO) {
+ 			/* ANYDATA mysteriously fails with -EPROTO reschedule the read */
+ 			dbg("%s - caught -EPROTO, resubmitting the urb", __FUNCTION__);
+ 			urb->status = 0;
+ 			urb->dev = port->serial->dev;
+ 			result = usb_submit_urb(urb, GFP_ATOMIC);
+ 			if (result)
+ 				dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
+ 			return;
+ 		}
+ 		dbg("%s - unable to handle the error, exiting.", __FUNCTION__);
+ 		return;
+ 	}
+ 
+ 	usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data);
+ 
+ 	/* get tty_flag from status */
+ 	tty_flag = TTY_NORMAL;
+ 
+ 	spin_lock_irqsave(&priv->lock, flags);
+ 	status = priv->line_status;
+ 	priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
+ 	spin_unlock_irqrestore(&priv->lock, flags);
+ 	wake_up_interruptible (&priv->delta_msr_wait);
+ 
+ 	/* break takes precedence over parity, */
+ 	/* which takes precedence over framing errors */
+ 	if (status & UART_BREAK_ERROR )
+ 		tty_flag = TTY_BREAK;
+ 	else if (status & UART_PARITY_ERROR)
+ 		tty_flag = TTY_PARITY;
+ 	else if (status & UART_FRAME_ERROR)
+ 		tty_flag = TTY_FRAME;
+ 	dbg("%s - tty_flag = %d", __FUNCTION__, tty_flag);
+ 
+ 	tty = port->tty;
+ 	if (tty && urb->actual_length) {
+ 			/* overrun is special, not associated with a char */
+ 		if (status & UART_OVERRUN_ERROR)
+ 			tty_insert_flip_char(tty, 0, TTY_OVERRUN);
+ 		for (i = 0; i < urb->actual_length; ++i)
+ 			tty_insert_flip_char (tty, data[i], tty_flag);
+ 		tty_flip_buffer_push (tty);
+ 	}
+ 
+ 	/* Schedule the next read _if_ we are still open */
+ 	if (port->open_count) {
+ 		urb->dev = port->serial->dev;
+ 		result = usb_submit_urb(urb, GFP_ATOMIC);
+ 		if (result)
+ 			dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
+ 	}
+ 
+ 	return;
+ }
+ 
+ 
+ 
+ static void anydata_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
+ {
+ 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+ 	struct anydata_private *priv = usb_get_serial_port_data(port);
+ 	int result;
+ 
+ 	dbg("%s - port %d", __FUNCTION__, port->number);
+ 
+ 	switch (urb->status) {
+ 	case 0:
+ 		/* success */
+ 		break;
+ 	case -ECONNRESET:
+ 	case -ENOENT:
+ 	case -ESHUTDOWN:
+ 		/* this urb is terminated, clean up */
+ 		dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
+ 		priv->write_urb_in_use = 0;
+ 		return;
+ 	default:
+ 		/* error in the urb, so we have to resubmit it */
+ 		dbg("%s - Overflow in write", __FUNCTION__);
+ 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
+ 		port->write_urb->transfer_buffer_length = 1;
+ 		port->write_urb->dev = port->serial->dev;
+ 		result = usb_submit_urb (port->write_urb, GFP_ATOMIC);
+ 		if (result)
+ 			dev_err(&urb->dev->dev, "%s - failed resubmitting write urb, error %d\n", __FUNCTION__, result);
+ 		else
+ 			return;
+ 	}
+ 
+ 	priv->write_urb_in_use = 0;
+ 
+ 	/* send any buffered data */
+ 	anydata_send(port);
+ }
+ 
+ 
+ /*
+  * anydata_buf_alloc
+  *
+  * Allocate a circular buffer and all associated memory.
+  */
+ 
+ static struct anydata_buf *anydata_buf_alloc(unsigned int size)
+ {
+ 
+ 	struct anydata_buf *pb;
+ 
+ 
+ 	if (size == 0)
+ 		return NULL;
+ 
+ 	pb = (struct anydata_buf *)kmalloc(sizeof(struct anydata_buf), GFP_KERNEL);
+ 	if (pb == NULL)
+ 		return NULL;
+ 
+ 	pb->buf_buf = kmalloc(size, GFP_KERNEL);
+ 	if (pb->buf_buf == NULL) {
+ 		kfree(pb);
+ 		return NULL;
+ 	}
+ 
+ 	pb->buf_size = size;
+ 	pb->buf_get = pb->buf_put = pb->buf_buf;
+ 
+ 	return pb;
+ 
+ }
+ 
+ 
+ /*
+  * anydata_buf_free
+  *
+  * Free the buffer and all associated memory.
+  */
+ 
+ static void anydata_buf_free(struct anydata_buf *pb)
+ {
+ 	if (pb) {
+ 		kfree(pb->buf_buf);
+ 		kfree(pb);
+ 	}
+ }
+ 
+ 
+ /*
+  * anydata_buf_clear
+  *
+  * Clear out all data in the circular buffer.
+  */
+ 
+ static void anydata_buf_clear(struct anydata_buf *pb)
+ {
+ 	if (pb != NULL)
+ 		pb->buf_get = pb->buf_put;
+ 		/* equivalent to a get of all data available */
+ }
+ 
+ 
+ /*
+  * anydata_buf_data_avail
+  *
+  * Return the number of bytes of data available in the circular
+  * buffer.
+  */
+ 
+ static unsigned int anydata_buf_data_avail(struct anydata_buf *pb)
+ {
+ 	if (pb != NULL)
+ 		return ((pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size);
+ 	else
+ 		return 0;
+ }
+ 
+ 
+ /*
+  * anydata_buf_space_avail
+  *
+  * Return the number of bytes of space available in the circular
+  * buffer.
+  */
+ 
+ static unsigned int anydata_buf_space_avail(struct anydata_buf *pb)
+ {
+ 	if (pb != NULL)
+ 		return ((pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size);
+ 	else
+ 		return 0;
+ }
+ 
+ 
+ /*
+  * anydata_buf_put
+  *
+  * Copy data data from a user buffer and put it into the circular buffer.
+  * Restrict to the amount of space available.
+  *
+  * Return the number of bytes copied.
+  */
+ 
+ static unsigned int anydata_buf_put(struct anydata_buf *pb, const char *buf,
+ 	unsigned int count)
+ {
+ 
+ 	unsigned int len;
+ 
+ 
+ 	if (pb == NULL)
+ 		return 0;
+ 
+ 	len  = anydata_buf_space_avail(pb);
+ 	if (count > len)
+ 		count = len;
+ 
+ 	if (count == 0)
+ 		return 0;
+ 
+ 	len = pb->buf_buf + pb->buf_size - pb->buf_put;
+ 	if (count > len) {
+ 		memcpy(pb->buf_put, buf, len);
+ 		memcpy(pb->buf_buf, buf+len, count - len);
+ 		pb->buf_put = pb->buf_buf + count - len;
+ 	} else {
+ 		memcpy(pb->buf_put, buf, count);
+ 		if (count < len)
+ 			pb->buf_put += count;
+ 		else /* count == len */
+ 			pb->buf_put = pb->buf_buf;
+ 	}
+ 
+ 	return count;
+ 
+ }
+ 
+ 
+ /*
+  * anydata_buf_get
+  *
+  * Get data from the circular buffer and copy to the given buffer.
+  * Restrict to the amount of data available.
+  *
+  * Return the number of bytes copied.
+  */
+ 
+ static unsigned int anydata_buf_get(struct anydata_buf *pb, char *buf,
+ 	unsigned int count)
+ {
+ 
+ 	unsigned int len;
+ 
+ 
+ 	if (pb == NULL)
+ 		return 0;
+ 
+ 	len = anydata_buf_data_avail(pb);
+ 	if (count > len)
+ 		count = len;
+ 
+ 	if (count == 0)
+ 		return 0;
+ 
+ 	len = pb->buf_buf + pb->buf_size - pb->buf_get;
+ 	if (count > len) {
+ 		memcpy(buf, pb->buf_get, len);
+ 		memcpy(buf+len, pb->buf_buf, count - len);
+ 		pb->buf_get = pb->buf_buf + count - len;
+ 	} else {
+ 		memcpy(buf, pb->buf_get, count);
+ 		if (count < len)
+ 			pb->buf_get += count;
+ 		else /* count == len */
+ 			pb->buf_get = pb->buf_buf;
+ 	}
+ 
+ 	return count;
+ 
+ }
+ 
+ static int __init anydata_init (void)
+ {
+ 	int retval;
  	retval = usb_serial_register(&anydata_device);
  	if (retval)
! 		goto failed_usb_serial_register;
  	retval = usb_register(&anydata_driver);
  	if (retval)
! 		goto failed_usb_register;
! 	info(DRIVER_DESC);
! 	return 0;
! failed_usb_register:
! 	usb_serial_deregister(&anydata_device);
! failed_usb_serial_register:
  	return retval;
  }
  
! 
! static void __exit anydata_exit (void)
  {
! 	usb_deregister (&anydata_driver);
! 	usb_serial_deregister (&anydata_device);
  }
  
+ 
  module_init(anydata_init);
  module_exit(anydata_exit);
+ 
+ MODULE_DESCRIPTION(DRIVER_DESC);
  MODULE_LICENSE("GPL");
  
  module_param(debug, bool, S_IRUGO | S_IWUSR);
  MODULE_PARM_DESC(debug, "Debug enabled or not");
! 



vyse uvedeny text oznacte (cely) a vlozte jej do textoveho editoru
ulote jej jako anydata.diff tento vznikli soubor skopirujte do adresare 
/cesta/k/vasim/zdrojum/linuxu/drivers/usb/serial/
 např" cp anydata.diff /usr/src/linux-2.6.15/drivers/usb/serial/" 
potom prejde do slozky kam jste skopirovaly anydata.diff 
napr" cd /usr/src/linux-2.6.15/drivers/usb/serial/"
a zadejte prikaz:  patch -p0 < anydata.diff
poznamka:(navod plati pro jadra od rady 2.6.15)
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
kozzi avatar 4.3.2006 22:37 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
jo a jeste jsem zapomnel po aplikovani patche musite ve slozce 
kam jste nahravali patch vytvorit soubor anydata.h s obsahem

/*
 * Prolific ANYDATA USB to serial adaptor driver header file
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 * 
 */
#define ANYDATA_VENDOR_ID	0x16d5
#define ANYDATA_PRODUCT_ID	0x6501
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
5.3.2006 11:42 sche
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Patch jsem dnes vyzkousel na SuSE 10.1 beta6 (kernel 2.6.16-rc5-git2-2) a funguje skvele. Dost jsem se s tim sam natrapil a proto Vam alespon zasilam jako drobnou satisfakci za tech 48 hodin stravenych nad problemem VELKE DIKY za vyreseni a za zverejneni patche.
18.4.2006 09:13 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Ahoj lidi, tak ja nevim, mam Debian 3.0, kernel 2.6.16.5 a nejede me vyse uvedeny postup patchovani.Soubor DIFF jsem vytvoril v "mc" editoru.Pri aplikaci patche me to napise chyba na radku 4 a 229 - Na radek 4 pokusne pridam ctvrtou * a uz to pise chyba na radku 229 a 337, pridam opet ctvrtou * na radek 229 a slus, napise me to neco zeje tam jen GARBAGE a konec.Predpokladam, ze staci udelat jen ten diff a aplikovat ho na originalni anydata.c .Jinak me modem chodi, respektive obcas ho musim nejen vypnout a zapnout, ale odpojit od USB a pokud mozno dat do jineho USB portu a cekat kdy se chytne prikaz pppd call cdma ... Taky nevim jak PRESNE zaridit, aby se me pripojeni spustilo automaticky po startu pred DHCP, ktery tam chci taky dat.Chtelo by to mit nekde ke stazeni uz vyslednej upravenej anydata.c :-) Uplne nejlepsi by bylo mit nakej celkovej navod jak udelat DHCP server s timto modemem, ale nic takoveho asi neexistuje a ja jako absolutni zacatecnik to dohromady nedam :-(. Ztravil jsem s tim uz takovyho casu, ze jsem byl kolikrat tak sprostej, ze jsem vyslovil "Zlaty Wokna !" ach jo :-(
18.4.2006 09:16 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
jeste k tomu automatickemu spusteni pripojeni po startu ... zkousel sem pokusne DHCP a to se me spustilo, nahradil /pridal sem nekam raden pon call cdma a spustilo se me i automaticky pripojeni na net, ale pozor, tim to skoncilo, dal uz nic! Pod Xkama to dela to same - musim spustit extra terminal ci co, v nem to pripojeni a pak musim otevrit NOVY terminal ci okno a teprve v nem muzu delat ... :-(
18.4.2006 10:02 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
Ten patch je pro určitou verzi souboru :-) (tj určité verze jádra :-) )

Taky nevím jak jste vytvářel ten soubor v MC ? :-( Jednoduše se to skopíruje a uloží do souboru (ten patch) a nic se v MC nevytváří - kdoví co jsi dělal.

No a když máš jiné jádro na které tvůj patch nepasuje tak je tam i popsáno jak to udělat ručně co vyhledat v zdrojáku a co přepsat a co smazat atd......

Jinak pokud nepopíšeš konkrétní problém co to přesně vypsalo za chybu tak ti nikdo neporadí. Program diff vůbec nepotřebuješ :-( . Pro tebe je užitečný program patch :-) viz: man patch
18.4.2006 11:07 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
no dal sem v programu "mc" zkopirovat jakykoliv nespustitelny soubor na anydata.diff , vymazal pak jeho obsah, oznacil v mozille ten dlouhej text, dal kopirovat a v otevrenem anydata.diff dal vlozit ... ulozil jsem F2kou, to same jsem udelal pro anydata.h a pak spustil prikaz pro patchovani ...Pak me to vypsalo ty chyby, doma na to muzu juknout a poslat sem presnej vypis, ale nahore je napsano ze to facha na jadro 2.6.15 a vyssi :o) takze kdyz mam 2.6.16.5 a zitra zkusim 2.6.16.7 , tak mam smulu nebo tam muze v 2.6.16.5 byt novejsi anydata.c a patch tudiz nebude fungovat ??? to je ale divny, protoze nekdo to zkousel na 2.6.16-rc5 ... co treba si vzit jadro 2.6.15 z nej ten vytahnout anydata.c a ten patchnout tim diff. Predpokladam, ze se vytvori novy anaydata.c a tim prepisu originalni i v jadre 2.6.16.7 ci novejsim + pridam/prepisu/upravim anydata.h a bude to fachat?juknu taky na ten man patch, ale jako zacatecnik to asi nezvladnu :-(
18.4.2006 11:21 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
taky v textu je uvedeno : patch -p0 < ... podle manualu by to melo byt patch -p0 <... , nemuze to byt v tom ??? nevim proc do textu nemuzu vlozit nazev diff souboru, tak tam jsou misto nej ... ten manual k patchovani nevypada easy :-(
20.4.2006 22:22 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
ahoj, tak sem vzal 2.6.16.5 , 7 i 9 a sel sem do 2.6.15 jak pises ...

nepouzil sem MC ale Openoffice , ulozil jako txt , soubor ma misto 57k kolem 37k a napise me to :

HUNK #1 failed at 1 HUNK # 2 failed at 137 2out of 2 hunks FAILED saving rejects to file anydata.c.rej

mate nekdo nejake napady ? jsem zacatecnik, mam debian 3.1 r1 32 bit...Opteron, na P200 MMX se to chova stejne

HEEEELP !!!
20.4.2006 22:55 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
budiz, jsem idiot, rozchodil sem Xka a nasel tam v menu Textovy editor , zatim podobna chyba, muzete me nekdo napsat jaky ma mit ten diff soubor velikost ??? davam konfiguraci jadra od nuly, treba sem podelal naky soubory, uvidime ... chvili to potrva, preci jen Opteron@2800 MHz ...
20.4.2006 23:09 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
takze vysledek stejny ... pise to HUNK #1 FAILED at 1. 1 out of 2 hunks FAILED .. saving rejects to file anydata.c.rej 29830 Bajtu ma diff 22824 Bajtu ma novy anydata.c ... tak ja uz nevim, jedine hledat cestu pres wokna :-(
21.4.2006 22:13 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
na patch jsem zapomnel ... proste nejde, nevadi, zkusil jsem ten navod vyse , mam dojem ze to nezahlasi chyby, ale dam "pon cdma" nebo "pppd call cdma" a napise me to script failed ... zmenim obsah anydata.c, tedy smazu ten radek anydata open a ted diky tomu pisu prispevek, pod Xkama to jde, bez X se spusti skript a slus, nic uz nejde nikam psat, pod Xkama musim mit otevreny okno s aktivnim pripojenim , pak mohu otevrit jine ve kterem makam na netu ... tak ja uz nevim, testovano na 2.6.15 = nejde , 2.6.16.9 = nejde ... jinak sem to upravoval v tom editoru co pouzival autor, verze pro Wokna, Linux u me budi jednoznacne neduveru ... proste to beru tak ZE TO NEJDE a jdu hledat resi pod WOKNAMA ... Linux ???? No thanks ...
22.4.2006 08:59 Ondřej Čečák | skóre: 33
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
"proste to beru tak ZE TO NEJDE a jdu hledat resi pod WOKNAMA ... Linux ???? No thanks ..."

Tak to berete celkem naivne. Jenom dodam, ze mi to funguje po opatchovani k plne spokojenosti (za coz musi autorovi podekovat), pred aplikaci opravy bylo odpojovani a pripojovani modemu dost otravne.
-- "Ja vim, on vi, ty pico!"
22.4.2006 11:55 xxx
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
No ja musim dodat ze me to funguje taktez k plne spokojenosti. A jak pisete vyse "nepouzil sem MC ale Openoffice " pouzivat Openoffice k editaci zdrojaku pro jadro myslim nebude to prave orechove...
25.4.2006 16:00 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
mohu se vas zeptat zda jste tedy (a v jakem programu konkretne )editoval ten patch soubor? Mate debian jako ja nebo jinou verzi linuxu ? nemuze to byt tim ? nebo jste zkusil editaci puvodnich ovladacu jak pise autor? nepochopil jsem z toho na 100%, zda ma byt anydata.c tak jak je a meni se pouze ty pl2303.c + pl2303.h nebo tyto dva pl2303 soubory jsou beze zmeny a jejich obsah se upravi a ulozi jako anydata.c a anydata.h ? Radeji jsem zkusil postupne na cistych jadrech vsechny moznosti, vcetne upravy pl2303 a ponechani anydata.c s vymazanim radku "anydata open" ale NIC - chyby co jsem jiz vyse popsal.Predpokladam, ze nastavim jadro, dam "make" , tim padem mam anydata.c a pl2303.c a pl2303.h . Pak provedu zmeny a po nich dam "make modules" - kompilace anydata.c a pl2303.c nenahlasi chyby, pak "make modules install" a "make install", upravim boot a MODEM FUNGUJE BEZ VYPINANI s puvodnim skriptem (!!!!?) , dle navodu ktery jsem uspesne pouzil z : http://dastych.sh.cvut.cz/~jtra/stuff/anydata/index.html ??? nedelal jsem samozrejme patch, protoze jsme pouzil tehdy posledni jadro ...)vyse uvedeny patch i soubory jsem editoval v GVim windows verze a ulozil jej jako text tak jak pise autor.Presto jsem se nedostal dal nez k vyse uvedenym chybam a kdyz uz to vypadalo bez chyb (patch se NIKDY nedokoncil uspesne ) tak jsem se nemohl pripojit, hlasilo to script failed, coz pochopitelne s tou verzi s vypinanim jede vpohode. Jeste me zajima jak resite spusteni pripojeni napr "pon cdma" ci ", "pppd call cdma" pri startu systemu tak, aby se to na pripojeni nezastavilo a pokud mozno jak PRESNE nastavit to automaticke spusteni, nejlepe s routovanim a dhcp na "eth0" , tedy co a kam napsat, nasel sem dost castecnych navodu, ale nedostal sem se dal nez jsem + rucni snad i automat spusteni dhcp, kdy se sice I.P pridelily, ale nesel net :-( .Rad se necemu priucim, ale chce to presnej navod krok za krokem, kez by bylo naky video jako je od Ruika s kompilaci jadra, ktera je tak dobre vysvetlena ze i lama jako ja udela kompilaci od nuly zpameti a uspesne vzdy - RUIK je B.O.R.E.C !!!
kozzi avatar 26.4.2006 16:32 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
takze pisete ze mate debin stim by to melo jet sam jej nekdy pouzivam. takze te patch neni 100 procentni nemusi jed se vsemi verzi jader raci pouzite tu upravu tech souboru pl2303.c a ten se musi ulozit jako anydata.c a vytvorte soubor anydata.h s obsahem ktery tu nekde vise popisuji to znamena ze puvodni soubor anydata.c smazte a soubor pl2303.c zustane tak jak byl. potom make gconfig ci make menuconfig ci so pouzivate na upravu konfigurace kernelu tam zapnete polozku v usb zarizenich anydata. na a potom make a potom make modules_install a make install uprava lilo ci grub a puvodni skripty by meli fungovat mozna radeji skontrolovat jestli se modul nacetl lsmod | grep anydata no a co se tyce pon cdma ci pppd call cdma je to jedno a jelikoz mate debian tak ani nemusite pouzivat to nastaveni z dastych.sh.... ale muzete pouzit program pppconfig na nastaveni
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
25.4.2006 11:05 Radek Stastny
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
tak jsem to rozchodil !!! - Linux ??? No thanks ... mam vpohode dhcp server na kolika PC chci, vsude net a stacilo jen zkusit program Kerio Winroute 6.2 z webu ... sice sem ztravil o vikendu min 10h nastavovanim dle manualu a instalaci na P200 MMX (hell) a nic, vcera 2 hodky, z toho tak pul hodky BEZ MANUALU a vysledek ??? ... instaluju si vecer Debian 64 na Optika a rovnou s DHCP :-) ! Ale co, co je to 12 hodin oproti nekolika mesicum zapasenim s tim ze nakej idiot neotestuje poradne ovladac s modemem a pripojenim / odpojenim se pred tim, nez ho da do jadra ... :-)Samozrejme verim tomu, ze vyse uvedeny postup nekomu muze fungovat ci jiz funguje a je super ze se o to autor podelil s ostatnimi ... napada me ze se treba jeste musi upravit script ... mam dojem ze jsem pouzival navod na pripojeni na www.dastych.cz nebo nak tak ...
6.3.2006 10:15 eugen4 | skóre: 6
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
též se připojuju s díky, strávil jsem na tom taky spoustu času ale bez výsledku, hned to jdu vyzkoušet.
kozzi avatar 21.5.2006 10:41 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
vsiml jsem si ze nekdo vytvoril novy opravny patch ktery by mel opravit ovladac v jadre. tak pokud to chce nekdo zkusit tak http://www.mail-archive.com/linux-usb-devel@lists.sourceforge.net/msg43300.html
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
kozzi avatar 12.8.2006 15:43 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Anydata problem vyresen (uz nemusim vypinat modem pro kazde pripoj
konecna verze ovladace pro tento modem je zalozena na option modulu. ovladac je jiz v jadre ale az od verze 2.6.18-rc4
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.