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

📄 protocol.java

📁 用于移动设备上的java虚拟机源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)Protocol.java	1.34 02/10/04 @(#) * * Copyright (c) 2000-2002 Sun Microsystems, Inc.  All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms. */package com.sun.midp.io.j2me.comm;import java.io.*;import javax.microedition.io.*;import com.sun.cldc.io.GeneralBase;import com.sun.midp.main.Configuration;import com.sun.midp.io.*;import com.sun.midp.security.*;/** * This implements the comm port protocol. * * @author  Nik Shaylor * @author  Stephen Flores * @author  Efren Serra * @version 3.1 5/11/2001 */public class Protocol extends BufferedConnectionAdapter     implements CommConnection {    /** Native handle to the serial port. */    private int handle = -1;    /** Size of the read ahead buffer, default is 256. */    protected static int bufferSize = 256;    /**     * Class initializer     */    static {        /* See if a read ahead / write behind buffer size has been specified */        String size = Configuration.getProperty(                          "com.sun.midp.io.j2me.comm.buffersize");        if (size != null) {            try {                bufferSize = Integer.parseInt(size);            } catch (NumberFormatException ex) {}        }    }    // From SerialMgr.h of the Palm api    /** Bit flag: 1 stop bits. */    private final static int serSettingsFlagStopBits1     = 0x00000000;    /** Bit flag: 2 stop bits. */    private final static int serSettingsFlagStopBits2     = 0x00000001;    /** Bit flag: parity on. */    private final static int serSettingsFlagParityOddM    = 0x00000002;    /** Bit flag: parity even. */    private final static int serSettingsFlagParityEvenM   = 0x00000004;    /** Bit flag: RTS rcv flow control. */    private final static int serSettingsFlagRTSAutoM      = 0x00000010;    /** Bit flag: CTS xmit flow control. */    private final static int serSettingsFlagCTSAutoM      = 0x00000020;    /** Bit flag: 7 bits/char. */    private final static int serSettingsFlagBitsPerChar7  = 0x00000080;    /** Bit flag: 8 bits/char. */    private final static int serSettingsFlagBitsPerChar8  = 0x000000C0;    /** Bit per char. */    private int bbc      = serSettingsFlagBitsPerChar8;    /** Stop bits. */    private int stop     = serSettingsFlagStopBits1;    /** Parity. */    private int parity   = 0;    /** RTS. */    private int rts      = serSettingsFlagRTSAutoM;    /** CTS. */    private int cts      = serSettingsFlagCTSAutoM;    /** Baud rate. */    private int baud     = 19200;    /** Blocking. */    private boolean blocking = true;    /** Creates a buffered comm port connection. */    public Protocol() {        // use the default buffer size        super(bufferSize);        // Protocol to use when asking permissions.        protocol = "comm";        requiredPermission = Permissions.COMM;    }    /**     * Parse the next parameter out of a string.     *     * @param parm a string containing one or more parameters     * @param start where in the string to start parsing     * @param end where in the string to stop parsing     *     * @exception IllegalArgumentException if the next parameter is wrong     */    private void parseParameter(String parm, int start, int end) {        parm = parm.substring(start, end);        if (parm.equals("baudrate=110")) {            baud = 110;        } else if (parm.equals("baudrate=300")) {            baud = 300;        } else if (parm.equals("baudrate=600")) {            baud = 600;        } else if (parm.equals("baudrate=1200")) {            baud = 1200;        } else if (parm.equals("baudrate=2400")) {            baud = 2400;        } else if (parm.equals("baudrate=4800")) {            baud = 4800;        } else if (parm.equals("baudrate=9600")) {            baud = 9600;        } else if (parm.equals("baudrate=14400")) {            baud = 14400;        } else if (parm.equals("baudrate=19200")) {            baud = 19200;        } else if (parm.equals("baudrate=38400")) {            baud = 38400;        } else if (parm.equals("baudrate=56000")) {            baud = 56000;        } else if (parm.equals("baudrate=57600")) {            baud = 57600;        } else if (parm.equals("baudrate=115200")) {            baud = 115200;        } else if (parm.equals("baudrate=128000")) {            baud = 128000;        } else if (parm.equals("baudrate=256000")) {            baud = 256000;        } else if (parm.equals("bitsperchar=7")) {            bbc   = serSettingsFlagBitsPerChar7;        } else if (parm.equals("bitsperchar=8")) {            bbc   = serSettingsFlagBitsPerChar8;        } else if (parm.equals("stopbits=1")) {            stop   = serSettingsFlagStopBits1;        } else if (parm.equals("stopbits=2")) {            stop   = serSettingsFlagStopBits2;        } else if (parm.equals("parity=none")) {            parity = 0;        } else if (parm.equals("parity=odd")) {            parity = serSettingsFlagParityOddM;        } else if (parm.equals("parity=even")) {            parity = serSettingsFlagParityEvenM;        } else if (parm.equals("autorts=off")) {            rts = 0;        } else if (parm.equals("autorts=on")) {            rts = serSettingsFlagRTSAutoM;        } else if (parm.equals("autocts=off")) {            cts = 0;        } else if (parm.equals("autocts=on")) {            cts = serSettingsFlagCTSAutoM;        } else if (parm.equals("blocking=off")) {            blocking = false;        } else if (parm.equals("blocking=on")) {            blocking = true;        } else {            throw new IllegalArgumentException("Bad parameter");        }    }    /**     * Open a serial port connection.     *      * Note: DTR line is always on. <br>     * Hint: On Solaris opening by port number or /dev/term/* will block     *       until the Data Set Ready line is On. To work around this open     *       by device name using /dev/cua/* as root.     *     * @param name A URI with the type and parameters for the connection.     * <pre>     * The scheme must be: comm     *     * The first parameter must be a port ID: A device name or     * a logical port number from 0 to 9.     *     * Any additional parameters must be separated by a ";" and     * spaces are not allowed.     *     * The optional parameters are:     *     * baudrate:    The speed of the port, defaults to 19200.     *              bitsperchar: The number bits that character is. 7 or 8.     *              Defaults to 8.     * stopbits:    The number of stop bits per char. 1 or 2.     *              Defaults to 1.     * parity:      The parity can be "odd", "even", or "none".     *              Defaults to "none".     * blocking:    If "on" wait for a full buffer when reading.     *              Defaults to "on".     * autocts:     If "on", wait for the CTS line to be on     *              before writing. Defaults to "on".     *              autorts:     If "on", turn on the RTS line when the     *              input buffer is not full. If "off",     *              the RTS line is always on.     *              Defaults to "on".     * </pre>     * @param mode       A flag that is <code>true</code> if the caller expects     *                   to write to the connection. This is ignored     *                   in all connections that are read-write.     * @param timeouts   A flag to indicate that the called wants     *                   timeout exceptions. This is ignored.     *     * @exception  IOException  if an I/O error occurs, or     *             IllegalArgumentException     *             if the name string is has an error.     */    public void connect(String name, int mode, boolean timeouts)            throws IOException {        int portNumber = 0;        String deviceName = null;        int start = 0;        int pos = 0;        verifyPermissionCheck();        if (name.length() == 0) {             throw new IllegalArgumentException("Missing port ID");        }        if (Character.isDigit(name.charAt(0))) {            portNumber = Integer.parseInt(name.substring(0, 1));            pos++;        } else {            pos = name.indexOf(";");            if (pos < 0) {                deviceName = name;                pos = name.length();            } else {                deviceName = name.substring(0, pos);            }        }        while (name.length() > pos) {            if (name.charAt(pos) != ';') {                throw new IllegalArgumentException(                    "missing parameter delimiter");            }            pos++;            start = pos;            while (true) {                if (pos == name.length()) {                    parseParameter(name, start, pos);                    break;                }                if (name.charAt(pos) == ';') {                    parseParameter(name, start, pos);                    break;                }                pos++;            }        }        // blocking is handled at the Java layer so other Java threads can run        if (deviceName != null) {            handle = native_openByName(deviceName, baud,                        bbc|stop|parity|rts|cts);        } else {            handle = native_openByNumber(portNumber, baud,                        bbc|stop|parity|rts|cts);        }        registerCleanup();    }    /**      * Gets the baudrate for the serial port connection.     * @return the baudrate of the connection     * @see #setBaudRate     */

⌨️ 快捷键说明

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