You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.8 KiB
92 lines
3.8 KiB
4 months ago
|
Overview
|
||
|
========
|
||
|
|
||
|
This project is included in the internal Android source tree to support
|
||
|
automated latency testing with Salad Fingers, a robot designed and built by
|
||
|
Steve Pfetsch (spfetsch@). The three main components we use and modify are:
|
||
|
|
||
|
- the android app (android/)
|
||
|
- the WALT device firmware (arduino/)
|
||
|
- the TCP-to-serial bridge (pywalt/)
|
||
|
|
||
|
Salad Fingers uses a single Teensyduino running WALT firmware to test multiple
|
||
|
devices without human intervention. The devices under test are connected to the
|
||
|
same host as the Teensy. An end-to-end connection for a single device (only one
|
||
|
device can use the WALT at a time) looks like this:
|
||
|
|
||
|
Device ------ Host ------ Teensy
|
||
|
(android/) (pywalt/) (arduino/)
|
||
|
|
||
|
For the device to communicate with the host over TCP on a physical USB
|
||
|
connection, a "reverse" port has to be set up with adb. For example:
|
||
|
|
||
|
$ adb reverse tcp:50007 tcp:45454
|
||
|
|
||
|
Any traffic the device sends to 127.0.0.1:50007 will come into the host on port
|
||
|
45454 and vice versa. Port 50007 is defined in the app source, but the device
|
||
|
port can be selected arbitrarily.
|
||
|
|
||
|
The TCP-to-serial bridge runs on the host and connects the app's TCP pipe to
|
||
|
the Teensy's serial pipe. However, there are two special commands the app can
|
||
|
send to the bridge to synchronize the clocks between the device and the Teensy:
|
||
|
"bridge sync" and "bridge update".
|
||
|
|
||
|
This setup requires some modifications from the original source, which are
|
||
|
explained in the next section, but behaves very similarly to a direct, Teensy-
|
||
|
to-device USB connection.
|
||
|
|
||
|
|
||
|
Modifications
|
||
|
=============
|
||
|
|
||
|
- Clock synchronization
|
||
|
Despite the reliability and accuracy of NTP, device and host wall clocks can
|
||
|
become significantly out of sync, especially if a device loses Wi-Fi
|
||
|
connectivity. To avoid this problem and take advantage of the low-latency
|
||
|
connection between the host and device, the clocks are synchronized based on
|
||
|
the time difference between when the bridge zeroed the Teensy's clock and
|
||
|
when the reply to the "bridge sync" command was sent to the device. This
|
||
|
required parallel changes in pywalt/ and android/.
|
||
|
|
||
|
- Automation intents
|
||
|
The test scripts which control the robot (Salad Fingers) on which the Teensy
|
||
|
is mounted require the ability to control certain aspects of the app running
|
||
|
on a device. These are defined in a separate RobotAutomationEvent interface.
|
||
|
This required changes to android/.
|
||
|
|
||
|
- Reverse port support
|
||
|
The WaltTcpConnection class was originally intended to communicate over a
|
||
|
true network from a Chromebook to a dedicated bridge with a specific IP
|
||
|
address. This address was changed to localhost in android/.
|
||
|
|
||
|
- Strict networking and request ordering
|
||
|
To prevent crashes due to network accesses performed on the main thread,
|
||
|
which is disallowed in strict mode, all such accesses were moved to a
|
||
|
dedicated network thread. As a side benefit, all requests sent to the bridge
|
||
|
now wait for a response before the next request is sent. This complies with
|
||
|
the serial nature of the device and guarantees correct ordering. This
|
||
|
required changes to android/.
|
||
|
|
||
|
- Hardware-specific firmware
|
||
|
The Teensy on Salad Fingers uses sensors that are not bundled with the
|
||
|
standard WALT hardware, so new thresholds for accelerometer shocks and photo-
|
||
|
diode readings were required to achieve accurate results. This required
|
||
|
changes to arduino/.
|
||
|
|
||
|
|
||
|
Usage
|
||
|
=====
|
||
|
|
||
|
This project is not intended to be automatically built. Instead, as needed, the
|
||
|
app will be built manually and checked in as a prebuilt that PTS will pick up.
|
||
|
The firmware cannot be built or loaded automatically, as it requires a modded
|
||
|
version of the Arduino project for Teensy. The required software can be loaded
|
||
|
on a laptop to flash the Teensy mounted on Salad Fingers.
|
||
|
|
||
|
|
||
|
See Also
|
||
|
========
|
||
|
|
||
|
Project metadata: vendor/google_meta/platform/external/walt/
|
||
|
PTS integration: vendor/google_testing/pts/tests/salad_fingers/
|