net.hgw4.hal.WebCamClientComm.java Source code

Java tutorial

Introduction

Here is the source code for net.hgw4.hal.WebCamClientComm.java

Source

/*
Copyright 2011 Alex Redaelli
    
   Licensed 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.
*/
package net.hgw4.hal;

/**
 * manages http commands for axis webcam
 * 
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONException;
import org.json.JSONObject;

public class WebCamClientComm implements PossibleMsgCmds {

    private String ip = null;
    private Logger WebCamClientCommLogger;

    public WebCamClientComm(String ipWebcam) {
        PropertyConfigurator.configure(
                System.getProperty("user.dir") + System.getProperty("file.separator") + "configs/log4j.properties");
        WebCamClientCommLogger = Logger.getLogger(Hal.class);
        WebCamClientCommLogger.info("--> WebCamClientComm <--");
        ip = ipWebcam;

    }

    @Override
    public String onCmd(String val) {
        setPort(1, 1);
        setPort(1, 0); //for enabling the call button
        return "ok";
    }

    @Override
    public String offCmd(String val) {
        setPort(1, 1);
        setPort(1, 0);
        return "ok";
    }

    @Override
    public String onPercCmd(String val) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String offPercCmdString(String val) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public JSONObject sendCmd(int curCmd) {
        JSONObject response = null;
        String curCommandStatus = new String();
        switch (curCmd) {
        case 0: //on
            curCommandStatus = onCmd("");
            break;
        case 1: //off
            curCommandStatus = offCmd("");
            break;
        case 2: //onperc
            curCommandStatus = "no-operative";
            break;
        case 3: //offperc
            curCommandStatus = "no-operative";
            break;
        }
        //generate json response
        String msgRaw = new String("{" + "'value':'" + curCommandStatus + "'}");

        try {
            response = new JSONObject(msgRaw);
        } catch (JSONException ex) {
            WebCamClientCommLogger.error(ex);
        }
        return response;
    }

    public byte[] getData() {
        byte[] result;

        int buttonStatus = checkPortStatus(1);

        return intToByteArray(buttonStatus);
    }

    /**
     * check if input 1 is pressed == 1 ring button
     * @param port
     * @return
     */
    public int checkPortStatus(int port) {

        try {
            String curport = Integer.toString(port);
            URL url = new URL("http://" + ip + "/axis-cgi/io/input.cgi?check=" + curport.toString()); //reply with input1=1 o 0
            String userPassword = "<user>" + ":" + "<passwd>";
            String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
            URLConnection uc = url.openConnection();
            uc.setRequestProperty("Authorization", "Basic " + encoding);
            InputStream content = (InputStream) uc.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(content));

            String str;
            str = in.readLine();
            if (str.contentEquals("input1=1")) {
                return 1; //high
            } else if (str.contentEquals("input1=0")) {

                return 0; //low
            }
            in.close();

        } catch (MalformedURLException ex) {
            WebCamClientCommLogger.error(ex);
        } catch (IOException ex) {
            WebCamClientCommLogger.error(ex);
        }
        return -1;
    }

    /**
     * resets status of ring button rel
     * @param port
     * @param status
     */
    public void setPort(int port, int status) {
        try {
            String curPort = Integer.toString(port);
            String curStatus = new String();
            if (status == 1) {
                curStatus = "/"; //active
            } else {
                curStatus = "\\"; //inactive
            }
            URL url = new URL("http://" + ip + "/axis-cgi/io/output.cgi?action=" + curPort + ":" + curStatus);
            String userPassword = "<user>" + ":" + "<pass>";
            String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
            URLConnection uc = url.openConnection();
            uc.setRequestProperty("Authorization", "Basic " + encoding);

            InputStream content = (InputStream) uc.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(content));
            String str;
            str = in.readLine();
            in.close();

        } catch (MalformedURLException ex) {
            WebCamClientCommLogger.error(ex);
        } catch (IOException ex) {
            WebCamClientCommLogger.error(ex);
        }

    }

    public byte[] intToByteArray(int value) {
        byte[] b = new byte[4];
        for (int i = 0; i < 4; i++) {
            int offset = (b.length - 1 - i) * 8;
            b[i] = (byte) ((value >>> offset) & 0xFF);
        }
        return b;
    }

}