From 53b947df484159f5934898ba6c0aa69a9c869007 Mon Sep 17 00:00:00 2001 From: Ido Hadanny Date: Thu, 22 Sep 2011 21:30:13 +0300 Subject: added stuff --- .../com/hackingroomba/roombacomm/watchVideo.java | 255 +++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 roombacomm-client/src/com/hackingroomba/roombacomm/watchVideo.java (limited to 'roombacomm-client/src/com/hackingroomba/roombacomm/watchVideo.java') diff --git a/roombacomm-client/src/com/hackingroomba/roombacomm/watchVideo.java b/roombacomm-client/src/com/hackingroomba/roombacomm/watchVideo.java new file mode 100644 index 0000000..978459a --- /dev/null +++ b/roombacomm-client/src/com/hackingroomba/roombacomm/watchVideo.java @@ -0,0 +1,255 @@ +/* + * roombacomm.WatchVideo -- test out the video subsystem without robot motion + * + * Copyright (c) 2009 Paul Bouchier, bouchier@at@classicnet.net + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + */ +package com.hackingroomba.roombacomm; + +import jargs.gnu.CmdLineParser; +import java.io.*; + + +/** + Run it with something like:
+	    java roombacomm.WatchVideo --videoServer 192.168.0.150 --videoPortNum 5005 -x 160 -y 120 --debug
+ Usage: + roombacomm.WatchVideo --videoServer --videoPortNum + -x -y [options]
+ where + [options] can be one or more of: + -debug -- turn on debug output + -hwhandshake -- use hardware-handshaking, for Windows Bluetooth + -nohwhandshake -- don't use hardware-handshaking +
+*/ + public class watchVideo { + + private int height = 120; + private int width = 160; + String usage = + "Usage: \n"+ + " roombacomm.Roborama --videoServer --videoPortNum -x -y [options]\n" + + "where [options] can be one or more of:\n"+ + " -X | --debug -- turn on debug output\n"+ + " -x or --width : set width\n" + + " -y or --height -- set height\n" + + " -c | --color -- use color mode, otherwise grayscale\n" + + " --videoserver : set IP address of video server\n" + + " --videoPortNum : set port number on video server\n" + + " -t | --threshold : set quantization threshold\n" + + " -R | --RoboRealm : connect to Roborealm & send image to it\n" + + " -hwhandshake -- use hardware-handshaking, for Windows Bluetooth\n"; + + boolean debug = false; + private int waittime; + private int thresholdOverride = 0; + private String videoServer = ""; + private int videoPortNum = 5005 ; + private int videoRowStart = 50; + private int videoRowEnd = 54; + private int pixelCnt; + private boolean color = false; // when true, capture images in color + private boolean roborealm = false; // when true, connect & send images to RoboRealm + FrameProcessor fp; + + public watchVideo() { + // constructor, mustn't throw exceptions. Do nothing for now + } + + // main - it all starts here + public static void main(String[] args) { + watchVideo b = new watchVideo(); + b.parseCmd(args); + b.initVideo(); + b.displayVideo(); + } + + public void displayVideo() + { + + while (true) { + getShowFrame(); + if (roborealm) { + Boolean rv = fp.frame2Roborealm(); + if (rv == false) + System.out.println("error sending image to Roborealm"); + //fp.getShapeData(); + } + } + //frameSize = fp.readFrame(); + //System.out.println("getVideo read " + frameSize + " bytes"); + //fp.disconnect(); + } + + /** + * Get a frame from the video server and display it + */ + public void getShowFrame() { + pixelCnt = fp.readFrame(getWidth(), getHeight(), color?1:0); + if (pixelCnt != (getWidth() * getHeight())) { + System.out.println("getVideo read " + pixelCnt + " bytes - abandoning frame"); + return; + } + + // output the frame to wherever it's wanted + fp.displayFrame(); + return; + } + + /** + * Connect to the video server, and to RoboRealm if requested + */ + public FrameProcessor initVideo() { + if (getVideoServer() == null || getVideoServer().length() == 0) { + System.err.println(" you must supply a --videoServer value to use the command \"getVideo\""); + if (getVideoPortNum() <= 0) { + System.err.println(" you must supply a --videoPortNum value to use the command \"getVideo\""); + } + System.exit(6); + } + if (getVideoPortNum() <= 0) { + System.err.println(" you must supply a --videoPortNum value to use the command \"getVideo\""); + System.exit(7); + } + + fp = new FrameProcessor(getVideoServer(),getVideoPortNum(), 0, 0, 0, 0, getThresholdOverride()); + //fp.testQuantization(); + fp.createAndShowGUI(); + fp.connect(roborealm); // connect to the video server, and to Roborealm too if requested + + return fp; + } + + public void parseCmd(String[] args){ + System.out.println("*** start of WatchVideo WparseCmd"); + + CmdLineParser parser = new CmdLineParser(); + CmdLineParser.Option debugOption = parser.addBooleanOption('X', "debug"); +// CmdLineParser.Option verboseOption = parser.addBooleanOption('W', "Verbose"); + CmdLineParser.Option widthOption = parser.addIntegerOption('x', "width"); + CmdLineParser.Option heightOption = parser.addIntegerOption('y', "height"); + CmdLineParser.Option videoServerOption = parser.addStringOption("videoServer"); + CmdLineParser.Option videoPortNumOption = parser.addIntegerOption("videoPortNum"); + CmdLineParser.Option thresholdOption = parser.addIntegerOption('t', "threshold"); + CmdLineParser.Option hwHandShakeOption = parser.addBooleanOption("nohwhandshake"); + CmdLineParser.Option colorOption = parser.addBooleanOption('c', "color"); + CmdLineParser.Option roborealmOption = parser.addBooleanOption('R', "roborealm"); + try { + parser.parse(args); + } + catch ( CmdLineParser.OptionException e ) { + System.err.println(e.getMessage()); + System.out.println("parseCmd had an error\n"+ usage ); + System.exit(2); + } + + // String portname = args[0]; // e.g. "/dev/cu.KeySerial1", or "COM5" or "192.168.1.1" + setThresholdOverride(((Integer)parser.getOptionValue(thresholdOption, getThresholdOverride())).intValue()); + setWidth(((Integer)parser.getOptionValue(widthOption,getWidth())).intValue()); + setHeight(((Integer)parser.getOptionValue(heightOption,getHeight())).intValue()); + setVideoServer(((String)parser.getOptionValue(videoServerOption))); + setVideoPortNum(((Integer)parser.getOptionValue(videoPortNumOption, getVideoPortNum())).intValue()); + // String cmd = args[1+argOffset]; + + Boolean debugBool = (Boolean)parser.getOptionValue(debugOption,new Boolean(false)); + setDebug(debugBool.booleanValue()); + System.out.println("debug is ("+isDebug()+")"); + Boolean hwHandShakeBool = (Boolean)parser.getOptionValue(hwHandShakeOption, new Boolean(false)); + setThresholdOverride((Integer)parser.getOptionValue(thresholdOption, new Integer(0))); + System.out.println("thresholdOverride is " + getThresholdOverride()); + color = (Boolean)parser.getOptionValue(colorOption, new Boolean(false)); + roborealm = (Boolean)parser.getOptionValue(roborealmOption, new Boolean(false)); + System.out.println("color mode is " + color + ", roborealm mode is " + roborealm); + System.out.println("*** end of parseCmd"); + } + + public boolean isDebug() { + return debug; + } + public void setDebug(boolean debug_) { + debug = debug_; + } + public int getWaittime() { + return waittime; + } + public void setWaittime(int waittime_) { + waittime = waittime_; + } + public int getThresholdOverride() { + return thresholdOverride; + } + public void setThresholdOverride(int thresholdOverride) { + this.thresholdOverride = thresholdOverride; + } + protected int getHeight() { + return height; + } + protected void setHeight(int height) { + this.height = height; + } + protected int getWidth() { + return width; + } + protected void setWidth(int width) { + this.width = width; + } + /** + * @return the videoServer + */ + protected String getVideoServer() { + return videoServer; + } + /** + * @param videoServer the videoServer to set + */ + protected void setVideoServer(String videoServer) { + this.videoServer = videoServer; + } + /** + * @return the videoPortNum + */ + protected int getVideoPortNum() { + return videoPortNum; + } + /** + * @param videoPortNum the videoPortNum to set + */ + protected void setVideoPortNum(int videoPortNum) { + this.videoPortNum = videoPortNum; + } + + public boolean isColor() { + return color; + } + + public void setColor(boolean color) { + this.color = color; + } + + public boolean isRoborealm() { + return roborealm; + } + + public void setRoborealm(boolean roborealm) { + this.roborealm = roborealm; + } + + } + + \ No newline at end of file -- cgit v1.3.1