chromiumos/platform/touchbot.git
14 months agoIntroduce a testing script to check functionality 93/65993/5 master
Charlie Mooney [Thu, 15 Aug 2013 21:41:50 +0000 (14:41 -0700)]
Introduce a testing script to check functionality

This is essentially what I've been doing to make sure the library
works.  test.py is just a little script that runs each feature in
turn so the operator can run one little script and make sure nothing
has gone awry.

BUG=chromium:272369
TEST=This is a test.  It's run from the command line on a controlling
computer and the robot moves as expected.

Change-Id: Iab55c15bc84ffb73aa6bcc26d182df3c3fa15ed4
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65993
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoAdd basic movement commands to TouchbotII 92/65992/4
Charlie Mooney [Thu, 15 Aug 2013 21:33:27 +0000 (14:33 -0700)]
Add basic movement commands to TouchbotII

These commands take in the previously defined Position
objects and move the robot there by different methods.

SetAngles() interpolated between the raw joint angles
SetCartesian() interpolates on a cartesian grid and keeps
    the hand at a fixed angle reletive to the work surface
Wait() blocks until the robot has finished and queued
    motion commands

BUG=chromium:272369
TEST=manually tested by "calibrating" two points and moving
the robot between them

Change-Id: Iba66a4197767d342134db8ea79c49024f501c3d1
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65992
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoAdd GPIO Capabilities to Touchbot II 91/65991/3
Charlie Mooney [Thu, 15 Aug 2013 18:28:26 +0000 (11:28 -0700)]
Add GPIO Capabilities to Touchbot II

The Touchbot II has several GPIO's that are wired to various functions
on the robot, so we need to be able to control them.  This CL adds a
'get' and 'set' function for GPIOs and constants for the GPIO addresses
of the various devices that are controlled that way.

These are all four finger extension pistons, the two values that control
the fingertip nest lid (open & close) and the fingertip detection
sensor.

BUG=chromium:272369
TEST=tested by twiddling the fingers and nest state and reading from the
sensor while waving things over it.

Change-Id: Ie0c9e332c7abf00addc1d693bfc26b0798c8c7ae
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65991
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoAdd in a robot profile class 90/65990/4
Charlie Mooney [Thu, 15 Aug 2013 18:04:43 +0000 (11:04 -0700)]
Add in a robot profile class

The robot always has a particular "profile" which specifies
all the parameters for it's movement -- speed, acceleration,
etc.  This adds a class to store this data and two functions
to download and upload these profiles from the robot

BUG=chromium:272369
TEST=downloaded a profile, modified it and uploaded it without
getting any errors from the robot.  The values all were changed
on the next download

Change-Id: I2342c53e69918078959fe9f2b3305368f3908bfb
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65990
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoAdd in the start of higher level robot control 95/65895/5
Charlie Mooney [Wed, 14 Aug 2013 22:45:48 +0000 (15:45 -0700)]
Add in the start of higher level robot control

This adds a touchbot class and a position class to store the locations
or 'keyframes' that will be used to drive the robot.

These are both very simple and stripped down, and many more functions
will be added to both.  Right now all it can do is make the robot go
limp so that the operator can move it to a desired position and record
it as a Position object.

Note that there is a bug in the robot where the last axis can't go into
free mode yet, which is why it is skipped.  It should be fixed sometime
in the future and once the robot is capable I'll fix the code to match
it.

BUG=chromium:272369
TEST=manual testing

Change-Id: I0d0c5802141df14acd1196938a28b8574c4fa4f9
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65895
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoFix the way roibot imports the calibrated z values 61/65961/2
Charlie Mooney [Thu, 15 Aug 2013 16:51:49 +0000 (09:51 -0700)]
Fix the way roibot imports the calibrated z values

The old way worked but only if you ran it from the right directory.
Otherwise Python would get confused and the import would fail, making
the test just die before it even started.

This should always work (for the firmware test) since it creates that
file for you in the cwd, and now it always looks in the cwd, not
wherever python thinks you should be storing modules.

BUG=chromium:273790
TEST=manually tested on a Link, everything went smootly now

Change-Id: I3f50ae896e3d301cb6c6ddf723631f8fbf247a6c
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65961
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
14 months agoStarting the touchbotII control scripts 25/65725/3
Charlie Mooney [Tue, 13 Aug 2013 18:35:46 +0000 (11:35 -0700)]
Starting the touchbotII control scripts

This adds in a low-level control module that just does the ethernet
communications to the robot.

Higher-level code will go on top of this, but it has to start somewhere

BUG=chromium:272369
TEST=manual testing.  The robot responds happily to the setup commands

Change-Id: Iabe1c3ca27055be6e8d84b9fad0c51c329c75811
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/65725
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
15 months agoAdd the final .bin generator for the nonlinearity tools 84/59984/3 factory-4455.B factory-pit-4390.B factory-pit-4471.B firmware-falco_peppy-4389.B firmware-leon-4389.26.B firmware-pit-4482.B firmware-wolf-4389.24.B release-R30-4537.B stabilize-4443.B stabilize-4512.B
Charlie Mooney [Tue, 25 Jun 2013 22:03:22 +0000 (15:03 -0700)]
Add the final .bin generator for the nonlinearity tools

The final piece of the puzzle is the script that can actually generate
the blobs that are used by the filter in CMT itself.

This script essentially just loads the filter just like displayError.py
did, but instead of sampling and drawing it to the screen, it packs
up a nice, concise binary blob that the CMT filter knows how to
interpret and saves it to disk.

BUG=chromium:233579
TEST=manual testing "python generateBlob.py stroke*.p" and its
generated blobs are currently being used already without issue

Change-Id: I2ecc3013a84d672bf6e3ee3bf19dfcea0b1aeecb
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/59984

15 months agoAdd in Filter to non-linearity tools 15/58215/4
Charlie Mooney [Tue, 11 Jun 2013 18:22:09 +0000 (11:22 -0700)]
Add in Filter to non-linearity tools

Previously I added the "Stroke" class that stores the events in
a single continious motion on the touchpad.  This adds a "Filter" class
that stores the aggregated data from many many many strokes and then
estimates the error at any given point.

It does this by loading in a whole pile of Stroke's and estimating their
error.  This results in a collection of (x, y, p) -> (err_x, err_y)
mappings, which are put into a KD tree to allow for efficient nearest
neighbor lookup.

Once the Filter is built, you can query points with the function
Filter.getError((x, y, p)) and it will find the nearest points where
it knows the error and return to you a weighted average.

Additionally there is a displayError.py script that loads a Filter
object for you and visualizes the data inside it.  It's very good for
making sure everything is working correctly.

BUG=chromium:233579
TEST=manual testing

Change-Id: If4f1f1597b5bf4efc2fdd6d456a7d26651947c54
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/58215

16 months agoAdding in the nonlinearity processing scripts 17/57517/3 factory-4290.B factory-pit-4280.B factory-spring-4262.B release-R29-4319.B stabilize-4287.B
Charlie Mooney [Tue, 4 Jun 2013 20:55:40 +0000 (13:55 -0700)]
Adding in the nonlinearity processing scripts

For the non-linearity compensation filter to work we need to be able to
process the many many logs that are recorded to build up the lookup
table that is later used to adjust positions as they come in.  These
scripts have been in flux and now have somewhat stabilized so I'm
committing them to the touchbot project for future use.

parse.py --> Parses a collection of activity_logs and saves "strokes" to
disk which are pickled lists of (x, y, p) tuples each corresponding to a
single continuous line drawn on the Touchpad

showPath.py --> Loads pre-parsed stroke.p files, and plots their
coordinates using matplot lib to see what the pattern of the strokes
was.  Very useful for debugging

progress --> When you're doing these with real data it can take quite a
bit of time to load the thousands of points and do all the processing.
This progress bar class is just for the ease of use of the operator

stroke --> Class representing a single continuous line on the touchpad.
It is essentially a list of (x, y, p) points with a few helper functions
to allow us to manipulate the strokes better

General usage:
You'll have a whole bunch of activity_log1.txt, activity_log2.txt, ...

    python parse.py activity_log*.txt

This generates stroke1.p, stroke2.p, ... stroke2134.p

    python showPath.py stroke*.p

This loads all the stroke.p files and displays them to the screen so you
can visualize the logs.

At this point, you know you have legit stroke*.p files and can use other
scripts to anylize them further and will be added later, but for the
sake of incrementally merging these in, I'm just starting with the basic
functionality

BUG=chromium:233579
TEST=manual testing as described in the commit msg using data collected
off a real system

Change-Id: I857781ed03af645412728651bbe27218fb051aba
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/57517
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
16 months agoAdd in latency computation script to work with HSC 36/57336/3 stabilize-4255.B
Charlie Mooney [Mon, 3 Jun 2013 16:19:56 +0000 (09:19 -0700)]
Add in latency computation script to work with HSC

This adds the script I've been using to track the probes
movements and the LED's state for the high-speed camera tests.

This script takes in a video (taken at some very high frame rate)
and then measures automatically how long after crossing a line
it takes for an LED to turn on/off.

BUG=chromium:246222
TEST=manual testing

Change-Id: I664ec63410ab7c89686e6dbf12ff7e71e5703d90
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/57336
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
16 months agoTouchbot - fix a type-mismatch in error handler 68/57368/2
Charlie Mooney [Mon, 3 Jun 2013 20:53:22 +0000 (13:53 -0700)]
Touchbot - fix a type-mismatch in error handler

In one of the robot's error handlers it assumes incorrectly that the
error code is a string and tries to concatenate it.  If this happens
python crashes and you can't see the error code that messed it up.

This patch just changes it to cast the error to a string so it won't
crash

BUG=chromium:246344
TEST=manual

Change-Id: I8f75db4e540ca460e338afc432b4f08558eeef80
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/57368
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
18 months agoIncrease click offset 71/48171/2 factory-4128.B factory-spring-4131.B release-R28-4100.B stabilize-4035.0.B stabilize-4068.0.B stabilize-4100.38.B stabilize-spring-4100.53.B toolchainB
Charlie Mooney [Mon, 15 Apr 2013 23:01:30 +0000 (16:01 -0700)]
Increase click offset

It turns out that 3mm extra doesn't seem to be enough to produce
physical clicks.  This increases the offset to 5mm so that calibrated
values can be used for phsyical clicking tests.

BUG=chromium:229600
TEST=manual

Change-Id: I1c30441068b9f55fc64f41a3f75c7a2d8fa7543b
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/48171
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
18 months agoChange how dimensions are loaded for calibration 73/47773/5 stabilize-4008.0.B
Charlie Mooney [Wed, 10 Apr 2013 20:35:58 +0000 (13:35 -0700)]
Change how dimensions are loaded for calibration

Currently the X, Y, and X ranges/values that are used to compute the
robot positions for a gesture are simply loaded from a manually
configured file called DEVICE_NAME.py.  With the hope of calibrating the
Z measurements automatically, this change adds the plumbing to make a
device's dimensions get overridden by any automatically calibrated z
values.

The way this works is by having the calibrate_z.py script output to a
file instead of stdout, saving it's calibrated values in the current
working directory.  Then whenever the dimensions are loaded for a
device, it first checks to see if there is a calibration file present in
the local directory, and if there is loads the values from that
overriding any Z values in the device's file.

If no file is found or the file was for a different device, it stays
with the manually entered values just like it used to.

BUG=chromium:229600
TEST=manually tested in a bunch of cases of success and failure

Change-Id: I0f5f9d67d4739b24c7276e26c52d0e82f52524dd
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47773

18 months agoTouchbot: Fix a typecasting bug in point_picker.py 75/47775/3
Charlie Mooney [Wed, 10 Apr 2013 20:55:01 +0000 (13:55 -0700)]
Touchbot: Fix a typecasting bug in point_picker.py

There was a bug that cropped up randomly where it would get floats as
numbers that were intended to be used as coordinates. This puts a cast
in place so that when that does happen, they get truncated down into
numbers that it can use instead of crashing.

BUG=chromium:230065
TEST=manual

Change-Id: I2f1f19eee797cf0ca043a6b1409f171ce0682113
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47775

18 months agoTouchbot: Add a Z calibration script 81/47681/5
Charlie Mooney [Tue, 9 Apr 2013 20:59:49 +0000 (13:59 -0700)]
Touchbot: Add a Z calibration script

This script programs the robot to descend very slowly into the center of
the touchpad, until the limit switch triggers. This indicates that it
has firm contact with the pad if the springs are set up right. At this
point the script reconnects to the robot, and queries the current
position, printing out the Z position onto stdout.

This is intended to be used to automatically z-calibrate the robot for
the robot part of the Touch FW test. At the beginning of the robot
portion, the test can run this and read in the z position automatically,
so that the operator doesn't have to manually measure it.

Additionally, this is designed to work with lighter finger springs than
what were used before. These lighter springs make this automation possible,
since with the previous, heavy springs the limit switches could not
detect such small pressures. The lighter springs may also make the
margin of error larger for the touch/tap Z heights, so it looks like it
might be able to take all of that calibration away. There may, however,
be a difference in the pressure values being read in by the test
resulting in slightly different results.

BUG=chromium:229600
TEST=manually tested on the Touchbot with a Lumpy

Change-Id: I89812d47c043e1e68ab30ae23e8f4f3e169dcb99
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47681

18 months agoTouchbot: Add a rapid-tapping gesture 96/47596/4
Charlie Mooney [Mon, 8 Apr 2013 22:33:55 +0000 (15:33 -0700)]
Touchbot: Add a rapid-tapping gesture

This gesture taps repeatedly in the same spot on the touch pad/screen to
check what kind of tap success rate we get.  This is intended to be
added to the FW test suite soon as something that will (for instance)
make it tap 40 times in quick sucession and see how many of the 40 got
picked up by the FW.

BUG=chrome-os-partner:17274
TEST=Manual -- run on the touchbot with a Lumpy

Change-Id: I5d8861aa68d8b3dc3e8f2f331988764b7753fe91
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47596

18 months agoTouchbot: Adding a program to sample SNR 60/47360/5
Charlie Mooney [Mon, 4 Mar 2013 18:25:59 +0000 (10:25 -0800)]
Touchbot: Adding a program to sample SNR

This program moves the robots finger over the surface, touching
a grid of points and holding the finger still.  The point being
that you can then measure how much the signal wiggles at various
points on the surface even when the finger is static.

BUG=chrome-os-partner:11467
TEST=manual

Change-Id: I18c4d70b75e68f30ab4d524e46689e9e3c68bb06
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47360

18 months agoChanging the name of snow's config file 33/46933/2
Charlie Mooney [Fri, 29 Mar 2013 22:49:30 +0000 (15:49 -0700)]
Changing the name of snow's config file

The test stopped running correctly on this platform, it's picking up the
name differently and looking for a different file.  This changes the
name so it should work now

TEST=Ran the test suite
BUG=chromium:225125

Change-Id: Ide2418f4bd47a30d8543425c09d72b1a7964df0e
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/46933
Reviewed-by: Rajeev Kumar Challapalli <rajeevkumar@chromium.org>
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
19 months agoTouchbot: Fix a parsing problem in error.py 99/44299/4 factory-spring-3842.B firmware-spring-3824.4.B firmware-spring-3824.55.B firmware-spring-3824.84.B firmware-spring-3824.B firmware-spring-3833.B release-R27-3912.B stabilize-3881.0.B stabilize-3912.79.B toolchainA
Charlie Mooney [Thu, 28 Feb 2013 19:43:46 +0000 (11:43 -0800)]
Touchbot: Fix a parsing problem in error.py

The error parsing module used "lstrip()" to extract the error codes from
the messages sent over the robot's serial connection.  The problem was
that if the error code included 1's or 2's they could be stripped to.

ie: if the error message was "ST1=11" and we wanted to get the "11"
using message.lstrip("ST1=") would return an empty string since the code
consisted of 1's which were in the set of characters to strip.

I replaced the lstrips with split()'s to divide it on the '=' so it
doesn't matter what numbers are in the error code

BUG=chromium-os:39369
TEST=Manually ran it, and forced an error with code "11" and it was
parsed correctly.  Other errors work fine as well.

Change-Id: I2fdb931273b547852eb98a2cec5aea7160e9db5c
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44299

19 months agoTouchbot: Auto detect port for point_picker.py 80/44280/2
Charlie Mooney [Thu, 28 Feb 2013 17:13:49 +0000 (09:13 -0800)]
Touchbot: Auto detect port for point_picker.py

Point_picker.py still had a hardcoded serial port device left over from
when it was originally written.  It was overlooked until now because
apparently it happened to be the correct device on most Chromebooks, but
proved to be incorrect on Snow.  This updates point_picker.py to use the
automatic serial port scanning technique that everything else uses.

BUG=chromium-os:39358
TEST=Ran on a Snow and it found the correct port and was able to control
the robot with it.

Change-Id: I7980828d2453aebb5351b8c06b9bf7203a695d08
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44280
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
19 months agoTouchbot: Add an even pressure-mapper 76/44176/3
Charlie Mooney [Wed, 30 Jan 2013 23:24:22 +0000 (15:24 -0800)]
Touchbot: Add an even pressure-mapper

This uses the new limit switch to determine when a constant amount of
pressure has been applied to the touchpad by the robot.  Essentially,
the switch triggers whenever the finger has been depressed a certain
amount.  Since this is either fighting a spring and/or gravity, a fixed
distance should correspond to a fixed amount of force as well.

Unfortunately, this program requires some more complex techniques to
program than many of the other gestures, especially due to the
limitations of the programming language for the robot.

BUG=chromium-os:38397
TEST=Used to generate pressure maps for a test touchpad and it worked
as intended

Change-Id: If92042c342c4344a8b4819e28c3bdabe70afd8c2
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44176
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
19 months agoTouchbot: Fix a typo in line.py 04/44204/2
Charlie Mooney [Wed, 27 Feb 2013 20:31:15 +0000 (12:31 -0800)]
Touchbot: Fix a typo in line.py

There is a typo in line.py that causes it to fail when run in the FW
test suite

BUG=chromium-os:39307
TEST=Programmed the touchbot with it and it works

Change-Id: I3c9d8dec9e7b9ab844dfb193971dccfc60417802
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44204
Reviewed-by: Chirag Gupta <chiraggupta@chromium.org>
Tested-by: Chirag Gupta <chiraggupta@chromium.org>
Reviewed-by: Kalin Stoyanov <kalin@chromium.org>
20 months agoTouchbot: Smooth out swipe gestures 46/42346/3 release-R26-3701.B stabilize-3658.0.0 stabilize-3701.30.0 stabilize-3701.30.0b stabilize-3701.46.B stabilize-3701.81.B stabilize-bluetooth-smart toolchain-3701.42.B
Charlie Mooney [Wed, 30 Jan 2013 23:13:44 +0000 (15:13 -0800)]
Touchbot: Smooth out swipe gestures

The "swipe" version of the line.py gesture doesn't move very
smoothly.  It tends to have a little jerk in the middle/beginning.

After some experimentation, this seems to be a better implementation of
it, and looks a bit more like how a person does a swipe/fling.

BUG=chromium-os:38396
TEST=Ran on the touchbot a bunch of times, used when testing fling
consistency and it responded well to the changes there too.

Change-Id: I2494c3040c608421ab4e1e6361817ad18b55d6ba
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42346
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
20 months agoTouchbot: fixing the jump() instruction 45/42345/3
Charlie Mooney [Wed, 30 Jan 2013 23:07:22 +0000 (15:07 -0800)]
Touchbot: fixing the jump() instruction

The program.jump() instruction returned an illegal JMP command since it
accidentally made it's results into a tuple instead of printing them
into a string.

BUG=chromium-os:38394
TEST=Wrote a program that sucessfully uploaded JMP instructions to the
robot and it was able to execute them just fine.

Change-Id: Iaa0bd2ebc0bd76c24fc5dc909ff356c14e3a4e29
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42345

23 months agoTouchbot: Making the click gesture more versatile 36/38336/4 factory-3536.B release-R25-3428.B stabilize-3428.110.0 stabilize-3428.149 stabilize-3428.149.B stabilize-3428.193 stabilize2 toolchain-3428.65.B
Charlie Mooney [Mon, 19 Nov 2012 23:26:50 +0000 (15:26 -0800)]
Touchbot: Making the click gesture more versatile

Previously the click gesture could only accept a single point to click
or tap.  This was a bit of a limitation since you might want to specify
a whole series of clicks.  This allows you to specify any number of xy
pairs on the command line and it will click each one in the order that
they were given.

BUG=chromium-os:36496
TEST=Run "click.py lumpy 0.5 0.5 click" to confirm that it still works
like it used to.  Do that again with "tap".  Then try a series of points
"click.py lumpy 0.1 0.1 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 click" and again
with "tap" to make sure it works with several points.  Finally, try it
with a couple of invalid inputs to make sure that it rejects them and
doesn't do something unexpected.

Change-Id: I2848293f5b9523381b1c9db842c60a47d53b06a7
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/38336

23 months agoTouchbot: Define a gesture to type out a string
Charlie Mooney [Mon, 5 Nov 2012 17:07:25 +0000 (09:07 -0800)]
Touchbot: Define a gesture to type out a string

A gesture to type out a single key is useful, but clearly it would be
nice to be able to type a series of keys without having to reprogram the
robot for each key.  That would waste eeprom cycles and be very slow.
This CL adds a type_string gesture that strings together the smaller
press_key gestures into one cohesive program.

This is the first gesture that uses subgestures, and it does so by way
of the new roibot wrappers that keep everything nicely contained so now
if the gestures leave off the "END" instruction, you can simply append
them together.  The run_program gesture will always stick an "END"
instruction on just in case, so that it won't end up executing random
instructions and causing problems.  This technique should
work and extend to other gestures as well, for instance a series of
strokes or clicks on the touchpad, even with interspersed  keystrokes.

BUG=chromium-os:35997
TEST=Run "./type_string butterfly "kjffvk" and it should upload an
efficient program (no duplicated SPD instructions, etc) that makes the
robot peck out those characters then halt.  Additionally confirm that
the other gestures still terminate with the new changes to the "END"
commands

Change-Id: Icf8a8950786fc1b39531c31a3c5cde4f1a67e07b
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37357
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Adding in keyboard coords and new specs
Charlie Mooney [Fri, 2 Nov 2012 22:52:27 +0000 (15:52 -0700)]
Touchbot: Adding in keyboard coords and new specs

This adds a new spec that shows how you can specify the location of keys
for a device in its spec and a gesture that lets you tell it to press
any key that it knows the coordinates for

BUG=chromium-os:35997
TEST=Run "./press_key butterfly k" and it should press that key.  Try
running with a key that isn't defined "./press_key lumpy g" and it
prints out an error message and uploads a prgram that just terminates to
the robot to keep it from doing anything silly.

Change-Id: I8874c2dea391a3c5814128eb1abdebead8087914
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37356
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Automatic speed/point tracking
Charlie Mooney [Thu, 1 Nov 2012 20:31:07 +0000 (13:31 -0700)]
Touchbot: Automatic speed/point tracking

The touchbot has limited memory, so it's useful to re-use as much as
possible.  This stores all the entries of the speed and point tables in
a hash.  Then when you ask it to create a new speed or point table
entry, it can check to see if one exists already and will return it's
index, and only create new entries if it needs to.

Additionally, this should allow gestures to be chained seamlessly since
they don't have to worry about clobbering each other's data once they are
converted over to using this system, and just makes the gestures easier
to write by hiding the optimization process.

Line.py is converted here to make sure it works, but I held off on the
others to limit the amount of repeated work everyone will have to do
during the code review process.  This way we can just check this one
gesture and iterate on it a bit before applying this to all the others
as well.

BUG=chromium-os:35673
TEST=Run the new line gesture in both basic and swipe mode.  The code
generated it short and concise without duplicated work, and the gestures
work like a charm.

Change-Id: Ibe8fd492c90b690a85ef6f991fea302414ff432d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37144
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Fix setup.py to include devices module
Charlie Mooney [Thu, 1 Nov 2012 23:01:07 +0000 (16:01 -0700)]
Touchbot: Fix setup.py to include devices module

When the devices were moved into a proper module, the setup.py was not
updated to relect this and still tried to copy them as "data" which it
doesn't like since they're actually python now.  As a result, the device
specs aren't present in the test image anymore.

This change switches it over, telling distutils to import that devices
module instead of copying data, and it should work now

BUG=chromium-os:35555
TEST=Run "python setup.py build" and you can see that it will copy all
of the device.py files into the right directory under roibot/devices on
the test image.

Change-Id: I19c5995f57075ed64acfada0f6ce5bca6d5f0719
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37153

23 months agoTouchbot: Change the device spec file format
Charlie Mooney [Tue, 30 Oct 2012 20:13:01 +0000 (13:13 -0700)]
Touchbot: Change the device spec file format

The old file format was a cryptic 2 dimensional array that had been
"pickled"  This required an additional document to explain what
each one was, and made it cumbersome to update values and very
difficult to add new fields.

This has been replaced with a single python script that defines a
dict that has all the old data in it.  As a result you can put
comments directly in the device spec, which means we only need 1 file
per device now, and it's something that's actually human readable now
too instead of a packed data structure.

Additionally it adds a "tapZ" field to the spec, which specifies what Z
position the finger should shoot for when trying to "tap" the touchpad,
which seems to be somewhere in between paperZ and clickZ.

BUG=chromium-os:35555
TEST=Run gestures with several devices and confirm that everything
imports correctly and the gestures run without problem.

Change-Id: I046958c39fd0db520142fed5aa0c80e5b71d64df
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36941

23 months agoTouchbot: Generalizing the scroll gesture
Charlie Mooney [Tue, 30 Oct 2012 18:07:51 +0000 (11:07 -0700)]
Touchbot: Generalizing the scroll gesture

It used to only go from the top to the bottom in the
center of the touchpad, but we really want to be able
to specify arbitrary swipes like we can with the line
gestures.  This adds a parameter to line.py that
should make scroll.py obsolete.  When this parameter
is set, the robot will do a fluid "swipe" along the
line instead of a "line."

BUG=chromium-os:35869
TEST=Run ./line 0.5 0.0 0.5 0.8 basic and make sure it does
the right thing, then run it as a "swipe" and make sure it
swipes by opening up a browser and making sure it does a fling.
Finally, run it with invalid arguments and make the usage
message is displayed properly.

Change-Id: I604c8206671e2c45c81bd2e8a7c1b43f85f7fbc6
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36926
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Add a new "click" gesture 62/36462/4
Charlie Mooney [Wed, 24 Oct 2012 18:58:09 +0000 (11:58 -0700)]
Touchbot: Add a new "click" gesture

This adds a new gesture to the Touchbot's gesture library. This gesture
simply clicks at a specified point on the touchpad. It is selectable to
do either mechanical clicks or tap-to-click.

As this is the second gesture to use the 0-1 touchpad indexing scheme, a
converter has been added to the bounds class so that all these gestures
may use a common coordinate conversion scheme. As such line.py has also
been converted over to the new method to match.

Additionally, the snow and lumpy device specs have had their Z
dimensions tweaked so that they work nicely with this script. With the
new fingers, the distances shortened, and this needed to be accounted
for.

BUG=chromium-os:35670
TEST=Run a click at a couple points on both devices and confirm that the
clicks are being registered. Then do the same with the "taps." Both
should work just find on Lumpy as Snow

Change-Id: I391f2e3e9a8ffdeb655c5bcae5231b53b6edd855
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36462
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Adding a decive specification for Link
Charlie Mooney [Wed, 24 Oct 2012 21:14:20 +0000 (14:14 -0700)]
Touchbot: Adding a decive specification for Link

There was no device spec. for Link, this adds one so that the robot can
be used to test the touchpad for it.

BUG=chromium-os:35688
TEST=run "./basic link" and make sure it runs and traverses the
perimeter of the touchpad at the right height, etc.  Using the
point-picker program you can verify that these values place the finger
in the right spots.

Change-Id: I4a2d619a00e48278b6c8fc5e08bfaf958ba8208d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36493
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
23 months agoTouchbot: Adding a distutils setup.py
Charlie Mooney [Mon, 22 Oct 2012 22:09:41 +0000 (15:09 -0700)]
Touchbot: Adding a distutils setup.py

This adds an automated distutils script that installs the library for
you.  This will be the install script called by portage when it is built
into a test image.  In this way if the library changes we won't have to
go back and edit the ebuild, we can just change the setup.py and the
next time anyone builds the package they'll have the freshest version

BUG=chromium-os:34993
TEST=Run "python setup.py install" And the libraries should all be put
in the right place

Change-Id: I469148496f85a626f60927a424f7b50f5f6863e0
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36270

23 months agoTouchbot: Make roibot a more unified library
Charlie Mooney [Fri, 19 Oct 2012 21:42:26 +0000 (14:42 -0700)]
Touchbot: Make roibot a more unified library

There were a couple problems with the roibot library that this clears up
and results in a nice, unified library that is self contained and can
simply be dropped onto a system an imported from any python script.
This is especially important for more automated testing to use it.

First, you could only use the library for a specific directory.  It
never mattered before, but this is a problem when you are bundling it up
to put on another device for testing.  The relative path for the
devices directory was relative to the working directory, not the
library's directory, so it was unpredictable.  Now it uses the directory
the library is stored in to find it's device specs.

Second, the devices/ directory is moved into roibot/.  Previously they
were "next to each other" at the same level.  Putting the device specs
inside the roibot library makes sense because they are only used by the
scripts in roibot, and must always be there for them to work.  They are
logically *part of* the roibot library and therefore really belong
inside that directory.

These two modifications make the roibot/ directory a nice,
self-contained python library that you can simply place in the
PYTHON_PATH and use.

BUG=chromium-os:35513
TEST=Run "./run_program" and make sure the robot moves, can talk to the
computer, etc.  Then try to run it from another directory:
"./gestures/run_program" and a third: "./touchbot/gestures/run_program"
and confirm that all three work.  Then do the same with a gesture that
takes a device name as well.  "./basic lumpy" "./gestures/lumpy" and
"./touchbot/gestures/lumpy"  Without this change, those would fail.

Change-Id: Ia81014531f158da7d1f9fd98ce85de2813771740
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36152

23 months agoTouchbot: Make gestures blocking
Charlie Mooney [Fri, 19 Oct 2012 19:34:40 +0000 (12:34 -0700)]
Touchbot: Make gestures blocking

Previously the gesture scripts for the robot were non-blocking.  This
seemed like a nice idea at first when everything was run by hand, but
really it didn't do much to help.  Now that things are in the process of
moving over to automated testing, however it's hard for a script that
wants to do something with the results of a gesture to function if it
doesn't know when the gesture has completed.  It makes far more sense to
just have the scripts block until the robot has completed it's motions.
This way a test can simply call a gesture, then check the results and
doesn't have to worry about how long it should wait.

BUG=chromium-os:35190
TEST=Run ./run_program to execute whatever program is currently in the
robot's eeprom.  The program should not exit until the robot is done
moving.  Then do the same thing for ./basic.

Change-Id: Ifce63afa5a6c0c6285f7f69aac750679226b3fd0
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36140
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
23 months agoTouchbot: Automatically detect the robot's ttyUSB#
Charlie Mooney [Mon, 22 Oct 2012 16:39:43 +0000 (09:39 -0700)]
Touchbot: Automatically detect the robot's ttyUSB#

Currently, the gesture library for the Touchbot just have a hardcoded
serial port device.  They all just look at /dev/ttyUSB0.  This
doesn't work if the controller is a Chromebook with 3G as their
modems occupy ttyUSB0-2 and the robot ends up on /dev/ttyUSB3.
Similarly, it's just bad to assume you'll know the device number since
it can change around depending on what all is plugged in.

This patch adds a function to the run_program script that scans through
all of the available /dev/ttyUSB# devices on the machine and tries to
talk to the robot.  It continues until it gets a valid response or runs
out of devices.

In this way it automatically detects where the robot is connected so you
don't need to specify a device.

BUG=chromium-os:35523
TEST=With only the robot on a ttyUSB0, run a gesture, it should work.  Do
this again with an addition usb->uart converter attached as ttyUSB1 and
make sure it still finds the right device.  Do it again but with the
robot on ttyUSB1 and the other device as ttyUSB0 this time.  It works in
all three cases

Change-Id: I6e0386c2197c103964c4981064bab1769a4ea8cd
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36221
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoTouchbot: Make gestures device agnostic
Charlie Mooney [Fri, 12 Oct 2012 19:45:12 +0000 (12:45 -0700)]
Touchbot: Make gestures device agnostic

When adding in the touchpad secifications for Snow, it became clear that
the current way that the device specs are being loaded is no good.  It
works fine if you're running them by hand, but if an automated test
needs to run the same test against arbitrary systems, it's not really
very nice.

This patch makes it so that the first parameter sent in to a gesture is
the device name (ie: "lumpy" or "snow"), for easier switching between
devices.  The additional benefit of this, is that a properly written
gesture should now automatically work on all the devices we have a
device spec for without any extra work.

There were a couple of random nits that I noticed while updating
diagonals.py as well, that I just fixed in here, since they are rather
unimportant.

BUG=chromium-os:35262
TEST=run all of the updated gestures with a snow device and a lumpy
device, they all update automatically to fit the specified device.

Change-Id: I43e4869ea5ece6b35a962964308046987814410a
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/35854
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoTouchbot: Add line-drawing gesture
Charlie Mooney [Thu, 11 Oct 2012 17:29:01 +0000 (10:29 -0700)]
Touchbot: Add line-drawing gesture

This gesture is for starting automated touchpad testing with the
touchbot.  It takes five parameters of the form "./left start_x start_y
end_x end_y speed_mm_per_s"  The coordinates are given in the range (0,
1) and are percentages of the viable touchpad area to allow for
across-device flexibility

BUG=chromium-os:35218
TEST=Run "./left 0.1 0.1 0.9 0.9 1.0" and try with with various speeds.
After that, try several different lines like "./left 0.9 0.1 0.1 0.9 10.0"
and make sure it can do various paths.

Change-Id: Ideb65cdb4bbb603c4d3b679c3d86ffb7bbfbd93d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/35414
Reviewed-by: Joseph Shyh-In Hwang <josephsih@chromium.org>
2 years agoTouchbot: Add timeout when waiting for response
Charlie Mooney [Wed, 10 Oct 2012 23:10:49 +0000 (16:10 -0700)]
Touchbot: Add timeout when waiting for response

Currently, the roibot module can hang indefinitely if there is
a device where it thinks the robot's serial port should be, but it isn't
responding.  This would commonly happen if the robot is plugged into the
computer but not powered on, or otherwise unresponsive.  The serial port
will still exist on the controller, but will never get a response.

This patch uses a "select" to wait for 2 seconds for incoming data on the
serial port whenever you've sent a command and are hoping for a
response.  If there's no data waiting after the select times out, it
raises an exception and bails.

BUG=chromium-os:35197
TEST=Plug the robot into the host computer, but leave it off.  Try to
run several gestures, they all wait 2 seconds before failing with a
timeout error.  Next, turn on the robot and re-run those gestures.  They
all work fine.

Change-Id: I1891d9ef3a3123cf89603880718233f04d329930
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/35211
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
2 years agoTouchbot: Add a pause between retries
Charlie Mooney [Wed, 10 Oct 2012 21:10:06 +0000 (14:10 -0700)]
Touchbot: Add a pause between retries

The touchbot often fails to handle its first command after turning on.
Currently, the retry mechanism attempts again immediately while the
robot is still unresponsive, resulting in multiple failed attempts and
causing the whole gesture to fail.  By adding a sleep(1) in between
attempts, this alleviates this problem.

Additionally, since these commands set up a program on the robots
eeprom, that then is actually executed after _all_ commands are done,
there is no risk that adding this retry-pause will cause the robot to
behave badly during the sleep.

BUG=chromium-os:35189
TEST=Power cycle robot.  Run a gesture.  Do this several times, there is
a delay at the beginning most of the time for 1 second, while it waits
to retry, but the gesture scripts don't throw exceptions anymore.

Change-Id: I3a2b12a93e8eb7d1ec845c0adfb633a1d4b203fa
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/35172
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoTouchbot: Adding "scroll" and "fling" Gestures
Charlie Mooney [Wed, 3 Oct 2012 20:52:53 +0000 (13:52 -0700)]
Touchbot: Adding "scroll" and "fling" Gestures

This CL adds a two-finger scroll and two-finger fling gesture
to the gesture library.  Both use the new high-level programming
interface, and stand as good examples for future gestures.  To allow
easy switching between them, the acmescript.sh and run_program.py were
also modified to pass command line arguments to gesture scripts.

These replace the old flick_with_liftoff.py which was so violent I was
didn't dare to actually put a device in the robot when I ran it for fear
that it would break the computer.

Additionally, this updates the README for the gestures module.

BUG=chromium-os:34947
TEST=From gestures directory run "make" and then "./scroll" to make sure
it compiles and runs on the robot.  Then run "./fling" to check it.
Additionally, run "./run_program" after each to make sure that the
memory was indeed programmed.  If it is it should repeat the previous
action.

Change-Id: Id0ef57191970522461d2fea8e7f048911f955e4d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34561
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Commit-Ready: Brian Harring <ferringb@chromium.org>

2 years agoTouchbot: Add diagonal grid gesture
Charlie Mooney [Wed, 3 Oct 2012 23:45:39 +0000 (16:45 -0700)]
Touchbot: Add diagonal grid gesture

This is the gesture designed to test the touchpad for linearity error.
It makes a criss-cross pattern of diagonal lines accross the whole
touchpad so we can anylize where the errors lie, and hopefully correct
them in the future

BUG=chromium-os:34994
TEST=From the gestures directory run "make" and then "./diagonals" to
compile and generate a program for the robot to run.  It should do a
tight criss-cross across the whole touchpad.  Running "./run_progam"
after this should repeat the process

Change-Id: Iba58db335889036093893f95d641a9aa58f51e5d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34755
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Commit-Ready: Brian Harring <ferringb@chromium.org>

2 years agoTouchbot gesture library utilities addition factory-2993.B factory-3004.B
Charlie Mooney [Mon, 1 Oct 2012 21:40:09 +0000 (14:40 -0700)]
Touchbot gesture library utilities addition

The old way of writing programs to the robot's eeprom was very
cumbersome.  It required a lot of duplicated code and was almost
impossible to read as each instruction involved ~5 lines of python code,
so even simple gestures were unweildy.

Here I add a some functions to the roibot module to wraps virtually all of
the functionality required for writing programs to the eeprom in a
couple easy functions.  They auto-increment line numbers and point table
entries, and retry every instruction behind the scenes.  Each
instruction also raises exceptions now if they fail, so the whole script
can be wrapped in a single try: statement to stop on any failure.

To additionally offload more of the overhead a run_program.py gesture
was added.  This has a run_program() function that essentially loads a
new program that you pass it into eeprom and then runs it for you
without each gesture script having to do all the setup individually.
You can also run the run_program gesture all on its own to simply
execute whatever program is currently in memory.  This saves eeprom
write cycles which are limited, and is convenient when doing many
repeated runs of the same script.

basic.py has been rewritten to use the new methodology of programming
and serve as an example for future gestures.  The other gestures will be
converted at a later date

BUG=chromium-os:34930
TEST=From the gestures directory, run "make" to build the wrapper
scripts, then use "./basic" to make sure that it can program a new set
of instructions to the eeprom and run them.  Once it has completed, run
"./run_program" to re-execute what it currently in memory without
re-writing it.

Change-Id: If5549d82ed52da2fc71cba6f89eaa8a822fedc2d
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34386
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoTouchbot: Fix the imports in the gesture scripts factory-2985.B
Charlie Mooney [Fri, 28 Sep 2012 23:15:36 +0000 (16:15 -0700)]
Touchbot: Fix the imports in the gesture scripts

Previously, when you ran the robot examples and gesture scripts,
python would throw errors about not being able to find modules, etc.
You would have to modify every one to get it to run and change your
environment variable PYTHONPATH.  There was a script already in place
that was trying to get around this "acmescript.sh" but it didn't really
work quite right.  This patch fixes these, so now you can actually run
the example code/gestures.  Additionally, this makes adapting them into
other more useful scripts far easier.  To further simplify the process,
the "examples" and the "gestures" directories have been merged.  They
both used the same acmescript.sh and Makefile and did essentially the
same thing, so instead of fixing each individually, I just merged them
into a single "gestures" directory.

Additionally, now that the libraries are actually getting imported
correctly, a compilation error in program.py was uncovered.  This patch
fixes an indentation error in there too.

BUG=chromium-os:34809
TEST=Connect to robot.  From the platform/touchbot/gestures directory,
run "make" which should make a shell script wrapper for the python
scripts in the folder.  Then run "basic" (one of these generated
scripts) and it should run without error, and the robot should actually
respond, etc.

Change-Id: I98932db8c10996ae6ac36c6b4dc3825bb25d0762
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34345
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoFix parameterWrite formatting
Charlie Mooney [Wed, 26 Sep 2012 17:35:11 +0000 (10:35 -0700)]
Fix parameterWrite formatting

There was a space missing in the command spec and the robot wouldn't
parse the commands correctly, so there was no way to alter any parameters
in the robot's memory that need to be accessed this way.  Separating the
parameter write command and the parameter name allows the client to send
commands in a format the robot expects.

BUG=chromium-os:34795
TEST=Execute robot.parameterWrite() to change the speed of the robot and
re-run the program currently in memory.  The speed changes.
Additionally, the robot sends @OK as a response now, instead of @NG

Change-Id: I71f3af3531b6322303037fdadf0b07edbab721d1
Signed-off-by: Charlie Mooney <charliemooney@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34114
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoCHROMIUMOS: Fix string formatting factory-2914.B release-R23-2913.B stabilize stabilize-daisy stabilize-link stabilize-link-2913.278
Terry Lambert [Thu, 13 Sep 2012 20:40:53 +0000 (13:40 -0700)]
CHROMIUMOS: Fix string formatting

String formatting is C-style instead of python-style which truncates
because python includes the decimal and characters afterward.

BUG=chromium-os:34412
TEST=Use monRS232CCoordinateDataSettings() in a robot control program.
Change-Id: I03b42dbea8cd19164ce744b88e21193333575a36
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/33223
Reviewed-by: Taylor Hutt <thutt@chromium.org>
2 years agoCHROMIUMOS: Fix comment
Terry Lambert [Thu, 13 Sep 2012 20:40:38 +0000 (13:40 -0700)]
CHROMIUMOS: Fix comment

Fix comment.

BUG=chromium-os:34410
TEST=Source inspection
Change-Id: I50b88a7f1bda3442aed42108f9925b6789a8de46
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/33222
Reviewed-by: Taylor Hutt <thutt@chromium.org>
2 years agoCHROMIUMOS: Touchbot programming string formatting
Terry Lambert [Thu, 30 Aug 2012 20:37:45 +0000 (13:37 -0700)]
CHROMIUMOS: Touchbot programming string formatting

This commit includes functions for formatting programming commands into
parameter list tuples of strings for subsequent use in a programming
command such as textWriteSequential(), or for storage and retrieval on a
host computer as a stored program libary for later usage.

BUG=chromium-os:34057
TEST=Currently, import the module and verify that the import does not
fail.

Change-Id: I543d48b5a93a9e73442e98e6fca752baf0b1f088
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/31930

2 years agoCHROMIUMOS: Fix comment spacing factory-2846.B factory-2848.B firmware-stout-2817.B
Terry Lambert [Thu, 23 Aug 2012 23:25:25 +0000 (16:25 -0700)]
CHROMIUMOS: Fix comment spacing

Indentation not impacting operation.

BUG=None
TEST=No functional difference, for humans, not python interpreter.

Change-Id: I7ab6cc33c5a79c8c383cb48bb281814782218937
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/31284
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
2 years agoCHROMIUMOS: Device definitions, gestures for touchbot factory-2717.B factory-2723.14.B firmware-butterfly-2788.B release-R22-2723.B
Terry Lambert [Wed, 1 Aug 2012 18:37:16 +0000 (11:37 -0700)]
CHROMIUMOS: Device definitions, gestures for touchbot

This commit includes device bounding rectangle definitions, as well as
several simple gestures, a robot parameter reset script, a point picking
program to allow precise identification of points for device definitions
to be used by gesture programs, and updated READMEs.

It also includes minor fixes to the robot control library having to do
with timing, documentation, and some small logic errors that impacted
programming the robot itself.

Adds default values for execJog() parameters.

Adds assertReset(), assertCancelError() utility functions to reduce code
duplication in gesture files and add implicit retries to deal with
preexisting line noise.

Adds an unrecoverableError exception, which is raised if the new asserts
fail.

With this commit, we should have the ability to do a one finger flick, a
two finger flick/scroll, a two finger scroll, and vary the speed of each
of these operations.

BUG=None
TEST=Run gesture programs on touchbot

Change-Id: Id45b6209876f8bfb082a61a2a85e1ebdd6abbf51
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/28956
Reviewed-by: Mark Koudritsky <kamrik@chromium.org>
2 years agoCHROMIUMOS: Add touchbot implementation files firmware-link-2695.2.B firmware-link-2695.B firmware-parrot-2685.B firmware-snow-2695.90.B firmware-snow-2695.B
Terry Lambert [Mon, 23 Jul 2012 21:52:49 +0000 (14:52 -0700)]
CHROMIUMOS: Add touchbot implementation files

This adds support for the touchbot host control components, which
includes the roibot python package, a small set of examples which cause
motion in the touchbot robot without doing much, and a test program to
act as a loopback serial port device to allow interactive validation of
the package via ad hoc testing.  It also includes documentation on the
design decisions leading to the current specific implementation.

All python components are documented in a format compatible with use of
'pydoc' to get information on their format, parameters, and intended
use.  Additional documentation in C source files is via block comments,
where applicable.

For a full layout and explanation of the tree layout, see the top level
README file, which is already present in the touchbot directory.

BUG=None
TEST=make in examples directory and run the examples via the generated
shell scripts; observe the robot motions.  Ad hoc testing via the
loopback requires additional scripting, and only applies to discrete
components; specifically, you will likely need to set a very large
timeout on commands compared to the default.

Change-Id: I8059c37cab81c740b9153f29827560534c7d7f18
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/28212

2 years agoinit repo 20/27420/1
Terry Lambert [Fri, 13 Jul 2012 23:53:50 +0000 (16:53 -0700)]
init repo