Package

Source Code of ShipmentScaleApplet

/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/

import java.applet.Applet;
import java.applet.AppletContext;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.StringTokenizer;
import java.util.TooManyListenersException;

import javax.comm.CommPortIdentifier;
import javax.comm.CommPortOwnershipListener;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;

import netscape.javascript.JSObject;

/**
* ShipmentScaleApplet - Applet for reading weight from a scale and input into the browser
*/
public class ShipmentScaleApplet extends Applet implements SerialPortEventListener, CommPortOwnershipListener {

    private AppletContext ctx = null;

    private CommPortIdentifier portId = null;
    private SerialPort serialPort = null;
    private boolean portOpen = false;

    private InputStream in = null;
    private OutputStream out = null;

    public void init() {
        this.ctx = this.getAppletContext();
        /*
        String port = this.getParameter("serialPort");
        try {
            this.configurePort(port);
        } catch (Exception e) {
            e.printStackTrace();
        }
        */
        try {
            this.sendFakeMessage();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void paint() {

    }

    public void configurePort(String port) throws UnsupportedCommOperationException, IOException {
        try {
            portId = CommPortIdentifier.getPortIdentifier(port);
        } catch (NoSuchPortException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            serialPort = (SerialPort) portId.open("SerialScale", 30000);
        } catch (PortInUseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
        serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_OUT);

        in = serialPort.getInputStream();
        out = serialPort.getOutputStream();

        try {
            serialPort.addEventListener(this);
        } catch (TooManyListenersException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        serialPort.enableReceiveTimeout(30);
        serialPort.notifyOnDataAvailable(true);
        serialPort.notifyOnBreakInterrupt(true);
        portId.addPortOwnershipListener(this);
        this.portOpen = true;
    }

    /* (non-Javadoc)
     * @see javax.comm.SerialPortEventListener#serialEvent(javax.comm.SerialPortEvent)
     */
    public void serialEvent(SerialPortEvent event) {
        // Create a StringBuffer and int to receive input data.
        StringBuffer inputBuffer = new StringBuffer();
        int newData = 0;

        // Determine type of event.
        switch (event.getEventType()) {

            // Read data until -1 is returned. If \r is received substitute
            // \n for correct newline handling.
            case SerialPortEvent.DATA_AVAILABLE:
                while (newData != -1) {
                    try {
                        newData = in.read();
                    if (newData == -1) {
                    break;
                    }
                    if (newData != 32 && newData != 3) {
                        if ('\r' == (char)newData) {
                            inputBuffer.append('|');
                        } else if ('\n' == (char)newData) {
                            inputBuffer.append("");
                        } else {
                            inputBuffer.append((char)newData);
                        }
                        //inputBuffer.append("(").append(newData).append(")");
                    }

                    } catch (IOException ex) {
                        System.err.println(ex);
                        return;
                    }
                }

                // Append received data to messageAreaIn.
                checkResponse(inputBuffer.toString());
                break;

            // If break event append BREAK RECEIVED message.
            case SerialPortEvent.BI:
                break;
        }
    }

    /* (non-Javadoc)
     * @see javax.comm.CommPortOwnershipListener#ownershipChange(int)
     */
    public void ownershipChange(int arg0) {
        // TODO Auto-generated method stub

    }

    // send the code to the scale and requests the weight
    public void sendMessage() throws IOException {
        String message = "W\r";
        char[] msgChars = message.toCharArray();
        for (int i = 0; i < msgChars.length; i++) {
            out.write((int)msgChars[i]);
        }
        out.flush();
        serialPort.sendBreak(1000);
    }

    public void close() throws IOException {
        out.close();
        in.close();
        serialPort.close();
    }

    public static void main(String args[]) throws Exception {
        ShipmentScaleApplet applet = new ShipmentScaleApplet();
        applet.sendMessage();
        applet.close();
    }


    // validates the response from the scale and calls the set method
    private void checkResponse(String response) {
        StringTokenizer token = new StringTokenizer(response, "|");
        if (token != null && token.hasMoreElements()) {
            String weightStr = token.nextToken();
            setWeight(weightStr);
        }
    }

    private void sendFakeMessage() throws IOException {
        String weight = this.getParameter("fakeWeight");
        if (weight == null) {
            weight = "5";
        }
        setWeight(weight);
    }

    // calls the setWeight(weight) JavaScript function on the current page
    private void setWeight(String weight) {
        JSObject win = JSObject.getWindow(this);
        String[] args = { weight };
        win.call("setWeight", args);
    }
}
TOP

Related Classes of ShipmentScaleApplet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.