Совпало так, что я и мой товарищь купили кабелечки USB-to-RS232 на чипе pl2303, я для своего внешнего модема Courier'а, а он для мобильника, что бы GPRS использовать ну и для других целей. Подключили, линукс распознал кабелечки как свои и решили поработать, у меня выход в инет через работу, ну а он через GPRS, все заработало отлично, особо делать ничего не пришлось, но после небольшого промежутка времени выяснилось, покрайней мере у меня первого, так как линии дома просто говно, что драйвер не обрабатывает статус modem hangup, т.е. получалось так, что когда обрывалась связь, модем как положено клал трубу, но pppd даже не реагировал, что модем в дауне и пора делать дисконнект, затем дозваниваться заново:(. Эта ситуация была хренова тем, что постоянно приходилось посматривать на лампочки модема, дабы потом случае чего вручную перезвонить, мне лично это надоело и я сделал небольшой патч, лучше конечно сказать грубый хак:), что бы забыть про это на всегда.... --- l/drivers/usb/serial/pl2303.c.orig 2003-09-16 01:41:35.000000000 +0400 +++ l/drivers/usb/serial/pl2303.c 2003-10-11 03:15:16.000000000 +0400 @@ -64,6 +64,7 @@ +static int modem_hangup = 0; static struct usb_device_id id_table [] = { { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) }, { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, @@ -382,6 +383,7 @@ unsigned char buf[10]; int result; + modem_hangup = 1; if (port_paranoia_check (port, __FUNCTION__)) return -ENODEV; @@ -618,6 +620,26 @@ usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, urb->transfer_buffer); + /* HACK: check for modem hangup status (McMCC) */ + if ( urb->actual_length == 10 && + data[0] == 0xa1 && + data[1] == 0x20 && + data[2] == 0 && + data[3] == 0 && + data[4] == 0 && + data[5] == 0 && + data[6] == 0x02 && + data[7] == 0 && + data[8] == 0x82 && + data[9] == 0 && + modem_hangup == 0 + ) + { + dbg("%s - modem hangup", __FUNCTION__); + tty_hangup(port->tty); /* send hangup */ + usb_submit_urb(urb); + } + if (urb->actual_length > UART_STATE) return; @@ -719,6 +741,7 @@ struct usb_serial_port *port = (struct usb_serial_port *) urb->context; int result; + modem_hangup = 0; if (port_paranoia_check (port, __FUNCTION__)) return; В чем кайф этого переходника, так это цена в 11$, у товарища правда подороже, так как для мобильника, и то что можно не боятся спалить ком порт при отключении или подключении модема, все же USB рулит в этом отношении...
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум USB передачи bulk (2011)
- Форум [ttyUSB0] вызов read() (2010)
- Форум по следам «проблемы с es8336» (2023)
- Форум g++ expects argument (2013)
- Форум не видит com порт (2007)
- Форум Конвертор model_dto to model_alchemy (2023)
- Форум DVD to AVI конвертор (2007)
- Форум patch how-to (2006)
- Форум проблема с apcupsd (2014)
- Форум Serial Port Communication Problem [QT4+/POSIX/В гугле искал] (2010)