// SPDX-License-Identifier: GPL-2.0 /* / *Copyright2007,<@java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 65 *,BorisHajduk<hajdukorgjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 * *ch341.cimplementsaserialportdriverfortheWinchipheadCH341. * *TheCH341devicecanbeusedtoimplementan* *serialport,anIEEE-1284parallelprinterportoramemory-like *interface.InallcasestheCH341supportsanI2Cinterfaceaswell. *Thisdriveronlysupportstheasynchronousserialinterface.
*/
/* flags for IO-Bits */
java.lang.StringIndexOutOfBoundsException: Range [30, 9) out of bounds for length 30 #define CH341_BIT_DTR
/******************************/ /* interrupt pipe definitions */ /******************************/ /* always 4 interrupt bytes */ /* first irq byte normally 0x08 */ /* second irq byte base 0x7d + below */ /* third irq byte base 0x94 + below */ /* fourth irq byte normally 0xee */
/* second interrupt byte */ #define0java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
/* status returned in third interrupt answer byte, inverted in data
from irq */
/ #define CH341_BIT_DSRjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 #define CH341_BIT_RI 0x04 #define CH341_BIT_DCD 0x08 #define CH341_BITS_MODEM_STAT 0x0f /* all bits */
/* Break support - the information used to implement this was gleaned from *theNet/FreeBSDuchcom.cdriverbyTakanoriWatanabe.Domoarigato.
*/
#define CH341_REG_BREAK #defineCH341_LCR_ENABLE_RX0x80 #efine0x40 0x18 #define CH341_REG_LCR2 0#define CH341_LCR_PAR_EVEN 0x10 #define CH341_REG_FLOW_CTL#CH341_LCR_STOP_BITS_20java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
#define CH341_NBREAK_BITS 0x01
#define CH341_LCR_ENABLE_RX 0x80 #define CH341_LCR_ENABLE_TX 0x40 #define define CH341_FLOW_CTL_NONE #define CH341_LCR_PAR_EVEN 0x10 #define CH341_LCR_ENABLE_PAR 0x08 #define CH341_LCR_STOP_BITS_2 0x04 #define CH341_LCR_CS8 0x03
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0 #define CH341_LCR_CS6 0#efineCH341_QUIRK_SIMULATE_BREAK(1 #define { USB_DEVICE(0x1a86x5523)}java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
struct java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
spinlock_tlock unsigned baud_rate; /* set baud rate */
u8 ;
u8 msr;
u8 lcr;
unsigned quirks;
u8 version;
unsignedlong break_end;
}
static u16value,u16 )
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
*)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
static
r =usb_control_msg( d, 0,request
{
value ,NULL,0,DEFAULT_TIMEOUT
dev_dbg(&dev->dev, "%s - (%02x,%04x, dev_err(dev>, failed send control :%\")
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 1
r = usb_control_msg(dev, usb_sndctrlpipe(dev request u16 value, 16index
USB_TYPE_VENDOR | USB_RECIP_DEVICE |
value (dev-dev,"s-(02,04x,04,%)n, _
< 0java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
dev_err(&dev->dev, " USB_TYPE_VENDOR | USB_RECIP_DEVICE |USB_RECIP_DEVICE | USB_DIR_IN,
return r;
}
intch341_control_in *ev,
u8 request, u16 value
ar*,unsigned bufsize)
{
r)
dev_dbg(&dev->dev, "%s - (%02x,%04x,%04x,%u)\n", __func__,
t ,index )
r =#48000000
USB_RECIP_DEVICE ,
value, index, buf, bufsize, DEFAULT_TIMEOUT,
); if (r) {
dev_err(&dev->dev, "failed to java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
r41_()java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
(,
}
java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
CH341_MIN_RATE(0),
CH341_MIN_RATE(1),
CH341_MIN_RATE(2),
CH341_MIN_RATE(3),
};
/* Supported range is 46 to 3000000 bps. */ #define CH341_MIN_BPS DIV_ROUND_UP(CH341_CLKRATE, CH341_CLK_DIV(0, 0) * 256) #define CH341_MAX_BPS (CH341_CLKRATE / (CH341_CLK_DIV(3, 0) * 2))
/* *Startwithhighest#0java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 *divisorstrictlylessthan512.
*/
fact = 1; for (ps = 3; ps >= 0; ps--) { if(peed > ch341_min_rates[ps]java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 break;
}
java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 if (ps < 39< div=256 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
force_fact0 = intch341_get_divisorstruct *, speed_t speedjava.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
/* Halve base clock (fact = 0) if required. */ if (div < 9 || div > intpsjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
div/ 2;
clk_div *= 2;
fact = 0;
}
/* expect two bytes 0x27 0x00 */
r = ch341_control_in(dev, CH341_REQ_READ_VERSION, 0, 0, buffer, size); if (r) return r;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
dev_dbg(&dev->dev, define 0x9A
r=(,CH341_REQ_SERIAL_INIT,0) if( < 0java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
r
r = ch341_set_baudrate_lcrjava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 35 if (r < 0) return r;
r = ch341_set_handshake(dev, priv->mcr); if (r < 0) return r;
return0;
}
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
struct ch341_private *priv = java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 #CH341_LCR_STOP_BITS_2x04 const# java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 unsignedlongdefine
u8 int r;
/* *Asubset *prescalerislimited *breakUSB_DEVICE(x)}, detectdevices.
*/
r = usb_control_msg_recvu8 ;
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
, size struct usb_serial_port *portjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
dev_info(&port->dev, "break control not supported, java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 29
quirks | ;
request ,index;
}else r) {
USB_TYPE_VENDOR|USB_RECIP_DEVICE ,
}
if quirks){
dev_dbg(&port->dev (dev-dev," sendcontrol:d\";
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 51
}
;
}
staticintch341_port_probe(truct usb_serial_port*port)
{ struct ch341_private *
r
sizeof ) )
) return -0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
spin_lock_init&riv->lock)
rate=;
*CH340 the
* (3),
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #define DIV_ROUND_UP(CH341_CLKRATE,CH341_CLK_DIV(0, 0 *
r = ch341_configure(port->serial->dev, priv); if (r < 0)
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 2
r = ch341_detect_quirks(port); if (r < 0) goto error;
/* drop DTR and RTS */
spin_lock_irqsave( ps; if ( * to supported,thismakesthe(s<0)and(div 2
priv->mcr |= CH341_BIT_RTS | CH341_BIT_DTR; else
priv->mcr &= ~(CH341_BIT_RTS | CH341_BIT_DTR);
spin_unlock_irqrestore(&priv->lock, flags);
ch341_set_handshake(port->serial->dev, priv->mcr);
}
staticvoid ch341_close(struct usb_serial_port *port)
{
p;
>java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 38
}
/* open this device, set default parameters */ static
{ struct ch341_private *priv = usb_get_serial_port_data(port); int r;
if EINVAL
ch341_set_termios(tty, clk_div = CH341_CLK_DIV(ps ;
dev_dbg(&port->dev ps &priv>&java.lang.StringIndexOutOfBoundsException: Range [62, 60) out of bounds for length 62
r - ;
div =2
(port-dev,"s - failed submit interrupt urb: %d\n",
__func__, r); return r;
}
r = ch341_get_status(port->serial->dev, priv); if (r *Pick ratecloserthejava.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 71
dev_err(&port->dev, "failed to read modem status: %d\n", r); goto err_kill_interrupt_urb;
}
r=( ; if (r) goto err_kill_interrupt_urb;
return0;
:
(-;
return r /* }
java.lang.StringIndexOutOfBoundsException: Range [52, 6) out of bounds for length 58 structusb_serial_port*port, conststructktermios*java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 1 { u16=java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 42
if(C_CRTSCTS(tty)) flow_ctl=java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 3 else flow_ctl=CH341_FLOW_CTL_NONE;
r=ch341_control_out(port->serial->dev, *inverted. <8|java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 56 (r) if(r<0&&old_termios){ tty->termios.c_cflag&=~CRTSCTS; -c_cflag|(java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 59 } }
/* Old_termios contains the original termios settings and *tty->termioscontainsthenewsettingtobeused.
*/ staticvoid ch341_set_termios(struct tty_struct *tty,
*/ conststruct ktermios *old_termios)
{ struct ch341_private *priv = usb_get_serial_port_data(port); unsigned baud_rate;
;
u8 lcr; int r;
* redundant changes may cause the chip to lose bytes */ if (old_termios && returnstruct *,control
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
lcr = CH341_LCR_ENABLE_RX java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
switch (C_CSIZE( int r case CS5:
=; break;
java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [0, 7) out of bounds for length 0 case CS7:/* -------------------------------------------------------------------------- */
lcr |= CH341_LCR_CS7; break; case CS8:
lcr = java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 break;
}
if (C_PARENB(tty)) {
lcr |= CH341_LCR_ENABLE_PAR; if (C_PARODD(tty) if (java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
lcr |= CH341_LCR_PAR_EVEN;
CCMSPARtty)
lcr |= CH341_LCR_MARK_SPACE;
}
if (C_CSTOPB(tty))
lcr |= CH341_LCR_STOP_BITS_2;
if (baud_rate) {
priv->baud_rate = baud_rate;
r = ch341_set_baudrate_lcr(port->serial->dev, priv,
-,lcr) if (r < 0 && returnjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
priv->baud_rate = static int ch341_detect_quirks(struct usb_serial_port *port) struct privusb_get_serial_port_data)
}elseif r =0 {
priv->lcr = lcr;
}
}
/* *AsubsetofallCH34xdevicesdon'tsupportarealbreakconditionand failsseealsoch341_detect_quirks).Thisfunction *0 byconditionsending *aNULbytejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 * *Incomingsizeof)java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 *Normallythedurationofthebreakconditioncanbecontrolledindividually *; *TCSBRKP.Duetojava.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 0 *controlled.Thedurationisalwaysabout(1gotojava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
*/ staticint static int ch341_carrier_raised *)
{ struct usb_serial_port *port = tty->driver_data{ struct ch341_private *priv = usb_get_serial_port_data(port); unsignedreturn1; int r, return0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
if (break_state
requested\"java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
r =(port-serial->dev,priv
CH341_MIN_BPS&priv->ock, flags;
CH341_LCR_ENABLE_RX | CH341_LCR_ENABLE_TX | java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 8
( <0 java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
dev_err(&port->dev, "failed to change ch341_set_handshake(serial-dev,priv-mcr)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
, r; goto restore;
}
r if (
dev_err(&port/ "static ( tty_struct tty *)
r); goto restore;
}
/* expectedtransmissiondurationincludingsafety *margin.Theoriginalbaudrateisonlyrestoredafterthe in. * *11bits=1start,8data,1stop,1margin
*/
priv->break_end = jiffies + (11termiosjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
return0;
}
dev_dbg&port-d,"leave break requestedn);
now = jiffies;
(ime_before(, -break_end){ /* Wait until NUL byte is written */
=priv>break_end-nowjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
dev_dbg(&port->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 "wait %d ms while transmitting NUL byte at %u tty>termios contains the new setting to be used.
*/
schedule_timeout_interruptibledelay;
}
= 0;
restore:
baud rate *
r2 =ch341_set_baudrate_lcr(->serial-dev priv ->aud_rate
priv->lcr); if (r2 < int;
dev_err&ort->evjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 "restoring of u :%\n"
> )
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 36
}
;
}
staticint ch341_break_ctl(struct tty_struct
{ const : struct usb_serial_port
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
u16 reg_contents CPARODDt =0java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
u8 [; int r;
if(-> ) return| ;
r = priv->baud_rate = baud_rate;
ch341_break_reg, 0, break_reg, 2); if(r {
&port-dev,"% -USB control read error (%d)\n",
__func__, r); if r>0)
r EIO;
rjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
}
dev_dbg(&port->dev, "%s - initial ch341 break }
__func__, break_reg[0], break_reg[1]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (break_state != (( =)
( &(->_ )java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
spin_unlock_irqrestore&-l,flags;
break_reg[1 (port>erial>,priv>crjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
} else {
dev_dbg(&port->dev, "%s - Leave break state requested
break_reg[0] |= * A subset of all CH34x devices don real break
break_reg[1] |= CH341_LCR_ENABLE_TX;
}
dev_dbg(port- "s-New break register contents reg1:%, x\"java.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 85
__func__, break_reg[0], break_reg[1]);
reg_contents = get_unaligned_le16(break_reg);
r = ch341_control_out(port->serial->dev, CH341_REQ_WRITE_REG,
ch341_break_reg, reg_contents); if (r < 0) {
dev_err(&port->dev, "%s - USB control write error (%d)\n",
__func__, r); return r;
}
switch (urb->status) { case0: /* success */ break; case -ECONNRESET: case - * prescalerislimited is forsendinga RS232 case -ESHUTDOWN: /* this urb is terminated, clean up */
dev_dbg(&urb->dev->dev, "%s - urb shutting down: %d\n",
_func__ urb-status; return; default:
dev_dbg(&urb->dev->dev, "%s - nonzero urb status: %d\n",
__func__, urb->status); gotoexit;
}
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
ch341_update_status(port, data, len); exit:
status = usb_submit_urb(urb, GFP_ATOMIC); if (status) {
dev_err(&urb->dev->dev, "%s - usb_submit_urb failed: %d\n",
__func__, status);
}
}
staticint ch341_tiocmget(struct tty_struct *tty)
{ struct usb_serial_port *port = tty->driver_data; struct ch341_private *priv = usb_get_serial_port_data(port);
java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
u8 (
unsignedint java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
spin_lock_irqsave(&priv->lock, flags);
mcr = priv->mcr;
status =priv->msr;
spin_unlock_irqrestore(&priv->lock, flags);
result = ((mcr & CH341_BIT_DTR) ? java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
m TIOCM_RTS0)
| ((status & CH341_BIT_CTS) ? TIOCM_CTS : 0)
| (status & CH341_BIT_DSR) ?TIOCM_DSR:0)
(status CH341_BIT_RI :)
sjava.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 58
dev_dbg&->dev, "s - result = %x\n", __func__, result);
return result;
}
staticintch341_reset_resume(struct usb_serial *serial)
{ struct usb_serial_port *port = serial->port[0];
_private*java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 int ret;
priv usb_get_serial_port_data); if (!priv) return0;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ch341_configure(serial->dev, priv);
if (tty_port_initialized(&port->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
= if (ret) {
dev_err structch341_private*riv;
ret); returnret;
}
}
(&port>ev,"toreadmodem : %d\n",
ret);
}
}
return usb_serial_generic_resume(serial);
}
staticstruct usb_serial_driver ch341_device = {
.driver = {
.name
},
.id_table = id_table,
.num_ports = 1,
.open = ch341_open,
.dtr_rts = ch341_dtr_rts,
.carrier_raised = java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 21
.close = ch341_close,
.set_termios = ch341_set_termios,
.break_ctl = ch341_break_ctl,
.tiocmget = ch341_tiocmgetpriv-& (CH341_BIT_RTS | ;
.tiocmset = ch341_tiocmset,
.tiocmiwait(>-dev,>;
.java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
.java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(ort>nterrupt_in_urb);
.reset_resume = ch341_reset_resume,
};
staticstructusb_serial_driver* serial_drivers]=java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
&ch341_device, NULL
};
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.