aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFTCTechNH <ftctechnh@gmail.com>2018-09-12 20:20:26 -0400
committerFTCTechNH <ftctechnh@gmail.com>2018-09-12 20:20:26 -0400
commit612f456b1020dac06adbc24b050e2a612fc6c756 (patch)
tree491f841e92acad6344442c7d2fff4b0b3489247a
parent4396aa89761b5a959ecce0dd811c54efeb0d019b (diff)
downloadftc-612f456b1020dac06adbc24b050e2a612fc6c756.zip
ftc-612f456b1020dac06adbc24b050e2a612fc6c756.tar.gz
ftc-612f456b1020dac06adbc24b050e2a612fc6c756.tar.bz2
ftc-612f456b1020dac06adbc24b050e2a612fc6c756.tar.xz
v4.0 changes.
-rw-r--r--FtcRobotController/build.gradle1
-rw-r--r--FtcRobotController/build.release.gradle1
-rw-r--r--FtcRobotController/src/main/AndroidManifest.xml4
-rwxr-xr-xFtcRobotController/src/main/assets/RoverRuckus.datbin0 -> 365028 bytes
-rwxr-xr-xFtcRobotController/src/main/assets/RoverRuckus.xml9
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptCompassCalibration.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptDIMAsIndicator.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptNullOp.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRampMotorSpeed.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRegisterOpModes.java3
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptScanServo.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptTelemetry.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentification.java16
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentificationWebcam.java194
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavRoverRuckus.java311
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigation.java14
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigationWebcam.java461
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SampleRevBlinkinLedDriver.java164
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorAdafruitRGB.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorBNO055IMU.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorDigitalTouch.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTColor.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTGyro.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorKLNavxMicro.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRCompass.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRRangeSensor.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREV2mDistance.java89
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREVColorDistance.java4
-rw-r--r--FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/internal/FtcRobotControllerActivity.java135
-rw-r--r--FtcRobotController/src/main/res/xml/app_settings.xml2
-rw-r--r--FtcRobotController/src/main/res/xml/device_filter.xml12
-rw-r--r--README.md105
-rw-r--r--TeamCode/build.release.gradle11
-rw-r--r--TeamCode/src/main/res/xml/teamwebcamcalibrations.xml149
-rw-r--r--build.common.gradle4
-rw-r--r--build.gradle3
-rw-r--r--doc/apk/FtcDriverStation-release.apkbin11905253 -> 18042947 bytes
-rw-r--r--doc/apk/FtcRobotController-release.apkbin19618034 -> 20344047 bytes
-rw-r--r--doc/javadoc/allclasses-frame.html51
-rw-r--r--doc/javadoc/allclasses-noframe.html51
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/ClassManagerFactory.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdPlaySound.html420
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdRequestSound.html353
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html338
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html353
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html8
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/CommandList.html69
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html382
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.html530
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcEventLoop.html41
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html31
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.html121
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopHandler.html140
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopIdle.html2
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html354
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html68
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html15
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/FtcRobotControllerService.html20
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/LaunchActivityConstantsList.html23
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html (renamed from doc/javadoc/com/qualcomm/ftccommon/AboutActivity.html)180
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html (renamed from doc/javadoc/com/qualcomm/ftccommon/AboutActivity.Item.html)63
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html171
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html383
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html222
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html208
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.StopWhat.html342
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.html783
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/USBAccessibleLynxModule.html72
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/UpdateUI.Callback.html6
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/UpdateUI.html4
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/package-frame.html14
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/package-summary.html60
-rw-r--r--doc/javadoc/com/qualcomm/ftccommon/package-tree.html58
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/EventLoopManager.html17
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/SyncdDevice.Manager.html239
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/SyncdDevice.ShutdownReason.html8
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/SyncdDevice.Syncable.html222
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/SyncdDevice.html12
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/opmode/package-tree.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/package-frame.html2
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/package-summary.html8
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/eventloop/package-tree.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/exception/RobotCoreException.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/exception/RobotProtocolException.html273
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/exception/package-frame.html1
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/exception/package-summary.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/exception/package-tree.html1
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/CRServo.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/CRServoImplEx.html24
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/CompassSensor.CompassMode.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/ControlSystem.html339
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DcMotorController.html32
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DcMotorControllerEx.html155
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DcMotorEx.html208
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DcMotorImplEx.html202
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DeviceManager.UsbDeviceType.html (renamed from doc/javadoc/com/qualcomm/robotcore/hardware/DeviceManager.DeviceType.html)110
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DeviceManager.html286
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/DigitalChannel.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/HardwareDevice.Manufacturer.html14
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/HardwareMap.DeviceMapping.html97
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/HardwareMap.html184
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/LynxModuleMeta.html23
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/LynxModuleMetaList.html23
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/MotorControlAlgorithm.html362
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/NormalizedColorSensor.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/PIDCoefficients.html52
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/PIDFCoefficients.html430
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/PwmControl.PwmRange.html34
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/PwmControl.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/RobotCoreLynxModule.html17
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/RobotCoreLynxUsbDevice.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/ScannedDevices.MapAdapter.html305
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/ScannedDevices.html527
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/Servo.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/ServoControllerEx.html35
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/ServoImplEx.html24
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/UltrasonicSensor.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/VisuallyIdentifiableHardwareDevice.html221
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/VoltageSensor.html4
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/package-frame.html8
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/package-summary.html77
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/hardware/package-tree.html32
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/util/SerialNumber.html417
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/util/TypeConversion.html114
-rw-r--r--doc/javadoc/com/qualcomm/robotcore/util/package-summary.html2
-rw-r--r--doc/javadoc/constant-values.html239
-rw-r--r--doc/javadoc/deprecated-list.html97
-rw-r--r--doc/javadoc/index-all.html1745
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/ClassFactory.InstanceHolder.html276
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/ClassFactory.html109
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Const.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Consumer.html10
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Event.html220
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Func.html11
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Function.html221
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/JavaUtil.AtMode.html378
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/JavaUtil.SortDirection.html342
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/JavaUtil.SortType.html354
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/JavaUtil.TrimMode.html354
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/JavaUtil.html711
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/NonConst.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Predicate.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.SignificantMotionDetectionListener.html222
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.html332
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/State.html247
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/StateMachine.html457
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/StateTransition.html338
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/Supplier.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/AndroidAccelerometer.html428
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/AndroidGyroscope.html430
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/AndroidOrientation.html446
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/AndroidSoundPool.html443
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/AndroidTextToSpeech.html517
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/package-frame.html23
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/package-summary.html165
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/android/package-tree.html138
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/matrices/package-summary.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/matrices/package-tree.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/Acceleration.html15
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/MagneticFlux.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.MotionDetectionListener.html222
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.Vector.html272
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.html483
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/NavUtil.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/Position.html5
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/Velocity.html11
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.TrackingResults.html444
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.html571
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.CameraDirection.html80
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.CameraMonitorFeedback.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.html234
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.html118
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.TrackingResults.html297
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.html362
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaRoverRuckus.html305
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.Listener.html47
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.html92
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.PoseAndCamera.html340
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.html681
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackables.html4
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/package-frame.html8
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/package-summary.html52
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/navigation/package-tree.html31
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/package-frame.html13
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/package-summary.html66
-rw-r--r--doc/javadoc/org/firstinspires/ftc/robotcore/external/package-tree.html17
-rw-r--r--doc/javadoc/overview-frame.html1
-rw-r--r--doc/javadoc/overview-summary.html6
-rw-r--r--doc/javadoc/overview-tree.html87
-rw-r--r--doc/javadoc/package-list1
-rw-r--r--doc/javadoc/serialized-form.html34
-rw-r--r--gradle/wrapper/gradle-wrapper.jarbin53636 -> 54329 bytes
-rw-r--r--gradle/wrapper/gradle-wrapper.properties4
-rw-r--r--libs/Blocks-release-sources.jarbin128952 -> 184873 bytes
-rw-r--r--libs/Blocks-release.aarbin1565086 -> 1966725 bytes
-rw-r--r--libs/FtcCommon-release-sources.jarbin196430 -> 210148 bytes
-rw-r--r--libs/FtcCommon-release.aarbin883755 -> 930927 bytes
-rw-r--r--libs/Hardware-release-sources.jarbin480225 -> 505956 bytes
-rw-r--r--libs/Hardware-release.aarbin493356 -> 525826 bytes
-rw-r--r--libs/Inspection-release-sources.jarbin9770 -> 11388 bytes
-rw-r--r--libs/Inspection-release.aarbin26614 -> 30616 bytes
-rw-r--r--libs/RobotCore-release-sources.jarbin1859656 -> 2295531 bytes
-rw-r--r--libs/RobotCore-release.aarbin11987105 -> 18347626 bytes
-rw-r--r--libs/Vuforia.jarbin240105 -> 204908 bytes
-rw-r--r--libs/armeabi-v7a/libVuforia.sobin11977064 -> 13870176 bytes
209 files changed, 25405 insertions, 1680 deletions
diff --git a/FtcRobotController/build.gradle b/FtcRobotController/build.gradle
index b73fbe4..13a0bb9 100644
--- a/FtcRobotController/build.gradle
+++ b/FtcRobotController/build.gradle
@@ -11,7 +11,6 @@ android {
}
compileSdkVersion 23
- buildToolsVersion '25.0.3'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
diff --git a/FtcRobotController/build.release.gradle b/FtcRobotController/build.release.gradle
index 4b3fe90..1cb2035 100644
--- a/FtcRobotController/build.release.gradle
+++ b/FtcRobotController/build.release.gradle
@@ -4,6 +4,5 @@ dependencies {
compile (name:'RobotCore-release', ext: 'aar')
compile (name:'Hardware-release', ext: 'aar')
compile (name:'FtcCommon-release', ext: 'aar')
- compile (name:'Analytics-release', ext:'aar')
compile (name:'WirelessP2p-release', ext:'aar')
}
diff --git a/FtcRobotController/src/main/AndroidManifest.xml b/FtcRobotController/src/main/AndroidManifest.xml
index 63fa417..387f1bb 100644
--- a/FtcRobotController/src/main/AndroidManifest.xml
+++ b/FtcRobotController/src/main/AndroidManifest.xml
@@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.qualcomm.ftcrobotcontroller"
- android:versionCode="27"
- android:versionName="3.7">
+ android:versionCode="28"
+ android:versionName="4.0">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
diff --git a/FtcRobotController/src/main/assets/RoverRuckus.dat b/FtcRobotController/src/main/assets/RoverRuckus.dat
new file mode 100755
index 0000000..461add8
--- /dev/null
+++ b/FtcRobotController/src/main/assets/RoverRuckus.dat
Binary files differ
diff --git a/FtcRobotController/src/main/assets/RoverRuckus.xml b/FtcRobotController/src/main/assets/RoverRuckus.xml
new file mode 100755
index 0000000..05eac7e
--- /dev/null
+++ b/FtcRobotController/src/main/assets/RoverRuckus.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<QCARConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="qcar_config.xsd">
+ <Tracking>
+ <ImageTarget name="BluePerimeter" size="254.000000 183.280029" />
+ <ImageTarget name="RedPerimeter" size="254.000000 181.783096" />
+ <ImageTarget name="FrontPerimeter" size="254.000000 158.794403" />
+ <ImageTarget name="BackPerimeter" size="254.000000 199.508209" />
+ </Tracking>
+</QCARConfig>
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptCompassCalibration.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptCompassCalibration.java
index b5920f9..cd1da0a 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptCompassCalibration.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptCompassCalibration.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.CompassSensor;
import com.qualcomm.robotcore.util.ElapsedTime;
@@ -52,7 +52,7 @@ import com.qualcomm.robotcore.util.ElapsedTime;
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name="Concept: Compass Calibration", group="Concept")
+@TeleOp(name="Concept: Compass Calibration", group="Concept")
@Disabled
public class ConceptCompassCalibration extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptDIMAsIndicator.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptDIMAsIndicator.java
index 699d2e5..75b6ad4 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptDIMAsIndicator.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptDIMAsIndicator.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DeviceInterfaceModule;
import com.qualcomm.robotcore.util.ElapsedTime;
@@ -51,7 +51,7 @@ import com.qualcomm.robotcore.util.ElapsedTime;
* Use Android Studios to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Concept: DIM As Indicator", group = "Concept")
+@TeleOp(name = "Concept: DIM As Indicator", group = "Concept")
@Disabled
public class ConceptDIMAsIndicator extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptNullOp.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptNullOp.java
index ee83ec0..2f84695 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptNullOp.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptNullOp.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.util.ElapsedTime;
import java.text.SimpleDateFormat;
@@ -40,7 +40,7 @@ import java.util.Date;
/**
* Demonstrates empty OpMode
*/
-@Autonomous(name = "Concept: NullOp", group = "Concept")
+@TeleOp(name = "Concept: NullOp", group = "Concept")
@Disabled
public class ConceptNullOp extends OpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRampMotorSpeed.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRampMotorSpeed.java
index 4508540..0a8f3dc 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRampMotorSpeed.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRampMotorSpeed.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;
/**
@@ -46,7 +46,7 @@ import com.qualcomm.robotcore.hardware.DcMotor;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Concept: Ramp Motor Speed", group = "Concept")
+@TeleOp(name = "Concept: Ramp Motor Speed", group = "Concept")
@Disabled
public class ConceptRampMotorSpeed extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRegisterOpModes.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRegisterOpModes.java
index a0046ba..2427c7f 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRegisterOpModes.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptRegisterOpModes.java
@@ -111,5 +111,8 @@ public class ConceptRegisterOpModes
// manager.register("Scan Servo", ConceptScanServo.class);
// manager.register("Telemetry", ConceptTelemetry.class);
// manager.register("Vuforia Navigation", ConceptVuforiaNavigation.class);
+ // manager.register("Vuforia Navigation Webcam", ConceptVuforiaNavigationWebcam.class);
+ // manager.register("Vuforia VuMarkID", ConceptVuforiaVuMarkIdentification.class);
+ // manager.register("Vuforia VuMarkID Webcam", ConceptVuforiaVuMarkIdentificationWebcam.class);
}
}
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptScanServo.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptScanServo.java
index 0f4e235..ce389ce 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptScanServo.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptScanServo.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.Servo;
/**
@@ -48,7 +48,7 @@ import com.qualcomm.robotcore.hardware.Servo;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Concept: Scan Servo", group = "Concept")
+@TeleOp(name = "Concept: Scan Servo", group = "Concept")
@Disabled
public class ConceptScanServo extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptTelemetry.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptTelemetry.java
index 5994561..d3b4682 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptTelemetry.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptTelemetry.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.VoltageSensor;
import com.qualcomm.robotcore.util.ElapsedTime;
@@ -47,7 +47,7 @@ import org.firstinspires.ftc.robotcore.external.Telemetry;
*
* @see Telemetry
*/
-@Autonomous(name = "Concept: Telemetry", group = "Concept")
+@TeleOp(name = "Concept: Telemetry", group = "Concept")
@Disabled
public class ConceptTelemetry extends LinearOpMode {
/** keeps track of the line of the poem which is to be emitted next */
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentification.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentification.java
index 041e2a2..f0d735b 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentification.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentification.java
@@ -28,7 +28,7 @@
*/
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
@@ -65,7 +65,7 @@ import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackables;
* is explained in {@link ConceptVuforiaNavigation}.
*/
-@Autonomous(name="Concept: VuMark Id", group ="Concept")
+@TeleOp(name="Concept: VuMark Id", group ="Concept")
@Disabled
public class ConceptVuMarkIdentification extends LinearOpMode {
@@ -83,7 +83,6 @@ public class ConceptVuMarkIdentification extends LinearOpMode {
/*
* To start up Vuforia, tell it the view that we wish to use for camera monitor (on the RC phone);
- * If no camera monitor is desired, use the parameterless constructor instead (commented out below).
*/
int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters(cameraMonitorViewId);
@@ -101,9 +100,9 @@ public class ConceptVuMarkIdentification extends LinearOpMode {
* random data. As an example, here is a example of a fragment of a valid key:
* ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
* Once you've obtained a license key, copy the string from the Vuforia web site
- * and paste it in to your code onthe next line, between the double quotes.
+ * and paste it in to your code on the next line, between the double quotes.
*/
- parameters.vuforiaLicenseKey = "ATsODcD/////AAAAAVw2lR...d45oGpdljdOh5LuFB9nDNfckoxb8COxKSFX";
+ parameters.vuforiaLicenseKey = " -- YOUR NEW VUFORIA KEY GOES HERE --- ";
/*
* We also indicate which camera on the RC that we wish to use.
@@ -111,7 +110,12 @@ public class ConceptVuMarkIdentification extends LinearOpMode {
* for a competition robot, the front camera might be more convenient.
*/
parameters.cameraDirection = VuforiaLocalizer.CameraDirection.BACK;
- this.vuforia = ClassFactory.createVuforiaLocalizer(parameters);
+
+ /**
+ * Instantiate the Vuforia engine
+ */
+ vuforia = ClassFactory.getInstance().createVuforia(parameters);
+
/**
* Load the data set containing the VuMarks for Relic Recovery. There's only one trackable
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentificationWebcam.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentificationWebcam.java
new file mode 100644
index 0000000..866261f
--- /dev/null
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuMarkIdentificationWebcam.java
@@ -0,0 +1,194 @@
+/* Copyright (c) 2017 FIRST. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided that
+ * the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * Neither the name of FIRST nor the names of its contributors may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
+ * LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.firstinspires.ftc.robotcontroller.external.samples;
+
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
+import com.qualcomm.robotcore.eventloop.opmode.Disabled;
+import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+
+import org.firstinspires.ftc.robotcore.external.ClassFactory;
+import org.firstinspires.ftc.robotcore.external.hardware.camera.WebcamName;
+import org.firstinspires.ftc.robotcore.external.matrices.OpenGLMatrix;
+import org.firstinspires.ftc.robotcore.external.matrices.VectorF;
+import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
+import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
+import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
+import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
+import org.firstinspires.ftc.robotcore.external.navigation.RelicRecoveryVuMark;
+import org.firstinspires.ftc.robotcore.external.navigation.VuMarkInstanceId;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackable;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackableDefaultListener;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackables;
+
+/**
+ * This OpMode illustrates the basics of using the Vuforia engine to determine
+ * the identity of Vuforia VuMarks encountered on the field. The code is structured as
+ * a LinearOpMode. It shares much structure with {@link ConceptVuforiaNavigationWebcam}; we do not here
+ * duplicate the core Vuforia documentation found there, but rather instead focus on the
+ * differences between the use of Vuforia for navigation vs VuMark identification.
+ *
+ * @see ConceptVuforiaNavigationWebcam
+ * @see VuforiaLocalizer
+ * @see VuforiaTrackableDefaultListener
+ * see ftc_app/doc/tutorial/FTC_FieldCoordinateSystemDefinition.pdf
+ *
+ * Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
+ * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
+ *
+ * IMPORTANT: In order to use this OpMode, you need to obtain your own Vuforia license key as
+ * is explained in {@link ConceptVuforiaNavigationWebcam}.
+ */
+
+@TeleOp(name="Concept: VuMark Id Webcam", group ="Concept")
+@Disabled
+public class ConceptVuMarkIdentificationWebcam extends LinearOpMode {
+
+ public static final String TAG = "Vuforia VuMark Sample";
+
+ OpenGLMatrix lastLocation = null;
+
+ /**
+ * {@link #vuforia} is the variable we will use to store our instance of the Vuforia
+ * localization engine.
+ */
+ VuforiaLocalizer vuforia;
+
+ /**
+ * This is the webcam we are to use. As with other hardware devices such as motors and
+ * servos, this device is identified using the robot configuration tool in the FTC application.
+ */
+ WebcamName webcamName;
+
+ @Override public void runOpMode() {
+
+ /*
+ * Retrieve the camera we are to use.
+ */
+ webcamName = hardwareMap.get(WebcamName.class, "Webcam 1");
+
+ /*
+ * To start up Vuforia, tell it the view that we wish to use for camera monitor (on the RC phone);
+ * If no camera monitor is desired, use the parameterless constructor instead (commented out below).
+ */
+ int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
+ VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters(cameraMonitorViewId);
+
+ // OR... Do Not Activate the Camera Monitor View, to save power
+ // VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
+
+ /*
+ * IMPORTANT: You need to obtain your own license key to use Vuforia. The string below with which
+ * 'parameters.vuforiaLicenseKey' is initialized is for illustration only, and will not function.
+ * A Vuforia 'Development' license key, can be obtained free of charge from the Vuforia developer
+ * web site at https://developer.vuforia.com/license-manager.
+ *
+ * Vuforia license keys are always 380 characters long, and look as if they contain mostly
+ * random data. As an example, here is a example of a fragment of a valid key:
+ * ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
+ * Once you've obtained a license key, copy the string from the Vuforia web site
+ * and paste it in to your code on the next line, between the double quotes.
+ */
+ parameters.vuforiaLicenseKey = " -- YOUR NEW VUFORIA KEY GOES HERE --- ";
+
+
+ /**
+ * We also indicate which camera on the RC we wish to use. For pedagogical purposes,
+ * we use the same logic as in {@link ConceptVuforiaNavigationWebcam}.
+ */
+ parameters.cameraName = webcamName;
+ this.vuforia = ClassFactory.getInstance().createVuforia(parameters);
+
+ /**
+ * Load the data set containing the VuMarks for Relic Recovery. There's only one trackable
+ * in this data set: all three of the VuMarks in the game were created from this one template,
+ * but differ in their instance id information.
+ * @see VuMarkInstanceId
+ */
+ VuforiaTrackables relicTrackables = this.vuforia.loadTrackablesFromAsset("RelicVuMark");
+ VuforiaTrackable relicTemplate = relicTrackables.get(0);
+ relicTemplate.setName("relicVuMarkTemplate"); // can help in debugging; otherwise not necessary
+
+ telemetry.addData(">", "Press Play to start");
+ telemetry.update();
+ waitForStart();
+
+ relicTrackables.activate();
+
+ while (opModeIsActive()) {
+
+ /**
+ * See if any of the instances of {@link relicTemplate} are currently visible.
+ * {@link RelicRecoveryVuMark} is an enum which can have the following values:
+ * UNKNOWN, LEFT, CENTER, and RIGHT. When a VuMark is visible, something other than
+ * UNKNOWN will be returned by {@link RelicRecoveryVuMark#from(VuforiaTrackable)}.
+ */
+ RelicRecoveryVuMark vuMark = RelicRecoveryVuMark.from(relicTemplate);
+ if (vuMark != RelicRecoveryVuMark.UNKNOWN) {
+
+ /* Found an instance of the template. In the actual game, you will probably
+ * loop until this condition occurs, then move on to act accordingly depending
+ * on which VuMark was visible. */
+ telemetry.addData("VuMark", "%s visible", vuMark);
+
+ /* For fun, we also exhibit the navigational pose. In the Relic Recovery game,
+ * it is perhaps unlikely that you will actually need to act on this pose information, but
+ * we illustrate it nevertheless, for completeness. */
+ OpenGLMatrix pose = ((VuforiaTrackableDefaultListener)relicTemplate.getListener()).getFtcCameraFromTarget();
+ telemetry.addData("Pose", format(pose));
+
+ /* We further illustrate how to decompose the pose into useful rotational and
+ * translational components */
+ if (pose != null) {
+ VectorF trans = pose.getTranslation();
+ Orientation rot = Orientation.getOrientation(pose, AxesReference.EXTRINSIC, AxesOrder.XYZ, AngleUnit.DEGREES);
+
+ // Extract the X, Y, and Z components of the offset of the target relative to the robot
+ double tX = trans.get(0);
+ double tY = trans.get(1);
+ double tZ = trans.get(2);
+
+ // Extract the rotational components of the target relative to the robot
+ double rX = rot.firstAngle;
+ double rY = rot.secondAngle;
+ double rZ = rot.thirdAngle;
+ }
+ }
+ else {
+ telemetry.addData("VuMark", "not visible");
+ }
+
+ telemetry.update();
+ }
+ }
+
+ String format(OpenGLMatrix transformationMatrix) {
+ return (transformationMatrix != null) ? transformationMatrix.formatAsTransform() : "null";
+ }
+}
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavRoverRuckus.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavRoverRuckus.java
new file mode 100644
index 0000000..eb21cf7
--- /dev/null
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavRoverRuckus.java
@@ -0,0 +1,311 @@
+/* Copyright (c) 2018 FIRST. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided that
+ * the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * Neither the name of FIRST nor the names of its contributors may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
+ * LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.firstinspires.ftc.robotcontroller.external.samples;
+
+import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
+import com.qualcomm.robotcore.eventloop.opmode.Disabled;
+
+import org.firstinspires.ftc.robotcore.external.ClassFactory;
+import org.firstinspires.ftc.robotcore.external.matrices.OpenGLMatrix;
+import org.firstinspires.ftc.robotcore.external.matrices.VectorF;
+import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackable;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackableDefaultListener;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackables;
+
+import static org.firstinspires.ftc.robotcore.external.navigation.AngleUnit.DEGREES;
+import static org.firstinspires.ftc.robotcore.external.navigation.AxesOrder.XYZ;
+import static org.firstinspires.ftc.robotcore.external.navigation.AxesOrder.YZX;
+import static org.firstinspires.ftc.robotcore.external.navigation.AxesReference.EXTRINSIC;
+import static org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer.CameraDirection.BACK;
+import static org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer.CameraDirection.FRONT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * This 2018-2019 OpMode illustrates the basics of using the Vuforia localizer to determine
+ * positioning and orientation of robot on the FTC field.
+ * The code is structured as a LinearOpMode
+ *
+ * Vuforia uses the phone's camera to inspect it's surroundings, and attempt to locate target images.
+ *
+ * When images are located, Vuforia is able to determine the position and orientation of the
+ * image relative to the camera. This sample code than combines that information with a
+ * knowledge of where the target images are on the field, to determine the location of the camera.
+ *
+ * This example assumes a "square" field configuration where the red and blue alliance stations
+ * are on opposite walls of each other.
+ *
+ * From the Audience perspective, the Red Alliance station is on the right and the
+ * Blue Alliance Station is on the left.
+
+ * The four vision targets are located in the center of each of the perimeter walls with
+ * the images facing inwards towards the robots:
+ * - BlueRover is the Mars Rover image target on the wall closest to the blue alliance
+ * - RedFootprint is the Lunar Footprint target on the wall closest to the red alliance
+ * - FrontCraters is the Lunar Craters image target on the wall closest to the audience
+ * - BackSpace is the Deep Space image target on the wall farthest from the audience
+ *
+ * A final calculation then uses the location of the camera on the robot to determine the
+ * robot's location and orientation on the field.
+ *
+ * @see VuforiaLocalizer
+ * @see VuforiaTrackableDefaultListener
+ * see ftc_app/doc/tutorial/FTC_FieldCoordinateSystemDefinition.pdf
+ *
+ * Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
+ * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
+ *
+ * IMPORTANT: In order to use this OpMode, you need to obtain your own Vuforia license key as
+ * is explained below.
+ */
+
+@TeleOp(name="Concept: Vuforia Rover Nav", group ="Concept")
+@Disabled
+public class ConceptVuforiaNavRoverRuckus extends LinearOpMode {
+
+ /*
+ * IMPORTANT: You need to obtain your own license key to use Vuforia. The string below with which
+ * 'parameters.vuforiaLicenseKey' is initialized is for illustration only, and will not function.
+ * A Vuforia 'Development' license key, can be obtained free of charge from the Vuforia developer
+ * web site at https://developer.vuforia.com/license-manager.
+ *
+ * Vuforia license keys are always 380 characters long, and look as if they contain mostly
+ * random data. As an example, here is a example of a fragment of a valid key:
+ * ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
+ * Once you've obtained a license key, copy the string from the Vuforia web site
+ * and paste it in to your code on the next line, between the double quotes.
+ */
+ private static final String VUFORIA_KEY = " -- YOUR NEW VUFORIA KEY GOES HERE --- ";
+
+ // Since ImageTarget trackables use mm to specifiy their dimensions, we must use mm for all the physical dimension.
+ // We will define some constants and conversions here
+ private static final float mmPerInch = 25.4f;
+ private static final float mmFTCFieldWidth = (12*6) * mmPerInch; // the width of the FTC field (from the center point to the outer panels)
+ private static final float mmTargetHeight = (6) * mmPerInch; // the height of the center of the target image above the floor
+
+ // Select which camera you want use. The FRONT camera is the one on the same side as the screen.
+ // Valid choices are: BACK or FRONT
+ private static final VuforiaLocalizer.CameraDirection CAMERA_CHOICE = BACK;
+
+ private OpenGLMatrix lastLocation = null;
+ private boolean targetVisible = false;
+
+ /**
+ * {@link #vuforia} is the variable we will use to store our instance of the Vuforia
+ * localization engine.
+ */
+ VuforiaLocalizer vuforia;
+
+ @Override public void runOpMode() {
+ /*
+ * Configure Vuforia by creating a Parameter object, and passing it to the Vuforia engine.
+ * We can pass Vuforia the handle to a camera preview resource (on the RC phone);
+ * If no camera monitor is desired, use the parameterless constructor instead (commented out below).
+ */
+ int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
+ VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters(cameraMonitorViewId);
+
+ // VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
+
+ parameters.vuforiaLicenseKey = VUFORIA_KEY ;
+ parameters.cameraDirection = CAMERA_CHOICE;
+
+ // Instantiate the Vuforia engine
+ vuforia = ClassFactory.getInstance().createVuforia(parameters);
+
+ // Load the data sets that for the trackable objects. These particular data
+ // sets are stored in the 'assets' part of our application.
+ VuforiaTrackables targetsRoverRuckus = this.vuforia.loadTrackablesFromAsset("RoverRuckus");
+ VuforiaTrackable blueRover = targetsRoverRuckus.get(0);
+ blueRover.setName("Blue-Rover");
+ VuforiaTrackable redFootprint = targetsRoverRuckus.get(1);
+ redFootprint.setName("Red-Footprint");
+ VuforiaTrackable frontCraters = targetsRoverRuckus.get(2);
+ frontCraters.setName("Front-Craters");
+ VuforiaTrackable backSpace = targetsRoverRuckus.get(3);
+ backSpace.setName("Back-Space");
+
+ // For convenience, gather together all the trackable objects in one easily-iterable collection */
+ List<VuforiaTrackable> allTrackables = new ArrayList<VuforiaTrackable>();
+ allTrackables.addAll(targetsRoverRuckus);
+
+ /**
+ * In order for localization to work, we need to tell the system where each target is on the field, and
+ * where the phone resides on the robot. These specifications are in the form of <em>transformation matrices.</em>
+ * Transformation matrices are a central, important concept in the math here involved in localization.
+ * See <a href="https://en.wikipedia.org/wiki/Transformation_matrix">Transformation Matrix</a>
+ * for detailed information. Commonly, you'll encounter transformation matrices as instances
+ * of the {@link OpenGLMatrix} class.
+ *
+ * If you are standing in the Red Alliance Station looking towards the center of the field,
+ * - The X axis runs from your left to the right. (positive from the center to the right)
+ * - The Y axis runs from the Red Alliance Station towards the other side of the field
+ * where the Blue Alliance Station is. (Positive is from the center, towards the BlueAlliance station)
+ * - The Z axis runs from the floor, upwards towards the ceiling. (Positive is above the floor)
+ *
+ * This Rover Ruckus sample places a specific target in the middle of each perimeter wall.
+ *
+ * Before being transformed, each target image is conceptually located at the origin of the field's
+ * coordinate system (the center of the field), facing up.
+ */
+
+ /**
+ * To place the BlueRover target in the middle of the blue perimeter wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright.
+ * - Then, we translate it along the Y axis to the blue perimeter wall.
+ */
+ OpenGLMatrix blueRoverLocationOnField = OpenGLMatrix
+ .translation(0, mmFTCFieldWidth, mmTargetHeight)
+ .multiplied(Orientation.getRotationMatrix(EXTRINSIC, XYZ, DEGREES, 90, 0, 0));
+ blueRover.setLocation(blueRoverLocationOnField);
+
+ /**
+ * To place the RedFootprint target in the middle of the red perimeter wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright.
+ * - Second, we rotate it 180 around the field's Z axis so the image is flat against the red perimeter wall
+ * and facing inwards to the center of the field.
+ * - Then, we translate it along the negative Y axis to the red perimeter wall.
+ */
+ OpenGLMatrix redFootprintLocationOnField = OpenGLMatrix
+ .translation(0, -mmFTCFieldWidth, mmTargetHeight)
+ .multiplied(Orientation.getRotationMatrix(EXTRINSIC, XYZ, DEGREES, 90, 0, 180));
+ redFootprint.setLocation(redFootprintLocationOnField);
+
+ /**
+ * To place the FrontCraters target in the middle of the front perimeter wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright.
+ * - Second, we rotate it 90 around the field's Z axis so the image is flat against the front wall
+ * and facing inwards to the center of the field.
+ * - Then, we translate it along the negative X axis to the front perimeter wall.
+ */
+ OpenGLMatrix frontCratersLocationOnField = OpenGLMatrix
+ .translation(-mmFTCFieldWidth, 0, mmTargetHeight)
+ .multiplied(Orientation.getRotationMatrix(EXTRINSIC, XYZ, DEGREES, 90, 0 , 90));
+ frontCraters.setLocation(frontCratersLocationOnField);
+
+ /**
+ * To place the BackSpace target in the middle of the back perimeter wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright.
+ * - Second, we rotate it -90 around the field's Z axis so the image is flat against the back wall
+ * and facing inwards to the center of the field.
+ * - Then, we translate it along the X axis to the back perimeter wall.
+ */
+ OpenGLMatrix backSpaceLocationOnField = OpenGLMatrix
+ .translation(mmFTCFieldWidth, 0, mmTargetHeight)
+ .multiplied(Orientation.getRotationMatrix(EXTRINSIC, XYZ, DEGREES, 90, 0, -90));
+ backSpace.setLocation(backSpaceLocationOnField);
+
+ /**
+ * Create a transformation matrix describing where the phone is on the robot.
+ *
+ * The coordinate frame for the robot looks the same as the field.
+ * The robot's "forward" direction is facing out along X axis, with the LEFT side facing out along the Y axis.
+ * Z is UP on the robot. This equates to a bearing angle of Zero degrees.
+ *
+ * The phone starts out lying flat, with the screen facing Up and with the physical top of the phone
+ * pointing to the LEFT side of the Robot. It's very important when you test this code that the top of the
+ * camera is pointing to the left side of the robot. The rotation angles don't work if you flip the phone.
+ *
+ * If using the rear (High Res) camera:
+ * We need to rotate the camera around it's long axis to bring the rear camera forward.
+ * This requires a negative 90 degree rotation on the Y axis
+ *
+ * If using the Front (Low Res) camera
+ * We need to rotate the camera around it's long axis to bring the FRONT camera forward.
+ * This requires a Positive 90 degree rotation on the Y axis
+ *
+ * Next, translate the camera lens to where it is on the robot.
+ * In this example, it is centered (left to right), but 110 mm forward of the middle of the robot, and 200 mm above ground level.
+ */
+
+ final int CAMERA_FORWARD_DISPLACEMENT = 110; // eg: Camera is 110 mm in front of robot center
+ final int CAMERA_VERTICAL_DISPLACEMENT = 200; // eg: Camera is 200 mm above ground
+ final int CAMERA_LEFT_DISPLACEMENT = 0; // eg: Camera is ON the robot's center line
+
+ OpenGLMatrix phoneLocationOnRobot = OpenGLMatrix
+ .translation(CAMERA_FORWARD_DISPLACEMENT, CAMERA_LEFT_DISPLACEMENT, CAMERA_VERTICAL_DISPLACEMENT)
+ .multiplied(Orientation.getRotationMatrix(EXTRINSIC, YZX, DEGREES,
+ CAMERA_CHOICE == FRONT ? 90 : -90, 0, 0));
+
+ /** Let all the trackable listeners know where the phone is. */
+ for (VuforiaTrackable trackable : allTrackables)
+ {
+ ((VuforiaTrackableDefaultListener)trackable.getListener()).setPhoneInformation(phoneLocationOnRobot, parameters.cameraDirection);
+ }
+
+ /** Wait for the game to begin */
+ telemetry.addData(">", "Press Play to start tracking");
+ telemetry.update();
+ waitForStart();
+
+ /** Start tracking the data sets we care about. */
+ targetsRoverRuckus.activate();
+ while (opModeIsActive()) {
+
+ // check all the trackable target to see which one (if any) is visible.
+ targetVisible = false;
+ for (VuforiaTrackable trackable : allTrackables) {
+ if (((VuforiaTrackableDefaultListener)trackable.getListener()).isVisible()) {
+ telemetry.addData("Visible Target", trackable.getName());
+ targetVisible = true;
+
+ // getUpdatedRobotLocation() will return null if no new information is available since
+ // the last time that call was made, or if the trackable is not currently visible.
+ OpenGLMatrix robotLocationTransform = ((VuforiaTrackableDefaultListener)trackable.getListener()).getUpdatedRobotLocation();
+ if (robotLocationTransform != null) {
+ lastLocation = robotLocationTransform;
+ }
+ break;
+ }
+ }
+
+ // Provide feedback as to where the robot is located (if we know).
+ if (targetVisible) {
+ // express position (translation) of robot in inches.
+ VectorF translation = lastLocation.getTranslation();
+ telemetry.addData("Pos (in)", "{X, Y, Z} = %.1f, %.1f, %.1f",
+ translation.get(0) / mmPerInch, translation.get(1) / mmPerInch, translation.get(2) / mmPerInch);
+
+ // express the rotation of the robot in degrees.
+ Orientation rotation = Orientation.getOrientation(lastLocation, EXTRINSIC, XYZ, DEGREES);
+ telemetry.addData("Rot (deg)", "{Roll, Pitch, Heading} = %.0f, %.0f, %.0f", rotation.firstAngle, rotation.secondAngle, rotation.thirdAngle);
+ }
+ else {
+ telemetry.addData("Visible Target", "none");
+ }
+ telemetry.update();
+ }
+ }
+}
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigation.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigation.java
index 0fb2c42..81ab6b6 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigation.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigation.java
@@ -29,7 +29,7 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.util.RobotLog;
@@ -80,7 +80,7 @@ import java.util.List;
* is explained below.
*/
-@Autonomous(name="Concept: Vuforia Navigation", group ="Concept")
+@TeleOp(name="Concept: Vuforia Navigation", group ="Concept")
@Disabled
public class ConceptVuforiaNavigation extends LinearOpMode {
@@ -115,9 +115,9 @@ public class ConceptVuforiaNavigation extends LinearOpMode {
* random data. As an example, here is a example of a fragment of a valid key:
* ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
* Once you've obtained a license key, copy the string from the Vuforia web site
- * and paste it in to your code onthe next line, between the double quotes.
+ * and paste it in to your code on the next line, between the double quotes.
*/
- parameters.vuforiaLicenseKey = "ATsODcD/////AAAAAVw2lR...d45oGpdljdOh5LuFB9nDNfckoxb8COxKSFX";
+ parameters.vuforiaLicenseKey = " -- YOUR NEW VUFORIA KEY GOES HERE --- ";
/*
* We also indicate which camera on the RC that we wish to use.
@@ -125,7 +125,11 @@ public class ConceptVuforiaNavigation extends LinearOpMode {
* for a competition robot, the front camera might be more convenient.
*/
parameters.cameraDirection = VuforiaLocalizer.CameraDirection.BACK;
- this.vuforia = ClassFactory.createVuforiaLocalizer(parameters);
+
+ /**
+ * Instantiate the Vuforia engine
+ */
+ vuforia = ClassFactory.getInstance().createVuforia(parameters);
/**
* Load the data sets that for the trackable objects we wish to track. These particular data
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigationWebcam.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigationWebcam.java
new file mode 100644
index 0000000..1b619f3
--- /dev/null
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/ConceptVuforiaNavigationWebcam.java
@@ -0,0 +1,461 @@
+/* Copyright (c) 2017 FIRST. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided that
+ * the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * Neither the name of FIRST nor the names of its contributors may be used to endorse or
+ * promote products derived from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
+ * LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.firstinspires.ftc.robotcontroller.external.samples;
+
+import android.graphics.Bitmap;
+
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
+import com.qualcomm.robotcore.eventloop.opmode.Disabled;
+import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.util.RobotLog;
+import com.qualcomm.robotcore.util.ThreadPool;
+import com.vuforia.Frame;
+
+import org.firstinspires.ftc.robotcore.external.ClassFactory;
+import org.firstinspires.ftc.robotcore.external.function.Consumer;
+import org.firstinspires.ftc.robotcore.external.function.Continuation;
+import org.firstinspires.ftc.robotcore.external.hardware.camera.WebcamName;
+import org.firstinspires.ftc.robotcore.external.matrices.MatrixF;
+import org.firstinspires.ftc.robotcore.external.matrices.OpenGLMatrix;
+import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
+import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
+import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
+import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaLocalizer;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackable;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackableDefaultListener;
+import org.firstinspires.ftc.robotcore.external.navigation.VuforiaTrackables;
+import org.firstinspires.ftc.robotcore.internal.system.AppUtil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * This 2016-2017 OpMode illustrates the basics of using the Vuforia localizer to determine
+ * positioning and orientation of robot on the FTC field.
+ * The code is structured as a LinearOpMode
+ *
+ * Vuforia uses the phone's camera to inspect it's surroundings, and attempt to locate target images.
+ *
+ * When images are located, Vuforia is able to determine the position and orientation of the
+ * image relative to the camera. This sample code than combines that information with a
+ * knowledge of where the target images are on the field, to determine the location of the camera.
+ *
+ * This example assumes a "diamond" field configuration where the red and blue alliance stations
+ * are adjacent on the corner of the field furthest from the audience.
+ * From the Audience perspective, the Red driver station is on the right.
+ * The two vision target are located on the two walls closest to the audience, facing in.
+ * The Stones are on the RED side of the field, and the Chips are on the Blue side.
+ *
+ * A final calculation then uses the location of the camera on the robot to determine the
+ * robot's location and orientation on the field.
+ *
+ * @see VuforiaLocalizer
+ * @see VuforiaTrackableDefaultListener
+ * see ftc_app/doc/tutorial/FTC_FieldCoordinateSystemDefinition.pdf
+ *
+ * Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
+ * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
+ *
+ * IMPORTANT: In order to use this OpMode, you need to obtain your own Vuforia license key as
+ * is explained below.
+ */
+
+@TeleOp(name="Concept: Vuforia Nav Webcam", group ="Concept")
+@Disabled
+public class ConceptVuforiaNavigationWebcam extends LinearOpMode {
+
+ public static final String TAG = "Vuforia Navigation Sample";
+
+ OpenGLMatrix lastLocation = null;
+
+ /**
+ * @see #captureFrameToFile()
+ */
+ int captureCounter = 0;
+ File captureDirectory = AppUtil.ROBOT_DATA_DIR;
+
+ /**
+ * {@link #vuforia} is the variable we will use to store our instance of the Vuforia
+ * localization engine.
+ */
+ VuforiaLocalizer vuforia;
+
+ /**
+ * This is the webcam we are to use. As with other hardware devices such as motors and
+ * servos, this device is identified using the robot configuration tool in the FTC application.
+ */
+ WebcamName webcamName;
+
+ @Override public void runOpMode() {
+
+ /*
+ * Retrieve the camera we are to use.
+ */
+ webcamName = hardwareMap.get(WebcamName.class, "Webcam 1");
+
+ /*
+ * To start up Vuforia, tell it the view that we wish to use for camera monitor (on the RC phone);
+ * If no camera monitor is desired, use the parameterless constructor instead (commented out below).
+ */
+ int cameraMonitorViewId = hardwareMap.appContext.getResources().getIdentifier("cameraMonitorViewId", "id", hardwareMap.appContext.getPackageName());
+ VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters(cameraMonitorViewId);
+
+ // OR... Do Not Activate the Camera Monitor View, to save power
+ // VuforiaLocalizer.Parameters parameters = new VuforiaLocalizer.Parameters();
+
+ /*
+ * IMPORTANT: You need to obtain your own license key to use Vuforia. The string below with which
+ * 'parameters.vuforiaLicenseKey' is initialized is for illustration only, and will not function.
+ * A Vuforia 'Development' license key, can be obtained free of charge from the Vuforia developer
+ * web site at https://developer.vuforia.com/license-manager.
+ *
+ * Vuforia license keys are always 380 characters long, and look as if they contain mostly
+ * random data. As an example, here is a example of a fragment of a valid key:
+ * ... yIgIzTqZ4mWjk9wd3cZO9T1axEqzuhxoGlfOOI2dRzKS4T0hQ8kT ...
+ * Once you've obtained a license key, copy the string from the Vuforia web site
+ * and paste it in to your code on the next line, between the double quotes.
+ */
+ parameters.vuforiaLicenseKey = " -- YOUR NEW VUFORIA KEY GOES HERE --- ";
+
+ /**
+ * We also indicate which camera on the RC we wish to use.
+ */
+ parameters.cameraName = webcamName;
+
+ /**
+ * Instantiate the Vuforia engine
+ */
+ vuforia = ClassFactory.getInstance().createVuforia(parameters);
+
+ /**
+ * Because this opmode processes frames in order to write them to a file, we tell Vuforia
+ * that we want to ensure that certain frame formats are available in the {@link Frame}s we
+ * see.
+ */
+ vuforia.enableConvertFrameToBitmap();
+
+ /** @see #captureFrameToFile() */
+ AppUtil.getInstance().ensureDirectoryExists(captureDirectory);
+
+
+ /**
+ * Load the data sets that for the trackable objects we wish to track. These particular data
+ * sets are stored in the 'assets' part of our application (you'll see them in the Android
+ * Studio 'Project' view over there on the left of the screen). You can make your own datasets
+ * with the Vuforia Target Manager: https://developer.vuforia.com/target-manager. PDFs for the
+ * example "StonesAndChips", datasets can be found in in this project in the
+ * documentation directory.
+ */
+ VuforiaTrackables stonesAndChips = vuforia.loadTrackablesFromAsset("StonesAndChips");
+ VuforiaTrackable redTarget = stonesAndChips.get(0);
+ redTarget.setName("RedTarget"); // Stones
+
+ VuforiaTrackable blueTarget = stonesAndChips.get(1);
+ blueTarget.setName("BlueTarget"); // Chips
+
+ /** For convenience, gather together all the trackable objects in one easily-iterable collection */
+ List<VuforiaTrackable> allTrackables = new ArrayList<VuforiaTrackable>();
+ allTrackables.addAll(stonesAndChips);
+
+ /**
+ * We use units of mm here because that's the recommended units of measurement for the
+ * size values specified in the XML for the ImageTarget trackables in data sets. E.g.:
+ * <ImageTarget name="stones" size="247 173"/>
+ * You don't *have to* use mm here, but the units here and the units used in the XML
+ * target configuration files *must* correspond for the math to work out correctly.
+ */
+ float mmPerInch = 25.4f;
+ float mmBotWidth = 18 * mmPerInch; // ... or whatever is right for your robot
+ float mmFTCFieldWidth = (12*12 - 2) * mmPerInch; // the FTC field is ~11'10" center-to-center of the glass panels
+
+ /**
+ * In order for localization to work, we need to tell the system where each target we
+ * wish to use for navigation resides on the field, and we need to specify where on the robot
+ * the camera resides. These specifications are in the form of <em>transformation matrices.</em>
+ * Transformation matrices are a central, important concept in the math here involved in localization.
+ * See <a href="https://en.wikipedia.org/wiki/Transformation_matrix">Transformation Matrix</a>
+ * for detailed information. Commonly, you'll encounter transformation matrices as instances
+ * of the {@link OpenGLMatrix} class.
+ *
+ * For the most part, you don't need to understand the details of the math of how transformation
+ * matrices work inside (as fascinating as that is, truly). Just remember these key points:
+ * <ol>
+ *
+ * <li>You can put two transformations together to produce a third that combines the effect of
+ * both of them. If, for example, you have a rotation transform R and a translation transform T,
+ * then the combined transformation matrix RT which does the rotation first and then the translation
+ * is given by {@code RT = T.multiplied(R)}. That is, the transforms are multiplied in the
+ * <em>reverse</em> of the chronological order in which they applied.</li>
+ *
+ * <li>A common way to create useful transforms is to use methods in the {@link OpenGLMatrix}
+ * class and the Orientation class. See, for example, {@link OpenGLMatrix#translation(float,
+ * float, float)}, {@link OpenGLMatrix#rotation(AngleUnit, float, float, float, float)}, and
+ * {@link Orientation#getRotationMatrix(AxesReference, AxesOrder, AngleUnit, float, float, float)}.
+ * Related methods in {@link OpenGLMatrix}, such as {@link OpenGLMatrix#rotated(AngleUnit,
+ * float, float, float, float)}, are syntactic shorthands for creating a new transform and
+ * then immediately multiplying the receiver by it, which can be convenient at times.</li>
+ *
+ * <li>If you want to break open the black box of a transformation matrix to understand
+ * what it's doing inside, use {@link MatrixF#getTranslation()} to fetch how much the
+ * transform will move you in x, y, and z, and use {@link Orientation#getOrientation(MatrixF,
+ * AxesReference, AxesOrder, AngleUnit)} to determine the rotational motion that the transform
+ * will impart. See {@link #format(OpenGLMatrix)} below for an example.</li>
+ *
+ * </ol>
+ *
+ * This example places the "stones" image on the perimeter wall to the Left
+ * of the Red Driver station wall. Similar to the Red Beacon Location on the Res-Q
+ *
+ * This example places the "chips" image on the perimeter wall to the Right
+ * of the Blue Driver station. Similar to the Blue Beacon Location on the Res-Q
+ *
+ * See the doc folder of this project for a description of the Field Coordinate System
+ * conventions.
+ *
+ * Initially the target is conceptually lying at the origin of the Field Coordinate System
+ * (the center of the field), facing up.
+ *
+ * In this configuration, the target's coordinate system aligns with that of the field.
+ *
+ * In a real situation we'd also account for the vertical (Z) offset of the target,
+ * but for simplicity, we ignore that here; for a real robot, you'll want to fix that.
+ *
+ * To place the Stones Target on the Red Audience wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright
+ * - Then we rotate it 90 around the field's Z access to face it away from the audience.
+ * - Finally, we translate it back along the X axis towards the red audience wall.
+ */
+ OpenGLMatrix redTargetLocationOnField = OpenGLMatrix
+ /* Then we translate the target off to the RED WALL. Our translation here
+ is a negative translation in X.*/
+ .translation(-mmFTCFieldWidth/2, 0, 0)
+ .multiplied(Orientation.getRotationMatrix(
+ /* First, in the fixed (field) coordinate system, we rotate 90deg in X, then 90 in Z */
+ AxesReference.EXTRINSIC, AxesOrder.XZX,
+ AngleUnit.DEGREES, 90, 90, 0));
+ redTarget.setLocationFtcFieldFromTarget(redTargetLocationOnField);
+ RobotLog.ii(TAG, "Red Target=%s", format(redTargetLocationOnField));
+
+ /*
+ * To place the Stones Target on the Blue Audience wall:
+ * - First we rotate it 90 around the field's X axis to flip it upright
+ * - Finally, we translate it along the Y axis towards the blue audience wall.
+ */
+ OpenGLMatrix blueTargetLocationOnField = OpenGLMatrix
+ /* Then we translate the target off to the Blue Audience wall.
+ Our translation here is a positive translation in Y.*/
+ .translation(0, mmFTCFieldWidth/2, 0)
+ .multiplied(Orientation.getRotationMatrix(
+ /* First, in the fixed (field) coordinate system, we rotate 90deg in X */
+ AxesReference.EXTRINSIC, AxesOrder.XZX,
+ AngleUnit.DEGREES, 90, 0, 0));
+ blueTarget.setLocationFtcFieldFromTarget(blueTargetLocationOnField);
+ RobotLog.ii(TAG, "Blue Target=%s", format(blueTargetLocationOnField));
+
+ /**
+ * We also need to tell Vuforia where the <em>cameras</em> are relative to the robot.
+ *
+ * Just as there is a Field Coordinate System, so too there is a Robot Coordinate System.
+ * The two share many similarities. The origin of the Robot Coordinate System is wherever
+ * you choose to make it on the robot, but typically you'd choose somewhere in the middle
+ * of the robot. From that origin, the Y axis is horizontal and positive out towards the
+ * "front" of the robot (however you choose "front" to be defined), the X axis is horizontal
+ * and positive out towards the "right" of the robot (i.e.: 90deg horizontally clockwise from
+ * the positive Y axis), and the Z axis is vertical towards the sky.
+ *
+ * Similarly, for each camera there is a Camera Coordinate System. The origin of a Camera
+ * Coordinate System lies in the middle of the sensor inside of the camera. The Z axis is
+ * positive coming out of the lens of the camera in a direction perpendicular to the plane
+ * of the sensor. When looking at the face of the lens of the camera (down the positive Z
+ * axis), the X axis is positive off to the right in the plane of the sensor, and the Y axis
+ * is positive out the top of the lens in the plane of the sensor at 90 horizontally
+ * counter clockwise from the X axis.
+ *
+ * Next, there is Phone Coordinate System (for robots that have phones, of course), though
+ * with the advent of Vuforia support for Webcams, this coordinate system is less significant
+ * than it was previously. The Phone Coordinate System is defined thusly: with the phone in
+ * flat front of you in portrait mode (i.e. as it is when running the robot controller app)
+ * and you are staring straight at the face of the phone,
+ * * X is positive heading off to your right,
+ * * Y is positive heading up through the top edge of the phone, and
+ * * Z is pointing out of the screen, toward you.
+ * The origin of the Phone Coordinate System is at the origin of the Camera Coordinate System
+ * of the front-facing camera on the phone.
+ *
+ * Finally, it is worth noting that trackable Vuforia Image Targets have their <em>own</em>
+ * coordinate system (see {@link VuforiaTrackable}. This is sometimes referred to as the
+ * Target Coordinate System. In keeping with the above, when looking at the target in its
+ * natural orientation, in the Target Coodinate System
+ * * X is positive heading off to your right,
+ * * Y is positive heading up through the top edge of the target, and
+ * * Z is pointing out of the target, toward you.
+ *
+ * One can observe that the Camera Coordinate System of the front-facing camera on a phone
+ * coincides with the Phone Coordinate System. Further, when a phone is placed on its back
+ * at the origin of the Robot Coordinate System and aligned appropriately, those coordinate
+ * systems also coincide with the Robot Coordinate System. Got it?
+ *
+ * In this example here, we're going to assume that we put the camera on the right side
+ * of the robot (facing outwards, of course). To determine the transformation matrix that
+ * describes that location, first consider the camera as lying on its back at the origin
+ * of the Robot Coordinate System such that the Camera Coordinate System and Robot Coordinate
+ * System coincide. Then the transformation we need is
+ * * first a rotation of the camera by +90deg along the robot X axis,
+ * * then a rotation of the camera by +90deg along the robot Z axis, and
+ * * finally a translation of the camera to the side of the robot.
+ *
+ * When determining whether a rotation is positive or negative, consider yourself as looking
+ * down the (positive) axis of rotation from the positive towards the origin. Positive rotations
+ * are then CCW, and negative rotations CW. An example: consider looking down the positive Z
+ * axis towards the origin. A positive rotation about Z (ie: a rotation parallel to the the X-Y
+ * plane) is then CCW, as one would normally expect from the usual classic 2D geometry.
+ */
+
+ OpenGLMatrix robotFromCamera = OpenGLMatrix
+ .translation(mmBotWidth/2,0,0)
+ .multiplied(Orientation.getRotationMatrix(
+ AxesReference.EXTRINSIC, AxesOrder.XZY,
+ AngleUnit.DEGREES, 90, 90, 0));
+ RobotLog.ii(TAG, "camera=%s", format(robotFromCamera));
+
+ /**
+ * Let the trackable listeners we care about know where the camera is. We know that each
+ * listener is a {@link VuforiaTrackableDefaultListener} and can so safely cast because
+ * we have not ourselves installed a listener of a different type.
+ */
+ ((VuforiaTrackableDefaultListener)redTarget.getListener()).setCameraLocationOnRobot(parameters.cameraName, robotFromCamera);
+ ((VuforiaTrackableDefaultListener)blueTarget.getListener()).setCameraLocationOnRobot(parameters.cameraName, robotFromCamera);
+
+ /**
+ * A brief tutorial: here's how all the math is going to work:
+ *
+ * C = robotFromCamera maps camera coords -> robot coords
+ * P = tracker.getPose() maps image target coords -> camera coords
+ * L = redTargetLocationOnField maps image target coords -> field coords
+ *
+ * So
+ *
+ * C.inverted() maps robot coords -> camera coords
+ * P.inverted() maps camera coords -> imageTarget coords
+ *
+ * Putting that all together,
+ *
+ * L x P.inverted() x C.inverted() maps robot coords to field coords.
+ *
+ * @see VuforiaTrackableDefaultListener#getRobotLocation()
+ */
+
+ /** Wait for the game to begin */
+ telemetry.addData(">", "Press Play to start tracking");
+ telemetry.update();
+ waitForStart();
+
+ /** Start tracking the data sets we care about. */
+ stonesAndChips.activate();
+
+ boolean buttonPressed = false;
+ while (opModeIsActive()) {
+
+ if (gamepad1.a && !buttonPressed) {
+ captureFrameToFile();
+ }
+ buttonPressed = gamepad1.a;
+
+ for (VuforiaTrackable trackable : allTrackables) {
+ /**
+ * getUpdatedRobotLocation() will return null if no new information is available since
+ * the last time that call was made, or if the trackable is not currently visible.
+ * getRobotLocation() will return null if the trackable is not currently visible.
+ */
+ telemetry.addData(trackable.getName(), ((VuforiaTrackableDefaultListener)trackable.getListener()).isVisible() ? "Visible" : "Not Visible"); //
+
+ OpenGLMatrix robotLocationTransform = ((VuforiaTrackableDefaultListener)trackable.getListener()).getUpdatedRobotLocation();
+ if (robotLocationTransform != null) {
+ lastLocation = robotLocationTransform;
+ }
+ }
+ /**
+ * Provide feedback as to where the robot was last located (if we know).
+ */
+ if (lastLocation != null) {
+ // RobotLog.vv(TAG, "robot=%s", format(lastLocation));
+ telemetry.addData("Pos", format(lastLocation));
+ } else {
+ telemetry.addData("Pos", "Unknown");
+ }
+ telemetry.update();
+ }
+ }
+
+ /**
+ * A simple utility that extracts positioning information from a transformation matrix
+ * and formats it in a form palatable to a human being.
+ */
+ String format(OpenGLMatrix transformationMatrix) {
+ return transformationMatrix.formatAsTransform();
+ }
+
+ /**
+ * Sample one frame from the Vuforia stream and write it to a .PNG image file on the robot
+ * controller in the /sdcard/FIRST/data directory. The images can be downloaded using Android
+ * Studio's Device File Explorer, ADB, or the Media Transfer Protocol (MTP) integration into
+ * Windows Explorer, among other means. The images can be useful during robot design and calibration
+ * in order to get a sense of what the camera is actually seeing and so assist in camera
+ * aiming and alignment.
+ */
+ void captureFrameToFile() {
+ vuforia.getFrameOnce(Continuation.create(ThreadPool.getDefault(), new Consumer<Frame>()
+ {
+ @Override public void accept(Frame frame)
+ {
+ Bitmap bitmap = vuforia.convertFrameToBitmap(frame);
+ if (bitmap != null) {
+ File file = new File(captureDirectory, String.format(Locale.getDefault(), "VuforiaFrame-%d.png", captureCounter++));
+ try {
+ FileOutputStream outputStream = new FileOutputStream(file);
+ try {
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
+ } finally {
+ outputStream.close();
+ telemetry.log().add("captured %s", file.getName());
+ }
+ } catch (IOException e) {
+ RobotLog.ee(TAG, e, "exception in captureFrameToFile()");
+ }
+ }
+ }
+ }));
+ }
+}
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SampleRevBlinkinLedDriver.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SampleRevBlinkinLedDriver.java
new file mode 100644
index 0000000..337b703
--- /dev/null
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SampleRevBlinkinLedDriver.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2018 Craig MacFarlane
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted
+ * (subject to the limitations in the disclaimer below) provided that the following conditions are
+ * met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of conditions
+ * and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
+ * and the following disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of Craig MacFarlane nor the names of its contributors may be used to
+ * endorse or promote products derived from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS
+ * SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package org.firstinspires.ftc.robotcontroller.external.samples;
+
+import com.qualcomm.hardware.rev.RevBlinkinLedDriver;
+import com.qualcomm.robotcore.eventloop.opmode.Disabled;
+import com.qualcomm.robotcore.eventloop.opmode.OpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
+
+import org.firstinspires.ftc.robotcore.external.Telemetry;
+import org.firstinspires.ftc.robotcore.internal.system.Deadline;
+
+import java.util.concurrent.TimeUnit;
+
+/*
+ * Display patterns of a REV Robotics Blinkin LED Driver.
+ * AUTO mode cycles through all of the patterns.
+ * MANUAL mode allows the user to manually change patterns using the
+ * left and right bumpers of a gamepad.
+ *
+ * Configure the driver on a servo port, and name it "blinkin".
+ *
+ * Displays the first pattern upon init.
+ */
+@TeleOp(name="BlinkinExample")
+@Disabled
+public class SampleRevBlinkinLedDriver extends OpMode {
+
+ /*
+ * Change the pattern every 10 seconds in AUTO mode.
+ */
+ private final static int LED_PERIOD = 10;
+
+ /*
+ * Rate limit gamepad button presses to every 500ms.
+ */
+ private final static int GAMEPAD_LOCKOUT = 500;
+
+ RevBlinkinLedDriver blinkinLedDriver;
+ RevBlinkinLedDriver.BlinkinPattern pattern;
+
+ Telemetry.Item patternName;
+ Telemetry.Item display;
+ DisplayKind displayKind;
+ Deadline ledCycleDeadline;
+ Deadline gamepadRateLimit;
+
+ protected enum DisplayKind {
+ MANUAL,
+ AUTO
+ }
+
+ @Override
+ public void init()
+ {
+ displayKind = DisplayKind.AUTO;
+
+ blinkinLedDriver = hardwareMap.get(RevBlinkinLedDriver.class, "blinkin");
+ pattern = RevBlinkinLedDriver.BlinkinPattern.RAINBOW_RAINBOW_PALETTE;
+ blinkinLedDriver.setPattern(pattern);
+
+ display = telemetry.addData("Display Kind: ", displayKind.toString());
+ patternName = telemetry.addData("Pattern: ", pattern.toString());
+
+ ledCycleDeadline = new Deadline(LED_PERIOD, TimeUnit.SECONDS);
+ gamepadRateLimit = new Deadline(GAMEPAD_LOCKOUT, TimeUnit.MILLISECONDS);
+ }
+
+ @Override
+ public void loop()
+ {
+ handleGamepad();
+
+ if (displayKind == DisplayKind.AUTO) {
+ doAutoDisplay();
+ } else {
+ /*
+ * MANUAL mode: Nothing to do, setting the pattern as a result of a gamepad event.
+ */
+ }
+ }
+
+ /*
+ * handleGamepad
+ *
+ * Responds to a gamepad button press. Demonstrates rate limiting for
+ * button presses. If loop() is called every 10ms and and you don't rate
+ * limit, then any given button press may register as multiple button presses,
+ * which in this application is problematic.
+ *
+ * A: Manual mode, Right bumper displays the next pattern, left bumper displays the previous pattern.
+ * B: Auto mode, pattern cycles, changing every LED_PERIOD seconds.
+ */
+ protected void handleGamepad()
+ {
+ if (!gamepadRateLimit.hasExpired()) {
+ return;
+ }
+
+ if (gamepad1.a) {
+ setDisplayKind(DisplayKind.MANUAL);
+ gamepadRateLimit.reset();
+ } else if (gamepad1.b) {
+ setDisplayKind(DisplayKind.AUTO);
+ gamepadRateLimit.reset();
+ } else if ((displayKind == DisplayKind.MANUAL) && (gamepad1.left_bumper)) {
+ pattern = pattern.previous();
+ displayPattern();
+ gamepadRateLimit.reset();
+ } else if ((displayKind == DisplayKind.MANUAL) && (gamepad1.right_bumper)) {
+ pattern = pattern.next();
+ displayPattern();
+ gamepadRateLimit.reset();
+ }
+ }
+
+ protected void setDisplayKind(DisplayKind displayKind)
+ {
+ this.displayKind = displayKind;
+ display.setValue(displayKind.toString());
+ }
+
+ protected void doAutoDisplay()
+ {
+ if (ledCycleDeadline.hasExpired()) {
+ pattern = pattern.next();
+ displayPattern();
+ ledCycleDeadline.reset();
+ }
+ }
+
+ protected void displayPattern()
+ {
+ blinkinLedDriver.setPattern(pattern);
+ patternName.setValue(pattern.toString());
+ }
+}
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorAdafruitRGB.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorAdafruitRGB.java
index f3f5276..6a94e25 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorAdafruitRGB.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorAdafruitRGB.java
@@ -33,9 +33,9 @@ import android.app.Activity;
import android.graphics.Color;
import android.view.View;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.ColorSensor;
import com.qualcomm.robotcore.hardware.DeviceInterfaceModule;
import com.qualcomm.robotcore.hardware.DigitalChannel;
@@ -67,7 +67,7 @@ import com.qualcomm.robotcore.hardware.DigitalChannel;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Sensor: AdafruitRGB", group = "Sensor")
+@TeleOp(name = "Sensor: AdafruitRGB", group = "Sensor")
@Disabled // Comment this out to add to the opmode list
public class SensorAdafruitRGB extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorBNO055IMU.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorBNO055IMU.java
index b52d658..9102a10 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorBNO055IMU.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorBNO055IMU.java
@@ -31,9 +31,9 @@ package org.firstinspires.ftc.robotcontroller.external.samples;
import com.qualcomm.hardware.bosch.BNO055IMU;
import com.qualcomm.hardware.bosch.JustLoggingAccelerationIntegrator;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import org.firstinspires.ftc.robotcore.external.Func;
import org.firstinspires.ftc.robotcore.external.navigation.Acceleration;
@@ -54,7 +54,7 @@ import java.util.Locale;
*
* @see <a href="http://www.adafruit.com/products/2472">Adafruit IMU</a>
*/
-@Autonomous(name = "Sensor: BNO055 IMU", group = "Sensor")
+@TeleOp(name = "Sensor: BNO055 IMU", group = "Sensor")
@Disabled // Comment this out to add to the opmode list
public class SensorBNO055IMU extends LinearOpMode
{
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorDigitalTouch.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorDigitalTouch.java
index 8da2afb..6bb6480 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorDigitalTouch.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorDigitalTouch.java
@@ -29,9 +29,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DigitalChannel;
/*
@@ -43,7 +43,7 @@ import com.qualcomm.robotcore.hardware.DigitalChannel;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
*/
-@Autonomous(name = "Sensor: Digital touch", group = "Sensor")
+@TeleOp(name = "Sensor: Digital touch", group = "Sensor")
@Disabled
public class SensorDigitalTouch extends LinearOpMode {
/**
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTColor.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTColor.java
index e0de829..e872273 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTColor.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTColor.java
@@ -33,9 +33,9 @@ import android.app.Activity;
import android.graphics.Color;
import android.view.View;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.ColorSensor;
/*
@@ -49,7 +49,7 @@ import com.qualcomm.robotcore.hardware.ColorSensor;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Sensor: HT color", group = "Sensor")
+@TeleOp(name = "Sensor: HT color", group = "Sensor")
@Disabled
public class SensorHTColor extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTGyro.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTGyro.java
index d4ad94c..0e853ca 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTGyro.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorHTGyro.java
@@ -30,9 +30,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
import com.qualcomm.hardware.hitechnic.HiTechnicNxtGyroSensor;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.Gyroscope;
import com.qualcomm.robotcore.hardware.IntegratingGyroscope;
@@ -45,7 +45,7 @@ import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
*/
-@Autonomous(name = "Sensor: HT Gyro", group = "Sensor")
+@TeleOp(name = "Sensor: HT Gyro", group = "Sensor")
@Disabled
public class SensorHTGyro extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorKLNavxMicro.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorKLNavxMicro.java
index 40e4a94..583f525 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorKLNavxMicro.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorKLNavxMicro.java
@@ -30,9 +30,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
import com.qualcomm.hardware.kauailabs.NavxMicroNavigationSensor;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.Gyroscope;
import com.qualcomm.robotcore.hardware.IntegratingGyroscope;
import com.qualcomm.robotcore.util.ElapsedTime;
@@ -50,7 +50,7 @@ import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
*/
-@Autonomous(name = "Sensor: KL navX Micro", group = "Sensor")
+@TeleOp(name = "Sensor: KL navX Micro", group = "Sensor")
@Disabled
public class SensorKLNavxMicro extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRCompass.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRCompass.java
index 90ab704..583ac1a 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRCompass.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRCompass.java
@@ -30,9 +30,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
import com.qualcomm.hardware.modernrobotics.ModernRoboticsI2cCompassSensor;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.CompassSensor;
import com.qualcomm.robotcore.util.ElapsedTime;
@@ -49,7 +49,7 @@ import org.firstinspires.ftc.robotcore.external.navigation.Acceleration;
*
* @see <a href="http://www.modernroboticsinc.com/compass">MR Compass Sensor</a>
*/
-@Autonomous(name = "Sensor: MR compass", group = "Sensor")
+@TeleOp(name = "Sensor: MR compass", group = "Sensor")
@Disabled // comment out or remove this line to enable this opmode
public class SensorMRCompass extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRRangeSensor.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRRangeSensor.java
index 5acbd10..d7de1ff 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRRangeSensor.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorMRRangeSensor.java
@@ -30,9 +30,9 @@
package org.firstinspires.ftc.robotcontroller.external.samples;
import com.qualcomm.hardware.modernrobotics.ModernRoboticsI2cRangeSensor;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import org.firstinspires.ftc.robotcore.external.navigation.DistanceUnit;
@@ -47,7 +47,7 @@ import org.firstinspires.ftc.robotcore.external.navigation.DistanceUnit;
*
* @see <a href="http://modernroboticsinc.com/range-sensor">MR Range Sensor</a>
*/
-@Autonomous(name = "Sensor: MR range sensor", group = "Sensor")
+@TeleOp(name = "Sensor: MR range sensor", group = "Sensor")
@Disabled // comment out or remove this line to enable this opmode
public class SensorMRRangeSensor extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREV2mDistance.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREV2mDistance.java
new file mode 100644
index 0000000..880bd84
--- /dev/null
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREV2mDistance.java
@@ -0,0 +1,89 @@
+/*
+Copyright (c) 2018 FIRST
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted (subject to the limitations in the disclaimer below) provided that
+the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list
+of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+Neither the name of FIRST nor the names of its contributors may be used to
+endorse or promote products derived from this software without specific prior
+written permission.
+
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
+LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+package org.firstinspires.ftc.robotcontroller.external.samples;
+
+import com.qualcomm.hardware.rev.Rev2mDistanceSensor;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
+import com.qualcomm.robotcore.eventloop.opmode.Disabled;
+import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.hardware.DistanceSensor;
+
+import org.firstinspires.ftc.robotcore.external.navigation.DistanceUnit;
+
+/**
+ * {@link SensorREV2mDistance} illustrates how to use the REV Robotics
+ * Time-of-Flight Range Sensor.
+ *
+ * The op mode assumes that the range sensor is configured with a name of "sensor_range".
+ *
+ * Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
+ * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
+ *
+ * @see <a href="http://revrobotics.com">REV Robotics Web Page</a>
+ */
+@TeleOp(name = "Sensor: REV2mDistance", group = "Sensor")
+@Disabled
+public class SensorREV2mDistance extends LinearOpMode {
+
+ private DistanceSensor sensorRange;
+
+ @Override
+ public void runOpMode() {
+ // you can use this as a regular DistanceSensor.
+ sensorRange = hardwareMap.get(DistanceSensor.class, "sensor_range");
+
+ // you can also cast this to a Rev2mDistanceSensor if you want to use added
+ // methods associated with the Rev2mDistanceSensor class.
+ Rev2mDistanceSensor sensorTimeOfFlight = (Rev2mDistanceSensor)sensorRange;
+
+ telemetry.addData(">>", "Press start to continue");
+ telemetry.update();
+
+ waitForStart();
+ while(opModeIsActive()) {
+ // generic DistanceSensor methods.
+ telemetry.addData("deviceName",sensorRange.getDeviceName() );
+ telemetry.addData("range", String.format("%.01f mm", sensorRange.getDistance(DistanceUnit.MM)));
+ telemetry.addData("range", String.format("%.01f cm", sensorRange.getDistance(DistanceUnit.CM)));
+ telemetry.addData("range", String.format("%.01f m", sensorRange.getDistance(DistanceUnit.METER)));
+ telemetry.addData("range", String.format("%.01f in", sensorRange.getDistance(DistanceUnit.INCH)));
+
+ // Rev2mDistanceSensor specific methods.
+ telemetry.addData("ID", String.format("%x", sensorTimeOfFlight.getModelID()));
+ telemetry.addData("did time out", Boolean.toString(sensorTimeOfFlight.didTimeoutOccur()));
+
+ telemetry.update();
+ }
+ }
+
+} \ No newline at end of file
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREVColorDistance.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREVColorDistance.java
index 11a8880..37910ca 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREVColorDistance.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples/SensorREVColorDistance.java
@@ -33,9 +33,9 @@ import android.app.Activity;
import android.graphics.Color;
import android.view.View;
-import com.qualcomm.robotcore.eventloop.opmode.Autonomous;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
+import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.ColorSensor;
import com.qualcomm.robotcore.hardware.DistanceSensor;
@@ -52,7 +52,7 @@ import java.util.Locale;
* Use Android Studio to Copy this Class, and Paste it into your team's code folder with a new name.
* Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list.
*/
-@Autonomous(name = "Sensor: REVColorDistance", group = "Sensor")
+@TeleOp(name = "Sensor: REVColorDistance", group = "Sensor")
@Disabled // Comment this out to add to the opmode list
public class SensorREVColorDistance extends LinearOpMode {
diff --git a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/internal/FtcRobotControllerActivity.java b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/internal/FtcRobotControllerActivity.java
index 4ec32fa..d5d6872 100644
--- a/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/internal/FtcRobotControllerActivity.java
+++ b/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/internal/FtcRobotControllerActivity.java
@@ -43,10 +43,13 @@ import android.content.res.Resources;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.net.wifi.WifiManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
@@ -54,6 +57,7 @@ import android.view.View;
import android.webkit.WebView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
+import android.widget.PopupMenu;
import android.widget.TextView;
import com.google.blocks.ftcrobotcontroller.BlocksActivity;
@@ -61,8 +65,8 @@ import com.google.blocks.ftcrobotcontroller.ProgrammingModeActivity;
import com.google.blocks.ftcrobotcontroller.ProgrammingModeControllerImpl;
import com.google.blocks.ftcrobotcontroller.ProgrammingWebHandlers;
import com.google.blocks.ftcrobotcontroller.runtime.BlocksOpMode;
-import com.qualcomm.ftccommon.AboutActivity;
import com.qualcomm.ftccommon.ClassManagerFactory;
+import com.qualcomm.ftccommon.FtcAboutActivity;
import com.qualcomm.ftccommon.FtcEventLoop;
import com.qualcomm.ftccommon.FtcEventLoopIdle;
import com.qualcomm.ftccommon.FtcRobotControllerService;
@@ -84,20 +88,26 @@ import com.qualcomm.robotcore.eventloop.opmode.FtcRobotControllerServiceState;
import com.qualcomm.robotcore.eventloop.opmode.OpModeRegister;
import com.qualcomm.robotcore.hardware.configuration.LynxConstants;
import com.qualcomm.robotcore.hardware.configuration.Utility;
+import com.qualcomm.robotcore.util.Device;
import com.qualcomm.robotcore.util.Dimmer;
import com.qualcomm.robotcore.util.ImmersiveMode;
import com.qualcomm.robotcore.util.RobotLog;
+import com.qualcomm.robotcore.wifi.NetworkConnection;
import com.qualcomm.robotcore.wifi.NetworkConnectionFactory;
import com.qualcomm.robotcore.wifi.NetworkType;
-import com.qualcomm.robotcore.wifi.WifiDirectAssistant;
import org.firstinspires.ftc.ftccommon.external.SoundPlayingRobotMonitor;
import org.firstinspires.ftc.ftccommon.internal.FtcRobotControllerWatchdogService;
import org.firstinspires.ftc.ftccommon.internal.ProgramAndManageActivity;
+import org.firstinspires.ftc.robotcore.external.navigation.MotionDetection;
import org.firstinspires.ftc.robotcore.internal.hardware.DragonboardLynxDragonboardIsPresentPin;
import org.firstinspires.ftc.robotcore.internal.network.DeviceNameManager;
+import org.firstinspires.ftc.robotcore.internal.network.DeviceNameManagerFactory;
+import org.firstinspires.ftc.robotcore.internal.network.WifiDirectDeviceNameManager;
import org.firstinspires.ftc.robotcore.internal.network.PreferenceRemoterRC;
import org.firstinspires.ftc.robotcore.internal.network.StartResult;
+import org.firstinspires.ftc.robotcore.internal.network.WifiMuteEvent;
+import org.firstinspires.ftc.robotcore.internal.network.WifiMuteStateMachine;
import org.firstinspires.ftc.robotcore.internal.system.AppUtil;
import org.firstinspires.ftc.robotcore.internal.system.Assert;
import org.firstinspires.ftc.robotcore.internal.system.PreferencesHelper;
@@ -130,8 +140,8 @@ public class FtcRobotControllerActivity extends Activity
protected UpdateUI.Callback callback;
protected Context context;
protected Utility utility;
- protected StartResult deviceNameManagerStartResult = new StartResult();
protected StartResult prefRemoterStartResult = new StartResult();
+ protected StartResult deviceNameStartResult = new StartResult();
protected PreferencesHelper preferencesHelper;
protected final SharedPreferencesListener sharedPreferencesListener = new SharedPreferencesListener();
@@ -154,6 +164,9 @@ public class FtcRobotControllerActivity extends Activity
protected FtcEventLoop eventLoop;
protected Queue<UsbDevice> receivedUsbAttachmentNotifications;
+ protected WifiMuteStateMachine wifiMuteStateMachine;
+ protected MotionDetection motionDetection;
+
protected class RobotRestarter implements Restarter {
public void requestRestart() {
@@ -220,6 +233,8 @@ public class FtcRobotControllerActivity extends Activity
RobotLog.vv(TAG, "onCreate()");
ThemedActivity.appAppThemeToActivity(getTag(), this); // do this way instead of inherit to help AppInventor
+ // Oddly, sometimes after a crash & restart the root activity will be something unexpected, like from the before crash? We don't yet understand
+ RobotLog.vv(TAG, "rootActivity is of class %s", AppUtil.getInstance().getRootActivity().getClass().getSimpleName());
Assert.assertTrue(FtcRobotControllerWatchdogService.isFtcRobotControllerActivity(AppUtil.getInstance().getRootActivity()));
Assert.assertTrue(AppUtil.getInstance().isRobotController());
@@ -240,7 +255,9 @@ public class FtcRobotControllerActivity extends Activity
context = this;
utility = new Utility(this);
- DeviceNameManager.getInstance().start(deviceNameManagerStartResult);
+
+ DeviceNameManagerFactory.getInstance().start(deviceNameStartResult);
+
PreferenceRemoterRC.getInstance().start(prefRemoterStartResult);
receivedUsbAttachmentNotifications = new ConcurrentLinkedQueue<UsbDevice>();
@@ -257,7 +274,15 @@ public class FtcRobotControllerActivity extends Activity
buttonMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- AppUtil.getInstance().openOptionsMenuFor(FtcRobotControllerActivity.this);
+ PopupMenu popupMenu = new PopupMenu(FtcRobotControllerActivity.this, v);
+ popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ return onOptionsItemSelected(item); // Delegate to the handler for the hardware menu button
+ }
+ });
+ popupMenu.inflate(R.menu.ftc_robot_controller);
+ popupMenu.show();
}
});
@@ -300,11 +325,17 @@ public class FtcRobotControllerActivity extends Activity
hittingMenuButtonBrightensScreen();
wifiLock.acquire();
- callback.networkConnectionUpdate(WifiDirectAssistant.Event.DISCONNECTED);
+ callback.networkConnectionUpdate(NetworkConnection.NetworkEvent.DISCONNECTED);
readNetworkType();
ServiceController.startService(FtcRobotControllerWatchdogService.class);
bindToService();
logPackageVersions();
+ logDeviceSerialNumber();
+ RobotLog.logDeviceInfo();
+
+ if (preferencesHelper.readBoolean(getString(R.string.pref_wifi_automute), false)) {
+ initWifiMute(true);
+ }
}
protected UpdateUI createUpdateUI() {
@@ -374,8 +405,8 @@ public class FtcRobotControllerActivity extends Activity
shutdownRobot(); // Ensure the robot is put away to bed
if (callback != null) callback.close();
- PreferenceRemoterRC.getInstance().start(prefRemoterStartResult);
- DeviceNameManager.getInstance().stop(deviceNameManagerStartResult);
+ PreferenceRemoterRC.getInstance().stop(prefRemoterStartResult);
+ DeviceNameManagerFactory.getInstance().stop(deviceNameStartResult);
unbindFromService();
// If the app manually (?) is stopped, then we don't need the auto-starting function (?)
@@ -408,6 +439,10 @@ public class FtcRobotControllerActivity extends Activity
RobotLog.logBuildConfig(org.firstinspires.inspection.BuildConfig.class);
}
+ protected void logDeviceSerialNumber() {
+ RobotLog.ii(TAG, "410c serial number: " + Build.SERIAL);
+ }
+
protected void readNetworkType() {
// The code here used to defer to the value found in a configuration file
@@ -418,10 +453,17 @@ public class FtcRobotControllerActivity extends Activity
// Moreover, the non-Wifi-Direct networking is end-of-life, so the simplest and most robust
// (e.g.: no one can screw things up by messing with the contents of the config file) fix is
// to do away with configuration file entirely.
- networkType = NetworkType.WIFIDIRECT;
+ //
+ // Control hubs are always running the access point model. Everything else, for the time
+ // being always runs the wifi direct model.
+ if (Device.isRevControlHub() == true) {
+ networkType = NetworkType.RCWIRELESSAP;
+ } else {
+ networkType = NetworkType.fromString(preferencesHelper.readString(context.getString(R.string.pref_pairing_kind), NetworkType.globalDefaultAsString()));
+ }
// update the app_settings
- preferencesHelper.writeStringPrefIfDifferent(context.getString(R.string.pref_network_connection_type), networkType.toString());
+ preferencesHelper.writeStringPrefIfDifferent(context.getString(R.string.pref_pairing_kind), networkType.toString());
}
@Override
@@ -498,8 +540,7 @@ public class FtcRobotControllerActivity extends Activity
return true;
}
else if (id == R.id.action_about) {
- Intent intent = new Intent(AppUtil.getDefContext(), AboutActivity.class);
- intent.putExtra(LaunchActivityConstantsList.ABOUT_ACTIVITY_CONNECTION_TYPE, networkType);
+ Intent intent = new Intent(AppUtil.getDefContext(), FtcAboutActivity.class);
startActivity(intent);
return true;
}
@@ -555,14 +596,20 @@ public class FtcRobotControllerActivity extends Activity
if (controllerService != null) {
callback.networkConnectionUpdate(controllerService.getNetworkConnectionStatus());
callback.updateRobotStatus(controllerService.getRobotStatus());
- requestRobotSetup();
+ // Only show this first-time toast on headless systems: what we have now on non-headless suffices
+ requestRobotSetup(LynxConstants.isRevControlHub()
+ ? new Runnable() {
+ @Override public void run() {
+ showRestartRobotCompleteToast(R.string.toastRobotSetupComplete);
+ }
+ }
+ : null);
}
}
- private void requestRobotSetup() {
+ private void requestRobotSetup(@Nullable Runnable runOnComplete) {
if (controllerService == null) return;
- HardwareFactory factory;
RobotConfigFile file = cfgFileMgr.getActiveConfigAndUpdateUI();
HardwareFactory hardwareFactory = new HardwareFactory(context);
try {
@@ -572,14 +619,13 @@ public class FtcRobotControllerActivity extends Activity
hardwareFactory.setXmlPullParser(file.getXml());
cfgFileMgr.setActiveConfigAndUpdateUI(false, file);
}
- factory = hardwareFactory;
OpModeRegister userOpModeRegister = createOpModeRegister();
- eventLoop = new FtcEventLoop(factory, userOpModeRegister, callback, this, programmingModeController);
- FtcEventLoopIdle idleLoop = new FtcEventLoopIdle(factory, userOpModeRegister, callback, this, programmingModeController);
+ eventLoop = new FtcEventLoop(hardwareFactory, userOpModeRegister, callback, this, programmingModeController);
+ FtcEventLoopIdle idleLoop = new FtcEventLoopIdle(hardwareFactory, userOpModeRegister, callback, this, programmingModeController);
controllerService.setCallback(callback);
- controllerService.setupRobot(eventLoop, idleLoop);
+ controllerService.setupRobot(eventLoop, idleLoop, runOnComplete);
passReceivedUsbAttachmentsToEventLoop();
}
@@ -595,10 +641,18 @@ public class FtcRobotControllerActivity extends Activity
private void requestRobotRestart() {
AppUtil.getInstance().showToast(UILocation.BOTH, AppUtil.getDefContext().getString(R.string.toastRestartingRobot));
//
+ RobotLog.clearGlobalErrorMsg();
+ RobotLog.clearGlobalWarningMsg();
shutdownRobot();
- requestRobotSetup();
- //
- AppUtil.getInstance().showToast(UILocation.BOTH, AppUtil.getDefContext().getString(R.string.toastRestartRobotComplete));
+ requestRobotSetup(new Runnable() {
+ @Override public void run() {
+ showRestartRobotCompleteToast(R.string.toastRestartRobotComplete);
+ }
+ });
+ }
+
+ private void showRestartRobotCompleteToast(@StringRes int resid) {
+ AppUtil.getInstance().showToast(UILocation.BOTH, AppUtil.getDefContext().getString(resid));
}
protected void hittingMenuButtonBrightensScreen() {
@@ -619,7 +673,44 @@ public class FtcRobotControllerActivity extends Activity
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(context.getString(R.string.pref_app_theme))) {
ThemedActivity.restartForAppThemeChange(getTag(), getString(R.string.appThemeChangeRestartNotifyRC));
+ } else if (key.equals(context.getString(R.string.pref_wifi_automute))) {
+ if (preferencesHelper.readBoolean(context.getString(R.string.pref_wifi_automute), false)) {
+ initWifiMute(true);
+ } else {
+ initWifiMute(false);
+ }
}
}
}
+
+ protected void initWifiMute(boolean enable) {
+ if (enable) {
+ wifiMuteStateMachine = new WifiMuteStateMachine();
+ wifiMuteStateMachine.initialize();
+ wifiMuteStateMachine.start();
+
+ motionDetection = new MotionDetection(2.0, 10);
+ motionDetection.startListening();
+ motionDetection.registerListener(new MotionDetection.MotionDetectionListener() {
+ @Override
+ public void onMotionDetected(double vector)
+ {
+ wifiMuteStateMachine.consumeEvent(WifiMuteEvent.USER_ACTIVITY);
+ }
+ });
+ } else {
+ wifiMuteStateMachine.stop();
+ wifiMuteStateMachine = null;
+ motionDetection.stopListening();
+ motionDetection.purgeListeners();
+ motionDetection = null;
+ }
+ }
+
+ @Override
+ public void onUserInteraction() {
+ if (wifiMuteStateMachine != null) {
+ wifiMuteStateMachine.consumeEvent(WifiMuteEvent.USER_ACTIVITY);
+ }
+ }
}
diff --git a/FtcRobotController/src/main/res/xml/app_settings.xml b/FtcRobotController/src/main/res/xml/app_settings.xml
index adc3223..58d3aa9 100644
--- a/FtcRobotController/src/main/res/xml/app_settings.xml
+++ b/FtcRobotController/src/main/res/xml/app_settings.xml
@@ -64,7 +64,7 @@ See https://developer.android.com/guide/topics/ui/settings.html
<SwitchPreference
android:title="@string/prefedit_sound_on_off"
- android:summary="@string/prefedit_sound_on_off_summary"
+ android:summary="@string/prefedit_sound_on_off_summary_rc"
android:key="@string/pref_sound_on_off"
android:defaultValue="true"
/>
diff --git a/FtcRobotController/src/main/res/xml/device_filter.xml b/FtcRobotController/src/main/res/xml/device_filter.xml
index 6f72819..7677dad 100644
--- a/FtcRobotController/src/main/res/xml/device_filter.xml
+++ b/FtcRobotController/src/main/res/xml/device_filter.xml
@@ -31,8 +31,20 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
+<!--
+https://developer.android.com/guide/topics/connectivity/usb/host
+-->
+
<!-- see also RobotUsbDevice.getUsbIdentifiers() -->
<resources>
<usb-device vendor-id="1027" product-id="24577" /> <!-- FT232 Modern Robotics: 0x0403/0x6001 -->
<usb-device vendor-id="1027" product-id="24597" /> <!-- FT232 Lynx: 0x0403/0x6015 -->
+
+ <!-- cameras -->
+ <!-- We don't currently auto-connect to UVC cameras, instead relying
+ on the app itself to poll. But we could change that if we wished -->
+ <!-- Update: turns out we need that if we are to get onNewIntent() notifications
+ in our activity when cameras attach. See FtcRobotControllerActivity. -->
+ <usb-device class="14" subclass="2"/>
+
</resources>
diff --git a/README.md b/README.md
index 46d46f4..1cfd09f 100644
--- a/README.md
+++ b/README.md
@@ -41,15 +41,114 @@ For technical questions regarding the SDK, please visit the FTC Technology forum
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://ftcforum.usfirst.org/forumdisplay.php?156-FTC-Technology
-
**************************************************************************************
# Release Information
**************************************************************************************
-Version 3.7 (built on 18.03.12)
+Version 4.0 (released on 18.09.12)
Changes include:
- * Interim fix to allow FTC apps to run on Android Nougat (7.x) devices.
+ * Initial support for UVC compatible cameras
+ - If UVC camera has a unique serial number, RC will detect and enumerate by serial number.
+ - If UVC camera lacks a unique serial number, RC will only support one camera of that type connected.
+ - Calibration settings for a few cameras are included (see TeamCode/src/main/res/xml/teamwebcamcalibrations.xml for details).
+ - User can upload calibration files from Program and Manage web interface.
+ - UVC cameras seem to draw a fair amount of electrical current from the USB bus.
+ + This does not appear to present any problems for the REV Robotics Control Hub.
+ + This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller.
+ + FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers.
+ - Updated sample Vuforia Navigation and VuMark Op Modes to demonstrate how to use an internal phone-based camera and an external UVC webcam.
+
+ * Support for improved motor control.
+ - REV Robotics Expansion Hub firmware 1.8 and greater will support a feed forward mechanism for closed loop motor control.
+ - FTC SDK has been modified to support PIDF coefficients (proportional, integral, derivative, and feed forward).
+ - FTC Blocks development tool modified to include PIDF programming blocks.
+ - Deprecated older PID-related methods and variables.
+ - REV's 1.8.x PIDF-related changes provide a more linear and accurate way to control a motor.
+
+ * Wireless
+ - Added 5GHz support for wireless channel changing for those devices that support it.
+ + Tested with Moto G5 and E4 phones.
+ + Also tested with other (currently non-approved) phones such as Samsung Galaxy S8.
+
+* Improved Expansion Hub firmware update support in Robot Controller app
+ - Changes to make the system more robust during the firmware update process (when performed through Robot Controller app).
+ - User no longer has to disconnect a downstream daisy-chained Expansion Hub when updating an Expansion Hub's firmware.
+ + If user is updating an Expansion Hub's firmware through a USB connection, he/she does not have to disconnect RS485 connection to other Expansion Hubs.
+ + The user still must use a USB connection to update an Expansion Hub's firmware.
+ + The user cannot update the Expansion Hub firmware for a downstream device that is daisy chained through an RS485 connection.
+ - If an Expansion Hub accidentally gets "bricked" the Robot Controller app is now more likely to recognize the Hub when it scans the USB bus.
+ + Robot Controller app should be able to detect an Expansion Hub, even if it accidentally was bricked in a previous update attempt.
+ + Robot Controller app should be able to install the firmware onto the Hub, even if if accidentally was bricked in a previous update attempt.
+
+ * Resiliency
+ - FTC software can detect and enable an FTDI reset feature that is available with REV Robotics v1.8 Expansion Hub firmware and greater.
+ + When enabled, the Expansion Hub can detect if it hasn't communicated with the Robot Controller over the FTDI (USB) connection.
+ + If the Hub hasn't heard from the Robot Controller in a while, it will reset the FTDI connection.
+ + This action helps system recover from some ESD-induced disruptions.
+ - Various fixes to improve reliability of FTC software.
+
+ * Blocks
+ - Fixed errors with string and list indices in blocks export to java.
+ - Support for USB connected UVC webcams.
+ - Refactored optimized Blocks Vuforia code to support Rover Ruckus image targets.
+ - Added programming blocks to support PIDF (proportional, integral, derivative and feed forward) motor control.
+ - Added formatting options (under Telemetry and Miscellaneous categories) so user can set how many decimal places to display a numerical value.
+ - Support to play audio files (which are uploaded through Blocks web interface) on Driver Station in addition to the Robot Controller.
+ - Fixed bug with Download Image of Blocks feature.
+ - Support for REV Robotics Blinkin LED Controller.
+ - Support for REV Robotics 2m Distance Sensor.
+ - Added support for a REV Touch Sensor (no longer have to configure as a generic digital device).
+ - Added blocks for DcMotorEx methods.
+ + These are enhanced methods that you can use when supported by the motor controller hardware.
+ + The REV Robotics Expansion Hub supports these enhanced methods.
+ + Enhanced methods include methods to get/set motor velocity (in encoder pulses per second), get/set PIDF coefficients, etc..
+
+ * Modest Improvements in Logging
+ - Decrease frequency of battery checker voltage statements.
+ - Removed non-FTC related log statements (wherever possible).
+ - Introduced a "Match Logging" feature.
+ + Under "Settings" a user can enable/disable this feature (it's disabled by default).
+ + If enabled, user provides a "Match Number" through the Driver Station user interface (top of the screen).
+ * The Match Number is used to create a log file specifically with log statements from that particular Op Mode run.
+ * Match log files are stored in /sdcard/FIRST/matlogs on the Robot Controller.
+ * Once an op mode run is complete, the Match Number is cleared.
+ * This is a convenient way to create a separate match log with statements only related to a specific op mode run.
+
+ * New Devices
+ - Support for REV Robotics Blinkin LED Controller.
+ - Support for REV Robotics 2m Distance Sensor.
+ - Added configuration option for REV 20:1 HD Hex Motor.
+ - Added support for a REV Touch Sensor (no longer have to configure as a generic digital device).
+
+ * Miscellaneous
+ - Fixed some errors in the definitions for acceleration and velocity in our javadoc documentation.
+ - Added ability to play audio files on Driver Station
+ - When user is configuring an Expansion Hub, the LED on the Expansion Hub will change blink pattern (purple-cyan) to indicate which Hub is currently being configured.
+ - Renamed I2cSensorType to I2cDeviceType.
+ - Added an external sample Op Mode that demonstrates localization using 2018-2019 (Rover Ruckus presented by QualComm) Vuforia targets.
+ - Added an external sample Op Mode that demonstrates how to use the REV Robotics 2m Laser Distance Sensor.
+ - Added an external sample Op Mode that demonstrates how to use the REV Robotics Blinkin LED Controller.
+ - Re-categorized external Java sample Op Modes to "TeleOp" instead of "Autonomous".
+
+Known issues:
+ * Initial support for UVC compatible cameras
+ - UVC cameras seem to draw significant amount of current from the USB bus.
+ + This does not appear to present any problems for the REV Robotics Control Hub.
+ + This does seem to create stability problems when using some cameras with an Android phone-based Robot Controller.
+ + FTC Tech Team is investigating options to mitigate this issue with the phone-based Robot Controllers.
+ - There might be a possible deadlock which causes the RC to become unresponsive when using a UVC webcam with a Nougat Android Robot Controller.
+
+ * Wireless
+ - When user selects a wireless channel, this channel does not necessarily persist if the phone is power cycled.
+ + Tech Team is hoping to eventually address this issue in a future release.
+ + Issue has been present since apps were introduced (i.e., it is not new with the v4.0 release).
+ - Wireless channel is not currently displayed for WiFi Direct connections.
+
+ * Miscellaneous
+ - The blink indication feature that shows which Expansion Hub is currently being configured does not work for a newly created configuration file.
+ + User has to first save a newly created configuration file and then close and re-edit the file in order for blink indicator to work.
+
**************************************************************************************
# Release Information
diff --git a/TeamCode/build.release.gradle b/TeamCode/build.release.gradle
index 17567ab..8a645d1 100644
--- a/TeamCode/build.release.gradle
+++ b/TeamCode/build.release.gradle
@@ -1,8 +1,7 @@
dependencies {
- compile project(':FtcRobotController')
- compile (name: 'RobotCore-release', ext: 'aar')
- compile (name: 'Hardware-release', ext: 'aar')
- compile (name: 'FtcCommon-release', ext: 'aar')
- compile (name:'Analytics-release', ext:'aar')
- compile (name:'WirelessP2p-release', ext:'aar')
+ implementation project(':FtcRobotController')
+ implementation (name: 'RobotCore-release', ext: 'aar')
+ implementation (name: 'Hardware-release', ext: 'aar')
+ implementation (name: 'FtcCommon-release', ext: 'aar')
+ implementation (name:'WirelessP2p-release', ext:'aar')
}
diff --git a/TeamCode/src/main/res/xml/teamwebcamcalibrations.xml b/TeamCode/src/main/res/xml/teamwebcamcalibrations.xml
new file mode 100644
index 0000000..e2819d2
--- /dev/null
+++ b/TeamCode/src/main/res/xml/teamwebcamcalibrations.xml
@@ -0,0 +1,149 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<!--
+ This file can provide additional camera calibration settings beyond those built into the SDK itself.
+ Each calibration is for a particular camera (indicated by USB vid & pid pair) and a particular
+ capture resolution for the camera. Note: it is very important when capturing images used to calibrate
+ a camera that the image acquisition tool can actually control this capture resolution within the camera
+ itself and that you use this setting correctly. Many image acquistion tools do not in fact provide
+ this level of control.
+
+ Beyond simply providing additional, new camera calibrations, calibrations provided herein can
+ *replace/update* those that are builtin to the SDK. This matching is keyed, of course, by the
+ (vid, pid, size) triple. Further, if such a calibration has the 'remove' attribute with value 'true',
+ any existing calibration with that key is removed (and the calibration itself not added).
+
+ Calibrations are internally processed according to aspect ratio. If a format is requested in a size
+ that is not calibrated, but a calibration does exist for the same aspect ratio on the same camera,
+ then the latter will be scaled to accommodate the request. For example, if a 640x480 calibration
+ is requested but only a 800x600 calibration exists for that camera, then the 800x600 is scaled
+ down to service the 640x480 request.
+
+ Further, it is important to note that if *no* calibrations exist for a given camera, then Vuforia
+ is offered the entire range of capture resolutions that the hardware can support (and it does its
+ best to deal with the lack of calibration). However, if *any* calibrations are provided for a camera,
+ then capture resolutions in those aspect ratios supported by the camera for which any calibrations
+ are *not* provided are *not* offered. Thus, if you calibrate a camera but fail to calibrate all
+ the camera's supported aspect ratios, you limit the choices of capture resolutions that Vuforia can
+ select from.
+
+ One image acquisition program that supports control of camera capture resolution is YouCam 7:
+ https://www.cyberlink.com/products/youcam/features_en_US.html
+
+ Programs that can process acquired images to determine camera calibration settings include:
+ https://www.3dflow.net/3df-zephyr-free/ (see "Utilities/Images/Launch Camera Calibration" therein)
+ http://graphics.cs.msu.ru/en/node/909
+ Note that the type of images that must be acquired in order to calibrate is specific to the
+ calibration software used.
+
+ The required contents are illustrated here by example. Note that for the attribute names, both the
+ camelCase or the underscore_variations are supported; they are equivalent. The attributes for
+ each Calibration are as follows:
+
+ size (int pair): space separated camera resolution (width, height).
+ focalLength (float pair): space separated focal length value.
+ principalPoint (float pair): space separated principal point values (width, height).
+ distortionCoefficients (an 8-element float array): distortion coefficients in the following form
+ (r:radial, t:tangential): [r0, r1, t0, t1, r2, r3, r4, r5]
+ see https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
+
+ The examples here are commented out as the values are built-in to the FTC SDK. They serve instead
+ here as examples on how make your own.
+
+-->
+<Calibrations>
+
+ <!-- ======================================================================================= -->
+
+ <!-- Microsoft Lifecam HD 3000 v1, Calibrated by PTC using unknown tooling -->
+ <!-- <Camera vid="Microsoft" pid="0x0779">
+ <Calibration
+ size="640 480"
+ focalLength="678.154f, 678.17f"
+ principalPoint="318.135f, 228.374f"
+ distortionCoefficients="0.154576f, -1.19143f, 0f, 0f, 2.06105f, 0f, 0f, 0f"
+ />
+ </Camera> -->
+
+ <!-- ======================================================================================= -->
+
+ <!-- Microsoft Lifecam HD 3000 v2, Calibrated by PTC using unknown tooling -->
+ <!-- <Camera vid="Microsoft" pid="0x0810">
+ <Calibration
+ size="640 480"
+ focalLength="678.154f, 678.17f"
+ principalPoint="318.135f, 228.374f"
+ distortionCoefficients="0.154576f, -1.19143f, 0f, 0f, 2.06105f, 0f, 0f, 0f"
+ />
+ </Camera> -->
+
+ <!-- ======================================================================================= -->
+
+ <!-- Logitech HD Webcam C310, Calibrated by by Robert Atkinson, 2018.05.30 using 3DF Zephyr -->
+ <!-- <Camera vid="Logitech" pid="0x081B">
+ <Calibration
+ size="640 480"
+ focalLength="821.993f, 821.993f"
+ principalPoint="330.489f, 248.997f"
+ distortionCoefficients="-0.018522, 1.03979, 0, 0, -3.3171, 0, 0, 0"
+ />
+
+ <Calibration
+ size="640 360"
+ focalLength="715.307f, 715.307f"
+ principalPoint="319.759f, 188.917f"
+ distortionCoefficients="-0.0258948, 1.06258, 0, 0, -3.40245, 0, 0, 0"
+ />
+ </Camera> -->
+
+ <!-- ======================================================================================= -->
+
+ <!-- Logitech HD Pro Webcam C920, Calibrated by Robert Atkinson, 2018.05.30 using 3DF Zephyr -->
+ <!-- <Camera vid="Logitech" pid="0x082D">
+
+ <Calibration
+ size="640 480"
+ focalLength="622.001f, 622.001f"
+ principalPoint="319.803f, 241.251f"
+ distortionCoefficients="0.1208, -0.261599, 0, 0, 0.10308, 0, 0, 0"
+ />
+
+ <Calibration
+ size="800 600"
+ focalLength="775.79f, 775.79f"
+ principalPoint="400.898f, 300.79f"
+ distortionCoefficients="0.112507, -0.272067, 0, 0, 0.15775, 0, 0, 0"
+ />
+
+ <Calibration
+ size="640 360"
+ focalLength="463.566f, 463.566f"
+ principalPoint="316.402f, 176.412f"
+ distortionCoefficients="0.111626 , -0.255626, 0, 0, 0.107992, 0, 0, 0"
+ />
+
+ <Calibration
+ size="1920, 1080"
+ focalLength="1385.92f , 1385.92f"
+ principalPoint="951.982f , 534.084f"
+ distortionCoefficients="0.117627, -0.248549, 0, 0, 0.107441, 0, 0, 0"
+ />
+
+ <Calibration
+ size="800, 448"
+ focalLength="578.272f , 578.272f"
+ principalPoint="402.145f , 221.506f"
+ distortionCoefficients="0.12175, -0.251652 , 0, 0, 0.112142, 0, 0, 0"
+ />
+
+ <Calibration
+ size="864, 480"
+ focalLength="626.909f , 626.909f"
+ principalPoint="426.007f , 236.834f"
+ distortionCoefficients="0.120988, -0.253336 , 0, 0, 0.102445, 0, 0, 0"
+ />
+
+ </Camera> -->
+
+ <!-- ======================================================================================= -->
+
+</Calibrations>
diff --git a/build.common.gradle b/build.common.gradle
index 7972001..9930f2a 100644
--- a/build.common.gradle
+++ b/build.common.gradle
@@ -22,7 +22,6 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 23
- buildToolsVersion '25.0.3'
signingConfigs {
debug {
@@ -68,6 +67,7 @@ android {
}
// Advanced user code might just want to use Vuforia directly, so we set up the libs as needed
+ // http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.BuildType.html
buildTypes {
release {
// Disable debugging for release versions so it can be uploaded to Google Play.
@@ -78,6 +78,8 @@ android {
}
debug {
debuggable true
+ jniDebuggable true
+ renderscriptDebuggable true
ndk {
abiFilters "armeabi-v7a"
}
diff --git a/build.gradle b/build.gradle
index a267db5..b20f639 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,10 +5,11 @@
*/
buildscript {
repositories {
+ google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.3'
+ classpath 'com.android.tools.build:gradle:3.1.3'
}
}
diff --git a/doc/apk/FtcDriverStation-release.apk b/doc/apk/FtcDriverStation-release.apk
index 8ae2c91..747ab82 100644
--- a/doc/apk/FtcDriverStation-release.apk
+++ b/doc/apk/FtcDriverStation-release.apk
Binary files differ
diff --git a/doc/apk/FtcRobotController-release.apk b/doc/apk/FtcRobotController-release.apk
index 8926d72..cd05c21 100644
--- a/doc/apk/FtcRobotController-release.apk
+++ b/doc/apk/FtcRobotController-release.apk
Binary files differ
diff --git a/doc/javadoc/allclasses-frame.html b/doc/javadoc/allclasses-frame.html
index eb75ffd..adcebda 100644
--- a/doc/javadoc/allclasses-frame.html
+++ b/doc/javadoc/allclasses-frame.html
@@ -11,8 +11,6 @@
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
-<li><a href="com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">AboutActivity</a></li>
-<li><a href="com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon" target="classFrame">AboutActivity.Item</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Acceleration.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">Acceleration</a></li>
<li><a href="com/qualcomm/robotcore/hardware/AccelerationSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">AccelerationSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogInput.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">AnalogInput</a></li>
@@ -20,6 +18,11 @@
<li><a href="com/qualcomm/robotcore/hardware/AnalogOutput.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">AnalogOutput</a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogOutputController.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">AnalogOutputController</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">AnalogSensor</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidAccelerometer.html" title="class in org.firstinspires.ftc.robotcore.external.android" target="classFrame">AndroidAccelerometer</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidGyroscope.html" title="class in org.firstinspires.ftc.robotcore.external.android" target="classFrame">AndroidGyroscope</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidOrientation.html" title="class in org.firstinspires.ftc.robotcore.external.android" target="classFrame">AndroidOrientation</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidSoundPool.html" title="class in org.firstinspires.ftc.robotcore.external.android" target="classFrame">AndroidSoundPool</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidTextToSpeech.html" title="class in org.firstinspires.ftc.robotcore.external.android" target="classFrame">AndroidTextToSpeech</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/AngleUnit.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">AngleUnit</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/AngularVelocity.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">AngularVelocity</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/AnnotatedOpModeManager.html" title="interface in com.qualcomm.robotcore.eventloop.opmode" target="classFrame"><span class="interfaceName">AnnotatedOpModeManager</span></a></li>
@@ -31,11 +34,16 @@
<li><a href="com/qualcomm/robotcore/hardware/Blinker.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">Blinker</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Blinker.Step.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">Blinker.Step</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/ClassFactory.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">ClassFactory</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/ClassFactory.InstanceHolder.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">ClassFactory.InstanceHolder</a></li>
<li><a href="com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon" target="classFrame">ClassManagerFactory</a></li>
<li><a href="com/qualcomm/robotcore/hardware/ColorSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">ColorSensor</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/ColumnMajorMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">ColumnMajorMatrixF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/ColumnMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">ColumnMatrixF</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdPlaySound</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdRequestSound</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdStopPlayingSounds</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdVisuallyIdentify</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxAddressChangeRequest</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxAddressChangeRequest.AddressChange</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxFirmwareImagesResp.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxFirmwareImagesResp</a></li>
@@ -49,6 +57,7 @@
<li><a href="com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon" target="classFrame">ConfigWifiDirectActivity.Flag</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Const.html" title="annotation in org.firstinspires.ftc.robotcore.external" target="classFrame">Const</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Consumer.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Consumer</span></a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ControlSystem.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">ControlSystem</a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServo.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">CRServo</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServoImpl.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">CRServoImpl</a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServoImplEx.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">CRServoImplEx</a></li>
@@ -65,7 +74,7 @@
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/DenseMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">DenseMatrixF</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DeviceInterfaceModule.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">DeviceInterfaceModule</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">DeviceManager</span></a></li>
-<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.DeviceType.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">DeviceManager.DeviceType</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.UsbDeviceType.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">DeviceManager.UsbDeviceType</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannel.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">DigitalChannel</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannel.Mode.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">DigitalChannel.Mode</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannelController.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">DigitalChannelController</span></a></li>
@@ -78,10 +87,13 @@
<li><a href="com/qualcomm/robotcore/util/ElapsedTime.html" title="class in com.qualcomm.robotcore.util" target="classFrame">ElapsedTime</a></li>
<li><a href="com/qualcomm/robotcore/util/ElapsedTime.Resolution.html" title="enum in com.qualcomm.robotcore.util" target="classFrame">ElapsedTime.Resolution</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Engagable.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">Engagable</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/Event.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Event</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop" target="classFrame"><span class="interfaceName">EventLoop</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop" target="classFrame">EventLoopManager</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoopManager.EventLoopMonitor.html" title="interface in com.qualcomm.robotcore.eventloop" target="classFrame"><span class="interfaceName">EventLoopManager.EventLoopMonitor</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/EventLoopManagerClient.html" title="interface in com.qualcomm.robotcore.eventloop.opmode" target="classFrame"><span class="interfaceName">EventLoopManagerClient</span></a></li>
+<li><a href="com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAboutActivity</a></li>
+<li><a href="com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAboutActivity.AboutFragment</a></li>
<li><a href="com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAdvancedRCSettingsActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAdvancedRCSettingsActivity.SettingsFragment</a></li>
<li><a href="com/qualcomm/ftccommon/FtcEventLoop.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcEventLoop</a></li>
@@ -90,6 +102,7 @@
<li><a href="com/qualcomm/ftccommon/FtcEventLoopHandler.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcEventLoopHandler</a></li>
<li><a href="com/qualcomm/ftccommon/FtcEventLoopIdle.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcEventLoopIdle</a></li>
<li><a href="com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcLynxFirmwareUpdateActivity</a></li>
+<li><a href="com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon" target="classFrame">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></li>
<li><a href="com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcLynxModuleAddressUpdateActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcRobotControllerService.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcRobotControllerService</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/FtcRobotControllerServiceState.html" title="interface in com.qualcomm.robotcore.eventloop.opmode" target="classFrame"><span class="interfaceName">FtcRobotControllerServiceState</span></a></li>
@@ -98,6 +111,7 @@
<li><a href="com/qualcomm/ftccommon/FtcWifiDirectChannelSelectorActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcWifiDirectChannelSelectorActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcWifiDirectRememberedGroupsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcWifiDirectRememberedGroupsActivity</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Func.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Func</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/Function.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Function</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Gamepad.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">Gamepad</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Gamepad.GamepadCallback.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">Gamepad.GamepadCallback</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/GeneralMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">GeneralMatrixF</a></li>
@@ -140,6 +154,11 @@
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">IrSeekerSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.IrSeekerIndividualSensor.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">IrSeekerSensor.IrSeekerIndividualSensor</a></li>
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.Mode.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">IrSeekerSensor.Mode</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">JavaUtil</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.AtMode.html" title="enum in org.firstinspires.ftc.robotcore.external" target="classFrame">JavaUtil.AtMode</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.SortDirection.html" title="enum in org.firstinspires.ftc.robotcore.external" target="classFrame">JavaUtil.SortDirection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.SortType.html" title="enum in org.firstinspires.ftc.robotcore.external" target="classFrame">JavaUtil.SortType</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.TrimMode.html" title="enum in org.firstinspires.ftc.robotcore.external" target="classFrame">JavaUtil.TrimMode</a></li>
<li><a href="com/qualcomm/ftccommon/LaunchActivityConstantsList.html" title="class in com.qualcomm.ftccommon" target="classFrame">LaunchActivityConstantsList</a></li>
<li><a href="com/qualcomm/ftccommon/LaunchActivityConstantsList.RequestCode.html" title="enum in com.qualcomm.ftccommon" target="classFrame">LaunchActivityConstantsList.RequestCode</a></li>
<li><a href="com/qualcomm/robotcore/hardware/LED.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">LED</a></li>
@@ -155,6 +174,9 @@
<li><a href="com/qualcomm/robotcore/hardware/LynxModuleMetaList.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">LynxModuleMetaList</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MagneticFlux.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">MagneticFlux</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/MatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">MatrixF</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">MotionDetection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.MotionDetectionListener.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame"><span class="interfaceName">MotionDetection.MotionDetectionListener</span></a></li>
+<li><a href="com/qualcomm/robotcore/hardware/MotorControlAlgorithm.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">MotorControlAlgorithm</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/NavUtil.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">NavUtil</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/NonConst.html" title="annotation in org.firstinspires.ftc.robotcore.external" target="classFrame">NonConst</a></li>
<li><a href="com/qualcomm/robotcore/hardware/NormalizedColorSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">NormalizedColorSensor</span></a></li>
@@ -171,6 +193,7 @@
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Orientation.AngleSet.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">Orientation.AngleSet</a></li>
<li><a href="com/qualcomm/robotcore/hardware/OrientationSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">OrientationSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/PIDCoefficients.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">PIDCoefficients</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/PIDFCoefficients.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">PIDFCoefficients</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Position.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">Position</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Predicate.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Predicate</span></a></li>
<li><a href="com/qualcomm/ftccommon/ProgrammingModeController.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">ProgrammingModeController</span></a></li>
@@ -190,9 +213,12 @@
<li><a href="com/qualcomm/robotcore/exception/RobotCoreException.html" title="class in com.qualcomm.robotcore.exception" target="classFrame">RobotCoreException</a></li>
<li><a href="com/qualcomm/robotcore/hardware/RobotCoreLynxModule.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">RobotCoreLynxModule</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/RobotCoreLynxUsbDevice.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">RobotCoreLynxUsbDevice</span></a></li>
+<li><a href="com/qualcomm/robotcore/exception/RobotProtocolException.html" title="class in com.qualcomm.robotcore.exception" target="classFrame">RobotProtocolException</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Rotation.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">Rotation</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/RowMajorMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">RowMajorMatrixF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/RowMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">RowMatrixF</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ScannedDevices.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">ScannedDevices</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ScannedDevices.MapAdapter.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">ScannedDevices.MapAdapter</a></li>
<li><a href="com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util" target="classFrame">SerialNumber</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Servo.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">Servo</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Servo.Direction.html" title="enum in com.qualcomm.robotcore.hardware" target="classFrame">Servo.Direction</a></li>
@@ -201,12 +227,24 @@
<li><a href="com/qualcomm/robotcore/hardware/ServoControllerEx.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">ServoControllerEx</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/ServoImpl.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">ServoImpl</a></li>
<li><a href="com/qualcomm/robotcore/hardware/ServoImplEx.html" title="class in com.qualcomm.robotcore.hardware" target="classFrame">ServoImplEx</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">SignificantMotionDetection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.SignificantMotionDetectionListener.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">SignificantMotionDetection.SignificantMotionDetectionListener</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/SliceMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">SliceMatrixF</a></li>
<li><a href="com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.CurrentlyPlaying</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.InstanceHolder</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.PlaySoundParams</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">SoundPlayer.SoundFromFile</span></a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.StopWhat</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/State.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">State</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/StateMachine.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">StateMachine</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/StateTransition.html" title="class in org.firstinspires.ftc.robotcore.external" target="classFrame">StateTransition</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Supplier.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Supplier</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/SwitchableLight.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">SwitchableLight</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.html" title="interface in com.qualcomm.robotcore.eventloop" target="classFrame"><span class="interfaceName">SyncdDevice</span></a></li>
+<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.Manager.html" title="interface in com.qualcomm.robotcore.eventloop" target="classFrame"><span class="interfaceName">SyncdDevice.Manager</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.ShutdownReason.html" title="enum in com.qualcomm.robotcore.eventloop" target="classFrame">SyncdDevice.ShutdownReason</a></li>
+<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.Syncable.html" title="interface in com.qualcomm.robotcore.eventloop" target="classFrame"><span class="interfaceName">SyncdDevice.Syncable</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Telemetry</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.Item.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Telemetry.Item</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.Line.html" title="interface in org.firstinspires.ftc.robotcore.external" target="classFrame"><span class="interfaceName">Telemetry.Line</span></a></li>
@@ -229,15 +267,22 @@
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/VectorF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices" target="classFrame">VectorF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Velocity.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">Velocity</a></li>
<li><a href="com/qualcomm/ftccommon/ViewLogsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">ViewLogsActivity</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/VisuallyIdentifiableHardwareDevice.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">VisuallyIdentifiableHardwareDevice</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/VoltageSensor.html" title="interface in com.qualcomm.robotcore.hardware" target="classFrame"><span class="interfaceName">VoltageSensor</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaBase</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.TrackingResults.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaBase.TrackingResults</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame"><span class="interfaceName">VuforiaLocalizer</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.CameraDirection.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaLocalizer.CameraDirection</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.CloseableFrame.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaLocalizer.CloseableFrame</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaLocalizer.Parameters</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.CameraMonitorFeedback.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaLocalizer.Parameters.CameraMonitorFeedback</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaRelicRecovery</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.TrackingResults.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaRelicRecovery.TrackingResults</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRoverRuckus.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaRoverRuckus</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame"><span class="interfaceName">VuforiaTrackable</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.Listener.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame"><span class="interfaceName">VuforiaTrackable.Listener</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaTrackableDefaultListener</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.PoseAndCamera.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuforiaTrackableDefaultListener.PoseAndCamera</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackables.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame"><span class="interfaceName">VuforiaTrackables</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuMarkInstanceId.html" title="class in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuMarkInstanceId</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuMarkInstanceId.Type.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation" target="classFrame">VuMarkInstanceId.Type</a></li>
diff --git a/doc/javadoc/allclasses-noframe.html b/doc/javadoc/allclasses-noframe.html
index 4a7af55..5ed184e 100644
--- a/doc/javadoc/allclasses-noframe.html
+++ b/doc/javadoc/allclasses-noframe.html
@@ -11,8 +11,6 @@
<h1 class="bar">All&nbsp;Classes</h1>
<div class="indexContainer">
<ul>
-<li><a href="com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon">AboutActivity</a></li>
-<li><a href="com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon">AboutActivity.Item</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Acceleration.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">Acceleration</a></li>
<li><a href="com/qualcomm/robotcore/hardware/AccelerationSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">AccelerationSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogInput.html" title="class in com.qualcomm.robotcore.hardware">AnalogInput</a></li>
@@ -20,6 +18,11 @@
<li><a href="com/qualcomm/robotcore/hardware/AnalogOutput.html" title="class in com.qualcomm.robotcore.hardware">AnalogOutput</a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogOutputController.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">AnalogOutputController</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/AnalogSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">AnalogSensor</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidAccelerometer.html" title="class in org.firstinspires.ftc.robotcore.external.android">AndroidAccelerometer</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidGyroscope.html" title="class in org.firstinspires.ftc.robotcore.external.android">AndroidGyroscope</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidOrientation.html" title="class in org.firstinspires.ftc.robotcore.external.android">AndroidOrientation</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidSoundPool.html" title="class in org.firstinspires.ftc.robotcore.external.android">AndroidSoundPool</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/android/AndroidTextToSpeech.html" title="class in org.firstinspires.ftc.robotcore.external.android">AndroidTextToSpeech</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/AngleUnit.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">AngleUnit</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/AngularVelocity.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">AngularVelocity</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/AnnotatedOpModeManager.html" title="interface in com.qualcomm.robotcore.eventloop.opmode"><span class="interfaceName">AnnotatedOpModeManager</span></a></li>
@@ -31,11 +34,16 @@
<li><a href="com/qualcomm/robotcore/hardware/Blinker.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">Blinker</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Blinker.Step.html" title="class in com.qualcomm.robotcore.hardware">Blinker.Step</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/ClassFactory.html" title="class in org.firstinspires.ftc.robotcore.external">ClassFactory</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/ClassFactory.InstanceHolder.html" title="class in org.firstinspires.ftc.robotcore.external">ClassFactory.InstanceHolder</a></li>
<li><a href="com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon">ClassManagerFactory</a></li>
<li><a href="com/qualcomm/robotcore/hardware/ColorSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">ColorSensor</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/ColumnMajorMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">ColumnMajorMatrixF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/ColumnMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">ColumnMatrixF</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon">CommandList</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdPlaySound</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdRequestSound</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon">CommandList.CmdStopPlayingSounds</a></li>
+<li><a href="com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon">CommandList.CmdVisuallyIdentify</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon">CommandList.LynxAddressChangeRequest</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon">CommandList.LynxAddressChangeRequest.AddressChange</a></li>
<li><a href="com/qualcomm/ftccommon/CommandList.LynxFirmwareImagesResp.html" title="class in com.qualcomm.ftccommon">CommandList.LynxFirmwareImagesResp</a></li>
@@ -49,6 +57,7 @@
<li><a href="com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon">ConfigWifiDirectActivity.Flag</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Const.html" title="annotation in org.firstinspires.ftc.robotcore.external">Const</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Consumer.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Consumer</span></a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ControlSystem.html" title="enum in com.qualcomm.robotcore.hardware">ControlSystem</a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServo.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">CRServo</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServoImpl.html" title="class in com.qualcomm.robotcore.hardware">CRServoImpl</a></li>
<li><a href="com/qualcomm/robotcore/hardware/CRServoImplEx.html" title="class in com.qualcomm.robotcore.hardware">CRServoImplEx</a></li>
@@ -65,7 +74,7 @@
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/DenseMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">DenseMatrixF</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DeviceInterfaceModule.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">DeviceInterfaceModule</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">DeviceManager</span></a></li>
-<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.DeviceType.html" title="enum in com.qualcomm.robotcore.hardware">DeviceManager.DeviceType</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/DeviceManager.UsbDeviceType.html" title="enum in com.qualcomm.robotcore.hardware">DeviceManager.UsbDeviceType</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannel.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">DigitalChannel</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannel.Mode.html" title="enum in com.qualcomm.robotcore.hardware">DigitalChannel.Mode</a></li>
<li><a href="com/qualcomm/robotcore/hardware/DigitalChannelController.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">DigitalChannelController</span></a></li>
@@ -78,10 +87,13 @@
<li><a href="com/qualcomm/robotcore/util/ElapsedTime.html" title="class in com.qualcomm.robotcore.util">ElapsedTime</a></li>
<li><a href="com/qualcomm/robotcore/util/ElapsedTime.Resolution.html" title="enum in com.qualcomm.robotcore.util">ElapsedTime.Resolution</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Engagable.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">Engagable</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/Event.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Event</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop"><span class="interfaceName">EventLoop</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/EventLoopManager.EventLoopMonitor.html" title="interface in com.qualcomm.robotcore.eventloop"><span class="interfaceName">EventLoopManager.EventLoopMonitor</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/EventLoopManagerClient.html" title="interface in com.qualcomm.robotcore.eventloop.opmode"><span class="interfaceName">EventLoopManagerClient</span></a></li>
+<li><a href="com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity</a></li>
+<li><a href="com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity.AboutFragment</a></li>
<li><a href="com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon">FtcAdvancedRCSettingsActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon">FtcAdvancedRCSettingsActivity.SettingsFragment</a></li>
<li><a href="com/qualcomm/ftccommon/FtcEventLoop.html" title="class in com.qualcomm.ftccommon">FtcEventLoop</a></li>
@@ -90,6 +102,7 @@
<li><a href="com/qualcomm/ftccommon/FtcEventLoopHandler.html" title="class in com.qualcomm.ftccommon">FtcEventLoopHandler</a></li>
<li><a href="com/qualcomm/ftccommon/FtcEventLoopIdle.html" title="class in com.qualcomm.ftccommon">FtcEventLoopIdle</a></li>
<li><a href="com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity</a></li>
+<li><a href="com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></li>
<li><a href="com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html" title="class in com.qualcomm.ftccommon">FtcLynxModuleAddressUpdateActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcRobotControllerService.html" title="class in com.qualcomm.ftccommon">FtcRobotControllerService</a></li>
<li><a href="com/qualcomm/robotcore/eventloop/opmode/FtcRobotControllerServiceState.html" title="interface in com.qualcomm.robotcore.eventloop.opmode"><span class="interfaceName">FtcRobotControllerServiceState</span></a></li>
@@ -98,6 +111,7 @@
<li><a href="com/qualcomm/ftccommon/FtcWifiDirectChannelSelectorActivity.html" title="class in com.qualcomm.ftccommon">FtcWifiDirectChannelSelectorActivity</a></li>
<li><a href="com/qualcomm/ftccommon/FtcWifiDirectRememberedGroupsActivity.html" title="class in com.qualcomm.ftccommon">FtcWifiDirectRememberedGroupsActivity</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Func.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Func</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/Function.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Function</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Gamepad.html" title="class in com.qualcomm.robotcore.hardware">Gamepad</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Gamepad.GamepadCallback.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">Gamepad.GamepadCallback</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/GeneralMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">GeneralMatrixF</a></li>
@@ -140,6 +154,11 @@
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">IrSeekerSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.IrSeekerIndividualSensor.html" title="class in com.qualcomm.robotcore.hardware">IrSeekerSensor.IrSeekerIndividualSensor</a></li>
<li><a href="com/qualcomm/robotcore/hardware/IrSeekerSensor.Mode.html" title="enum in com.qualcomm.robotcore.hardware">IrSeekerSensor.Mode</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.html" title="class in org.firstinspires.ftc.robotcore.external">JavaUtil</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.AtMode.html" title="enum in org.firstinspires.ftc.robotcore.external">JavaUtil.AtMode</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.SortDirection.html" title="enum in org.firstinspires.ftc.robotcore.external">JavaUtil.SortDirection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.SortType.html" title="enum in org.firstinspires.ftc.robotcore.external">JavaUtil.SortType</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/JavaUtil.TrimMode.html" title="enum in org.firstinspires.ftc.robotcore.external">JavaUtil.TrimMode</a></li>
<li><a href="com/qualcomm/ftccommon/LaunchActivityConstantsList.html" title="class in com.qualcomm.ftccommon">LaunchActivityConstantsList</a></li>
<li><a href="com/qualcomm/ftccommon/LaunchActivityConstantsList.RequestCode.html" title="enum in com.qualcomm.ftccommon">LaunchActivityConstantsList.RequestCode</a></li>
<li><a href="com/qualcomm/robotcore/hardware/LED.html" title="class in com.qualcomm.robotcore.hardware">LED</a></li>
@@ -155,6 +174,9 @@
<li><a href="com/qualcomm/robotcore/hardware/LynxModuleMetaList.html" title="class in com.qualcomm.robotcore.hardware">LynxModuleMetaList</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MagneticFlux.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">MagneticFlux</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/MatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">MatrixF</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">MotionDetection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/MotionDetection.MotionDetectionListener.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation"><span class="interfaceName">MotionDetection.MotionDetectionListener</span></a></li>
+<li><a href="com/qualcomm/robotcore/hardware/MotorControlAlgorithm.html" title="enum in com.qualcomm.robotcore.hardware">MotorControlAlgorithm</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/NavUtil.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">NavUtil</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/NonConst.html" title="annotation in org.firstinspires.ftc.robotcore.external">NonConst</a></li>
<li><a href="com/qualcomm/robotcore/hardware/NormalizedColorSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">NormalizedColorSensor</span></a></li>
@@ -171,6 +193,7 @@
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Orientation.AngleSet.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">Orientation.AngleSet</a></li>
<li><a href="com/qualcomm/robotcore/hardware/OrientationSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">OrientationSensor</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/PIDCoefficients.html" title="class in com.qualcomm.robotcore.hardware">PIDCoefficients</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/PIDFCoefficients.html" title="class in com.qualcomm.robotcore.hardware">PIDFCoefficients</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Position.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">Position</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Predicate.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Predicate</span></a></li>
<li><a href="com/qualcomm/ftccommon/ProgrammingModeController.html" title="interface in com.qualcomm.ftccommon"><span class="interfaceName">ProgrammingModeController</span></a></li>
@@ -190,9 +213,12 @@
<li><a href="com/qualcomm/robotcore/exception/RobotCoreException.html" title="class in com.qualcomm.robotcore.exception">RobotCoreException</a></li>
<li><a href="com/qualcomm/robotcore/hardware/RobotCoreLynxModule.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">RobotCoreLynxModule</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/RobotCoreLynxUsbDevice.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">RobotCoreLynxUsbDevice</span></a></li>
+<li><a href="com/qualcomm/robotcore/exception/RobotProtocolException.html" title="class in com.qualcomm.robotcore.exception">RobotProtocolException</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Rotation.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">Rotation</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/RowMajorMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">RowMajorMatrixF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/RowMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">RowMatrixF</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ScannedDevices.html" title="class in com.qualcomm.robotcore.hardware">ScannedDevices</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/ScannedDevices.MapAdapter.html" title="class in com.qualcomm.robotcore.hardware">ScannedDevices.MapAdapter</a></li>
<li><a href="com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a></li>
<li><a href="com/qualcomm/robotcore/hardware/Servo.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">Servo</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/Servo.Direction.html" title="enum in com.qualcomm.robotcore.hardware">Servo.Direction</a></li>
@@ -201,12 +227,24 @@
<li><a href="com/qualcomm/robotcore/hardware/ServoControllerEx.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">ServoControllerEx</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/ServoImpl.html" title="class in com.qualcomm.robotcore.hardware">ServoImpl</a></li>
<li><a href="com/qualcomm/robotcore/hardware/ServoImplEx.html" title="class in com.qualcomm.robotcore.hardware">ServoImplEx</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.html" title="class in org.firstinspires.ftc.robotcore.external">SignificantMotionDetection</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/SignificantMotionDetection.SignificantMotionDetectionListener.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">SignificantMotionDetection.SignificantMotionDetectionListener</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/SliceMatrixF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">SliceMatrixF</a></li>
<li><a href="com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon">SoundPlayer.CurrentlyPlaying</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon">SoundPlayer.InstanceHolder</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon"><span class="interfaceName">SoundPlayer.SoundFromFile</span></a></li>
+<li><a href="com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/State.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">State</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/StateMachine.html" title="class in org.firstinspires.ftc.robotcore.external">StateMachine</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/StateTransition.html" title="class in org.firstinspires.ftc.robotcore.external">StateTransition</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Supplier.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Supplier</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/SwitchableLight.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">SwitchableLight</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.html" title="interface in com.qualcomm.robotcore.eventloop"><span class="interfaceName">SyncdDevice</span></a></li>
+<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.Manager.html" title="interface in com.qualcomm.robotcore.eventloop"><span class="interfaceName">SyncdDevice.Manager</span></a></li>
<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.ShutdownReason.html" title="enum in com.qualcomm.robotcore.eventloop">SyncdDevice.ShutdownReason</a></li>
+<li><a href="com/qualcomm/robotcore/eventloop/SyncdDevice.Syncable.html" title="interface in com.qualcomm.robotcore.eventloop"><span class="interfaceName">SyncdDevice.Syncable</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Telemetry</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.Item.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Telemetry.Item</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/Telemetry.Line.html" title="interface in org.firstinspires.ftc.robotcore.external"><span class="interfaceName">Telemetry.Line</span></a></li>
@@ -229,15 +267,22 @@
<li><a href="org/firstinspires/ftc/robotcore/external/matrices/VectorF.html" title="class in org.firstinspires.ftc.robotcore.external.matrices">VectorF</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/Velocity.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">Velocity</a></li>
<li><a href="com/qualcomm/ftccommon/ViewLogsActivity.html" title="class in com.qualcomm.ftccommon">ViewLogsActivity</a></li>
+<li><a href="com/qualcomm/robotcore/hardware/VisuallyIdentifiableHardwareDevice.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">VisuallyIdentifiableHardwareDevice</span></a></li>
<li><a href="com/qualcomm/robotcore/hardware/VoltageSensor.html" title="interface in com.qualcomm.robotcore.hardware"><span class="interfaceName">VoltageSensor</span></a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaBase</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaBase.TrackingResults.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaBase.TrackingResults</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation"><span class="interfaceName">VuforiaLocalizer</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.CameraDirection.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">VuforiaLocalizer.CameraDirection</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.CloseableFrame.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaLocalizer.CloseableFrame</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaLocalizer.Parameters</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaLocalizer.Parameters.CameraMonitorFeedback.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">VuforiaLocalizer.Parameters.CameraMonitorFeedback</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaRelicRecovery</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRelicRecovery.TrackingResults.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaRelicRecovery.TrackingResults</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaRoverRuckus.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaRoverRuckus</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation"><span class="interfaceName">VuforiaTrackable</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackable.Listener.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation"><span class="interfaceName">VuforiaTrackable.Listener</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaTrackableDefaultListener</a></li>
+<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackableDefaultListener.PoseAndCamera.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuforiaTrackableDefaultListener.PoseAndCamera</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuforiaTrackables.html" title="interface in org.firstinspires.ftc.robotcore.external.navigation"><span class="interfaceName">VuforiaTrackables</span></a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuMarkInstanceId.html" title="class in org.firstinspires.ftc.robotcore.external.navigation">VuMarkInstanceId</a></li>
<li><a href="org/firstinspires/ftc/robotcore/external/navigation/VuMarkInstanceId.Type.html" title="enum in org.firstinspires.ftc.robotcore.external.navigation">VuMarkInstanceId.Type</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/ClassManagerFactory.html b/doc/javadoc/com/qualcomm/ftccommon/ClassManagerFactory.html
index 382c514..59f1f51 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/ClassManagerFactory.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/ClassManagerFactory.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Prev&nbsp;Class</li>
<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@@ -257,7 +257,7 @@ extends java.lang.Object</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Prev&nbsp;Class</li>
<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdPlaySound.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdPlaySound.html
new file mode 100644
index 0000000..de3252d
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdPlaySound.html
@@ -0,0 +1,420 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>CommandList.CmdPlaySound</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CommandList.CmdPlaySound";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdPlaySound.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class CommandList.CmdPlaySound" class="title">Class CommandList.CmdPlaySound</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.CommandList.CmdPlaySound</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon">CommandList</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">CommandList.CmdPlaySound</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#Command">Command</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#hashString">hashString</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#loopControl">loopControl</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#msPresentationTime">msPresentationTime</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#rate">rate</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#volume">volume</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#waitForNonLoopingSoundsToFinish">waitForNonLoopingSoundsToFinish</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#CmdPlaySound-long-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams-">CmdPlaySound</a></span>(long&nbsp;msPresentationTime,
+ java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdPlaySound</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#deserialize-java.lang.String-">deserialize</a></span>(java.lang.String&nbsp;serialized)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#getParams--">getParams</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html#serialize--">serialize</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="Command">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Command</h4>
+<pre>public static final&nbsp;java.lang.String Command</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CmdPlaySound.Command">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="msPresentationTime">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>msPresentationTime</h4>
+<pre>public final&nbsp;long msPresentationTime</pre>
+</li>
+</ul>
+<a name="hashString">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hashString</h4>
+<pre>public final&nbsp;java.lang.String hashString</pre>
+</li>
+</ul>
+<a name="waitForNonLoopingSoundsToFinish">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>waitForNonLoopingSoundsToFinish</h4>
+<pre>public final&nbsp;boolean waitForNonLoopingSoundsToFinish</pre>
+</li>
+</ul>
+<a name="volume">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>volume</h4>
+<pre>public final&nbsp;float volume</pre>
+</li>
+</ul>
+<a name="loopControl">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loopControl</h4>
+<pre>public final&nbsp;int loopControl</pre>
+</li>
+</ul>
+<a name="rate">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rate</h4>
+<pre>public final&nbsp;float rate</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CmdPlaySound-long-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CmdPlaySound</h4>
+<pre>public&nbsp;CmdPlaySound(long&nbsp;msPresentationTime,
+ java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="serialize--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialize</h4>
+<pre>public&nbsp;java.lang.String&nbsp;serialize()</pre>
+</li>
+</ul>
+<a name="deserialize-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>deserialize</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdPlaySound</a>&nbsp;deserialize(java.lang.String&nbsp;serialized)</pre>
+</li>
+</ul>
+<a name="getParams--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getParams</h4>
+<pre>public&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;getParams()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdPlaySound.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdRequestSound.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdRequestSound.html
new file mode 100644
index 0000000..06e234c
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdRequestSound.html
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>CommandList.CmdRequestSound</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CommandList.CmdRequestSound";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdRequestSound.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class CommandList.CmdRequestSound" class="title">Class CommandList.CmdRequestSound</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.CommandList.CmdRequestSound</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon">CommandList</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">CommandList.CmdRequestSound</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#Command">Command</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#hashString">hashString</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#port">port</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#CmdRequestSound-java.lang.String-int-">CmdRequestSound</a></span>(java.lang.String&nbsp;hashString,
+ int&nbsp;port)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdRequestSound</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#deserialize-java.lang.String-">deserialize</a></span>(java.lang.String&nbsp;serialized)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html#serialize--">serialize</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="Command">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Command</h4>
+<pre>public static final&nbsp;java.lang.String Command</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CmdRequestSound.Command">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="hashString">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hashString</h4>
+<pre>public final&nbsp;java.lang.String hashString</pre>
+</li>
+</ul>
+<a name="port">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>port</h4>
+<pre>public final&nbsp;int port</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CmdRequestSound-java.lang.String-int-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CmdRequestSound</h4>
+<pre>public&nbsp;CmdRequestSound(java.lang.String&nbsp;hashString,
+ int&nbsp;port)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="serialize--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialize</h4>
+<pre>public&nbsp;java.lang.String&nbsp;serialize()</pre>
+</li>
+</ul>
+<a name="deserialize-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deserialize</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdRequestSound</a>&nbsp;deserialize(java.lang.String&nbsp;serialized)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdRequestSound.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html
new file mode 100644
index 0000000..14010a1
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>CommandList.CmdStopPlayingSounds</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CommandList.CmdStopPlayingSounds";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdStopPlayingSounds.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class CommandList.CmdStopPlayingSounds" class="title">Class CommandList.CmdStopPlayingSounds</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.CommandList.CmdStopPlayingSounds</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon">CommandList</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">CommandList.CmdStopPlayingSounds</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html#Command">Command</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html#stopWhat">stopWhat</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html#CmdStopPlayingSounds-com.qualcomm.ftccommon.SoundPlayer.StopWhat-">CmdStopPlayingSounds</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&nbsp;stopWhat)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon">CommandList.CmdStopPlayingSounds</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html#deserialize-java.lang.String-">deserialize</a></span>(java.lang.String&nbsp;serialized)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html#serialize--">serialize</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="Command">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Command</h4>
+<pre>public static final&nbsp;java.lang.String Command</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CmdStopPlayingSounds.Command">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="stopWhat">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>stopWhat</h4>
+<pre>public final&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a> stopWhat</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CmdStopPlayingSounds-com.qualcomm.ftccommon.SoundPlayer.StopWhat-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CmdStopPlayingSounds</h4>
+<pre>public&nbsp;CmdStopPlayingSounds(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&nbsp;stopWhat)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="serialize--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialize</h4>
+<pre>public&nbsp;java.lang.String&nbsp;serialize()</pre>
+</li>
+</ul>
+<a name="deserialize-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deserialize</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon">CommandList.CmdStopPlayingSounds</a>&nbsp;deserialize(java.lang.String&nbsp;serialized)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdStopPlayingSounds.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html
new file mode 100644
index 0000000..58a939f
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>CommandList.CmdVisuallyIdentify</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="CommandList.CmdVisuallyIdentify";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdVisuallyIdentify.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class CommandList.CmdVisuallyIdentify" class="title">Class CommandList.CmdVisuallyIdentify</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.CommandList.CmdVisuallyIdentify</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon">CommandList</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">CommandList.CmdVisuallyIdentify</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#Command">Command</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#serialNumber">serialNumber</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#shouldIdentify">shouldIdentify</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#CmdVisuallyIdentify-com.qualcomm.robotcore.util.SerialNumber-boolean-">CmdVisuallyIdentify</a></span>(<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
+ boolean&nbsp;shouldIdentify)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon">CommandList.CmdVisuallyIdentify</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#deserialize-java.lang.String-">deserialize</a></span>(java.lang.String&nbsp;serialized)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html#serialize--">serialize</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="Command">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Command</h4>
+<pre>public static final&nbsp;java.lang.String Command</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CmdVisuallyIdentify.Command">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="serialNumber">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialNumber</h4>
+<pre>public final&nbsp;<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a> serialNumber</pre>
+</li>
+</ul>
+<a name="shouldIdentify">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shouldIdentify</h4>
+<pre>public final&nbsp;boolean shouldIdentify</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CmdVisuallyIdentify-com.qualcomm.robotcore.util.SerialNumber-boolean-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CmdVisuallyIdentify</h4>
+<pre>public&nbsp;CmdVisuallyIdentify(<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
+ boolean&nbsp;shouldIdentify)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="serialize--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialize</h4>
+<pre>public&nbsp;java.lang.String&nbsp;serialize()</pre>
+</li>
+</ul>
+<a name="deserialize-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deserialize</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon">CommandList.CmdVisuallyIdentify</a>&nbsp;deserialize(java.lang.String&nbsp;serialized)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" target="_top">Frames</a></li>
+<li><a href="CommandList.CmdVisuallyIdentify.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html
index ca0f170..bfb1f40 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@@ -259,7 +259,7 @@ extends java.lang.Object</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/CommandList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html
index c17cc27..ea23b37 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html
@@ -133,7 +133,7 @@ extends java.lang.Object</pre>
</tr>
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html#includeModuleNumbers">includeModuleNumbers</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.USBAccessibleLynxModulesRequest.html#forFirmwareUpdate">forFirmwareUpdate</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
@@ -197,13 +197,13 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Field Detail</h3>
-<a name="includeModuleNumbers">
+<a name="forFirmwareUpdate">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>includeModuleNumbers</h4>
-<pre>public&nbsp;boolean includeModuleNumbers</pre>
+<h4>forFirmwareUpdate</h4>
+<pre>public&nbsp;boolean forFirmwareUpdate</pre>
</li>
</ul>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/CommandList.html b/doc/javadoc/com/qualcomm/ftccommon/CommandList.html
index e10a22d..7ad0886 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/CommandList.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/CommandList.html
@@ -42,7 +42,7 @@
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.html" target="_top">Frames</a></li>
@@ -129,6 +129,22 @@ extends RobotCoreCommandList</pre>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdPlaySound</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdRequestSound</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon">CommandList.CmdStopPlayingSounds</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon">CommandList.CmdVisuallyIdentify</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon">CommandList.LynxAddressChangeRequest</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
@@ -280,25 +296,29 @@ extends RobotCoreCommandList</pre>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_DS_PROGRAM_AND_MANAGE">CMD_START_DS_PROGRAM_AND_MANAGE</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_SET_MATCH_NUMBER">CMD_SET_MATCH_NUMBER</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_DS_PROGRAM_AND_MANAGE_RESP">CMD_START_DS_PROGRAM_AND_MANAGE_RESP</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_DS_PROGRAM_AND_MANAGE">CMD_START_DS_PROGRAM_AND_MANAGE</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_DS_PROGRAM_AND_MANAGE_RESP">CMD_START_DS_PROGRAM_AND_MANAGE_RESP</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_PROGRAMMING_MODE">CMD_START_PROGRAMMING_MODE</a></span></code>
<div class="block">Command to start programming mode (blocks).</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_START_PROGRAMMING_MODE_RESP">CMD_START_PROGRAMMING_MODE_RESP</a></span></code>
<div class="block">Response to a command to start programming mode (blocks).</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/CommandList.html#CMD_STOP_PROGRAMMING_MODE">CMD_STOP_PROGRAMMING_MODE</a></span></code>
<div class="block">Command to stop programming mode (blocks).</div>
@@ -351,42 +371,42 @@ extends RobotCoreCommandList</pre>
<!-- -->
</a>
<h3>Field Detail</h3>
-<a name="CMD_RESTART_ROBOT">
+<a name="CMD_INIT_OP_MODE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>CMD_RESTART_ROBOT</h4>
-<pre>public static final&nbsp;java.lang.String CMD_RESTART_ROBOT</pre>
+<h4>CMD_INIT_OP_MODE</h4>
+<pre>public static final&nbsp;java.lang.String CMD_INIT_OP_MODE</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_RESTART_ROBOT">Constant Field Values</a></dd>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_INIT_OP_MODE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
-<a name="CMD_INIT_OP_MODE">
+<a name="CMD_RUN_OP_MODE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>CMD_INIT_OP_MODE</h4>
-<pre>public static final&nbsp;java.lang.String CMD_INIT_OP_MODE</pre>
+<h4>CMD_RUN_OP_MODE</h4>
+<pre>public static final&nbsp;java.lang.String CMD_RUN_OP_MODE</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_INIT_OP_MODE">Constant Field Values</a></dd>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_RUN_OP_MODE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
-<a name="CMD_RUN_OP_MODE">
+<a name="CMD_RESTART_ROBOT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>CMD_RUN_OP_MODE</h4>
-<pre>public static final&nbsp;java.lang.String CMD_RUN_OP_MODE</pre>
+<h4>CMD_RESTART_ROBOT</h4>
+<pre>public static final&nbsp;java.lang.String CMD_RESTART_ROBOT</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_RUN_OP_MODE">Constant Field Values</a></dd>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_RESTART_ROBOT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
@@ -687,6 +707,19 @@ extends RobotCoreCommandList</pre>
</dl>
</li>
</ul>
+<a name="CMD_SET_MATCH_NUMBER">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CMD_SET_MATCH_NUMBER</h4>
+<pre>public static final&nbsp;java.lang.String CMD_SET_MATCH_NUMBER</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.CommandList.CMD_SET_MATCH_NUMBER">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
<a name="CMD_GET_CANDIDATE_LYNX_FIRMWARE_IMAGES">
<!-- -->
</a>
@@ -823,7 +856,7 @@ extends RobotCoreCommandList</pre>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/CommandList.html" target="_top">Frames</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html b/doc/javadoc/com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html
index aa77303..c0420f2 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html
@@ -48,7 +48,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" target="_top">Frames</a></li>
@@ -310,7 +310,7 @@ not permitted.)</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" target="_top">Frames</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html b/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html
new file mode 100644
index 0000000..2d9abf5
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html
@@ -0,0 +1,382 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>FtcAboutActivity.AboutFragment</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FtcAboutActivity.AboutFragment";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" target="_top">Frames</a></li>
+<li><a href="FtcAboutActivity.AboutFragment.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class FtcAboutActivity.AboutFragment" class="title">Class FtcAboutActivity.AboutFragment</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>PreferenceFragment</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.FtcAboutActivity.AboutFragment</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">FtcAboutActivity.AboutFragment</span>
+extends PreferenceFragment</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#remoteConfigure">remoteConfigure</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#AboutFragment--">AboutFragment</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#onCreate-Bundle-">onCreate</a></span>(Bundle&nbsp;savedInstanceState)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#refreshAllUnavailable--">refreshAllUnavailable</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#refreshLocal-RobotCoreCommandList.AboutInfo-">refreshLocal</a></span>(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#refreshRemote-RobotCoreCommandList.AboutInfo-">refreshRemote</a></span>(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#setPreferenceSummary-int-java.lang.String-">setPreferenceSummary</a></span>(int&nbsp;idPref,
+ java.lang.String&nbsp;value)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html#setPreferenceSummary-java.lang.String-java.lang.String-">setPreferenceSummary</a></span>(java.lang.String&nbsp;prefName,
+ java.lang.String&nbsp;value)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="remoteConfigure">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>remoteConfigure</h4>
+<pre>protected final&nbsp;boolean remoteConfigure</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AboutFragment--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AboutFragment</h4>
+<pre>public&nbsp;AboutFragment()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="refreshLocal-RobotCoreCommandList.AboutInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshLocal</h4>
+<pre>public&nbsp;void&nbsp;refreshLocal(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</pre>
+</li>
+</ul>
+<a name="refreshRemote-RobotCoreCommandList.AboutInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshRemote</h4>
+<pre>public&nbsp;void&nbsp;refreshRemote(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</pre>
+</li>
+</ul>
+<a name="refreshAllUnavailable--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshAllUnavailable</h4>
+<pre>public&nbsp;void&nbsp;refreshAllUnavailable()</pre>
+</li>
+</ul>
+<a name="onCreate-Bundle-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>onCreate</h4>
+<pre>public&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)</pre>
+</li>
+</ul>
+<a name="setPreferenceSummary-int-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setPreferenceSummary</h4>
+<pre>protected&nbsp;void&nbsp;setPreferenceSummary(int&nbsp;idPref,
+ java.lang.String&nbsp;value)</pre>
+</li>
+</ul>
+<a name="setPreferenceSummary-java.lang.String-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>setPreferenceSummary</h4>
+<pre>protected&nbsp;void&nbsp;setPreferenceSummary(java.lang.String&nbsp;prefName,
+ java.lang.String&nbsp;value)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" target="_top">Frames</a></li>
+<li><a href="FtcAboutActivity.AboutFragment.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.html b/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.html
new file mode 100644
index 0000000..068d5b4
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcAboutActivity.html
@@ -0,0 +1,530 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>FtcAboutActivity</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FtcAboutActivity";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":9,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcAboutActivity.html" target="_top">Frames</a></li>
+<li><a href="FtcAboutActivity.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class FtcAboutActivity" class="title">Class FtcAboutActivity</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>ThemedActivity</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.FtcAboutActivity</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">FtcAboutActivity</span>
+extends ThemedActivity</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity.AboutFragment</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity.AboutFragment</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#aboutFragment">aboutFragment</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected Context</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#context">context</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected java.util.concurrent.Future</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#refreshFuture">refreshFuture</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#remoteConfigure">remoteConfigure</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#TAG">TAG</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#FtcAboutActivity--">FtcAboutActivity</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#getAppVersion--">getAppVersion</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected static java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#getBuildTime--">getBuildTime</a></span>()</code>
+<div class="block">https://code.google.com/p/android/issues/detail?id=220039</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static com.qualcomm.ftccommon.CommandList.AboutInfo</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#getLocalAboutInfo--">getLocalAboutInfo</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#getTag--">getTag</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#onCreate-Bundle-">onCreate</a></span>(Bundle&nbsp;savedInstanceState)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#onDestroy--">onDestroy</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#onPause--">onPause</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#onResume--">onResume</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#refresh--">refresh</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#refreshRemote-RobotCoreCommandList.AboutInfo-">refreshRemote</a></span>(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#startRefreshing--">startRefreshing</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html#stopRefreshing--">stopRefreshing</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="TAG">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TAG</h4>
+<pre>public static final&nbsp;java.lang.String TAG</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.FtcAboutActivity.TAG">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="context">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>context</h4>
+<pre>protected final&nbsp;Context context</pre>
+</li>
+</ul>
+<a name="remoteConfigure">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>remoteConfigure</h4>
+<pre>protected final&nbsp;boolean remoteConfigure</pre>
+</li>
+</ul>
+<a name="aboutFragment">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>aboutFragment</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity.AboutFragment</a> aboutFragment</pre>
+</li>
+</ul>
+<a name="refreshFuture">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>refreshFuture</h4>
+<pre>protected&nbsp;java.util.concurrent.Future refreshFuture</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FtcAboutActivity--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FtcAboutActivity</h4>
+<pre>public&nbsp;FtcAboutActivity()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="getTag--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTag</h4>
+<pre>public&nbsp;java.lang.String&nbsp;getTag()</pre>
+</li>
+</ul>
+<a name="getLocalAboutInfo--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLocalAboutInfo</h4>
+<pre>public static&nbsp;com.qualcomm.ftccommon.CommandList.AboutInfo&nbsp;getLocalAboutInfo()</pre>
+</li>
+</ul>
+<a name="getAppVersion--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAppVersion</h4>
+<pre>protected static&nbsp;java.lang.String&nbsp;getAppVersion()</pre>
+</li>
+</ul>
+<a name="getBuildTime--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getBuildTime</h4>
+<pre>protected static&nbsp;java.lang.String&nbsp;getBuildTime()</pre>
+<div class="block">https://code.google.com/p/android/issues/detail?id=220039</div>
+</li>
+</ul>
+<a name="startRefreshing--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startRefreshing</h4>
+<pre>protected&nbsp;void&nbsp;startRefreshing()</pre>
+</li>
+</ul>
+<a name="stopRefreshing--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stopRefreshing</h4>
+<pre>protected&nbsp;void&nbsp;stopRefreshing()</pre>
+</li>
+</ul>
+<a name="refreshRemote-RobotCoreCommandList.AboutInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refreshRemote</h4>
+<pre>protected&nbsp;void&nbsp;refreshRemote(RobotCoreCommandList.AboutInfo&nbsp;aboutInfo)</pre>
+</li>
+</ul>
+<a name="refresh--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>refresh</h4>
+<pre>protected&nbsp;void&nbsp;refresh()</pre>
+</li>
+</ul>
+<a name="onCreate-Bundle-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>onCreate</h4>
+<pre>protected&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)</pre>
+</li>
+</ul>
+<a name="onResume--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>onResume</h4>
+<pre>protected&nbsp;void&nbsp;onResume()</pre>
+</li>
+</ul>
+<a name="onPause--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>onPause</h4>
+<pre>protected&nbsp;void&nbsp;onPause()</pre>
+</li>
+</ul>
+<a name="onDestroy--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>onDestroy</h4>
+<pre>protected&nbsp;void&nbsp;onDestroy()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcAboutActivity.html" target="_top">Frames</a></li>
+<li><a href="FtcAboutActivity.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html b/doc/javadoc/com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html
index 257b0c7..4722935 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@@ -318,7 +318,7 @@ extends ThemedActivity</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoop.html b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoop.html
index 7e90a05..35b0f84 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoop.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoop.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10};
+var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -271,55 +271,59 @@ extends <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="c
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#handleCommandScan-java.lang.String-">handleCommandScan</a></span>(java.lang.String&nbsp;extra)</code>&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#handleCommandSetMatchNumber-java.lang.String-">handleCommandSetMatchNumber</a></span>(java.lang.String&nbsp;extra)</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#handleUsbModuleAttach-RobotUsbModule-">handleUsbModuleAttach</a></span>(RobotUsbModule&nbsp;module)</code>
<div class="block">Process the fact that (we believe) that the indicated module has now reappeared after a
previously observed detachment.</div>
</td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#handleUsbModuleDetach-RobotUsbModule-">handleUsbModuleDetach</a></span>(RobotUsbModule&nbsp;module)</code>
<div class="block">Process the fact that a usb module has now become detached from the system.</div>
</td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#init-com.qualcomm.robotcore.eventloop.EventLoopManager-">init</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a>&nbsp;eventLoopManager)</code>
<div class="block">Init method</div>
</td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#loop--">loop</a></span>()</code>
<div class="block">Loop method, this will be called repeatedly while the robot is running.</div>
</td>
</tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#onUsbDeviceAttached-UsbDevice-">onUsbDeviceAttached</a></span>(UsbDevice&nbsp;usbDevice)</code>
<div class="block">Deal with the fact that a UsbDevice has recently attached to the system</div>
</td>
</tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#pendUsbDeviceAttachment-com.qualcomm.robotcore.util.SerialNumber-long-java.util.concurrent.TimeUnit-">pendUsbDeviceAttachment</a></span>(<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
long&nbsp;time,
java.util.concurrent.TimeUnit&nbsp;unit)</code>&nbsp;</td>
</tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
<td class="colFirst"><code>CallbackResult</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#processCommand-Command-">processCommand</a></span>(Command&nbsp;command)</code>
<div class="block">If the driver station sends over a command, it will be routed to this method.</div>
</td>
</tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#processedRecentlyAttachedUsbDevices--">processedRecentlyAttachedUsbDevices</a></span>()</code>
<div class="block">Process any usb devices that might have recently attached.</div>
</td>
</tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#refreshUserTelemetry-TelemetryMessage-double-">refreshUserTelemetry</a></span>(TelemetryMessage&nbsp;telemetry,
double&nbsp;sInterval)</code>
@@ -327,23 +331,23 @@ extends <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="c
here provided if a sufficiently long duration has passed since the last update.</div>
</td>
</tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#requestOpModeStop-com.qualcomm.robotcore.eventloop.opmode.OpMode-">requestOpModeStop</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/opmode/OpMode.html" title="class in com.qualcomm.robotcore.eventloop.opmode">OpMode</a>&nbsp;opModeToStopIfActive)</code>
<div class="block">Requests that an OpMode be stopped if it's the currently active one</div>
</td>
</tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#sendUIState--">sendUIState</a></span>()</code>
<div class="block">The driver station is requesting our opmode list/ UI state.</div>
</td>
</tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#setUsbModuleAttachmentHandler-com.qualcomm.ftccommon.UsbModuleAttachmentHandler-">setUsbModuleAttachmentHandler</a></span>(<a href="../../../com/qualcomm/ftccommon/UsbModuleAttachmentHandler.html" title="interface in com.qualcomm.ftccommon">UsbModuleAttachmentHandler</a>&nbsp;handler)</code>&nbsp;</td>
</tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoop.html#teardown--">teardown</a></span>()</code>
<div class="block">Teardown method</div>
@@ -355,7 +359,7 @@ extends <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="c
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="class in com.qualcomm.ftccommon">FtcEventLoopBase</a></h3>
-<code><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#checkForChangedOpModes--">checkForChangedOpModes</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#enterFirmwareUpdateMode-RobotUsbDevice-">enterFirmwareUpdateMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getLynxUsbDeviceForFirmwareUpdate-com.qualcomm.robotcore.util.SerialNumber-">getLynxUsbDeviceForFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandActivateConfiguration-java.lang.String-">handleCommandActivateConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandClearRememberedGroups--">handleCommandClearRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDeleteConfiguration-java.lang.String-">handleCommandDeleteConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDisconnectWifiDirect--">handleCommandDisconnectWifiDirect</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissAllDialogs-Command-">handleCommandDismissAllDialogs</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissDialog-Command-">handleCommandDismissDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissProgress-Command-">handleCommandDismissProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetCandidateLynxFirmwareImages-Command-">handleCommandGetCandidateLynxFirmwareImages</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetUSBAccessibleLynxModules-Command-">handleCommandGetUSBAccessibleLynxModules</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxChangeModuleAddresses-Command-">handleCommandLynxChangeModuleAddresses</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxFirmwareUpdate-Command-">handleCommandLynxFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurations--">handleCommandRequestConfigurations</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurationTemplates--">handleCommandRequestConfigurationTemplates</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestInspectionReport--">handleCommandRequestInspectionReport</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestParticularConfiguration-java.lang.String-">handleCommandRequestParticularConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestRememberedGroups--">handleCommandRequestRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRestartRobot--">handleCommandRestartRobot</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandSaveConfiguration-java.lang.String-">handleCommandSaveConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowDialog-Command-">handleCommandShowDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowProgress-Command-">handleCommandShowProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowToast-Command-">handleCommandShowToast</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartDriverStationProgramAndManage--">handleCommandStartDriverStationProgramAndManage</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartProgrammingMode--">handleCommandStartProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStopProgrammingMode--">handleCommandStopProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#startUsbScanMangerIfNecessary--">startUsbScanMangerIfNecessary</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateLynxFirmware-com.qualcomm.robotcore.util.SerialNumber-com.qualcomm.ftccommon.CommandList.FWImage-">updateLynxFirmware</a></code></li>
+<code><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#checkForChangedOpModes--">checkForChangedOpModes</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#enterFirmwareUpdateMode-RobotUsbDevice-">enterFirmwareUpdateMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getLynxUsbDeviceForFirmwareUpdate-com.qualcomm.robotcore.util.SerialNumber-">getLynxUsbDeviceForFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandActivateConfiguration-java.lang.String-">handleCommandActivateConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandClearRememberedGroups--">handleCommandClearRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDeleteConfiguration-java.lang.String-">handleCommandDeleteConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDisconnectWifiDirect--">handleCommandDisconnectWifiDirect</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissAllDialogs-Command-">handleCommandDismissAllDialogs</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissDialog-Command-">handleCommandDismissDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissProgress-Command-">handleCommandDismissProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetCandidateLynxFirmwareImages-Command-">handleCommandGetCandidateLynxFirmwareImages</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetUSBAccessibleLynxModules-Command-">handleCommandGetUSBAccessibleLynxModules</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxChangeModuleAddresses-Command-">handleCommandLynxChangeModuleAddresses</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxFirmwareUpdate-Command-">handleCommandLynxFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestAboutInfo-Command-">handleCommandRequestAboutInfo</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurations--">handleCommandRequestConfigurations</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurationTemplates--">handleCommandRequestConfigurationTemplates</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestInspectionReport--">handleCommandRequestInspectionReport</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestParticularConfiguration-java.lang.String-">handleCommandRequestParticularConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestRememberedGroups--">handleCommandRequestRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRestartRobot--">handleCommandRestartRobot</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandSaveConfiguration-java.lang.String-">handleCommandSaveConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowDialog-Command-">handleCommandShowDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowProgress-Command-">handleCommandShowProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowToast-Command-">handleCommandShowToast</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartDriverStationProgramAndManage--">handleCommandStartDriverStationProgramAndManage</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartProgrammingMode--">handleCommandStartProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStopProgrammingMode--">handleCommandStopProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandVisuallyIdentify-Command-">handleCommandVisuallyIdentify</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#startUsbScanMangerIfNecessary--">startUsbScanMangerIfNecessary</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#talkToParentLynxModule-com.qualcomm.robotcore.hardware.DeviceManager-LynxUsbDevice-int-org.firstinspires.ftc.robotcore.external.Consumer-">talkToParentLynxModule</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateFirmwareOnce-com.qualcomm.ftccommon.FtcEventLoopBase.LynxUsbDeviceContainer-java.lang.String-byte:A-com.qualcomm.robotcore.util.SerialNumber-">updateFirmwareOnce</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateLynxFirmware-com.qualcomm.robotcore.util.SerialNumber-com.qualcomm.ftccommon.CommandList.FWImage-">updateLynxFirmware</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -679,6 +683,15 @@ extends <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="c
</dl>
</li>
</ul>
+<a name="handleCommandSetMatchNumber-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>handleCommandSetMatchNumber</h4>
+<pre>protected&nbsp;void&nbsp;handleCommandSetMatchNumber(java.lang.String&nbsp;extra)</pre>
+</li>
+</ul>
<a name="handleCommandInitOpMode-java.lang.String-">
<!-- -->
</a>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html
index 161a076..4166e95 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html
@@ -140,6 +140,10 @@ extends java.lang.Object</pre>
<td class="colFirst"><code>protected RobotUsbDevice</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#robotUsbDevice">robotUsbDevice</a></span></code>&nbsp;</td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#serialNumber">serialNumber</a></span></code>&nbsp;</td>
+</tr>
</table>
</li>
</ul>
@@ -155,10 +159,12 @@ extends java.lang.Object</pre>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#LynxUsbDeviceContainer-LynxUsbDeviceImpl-">LynxUsbDeviceContainer</a></span>(LynxUsbDeviceImpl&nbsp;lynxUsbDevice)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#LynxUsbDeviceContainer-LynxUsbDeviceImpl-com.qualcomm.robotcore.util.SerialNumber-">LynxUsbDeviceContainer</a></span>(LynxUsbDeviceImpl&nbsp;lynxUsbDevice,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</code>&nbsp;</td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#LynxUsbDeviceContainer-RobotUsbDevice-">LynxUsbDeviceContainer</a></span>(RobotUsbDevice&nbsp;robotUsbDevice)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html#LynxUsbDeviceContainer-RobotUsbDevice-com.qualcomm.robotcore.util.SerialNumber-">LynxUsbDeviceContainer</a></span>(RobotUsbDevice&nbsp;robotUsbDevice,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</code>&nbsp;</td>
</tr>
</table>
</li>
@@ -229,12 +235,21 @@ extends java.lang.Object</pre>
<a name="robotUsbDevice">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>robotUsbDevice</h4>
<pre>protected final&nbsp;RobotUsbDevice robotUsbDevice</pre>
</li>
</ul>
+<a name="serialNumber">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serialNumber</h4>
+<pre>protected final&nbsp;<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a> serialNumber</pre>
+</li>
+</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -243,22 +258,24 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Constructor Detail</h3>
-<a name="LynxUsbDeviceContainer-LynxUsbDeviceImpl-">
+<a name="LynxUsbDeviceContainer-LynxUsbDeviceImpl-com.qualcomm.robotcore.util.SerialNumber-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LynxUsbDeviceContainer</h4>
-<pre>public&nbsp;LynxUsbDeviceContainer(LynxUsbDeviceImpl&nbsp;lynxUsbDevice)</pre>
+<pre>public&nbsp;LynxUsbDeviceContainer(LynxUsbDeviceImpl&nbsp;lynxUsbDevice,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</pre>
</li>
</ul>
-<a name="LynxUsbDeviceContainer-RobotUsbDevice-">
+<a name="LynxUsbDeviceContainer-RobotUsbDevice-com.qualcomm.robotcore.util.SerialNumber-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>LynxUsbDeviceContainer</h4>
-<pre>public&nbsp;LynxUsbDeviceContainer(RobotUsbDevice&nbsp;robotUsbDevice)</pre>
+<pre>public&nbsp;LynxUsbDeviceContainer(RobotUsbDevice&nbsp;robotUsbDevice,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</pre>
</li>
</ul>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.html b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.html
index 7282f82..819990f 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopBase.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -249,7 +249,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#checkForChangedOpModes--">checkForChangedOpModes</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
+<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#enterFirmwareUpdateMode-RobotUsbDevice-">enterFirmwareUpdateMode</a></span>(RobotUsbDevice&nbsp;robotUsbDevice)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
@@ -258,7 +258,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected java.util.List&lt;<a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a></span>(boolean&nbsp;includeModuleAddresses)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a></span>(boolean&nbsp;forFirmwareUpdate)</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected void</code></td>
@@ -310,96 +310,118 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestAboutInfo-Command-">handleCommandRequestAboutInfo</a></span>(Command&nbsp;command)</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurations--">handleCommandRequestConfigurations</a></span>()</code>
<div class="block">Serialize the entire list of config file metadata and send to the driver station</div>
</td>
</tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurationTemplates--">handleCommandRequestConfigurationTemplates</a></span>()</code>
<div class="block">Serialize the entire list of config file metadata and send to the driver station</div>
</td>
</tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestInspectionReport--">handleCommandRequestInspectionReport</a></span>()</code>
<div class="block">Return an inspection report of this (robot controller) device back to the caller</div>
</td>
</tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestParticularConfiguration-java.lang.String-">handleCommandRequestParticularConfiguration</a></span>(java.lang.String&nbsp;data)</code>&nbsp;</td>
</tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestRememberedGroups--">handleCommandRequestRememberedGroups</a></span>()</code>
<div class="block">Serialize the list of remembered Wifi Direct groups and send it to the driver station</div>
</td>
</tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRestartRobot--">handleCommandRestartRobot</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandSaveConfiguration-java.lang.String-">handleCommandSaveConfiguration</a></span>(java.lang.String&nbsp;fileInfo)</code>&nbsp;</td>
</tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowDialog-Command-">handleCommandShowDialog</a></span>(Command&nbsp;command)</code>&nbsp;</td>
</tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowProgress-Command-">handleCommandShowProgress</a></span>(Command&nbsp;command)</code>&nbsp;</td>
</tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowToast-Command-">handleCommandShowToast</a></span>(Command&nbsp;command)</code>&nbsp;</td>
</tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartDriverStationProgramAndManage--">handleCommandStartDriverStationProgramAndManage</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartProgrammingMode--">handleCommandStartProgrammingMode</a></span>()</code>
<div class="block">Starts programming mode on the robot controller, as requested by driver station.</div>
</td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStopProgrammingMode--">handleCommandStopProgrammingMode</a></span>()</code>
<div class="block">Stops programming mode on the robot controller, as requested by driver station.</div>
</td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
+<td class="colFirst"><code>protected CallbackResult</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandVisuallyIdentify-Command-">handleCommandVisuallyIdentify</a></span>(Command&nbsp;command)</code>&nbsp;</td>
+</tr>
+<tr id="i30" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#init-com.qualcomm.robotcore.eventloop.EventLoopManager-">init</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a>&nbsp;eventLoopManager)</code>
<div class="block">Init method, this will be called before the first call to loop.</div>
</td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
<td class="colFirst"><code>CallbackResult</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#processCommand-Command-">processCommand</a></span>(Command&nbsp;command)</code>
<div class="block">Process command method, this will be called if the event loop manager receives a user defined
command.</div>
</td>
</tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#sendUIState--">sendUIState</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
<td class="colFirst"><code>protected USBScanManager</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#startUsbScanMangerIfNecessary--">startUsbScanMangerIfNecessary</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#talkToParentLynxModule-com.qualcomm.robotcore.hardware.DeviceManager-LynxUsbDevice-int-org.firstinspires.ftc.robotcore.external.Consumer-">talkToParentLynxModule</a></span>(<a href="../../../com/qualcomm/robotcore/hardware/DeviceManager.html" title="interface in com.qualcomm.robotcore.hardware">DeviceManager</a>&nbsp;deviceManager,
+ LynxUsbDevice&nbsp;lynxUsbDevice,
+ int&nbsp;moduleAddress,
+ <a href="../../../org/firstinspires/ftc/robotcore/external/Consumer.html" title="interface in org.firstinspires.ftc.robotcore.external">Consumer</a>&lt;LynxModule&gt;&nbsp;consumer)</code>&nbsp;</td>
+</tr>
+<tr id="i35" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#teardown--">teardown</a></span>()</code>
<div class="block">Teardown method, this will be called after the last call to loop.</div>
</td>
</tr>
-<tr id="i33" class="rowColor">
+<tr id="i36" class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateFirmwareOnce-com.qualcomm.ftccommon.FtcEventLoopBase.LynxUsbDeviceContainer-java.lang.String-byte:A-com.qualcomm.robotcore.util.SerialNumber-">updateFirmwareOnce</a></span>(<a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html" title="class in com.qualcomm.ftccommon">FtcEventLoopBase.LynxUsbDeviceContainer</a>&nbsp;lynxUsbDevice,
+ java.lang.String&nbsp;imageFileName,
+ byte[]&nbsp;firmwareImage,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</code>&nbsp;</td>
+</tr>
+<tr id="i37" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateLynxFirmware-com.qualcomm.robotcore.util.SerialNumber-com.qualcomm.ftccommon.CommandList.FWImage-">updateLynxFirmware</a></span>(<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
com.qualcomm.ftccommon.CommandList.FWImage&nbsp;imageFileName)</code>
@@ -770,13 +792,25 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
to be the indicated firmware.</div>
</li>
</ul>
+<a name="updateFirmwareOnce-com.qualcomm.ftccommon.FtcEventLoopBase.LynxUsbDeviceContainer-java.lang.String-byte:A-com.qualcomm.robotcore.util.SerialNumber-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateFirmwareOnce</h4>
+<pre>protected&nbsp;boolean&nbsp;updateFirmwareOnce(<a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.LynxUsbDeviceContainer.html" title="class in com.qualcomm.ftccommon">FtcEventLoopBase.LynxUsbDeviceContainer</a>&nbsp;lynxUsbDevice,
+ java.lang.String&nbsp;imageFileName,
+ byte[]&nbsp;firmwareImage,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</pre>
+</li>
+</ul>
<a name="enterFirmwareUpdateMode-RobotUsbDevice-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>enterFirmwareUpdateMode</h4>
-<pre>protected&nbsp;void&nbsp;enterFirmwareUpdateMode(RobotUsbDevice&nbsp;robotUsbDevice)</pre>
+<pre>protected&nbsp;boolean&nbsp;enterFirmwareUpdateMode(RobotUsbDevice&nbsp;robotUsbDevice)</pre>
</li>
</ul>
<a name="handleCommandGetUSBAccessibleLynxModules-Command-">
@@ -803,7 +837,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
<ul class="blockList">
<li class="blockList">
<h4>getUSBAccessibleLynxDevices</h4>
-<pre>protected&nbsp;java.util.List&lt;<a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a>&gt;&nbsp;getUSBAccessibleLynxDevices(boolean&nbsp;includeModuleAddresses)
+<pre>protected&nbsp;java.util.List&lt;<a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a>&gt;&nbsp;getUSBAccessibleLynxDevices(boolean&nbsp;forFirmwareUpdate)
throws <a href="../../../com/qualcomm/robotcore/exception/RobotCoreException.html" title="class in com.qualcomm.robotcore.exception">RobotCoreException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -820,6 +854,27 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
<pre>protected&nbsp;void&nbsp;handleCommandLynxChangeModuleAddresses(Command&nbsp;commandRequest)</pre>
</li>
</ul>
+<a name="talkToParentLynxModule-com.qualcomm.robotcore.hardware.DeviceManager-LynxUsbDevice-int-org.firstinspires.ftc.robotcore.external.Consumer-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>talkToParentLynxModule</h4>
+<pre>protected&nbsp;void&nbsp;talkToParentLynxModule(<a href="../../../com/qualcomm/robotcore/hardware/DeviceManager.html" title="interface in com.qualcomm.robotcore.hardware">DeviceManager</a>&nbsp;deviceManager,
+ LynxUsbDevice&nbsp;lynxUsbDevice,
+ int&nbsp;moduleAddress,
+ <a href="../../../org/firstinspires/ftc/robotcore/external/Consumer.html" title="interface in org.firstinspires.ftc.robotcore.external">Consumer</a>&lt;LynxModule&gt;&nbsp;consumer)
+ throws <a href="../../../com/qualcomm/robotcore/exception/RobotCoreException.html" title="class in com.qualcomm.robotcore.exception">RobotCoreException</a>,
+ java.lang.InterruptedException,
+ LynxNackException</pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../com/qualcomm/robotcore/exception/RobotCoreException.html" title="class in com.qualcomm.robotcore.exception">RobotCoreException</a></code></dd>
+<dd><code>java.lang.InterruptedException</code></dd>
+<dd><code>LynxNackException</code></dd>
+</dl>
+</li>
+</ul>
<a name="handleCommandGetCandidateLynxFirmwareImages-Command-">
<!-- -->
</a>
@@ -932,15 +987,33 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" ti
<div class="block">Return an inspection report of this (robot controller) device back to the caller</div>
</li>
</ul>
+<a name="handleCommandRequestAboutInfo-Command-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>handleCommandRequestAboutInfo</h4>
+<pre>protected&nbsp;void&nbsp;handleCommandRequestAboutInfo(Command&nbsp;command)</pre>
+</li>
+</ul>
<a name="handleCommandDisconnectWifiDirect--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>handleCommandDisconnectWifiDirect</h4>
<pre>protected&nbsp;void&nbsp;handleCommandDisconnectWifiDirect()</pre>
</li>
</ul>
+<a name="handleCommandVisuallyIdentify-Command-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>handleCommandVisuallyIdentify</h4>
+<pre>protected&nbsp;CallbackResult&nbsp;handleCommandVisuallyIdentify(Command&nbsp;command)</pre>
+</li>
+</ul>
</li>
</ul>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopHandler.html b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopHandler.html
index 8dc794b..c00e0ac 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopHandler.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopHandler.html
@@ -17,8 +17,8 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":9,"i4":9,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
@@ -132,21 +132,33 @@ extends java.lang.Object</pre>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#callback">callback</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>protected static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#DEBUG">DEBUG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#eventLoopManager">eventLoopManager</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected HardwareFactory</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#hardwareFactory">hardwareFactory</a></span></code>&nbsp;</td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#hardwareMap">hardwareMap</a></span></code>
+<div class="block">the actual hardware map seen by the user</div>
+</td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#hardwareMap">hardwareMap</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#hardwareMapExtra">hardwareMapExtra</a></span></code>
+<div class="block">the hardware map in which we keep any extra devices (ones not used by the user) we need to instantiate</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#NO_VOLTAGE_SENSOR">NO_VOLTAGE_SENSOR</a></span></code>
-<div class="block">This string is sent in the robot battery telemetry payload to indicate
+<div class="block">This string is sent in the robot battery telemetry payload to identify
that no voltage sensor is available on the robot.</div>
</td>
</tr>
@@ -235,7 +247,7 @@ extends java.lang.Object</pre>
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
@@ -245,50 +257,63 @@ extends java.lang.Object</pre>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#close--">close</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeAutoCloseOnTeardown--">closeAutoCloseOnTeardown</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeAutoCloseOnTeardown-com.qualcomm.robotcore.hardware.HardwareMap-">closeAutoCloseOnTeardown</a></span>(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeBatteryMonitoring--">closeBatteryMonitoring</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeMotorControllers--">closeMotorControllers</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeHardwareMap-com.qualcomm.robotcore.hardware.HardwareMap-">closeHardwareMap</a></span>(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeServoControllers--">closeServoControllers</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeMotorControllers-com.qualcomm.robotcore.hardware.HardwareMap-">closeMotorControllers</a></span>(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</code>&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#closeServoControllers-com.qualcomm.robotcore.hardware.HardwareMap-">closeServoControllers</a></span>(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#displayGamePadInfo-java.lang.String-">displayGamePadInfo</a></span>(java.lang.String&nbsp;activeOpModeName)</code>&nbsp;</td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getEventLoopManager--">getEventLoopManager</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
<td class="colFirst"><code>java.util.List&lt;LynxUsbDeviceImpl&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getExtantLynxDeviceImpls--">getExtantLynxDeviceImpls</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="../../../com/qualcomm/robotcore/hardware/Gamepad.html" title="class in com.qualcomm.robotcore.hardware">Gamepad</a>[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getGamepads--">getGamepads</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>&lt;T&gt;&nbsp;T</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getHardwareDevice-java.lang.Class-com.qualcomm.robotcore.util.SerialNumber--">getHardwareDevice</a></span>(java.lang.Class&lt;? extends T&gt;&nbsp;classOrInterface,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
+ &lt;any&gt;&nbsp;usbScanManagerSupplier)</code>
+<div class="block">Returns the device whose serial number is the one indicated, from the hardware map if possible
+ but instantiating / opening it if necessary.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getHardwareMap--">getHardwareMap</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#getOpMode-java.lang.String-">getOpMode</a></span>(java.lang.String&nbsp;extra)</code>&nbsp;</td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#init-com.qualcomm.robotcore.eventloop.EventLoopManager-">init</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoopManager.html" title="class in com.qualcomm.robotcore.eventloop">EventLoopManager</a>&nbsp;eventLoopManager)</code>&nbsp;</td>
</tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#refreshUserTelemetry-TelemetryMessage-double-">refreshUserTelemetry</a></span>(TelemetryMessage&nbsp;telemetry,
double&nbsp;requestedInterval)</code>
@@ -296,22 +321,22 @@ extends java.lang.Object</pre>
interval has passed since the last transmission.</div>
</td>
</tr>
-<tr id="i13" class="rowColor">
+<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#restartRobot--">restartRobot</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i14" class="altColor">
+<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#sendBatteryInfo--">sendBatteryInfo</a></span>()</code>
<div class="block">Send robot phone power % and robot battery voltage level to Driver station</div>
</td>
</tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#sendTelemetry-java.lang.String-java.lang.String-">sendTelemetry</a></span>(java.lang.String&nbsp;tag,
java.lang.String&nbsp;msg)</code>&nbsp;</td>
</tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcEventLoopHandler.html#updateBatteryStatus-BatteryChecker.BatteryStatus-">updateBatteryStatus</a></span>(BatteryChecker.BatteryStatus&nbsp;status)</code>&nbsp;</td>
</tr>
@@ -357,7 +382,7 @@ extends java.lang.Object</pre>
<li class="blockList">
<h4>NO_VOLTAGE_SENSOR</h4>
<pre>public static final&nbsp;java.lang.String NO_VOLTAGE_SENSOR</pre>
-<div class="block">This string is sent in the robot battery telemetry payload to indicate
+<div class="block">This string is sent in the robot battery telemetry payload to identify
that no voltage sensor is available on the robot.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -365,6 +390,19 @@ extends java.lang.Object</pre>
</dl>
</li>
</ul>
+<a name="DEBUG">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEBUG</h4>
+<pre>protected static final&nbsp;boolean DEBUG</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.FtcEventLoopHandler.DEBUG">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
<a name="callback">
<!-- -->
</a>
@@ -512,10 +550,21 @@ extends java.lang.Object</pre>
<a name="hardwareMap">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>hardwareMap</h4>
<pre>protected&nbsp;<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a> hardwareMap</pre>
+<div class="block">the actual hardware map seen by the user</div>
+</li>
+</ul>
+<a name="hardwareMapExtra">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>hardwareMapExtra</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a> hardwareMapExtra</pre>
+<div class="block">the hardware map in which we keep any extra devices (ones not used by the user) we need to instantiate</div>
</li>
</ul>
</li>
@@ -563,6 +612,15 @@ extends java.lang.Object</pre>
<pre>public&nbsp;void&nbsp;close()</pre>
</li>
</ul>
+<a name="closeHardwareMap-com.qualcomm.robotcore.hardware.HardwareMap-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>closeHardwareMap</h4>
+<pre>protected static&nbsp;void&nbsp;closeHardwareMap(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</pre>
+</li>
+</ul>
<a name="getEventLoopManager--">
<!-- -->
</a>
@@ -597,6 +655,26 @@ extends java.lang.Object</pre>
<pre>public&nbsp;java.util.List&lt;LynxUsbDeviceImpl&gt;&nbsp;getExtantLynxDeviceImpls()</pre>
</li>
</ul>
+<a name="getHardwareDevice-java.lang.Class-com.qualcomm.robotcore.util.SerialNumber--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getHardwareDevice</h4>
+<pre>public&nbsp;&lt;T&gt;&nbsp;T&nbsp;getHardwareDevice(java.lang.Class&lt;? extends T&gt;&nbsp;classOrInterface,
+ <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber,
+ &lt;any&gt;&nbsp;usbScanManagerSupplier)</pre>
+<div class="block">Returns the device whose serial number is the one indicated, from the hardware map if possible
+ but instantiating / opening it if necessary. null is returned if the object cannot be
+ accessed.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>classOrInterface</code> - the interface to retrieve on the returned object</dd>
+<dd><code>serialNumber</code> - the serial number of the object to retrieve</dd>
+<dd><code>usbScanManagerSupplier</code> - how to get a <code>USBScanManager</code> if it ends up we need one</dd>
+</dl>
+</li>
+</ul>
<a name="displayGamePadInfo-java.lang.String-">
<!-- -->
</a>
@@ -657,31 +735,31 @@ extends java.lang.Object</pre>
java.lang.String&nbsp;msg)</pre>
</li>
</ul>
-<a name="closeMotorControllers--">
+<a name="closeMotorControllers-com.qualcomm.robotcore.hardware.HardwareMap-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>closeMotorControllers</h4>
-<pre>protected&nbsp;void&nbsp;closeMotorControllers()</pre>
+<pre>protected static&nbsp;void&nbsp;closeMotorControllers(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</pre>
</li>
</ul>
-<a name="closeServoControllers--">
+<a name="closeServoControllers-com.qualcomm.robotcore.hardware.HardwareMap-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>closeServoControllers</h4>
-<pre>protected&nbsp;void&nbsp;closeServoControllers()</pre>
+<pre>protected static&nbsp;void&nbsp;closeServoControllers(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</pre>
</li>
</ul>
-<a name="closeAutoCloseOnTeardown--">
+<a name="closeAutoCloseOnTeardown-com.qualcomm.robotcore.hardware.HardwareMap-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>closeAutoCloseOnTeardown</h4>
-<pre>protected&nbsp;void&nbsp;closeAutoCloseOnTeardown()</pre>
+<pre>protected static&nbsp;void&nbsp;closeAutoCloseOnTeardown(<a href="../../../com/qualcomm/robotcore/hardware/HardwareMap.html" title="class in com.qualcomm.robotcore.hardware">HardwareMap</a>&nbsp;hardwareMap)</pre>
</li>
</ul>
<a name="closeBatteryMonitoring--">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopIdle.html b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopIdle.html
index 1c36a71..93ccdc4 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopIdle.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcEventLoopIdle.html
@@ -285,7 +285,7 @@ extends <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="c
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html" title="class in com.qualcomm.ftccommon">FtcEventLoopBase</a></h3>
-<code><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#checkForChangedOpModes--">checkForChangedOpModes</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#enterFirmwareUpdateMode-RobotUsbDevice-">enterFirmwareUpdateMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getLynxUsbDeviceForFirmwareUpdate-com.qualcomm.robotcore.util.SerialNumber-">getLynxUsbDeviceForFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandActivateConfiguration-java.lang.String-">handleCommandActivateConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandClearRememberedGroups--">handleCommandClearRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDeleteConfiguration-java.lang.String-">handleCommandDeleteConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDisconnectWifiDirect--">handleCommandDisconnectWifiDirect</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissAllDialogs-Command-">handleCommandDismissAllDialogs</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissDialog-Command-">handleCommandDismissDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissProgress-Command-">handleCommandDismissProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetCandidateLynxFirmwareImages-Command-">handleCommandGetCandidateLynxFirmwareImages</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetUSBAccessibleLynxModules-Command-">handleCommandGetUSBAccessibleLynxModules</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxChangeModuleAddresses-Command-">handleCommandLynxChangeModuleAddresses</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxFirmwareUpdate-Command-">handleCommandLynxFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurations--">handleCommandRequestConfigurations</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurationTemplates--">handleCommandRequestConfigurationTemplates</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestInspectionReport--">handleCommandRequestInspectionReport</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestParticularConfiguration-java.lang.String-">handleCommandRequestParticularConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestRememberedGroups--">handleCommandRequestRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRestartRobot--">handleCommandRestartRobot</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandSaveConfiguration-java.lang.String-">handleCommandSaveConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowDialog-Command-">handleCommandShowDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowProgress-Command-">handleCommandShowProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowToast-Command-">handleCommandShowToast</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartDriverStationProgramAndManage--">handleCommandStartDriverStationProgramAndManage</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartProgrammingMode--">handleCommandStartProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStopProgrammingMode--">handleCommandStopProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#processCommand-Command-">processCommand</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#sendUIState--">sendUIState</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#startUsbScanMangerIfNecessary--">startUsbScanMangerIfNecessary</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateLynxFirmware-com.qualcomm.robotcore.util.SerialNumber-com.qualcomm.ftccommon.CommandList.FWImage-">updateLynxFirmware</a></code></li>
+<code><a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#checkForChangedOpModes--">checkForChangedOpModes</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#enterFirmwareUpdateMode-RobotUsbDevice-">enterFirmwareUpdateMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getLynxUsbDeviceForFirmwareUpdate-com.qualcomm.robotcore.util.SerialNumber-">getLynxUsbDeviceForFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#getUSBAccessibleLynxDevices-boolean-">getUSBAccessibleLynxDevices</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandActivateConfiguration-java.lang.String-">handleCommandActivateConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandClearRememberedGroups--">handleCommandClearRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDeleteConfiguration-java.lang.String-">handleCommandDeleteConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDisconnectWifiDirect--">handleCommandDisconnectWifiDirect</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissAllDialogs-Command-">handleCommandDismissAllDialogs</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissDialog-Command-">handleCommandDismissDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandDismissProgress-Command-">handleCommandDismissProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetCandidateLynxFirmwareImages-Command-">handleCommandGetCandidateLynxFirmwareImages</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandGetUSBAccessibleLynxModules-Command-">handleCommandGetUSBAccessibleLynxModules</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxChangeModuleAddresses-Command-">handleCommandLynxChangeModuleAddresses</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandLynxFirmwareUpdate-Command-">handleCommandLynxFirmwareUpdate</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestAboutInfo-Command-">handleCommandRequestAboutInfo</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurations--">handleCommandRequestConfigurations</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestConfigurationTemplates--">handleCommandRequestConfigurationTemplates</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestInspectionReport--">handleCommandRequestInspectionReport</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestParticularConfiguration-java.lang.String-">handleCommandRequestParticularConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRequestRememberedGroups--">handleCommandRequestRememberedGroups</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandRestartRobot--">handleCommandRestartRobot</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandSaveConfiguration-java.lang.String-">handleCommandSaveConfiguration</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowDialog-Command-">handleCommandShowDialog</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowProgress-Command-">handleCommandShowProgress</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandShowToast-Command-">handleCommandShowToast</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartDriverStationProgramAndManage--">handleCommandStartDriverStationProgramAndManage</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStartProgrammingMode--">handleCommandStartProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandStopProgrammingMode--">handleCommandStopProgrammingMode</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#handleCommandVisuallyIdentify-Command-">handleCommandVisuallyIdentify</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#processCommand-Command-">processCommand</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#sendUIState--">sendUIState</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#startUsbScanMangerIfNecessary--">startUsbScanMangerIfNecessary</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#talkToParentLynxModule-com.qualcomm.robotcore.hardware.DeviceManager-LynxUsbDevice-int-org.firstinspires.ftc.robotcore.external.Consumer-">talkToParentLynxModule</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateFirmwareOnce-com.qualcomm.ftccommon.FtcEventLoopBase.LynxUsbDeviceContainer-java.lang.String-byte:A-com.qualcomm.robotcore.util.SerialNumber-">updateFirmwareOnce</a>, <a href="../../../com/qualcomm/ftccommon/FtcEventLoopBase.html#updateLynxFirmware-com.qualcomm.robotcore.util.SerialNumber-com.qualcomm.ftccommon.CommandList.FWImage-">updateLynxFirmware</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html
new file mode 100644
index 0000000..3a3f613
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html
@@ -0,0 +1,354 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>FtcLynxFirmwareUpdateActivity.FwResponseStatus</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FtcLynxFirmwareUpdateActivity.FwResponseStatus";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" target="_top">Frames</a></li>
+<li><a href="FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Enum FtcLynxFirmwareUpdateActivity.FwResponseStatus" class="title">Enum FtcLynxFirmwareUpdateActivity.FwResponseStatus</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>java.lang.Enum&lt;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.FtcLynxFirmwareUpdateActivity.FwResponseStatus</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>java.io.Serializable, java.lang.Comparable&lt;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity</a></dd>
+</dl>
+<hr>
+<br>
+<pre>protected static enum <span class="typeNameLabel">FtcLynxFirmwareUpdateActivity.FwResponseStatus</span>
+extends java.lang.Enum&lt;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>&gt;</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html#Cancelled">Cancelled</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html#Succeeded">Succeeded</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html#TimedOut">TimedOut</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html#valueOf-java.lang.String-">valueOf</a></span>(java.lang.String&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>
+<code>clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>getClass, notify, notifyAll, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="Succeeded">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>Succeeded</h4>
+<pre>public static final&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a> Succeeded</pre>
+</li>
+</ul>
+<a name="TimedOut">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TimedOut</h4>
+<pre>public static final&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a> TimedOut</pre>
+</li>
+</ul>
+<a name="Cancelled">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Cancelled</h4>
+<pre>public static final&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a> Cancelled</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (FtcLynxFirmwareUpdateActivity.FwResponseStatus c : FtcLynxFirmwareUpdateActivity.FwResponseStatus.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>
+<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" target="_top">Frames</a></li>
+<li><a href="FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html
index 46f8873..303015c 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@@ -239,7 +239,7 @@ extends RecvLoopRunnable.DegenerateCallback</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html
index b8140e1..1a55525 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -48,7 +48,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/FtcEventLoopIdle.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" target="_top">Frames</a></li>
@@ -135,6 +135,10 @@ extends ThemedActivity</pre>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>protected static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html" title="class in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback</a></span></code>&nbsp;</td>
</tr>
@@ -167,33 +171,37 @@ extends ThemedActivity</pre>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#enableUpdateButton">enableUpdateButton</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#cancelUpdate">cancelUpdate</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#enableUpdateButton">enableUpdateButton</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected FWImage</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#firmwareImageFile">firmwareImageFile</a></span></code>&nbsp;</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected java.util.List&lt;<a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#modulesToUpdate">modulesToUpdate</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#msResponseWait">msResponseWait</a></span></code>&nbsp;</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected NetworkConnectionHandler</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#networkConnectionHandler">networkConnectionHandler</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected RecvLoopRunnable.RecvLoopCallback</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#recvLoopCallback">recvLoopCallback</a></span></code>&nbsp;</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#remoteConfigure">remoteConfigure</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#TAG">TAG</a></span></code>&nbsp;</td>
</tr>
@@ -236,10 +244,11 @@ extends ThemedActivity</pre>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected &lt;T&gt;&nbsp;T</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#awaitResponse-java.util.concurrent.BlockingQueue-T-long-java.util.concurrent.TimeUnit-">awaitResponse</a></span>(java.util.concurrent.BlockingQueue&lt;T&gt;&nbsp;queue,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#awaitResponse-java.util.concurrent.BlockingQueue-T-long-java.util.concurrent.TimeUnit--">awaitResponse</a></span>(java.util.concurrent.BlockingQueue&lt;T&gt;&nbsp;queue,
T&nbsp;defaultResponse,
long&nbsp;time,
- java.util.concurrent.TimeUnit&nbsp;timeUnit)</code>&nbsp;</td>
+ java.util.concurrent.TimeUnit&nbsp;timeUnit,
+ &lt;any&gt;&nbsp;status)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/CommandList.LynxFirmwareImagesResp.html" title="class in com.qualcomm.ftccommon">CommandList.LynxFirmwareImagesResp</a></code></td>
@@ -267,17 +276,21 @@ extends ThemedActivity</pre>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onStart--">onStart</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onPause--">onPause</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onStop--">onStop</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onStart--">onStart</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i10" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onStop--">onStop</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#onUpdateLynxFirmwareClicked-View-">onUpdateLynxFirmwareClicked</a></span>(View&nbsp;view)</code>&nbsp;</td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html#sendOrInject-Command-">sendOrInject</a></span>(Command&nbsp;cmd)</code>&nbsp;</td>
</tr>
@@ -379,6 +392,15 @@ extends ThemedActivity</pre>
<pre>protected&nbsp;boolean enableUpdateButton</pre>
</li>
</ul>
+<a name="cancelUpdate">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cancelUpdate</h4>
+<pre>protected&nbsp;boolean cancelUpdate</pre>
+</li>
+</ul>
<a name="availableLynxImages">
<!-- -->
</a>
@@ -485,6 +507,15 @@ extends ThemedActivity</pre>
<pre>public&nbsp;void&nbsp;onUpdateLynxFirmwareClicked(View&nbsp;view)</pre>
</li>
</ul>
+<a name="onPause--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>onPause</h4>
+<pre>protected&nbsp;void&nbsp;onPause()</pre>
+</li>
+</ul>
<a name="onStop--">
<!-- -->
</a>
@@ -533,9 +564,9 @@ extends ThemedActivity</pre>
T&nbsp;defaultResponse)</pre>
</li>
</ul>
-<a name="awaitResponse-java.util.concurrent.BlockingQueue-java.lang.Object-long-java.util.concurrent.TimeUnit-">
+<a name="awaitResponse-java.util.concurrent.BlockingQueue-java.lang.Object-long-java.util.concurrent.TimeUnit--any--">
<!-- -->
-</a><a name="awaitResponse-java.util.concurrent.BlockingQueue-T-long-java.util.concurrent.TimeUnit-">
+</a><a name="awaitResponse-java.util.concurrent.BlockingQueue-T-long-java.util.concurrent.TimeUnit--">
<!-- -->
</a>
<ul class="blockListLast">
@@ -544,7 +575,8 @@ extends ThemedActivity</pre>
<pre>protected&nbsp;&lt;T&gt;&nbsp;T&nbsp;awaitResponse(java.util.concurrent.BlockingQueue&lt;T&gt;&nbsp;queue,
T&nbsp;defaultResponse,
long&nbsp;time,
- java.util.concurrent.TimeUnit&nbsp;timeUnit)</pre>
+ java.util.concurrent.TimeUnit&nbsp;timeUnit,
+ &lt;any&gt;&nbsp;status)</pre>
</li>
</ul>
</li>
@@ -575,7 +607,7 @@ extends ThemedActivity</pre>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/FtcEventLoopIdle.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.ReceiveLoopCallback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.html" target="_top">Frames</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html
index 864d6d2..670613c 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -281,10 +281,6 @@ extends EditActivity</pre>
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html#onStart--">onStart</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcLynxModuleAddressUpdateActivity.html#sendOrInject-Command-">sendOrInject</a></span>(Command&nbsp;cmd)</code>&nbsp;</td>
-</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -489,15 +485,6 @@ extends EditActivity</pre>
<pre>protected&nbsp;java.util.List&lt;<a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a>&gt;&nbsp;getUSBAccessibleLynxModules()</pre>
</li>
</ul>
-<a name="sendOrInject-Command-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>sendOrInject</h4>
-<pre>protected&nbsp;void&nbsp;sendOrInject(Command&nbsp;cmd)</pre>
-</li>
-</ul>
<a name="awaitResponse-java.util.concurrent.BlockingQueue-java.lang.Object-">
<!-- -->
</a><a name="awaitResponse-java.util.concurrent.BlockingQueue-T-">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/FtcRobotControllerService.html b/doc/javadoc/com/qualcomm/ftccommon/FtcRobotControllerService.html
index ba11f97..b00d447 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/FtcRobotControllerService.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/FtcRobotControllerService.html
@@ -197,7 +197,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#getNetworkConnection--">getNetworkConnection</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>NetworkConnection.Event</code></td>
+<td class="colFirst"><code>NetworkConnection.NetworkEvent</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#getNetworkConnectionStatus--">getNetworkConnectionStatus</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
@@ -226,7 +226,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>CallbackResult</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#onNetworkConnectionEvent-NetworkConnection.Event-">onNetworkConnectionEvent</a></span>(NetworkConnection.Event&nbsp;event)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#onNetworkConnectionEvent-NetworkConnection.NetworkEvent-">onNetworkConnectionEvent</a></span>(NetworkConnection.NetworkEvent&nbsp;event)</code>&nbsp;</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
@@ -249,8 +249,9 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#setupRobot-com.qualcomm.robotcore.eventloop.EventLoop-com.qualcomm.robotcore.eventloop.EventLoop-">setupRobot</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;eventLoop,
- <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;idleEventLoop)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.html#setupRobot-com.qualcomm.robotcore.eventloop.EventLoop-com.qualcomm.robotcore.eventloop.EventLoop-java.lang.Runnable-">setupRobot</a></span>(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;eventLoop,
+ <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;idleEventLoop,
+ java.lang.Runnable&nbsp;runOnComplete)</code>&nbsp;</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
@@ -349,7 +350,7 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
<ul class="blockList">
<li class="blockList">
<h4>getNetworkConnectionStatus</h4>
-<pre>public&nbsp;NetworkConnection.Event&nbsp;getNetworkConnectionStatus()</pre>
+<pre>public&nbsp;NetworkConnection.NetworkEvent&nbsp;getNetworkConnectionStatus()</pre>
</li>
</ul>
<a name="getRobotStatus--">
@@ -457,14 +458,15 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
<pre>public&nbsp;void&nbsp;setCallback(<a href="../../../com/qualcomm/ftccommon/UpdateUI.Callback.html" title="class in com.qualcomm.ftccommon">UpdateUI.Callback</a>&nbsp;callback)</pre>
</li>
</ul>
-<a name="setupRobot-com.qualcomm.robotcore.eventloop.EventLoop-com.qualcomm.robotcore.eventloop.EventLoop-">
+<a name="setupRobot-com.qualcomm.robotcore.eventloop.EventLoop-com.qualcomm.robotcore.eventloop.EventLoop-java.lang.Runnable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setupRobot</h4>
<pre>public&nbsp;void&nbsp;setupRobot(<a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;eventLoop,
- <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;idleEventLoop)</pre>
+ <a href="../../../com/qualcomm/robotcore/eventloop/EventLoop.html" title="interface in com.qualcomm.robotcore.eventloop">EventLoop</a>&nbsp;idleEventLoop,
+ java.lang.Runnable&nbsp;runOnComplete)</pre>
</li>
</ul>
<a name="shutdownRobot--">
@@ -476,13 +478,13 @@ implements <a href="../../../com/qualcomm/robotcore/eventloop/opmode/EventLoopMa
<pre>public&nbsp;void&nbsp;shutdownRobot()</pre>
</li>
</ul>
-<a name="onNetworkConnectionEvent-NetworkConnection.Event-">
+<a name="onNetworkConnectionEvent-NetworkConnection.NetworkEvent-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>onNetworkConnectionEvent</h4>
-<pre>public&nbsp;CallbackResult&nbsp;onNetworkConnectionEvent(NetworkConnection.Event&nbsp;event)</pre>
+<pre>public&nbsp;CallbackResult&nbsp;onNetworkConnectionEvent(NetworkConnection.NetworkEvent&nbsp;event)</pre>
</li>
</ul>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/LaunchActivityConstantsList.html b/doc/javadoc/com/qualcomm/ftccommon/LaunchActivityConstantsList.html
index f4ef3aa..63467fb 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/LaunchActivityConstantsList.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/LaunchActivityConstantsList.html
@@ -146,26 +146,22 @@ extends java.lang.Object</pre>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html#ABOUT_ACTIVITY_CONNECTION_TYPE">ABOUT_ACTIVITY_CONNECTION_TYPE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html#PROGRAMMING_MODE_ACTIVITY_PROGRAMMING_WEB_HANDLERS">PROGRAMMING_MODE_ACTIVITY_PROGRAMMING_WEB_HANDLERS</a></span></code>
<div class="block">Used to pass in ProgrammingWebHandlers to a local activity</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html#RC_WEB_INFO">RC_WEB_INFO</a></span></code>
<div class="block">The intent extra name for JSON encoded <code>org.firstinspires.ftc.robotcore.internal.webserver.RobotControllerWebInfo</code> used when launching
RemoteProgrammingModeActivity on the driver station.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html#VIEW_LOGS_ACTIVITY_FILENAME">VIEW_LOGS_ACTIVITY_FILENAME</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html#ZTE_WIFI_CHANNEL_EDITOR_PACKAGE">ZTE_WIFI_CHANNEL_EDITOR_PACKAGE</a></span></code>&nbsp;</td>
</tr>
@@ -242,19 +238,6 @@ extends java.lang.Object</pre>
</dl>
</li>
</ul>
-<a name="ABOUT_ACTIVITY_CONNECTION_TYPE">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ABOUT_ACTIVITY_CONNECTION_TYPE</h4>
-<pre>public static final&nbsp;java.lang.String ABOUT_ACTIVITY_CONNECTION_TYPE</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.LaunchActivityConstantsList.ABOUT_ACTIVITY_CONNECTION_TYPE">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
<a name="RC_WEB_INFO">
<!-- -->
</a>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/AboutActivity.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html
index fd1fcea..8dd4922 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/AboutActivity.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html
@@ -3,7 +3,7 @@
<html lang="en">
<head>
<!-- Generated by javadoc -->
-<title>AboutActivity</title>
+<title>SoundPlayer.CurrentlyPlaying</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -11,13 +11,13 @@
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="AboutActivity";
+ parent.document.title="SoundPlayer.CurrentlyPlaying";
}
}
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
+var methods = {"i0":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
-<li><a href="../../../index.html?com/qualcomm/ftccommon/AboutActivity.html" target="_top">Frames</a></li>
-<li><a href="AboutActivity.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.CurrentlyPlaying.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -72,14 +72,14 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -91,50 +91,61 @@ var activeTableTab = "activeTableTab";
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.qualcomm.ftccommon</div>
-<h2 title="Class AboutActivity" class="title">Class AboutActivity</h2>
+<h2 title="Class SoundPlayer.CurrentlyPlaying" class="title">Class SoundPlayer.CurrentlyPlaying</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
-<li>ThemedActivity</li>
-<li>
-<ul class="inheritance">
-<li>com.qualcomm.ftccommon.AboutActivity</li>
-</ul>
-</li>
+<li>com.qualcomm.ftccommon.SoundPlayer.CurrentlyPlaying</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
+</dl>
<hr>
<br>
-<pre>public class <span class="typeNameLabel">AboutActivity</span>
-extends ThemedActivity</pre>
+<pre>protected static class <span class="typeNameLabel">SoundPlayer.CurrentlyPlaying</span>
+extends java.lang.Object</pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
+<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
+<li class="blockList"><a name="field.summary">
<!-- -->
</a>
-<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#loopControl">loopControl</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#msFinish">msFinish</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon">AboutActivity.Item</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected java.lang.Runnable</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#runWhenFinished">runWhenFinished</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#streamId">streamId</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
@@ -148,10 +159,12 @@ extends ThemedActivity</pre>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#AboutActivity--">AboutActivity</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#CurrentlyPlaying--">CurrentlyPlaying</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
@@ -169,26 +182,8 @@ extends ThemedActivity</pre>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code>protected java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#getBuildTime--">getBuildTime</a></span>()</code>
-<div class="block">https://code.google.com/p/android/issues/detail?id=220039</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#getLocalIpAddressesAsString--">getLocalIpAddressesAsString</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#getTag--">getTag</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#onStart--">onStart</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html#onStop--">onStop</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html#isLooping--">isLooping</a></span>()</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
@@ -206,73 +201,80 @@ extends ThemedActivity</pre>
<div class="details">
<ul class="blockList">
<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
+<li class="blockList"><a name="field.detail">
<!-- -->
</a>
-<h3>Constructor Detail</h3>
-<a name="AboutActivity--">
+<h3>Field Detail</h3>
+<a name="msFinish">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
-<h4>AboutActivity</h4>
-<pre>public&nbsp;AboutActivity()</pre>
+<h4>msFinish</h4>
+<pre>protected&nbsp;long msFinish</pre>
</li>
</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="getTag--">
+<a name="streamId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getTag</h4>
-<pre>public&nbsp;java.lang.String&nbsp;getTag()</pre>
+<h4>streamId</h4>
+<pre>protected&nbsp;int streamId</pre>
</li>
</ul>
-<a name="onStart--">
+<a name="loopControl">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>onStart</h4>
-<pre>protected&nbsp;void&nbsp;onStart()</pre>
+<h4>loopControl</h4>
+<pre>protected&nbsp;int loopControl</pre>
</li>
</ul>
-<a name="onStop--">
+<a name="runWhenFinished">
<!-- -->
</a>
-<ul class="blockList">
+<ul class="blockListLast">
<li class="blockList">
-<h4>onStop</h4>
-<pre>protected&nbsp;void&nbsp;onStop()</pre>
+<h4>runWhenFinished</h4>
+<pre>protected&nbsp;java.lang.Runnable runWhenFinished</pre>
+</li>
+</ul>
</li>
</ul>
-<a name="getLocalIpAddressesAsString--">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
-<ul class="blockList">
+<h3>Constructor Detail</h3>
+<a name="CurrentlyPlaying--">
+<!-- -->
+</a>
+<ul class="blockListLast">
<li class="blockList">
-<h4>getLocalIpAddressesAsString</h4>
-<pre>protected&nbsp;java.lang.String&nbsp;getLocalIpAddressesAsString()</pre>
+<h4>CurrentlyPlaying</h4>
+<pre>protected&nbsp;CurrentlyPlaying()</pre>
</li>
</ul>
-<a name="getBuildTime--">
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="isLooping--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>getBuildTime</h4>
-<pre>protected&nbsp;java.lang.String&nbsp;getBuildTime()</pre>
-<div class="block">https://code.google.com/p/android/issues/detail?id=220039</div>
+<h4>isLooping</h4>
+<pre>protected&nbsp;boolean&nbsp;isLooping()</pre>
</li>
</ul>
</li>
@@ -302,12 +304,12 @@ extends ThemedActivity</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
-<li><a href="../../../index.html?com/qualcomm/ftccommon/AboutActivity.html" target="_top">Frames</a></li>
-<li><a href="AboutActivity.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.CurrentlyPlaying.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -327,14 +329,14 @@ extends ThemedActivity</pre>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/AboutActivity.Item.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html
index 45746e7..b972982 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/AboutActivity.Item.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html
@@ -3,7 +3,7 @@
<html lang="en">
<head>
<!-- Generated by javadoc -->
-<title>AboutActivity.Item</title>
+<title>SoundPlayer.InstanceHolder</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
@@ -11,7 +11,7 @@
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="AboutActivity.Item";
+ parent.document.title="SoundPlayer.InstanceHolder";
}
}
catch(err) {
@@ -41,12 +41,12 @@
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
-<li><a href="../../../index.html?com/qualcomm/ftccommon/AboutActivity.Item.html" target="_top">Frames</a></li>
-<li><a href="AboutActivity.Item.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.InstanceHolder.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -85,14 +85,14 @@
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.qualcomm.ftccommon</div>
-<h2 title="Class AboutActivity.Item" class="title">Class AboutActivity.Item</h2>
+<h2 title="Class SoundPlayer.InstanceHolder" class="title">Class SoundPlayer.InstanceHolder</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
-<li>com.qualcomm.ftccommon.AboutActivity.Item</li>
+<li>com.qualcomm.ftccommon.SoundPlayer.InstanceHolder</li>
</ul>
</li>
</ul>
@@ -101,11 +101,11 @@
<li class="blockList">
<dl>
<dt>Enclosing class:</dt>
-<dd><a href="../../../com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon">AboutActivity</a></dd>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
</dl>
<hr>
<br>
-<pre>public static class <span class="typeNameLabel">AboutActivity.Item</span>
+<pre>protected static class <span class="typeNameLabel">SoundPlayer.InstanceHolder</span>
extends java.lang.Object</pre>
</li>
</ul>
@@ -126,12 +126,8 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html#info">info</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html#title">title</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html#theInstance">theInstance</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
@@ -145,10 +141,12 @@ extends java.lang.Object</pre>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html#Item--">Item</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html#InstanceHolder--">InstanceHolder</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
@@ -180,22 +178,13 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Field Detail</h3>
-<a name="title">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>title</h4>
-<pre>public&nbsp;java.lang.String title</pre>
-</li>
-</ul>
-<a name="info">
+<a name="theInstance">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>info</h4>
-<pre>public&nbsp;java.lang.String info</pre>
+<h4>theInstance</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a> theInstance</pre>
</li>
</ul>
</li>
@@ -206,13 +195,13 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Constructor Detail</h3>
-<a name="Item--">
+<a name="InstanceHolder--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>Item</h4>
-<pre>public&nbsp;Item()</pre>
+<h4>InstanceHolder</h4>
+<pre>protected&nbsp;InstanceHolder()</pre>
</li>
</ul>
</li>
@@ -242,12 +231,12 @@ extends java.lang.Object</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
-<li><a href="../../../index.html?com/qualcomm/ftccommon/AboutActivity.Item.html" target="_top">Frames</a></li>
-<li><a href="AboutActivity.Item.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.InstanceHolder.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html
index 871bc64..46c0314 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -47,8 +47,8 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" target="_top">Frames</a></li>
@@ -72,7 +72,7 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.util.AbstractMap">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
@@ -98,68 +98,30 @@ var activeTableTab = "activeTableTab";
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
-<li>java.util.AbstractMap&lt;K,V&gt;</li>
-<li>
-<ul class="inheritance">
-<li>java.util.HashMap&lt;K,V&gt;</li>
-<li>
-<ul class="inheritance">
-<li>java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</li>
-<li>
-<ul class="inheritance">
<li>com.qualcomm.ftccommon.SoundPlayer.LoadedSoundCache</li>
</ul>
</li>
</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd>java.io.Serializable, java.lang.Cloneable, java.util.Map&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</dd>
-</dl>
-<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
</dl>
<hr>
<br>
<pre>protected class <span class="typeNameLabel">SoundPlayer.LoadedSoundCache</span>
-extends java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</pre>
+extends java.lang.Object</pre>
<div class="block"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.LoadedSoundCache</code></a> keeps track of loaded sounds, mapping sound resource id to loaded
sound id. It keeps track of which sounds have been recently used, and unloads neglected
songs when a configured capacity of loaded sounds has been reached.</div>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../serialized-form.html#com.qualcomm.ftccommon.SoundPlayer.LoadedSoundCache">Serialized Form</a></dd>
-</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!-- -->
-</a>
-<h3>Nested Class Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.java.util.AbstractMap">
-<!-- -->
-</a>
-<h3>Nested classes/interfaces inherited from class&nbsp;java.util.AbstractMap</h3>
-<code>java.util.AbstractMap.SimpleEntry&lt;K,V&gt;, java.util.AbstractMap.SimpleImmutableEntry&lt;K,V&gt;</code></li>
-</ul>
-</li>
-</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
@@ -173,54 +135,40 @@ extends java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualc
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#noteSoundUsage-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">noteSoundUsage</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</code>
-<div class="block">update the fact that this key has been just used, again</div>
-</td>
+<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#getFile-java.io.File-">getFile</a></span>(java.io.File&nbsp;file)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#remove-java.lang.Object-">remove</a></span>(java.lang.Object&nbsp;key)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#getHash-java.lang.String-">getHash</a></span>(java.lang.String&nbsp;hashString)</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#removeEldestEntry--">removeEldestEntry</a></span>(&lt;any&gt;&nbsp;eldest)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#getResource-int-">getResource</a></span>(int&nbsp;resourceId)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#noteSoundUsage-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">noteSoundUsage</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</code>
+<div class="block">update the fact that this sound has been just used, again</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#putFile-java.io.File-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">putFile</a></span>(java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html#putResource-int-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">putResource</a></span>(int&nbsp;resourceId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.util.LinkedHashMap">
-<!-- -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.LinkedHashMap</h3>
-<code>clear, containsValue, entrySet, forEach, get, getOrDefault, keySet, replaceAll, values</code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.util.HashMap">
-<!-- -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.HashMap</h3>
-<code>clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, put, putAll, putIfAbsent, remove, replace, replace, size</code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.util.AbstractMap">
-<!-- -->
-</a>
-<h3>Methods inherited from class&nbsp;java.util.AbstractMap</h3>
-<code>equals, hashCode, toString</code></li>
-</ul>
-<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>finalize, getClass, notify, notifyAll, wait, wait, wait</code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.util.Map">
-<!-- -->
-</a>
-<h3>Methods inherited from interface&nbsp;java.util.Map</h3>
-<code>compute, computeIfAbsent, computeIfPresent, containsKey, equals, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, replace, replace, size</code></li>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
@@ -236,42 +184,61 @@ extends java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualc
<!-- -->
</a>
<h3>Method Detail</h3>
-<a name="noteSoundUsage-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
+<a name="getResource-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>noteSoundUsage</h4>
-<pre>public&nbsp;void&nbsp;noteSoundUsage(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</pre>
-<div class="block">update the fact that this key has been just used, again</div>
+<h4>getResource</h4>
+<pre>public&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;getResource(int&nbsp;resourceId)</pre>
</li>
</ul>
-<a name="removeEldestEntry--">
+<a name="getFile-java.io.File-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>removeEldestEntry</h4>
-<pre>protected&nbsp;boolean&nbsp;removeEldestEntry(&lt;any&gt;&nbsp;eldest)</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code>removeEldestEntry</code>&nbsp;in class&nbsp;<code>java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</code></dd>
-</dl>
+<h4>getFile</h4>
+<pre>public&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;getFile(java.io.File&nbsp;file)</pre>
</li>
</ul>
-<a name="remove-java.lang.Object-">
+<a name="getHash-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getHash</h4>
+<pre>public&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;getHash(java.lang.String&nbsp;hashString)</pre>
+</li>
+</ul>
+<a name="putResource-int-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>putResource</h4>
+<pre>public&nbsp;void&nbsp;putResource(int&nbsp;resourceId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</pre>
+</li>
+</ul>
+<a name="putFile-java.io.File-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>putFile</h4>
+<pre>public&nbsp;void&nbsp;putFile(java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</pre>
+</li>
+</ul>
+<a name="noteSoundUsage-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>remove</h4>
-<pre>public&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;remove(java.lang.Object&nbsp;key)</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>remove</code>&nbsp;in interface&nbsp;<code>java.util.Map&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</code></dd>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code>remove</code>&nbsp;in class&nbsp;<code>java.util.HashMap&lt;java.lang.Integer,<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&gt;</code></dd>
-</dl>
+<h4>noteSoundUsage</h4>
+<pre>public&nbsp;void&nbsp;noteSoundUsage(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;info)</pre>
+<div class="block">update the fact that this sound has been just used, again</div>
</li>
</ul>
</li>
@@ -301,8 +268,8 @@ extends java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualc
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" target="_top">Frames</a></li>
@@ -326,7 +293,7 @@ extends java.util.LinkedHashMap&lt;java.lang.Integer,<a href="../../../com/qualc
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.util.AbstractMap">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html
new file mode 100644
index 0000000..d81ec63
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>SoundPlayer.PlaySoundParams</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SoundPlayer.PlaySoundParams";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.PlaySoundParams.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Class SoundPlayer.PlaySoundParams" class="title">Class SoundPlayer.PlaySoundParams</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <span class="typeNameLabel">SoundPlayer.PlaySoundParams</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#loopControl">loopControl</a></span></code>
+<div class="block">-1 means playing loops forever, 0 is play once, 1 is play twice, etc</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#rate">rate</a></span></code>
+<div class="block">playback rate (1.0 = normal playback, range 0.5 to 2.0)</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#volume">volume</a></span></code>
+<div class="block">an additional volume scaling that will be applied to this particular play action</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#waitForNonLoopingSoundsToFinish">waitForNonLoopingSoundsToFinish</a></span></code>
+<div class="block">whether to wait for any currently-playing non-looping sound to finish before playing</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#PlaySoundParams--">PlaySoundParams</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#PlaySoundParams-boolean-">PlaySoundParams</a></span>(boolean&nbsp;wait)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#PlaySoundParams-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams-">PlaySoundParams</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;them)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html#isLooping--">isLooping</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="volume">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>volume</h4>
+<pre>public&nbsp;float volume</pre>
+<div class="block">an additional volume scaling that will be applied to this particular play action</div>
+</li>
+</ul>
+<a name="waitForNonLoopingSoundsToFinish">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>waitForNonLoopingSoundsToFinish</h4>
+<pre>public&nbsp;boolean waitForNonLoopingSoundsToFinish</pre>
+<div class="block">whether to wait for any currently-playing non-looping sound to finish before playing</div>
+</li>
+</ul>
+<a name="loopControl">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loopControl</h4>
+<pre>public&nbsp;int loopControl</pre>
+<div class="block">-1 means playing loops forever, 0 is play once, 1 is play twice, etc</div>
+</li>
+</ul>
+<a name="rate">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rate</h4>
+<pre>public&nbsp;float rate</pre>
+<div class="block">playback rate (1.0 = normal playback, range 0.5 to 2.0)</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="PlaySoundParams--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PlaySoundParams</h4>
+<pre>public&nbsp;PlaySoundParams()</pre>
+</li>
+</ul>
+<a name="PlaySoundParams-boolean-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PlaySoundParams</h4>
+<pre>public&nbsp;PlaySoundParams(boolean&nbsp;wait)</pre>
+</li>
+</ul>
+<a name="PlaySoundParams-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>PlaySoundParams</h4>
+<pre>public&nbsp;PlaySoundParams(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;them)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="isLooping--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>isLooping</h4>
+<pre>public&nbsp;boolean&nbsp;isLooping()</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.PlaySoundParams.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html
new file mode 100644
index 0000000..8e3ae4b
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>SoundPlayer.SoundFromFile</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SoundPlayer.SoundFromFile";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":6};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.SoundFromFile.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Interface SoundPlayer.SoundFromFile" class="title">Interface SoundPlayer.SoundFromFile</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
+</dl>
+<hr>
+<br>
+<pre>protected static interface <span class="typeNameLabel">SoundPlayer.SoundFromFile</span></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html#apply-java.io.File-">apply</a></span>(java.io.File&nbsp;file)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="apply-java.io.File-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>apply</h4>
+<pre><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;apply(java.io.File&nbsp;file)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.SoundFromFile.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html
index 6412d16..e393851 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html
@@ -17,6 +17,12 @@
catch(err) {
}
//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
@@ -41,8 +47,8 @@
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" target="_top">Frames</a></li>
@@ -69,13 +75,13 @@
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
+<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
@@ -92,10 +98,15 @@
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
+<li>RefCounted</li>
+<li>
+<ul class="inheritance">
<li>com.qualcomm.ftccommon.SoundPlayer.SoundInfo</li>
</ul>
</li>
</ul>
+</li>
+</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
@@ -106,7 +117,7 @@
<hr>
<br>
<pre>protected class <span class="typeNameLabel">SoundPlayer.SoundInfo</span>
-extends java.lang.Object</pre>
+extends RefCounted</pre>
</li>
</ul>
</div>
@@ -126,6 +137,22 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#cbSize">cbSize</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>Context</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#context">context</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#file">file</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#hashString">hashString</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#msDuration">msDuration</a></span></code>&nbsp;</td>
</tr>
@@ -156,8 +183,12 @@ extends java.lang.Object</pre>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#SoundInfo-int-int-int-">SoundInfo</a></span>(int&nbsp;resourceId,
- int&nbsp;sampleId,
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#SoundInfo-Context-int-int-">SoundInfo</a></span>(Context&nbsp;context,
+ int&nbsp;resourceId,
+ int&nbsp;msDuration)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#SoundInfo-java.io.File-int-">SoundInfo</a></span>(java.io.File&nbsp;file,
int&nbsp;msDuration)</code>&nbsp;</td>
</tr>
</table>
@@ -169,12 +200,43 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#computeHash--">computeHash</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#destructor--">destructor</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>java.io.InputStream</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#getInputStream--">getInputStream</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>java.lang.Object</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#getKey--">getKey</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#initialize-int-">initialize</a></span>(int&nbsp;sampleId)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
</ul>
</li>
</ul>
@@ -190,13 +252,40 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Field Detail</h3>
+<a name="context">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>context</h4>
+<pre>public final&nbsp;Context context</pre>
+</li>
+</ul>
<a name="resourceId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>resourceId</h4>
-<pre>public&nbsp;int resourceId</pre>
+<pre>public final&nbsp;int resourceId</pre>
+</li>
+</ul>
+<a name="file">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>file</h4>
+<pre>public final&nbsp;java.io.File file</pre>
+</li>
+</ul>
+<a name="msDuration">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>msDuration</h4>
+<pre>public final&nbsp;long msDuration</pre>
</li>
</ul>
<a name="sampleId">
@@ -208,13 +297,22 @@ extends java.lang.Object</pre>
<pre>public&nbsp;int sampleId</pre>
</li>
</ul>
-<a name="msDuration">
+<a name="hashString">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>msDuration</h4>
-<pre>public&nbsp;long msDuration</pre>
+<h4>hashString</h4>
+<pre>public&nbsp;java.lang.String hashString</pre>
+</li>
+</ul>
+<a name="cbSize">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cbSize</h4>
+<pre>public&nbsp;int cbSize</pre>
</li>
</ul>
<a name="msLastPlay">
@@ -234,19 +332,91 @@ extends java.lang.Object</pre>
<!-- -->
</a>
<h3>Constructor Detail</h3>
-<a name="SoundInfo-int-int-int-">
+<a name="SoundInfo-Context-int-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SoundInfo</h4>
+<pre>public&nbsp;SoundInfo(Context&nbsp;context,
+ int&nbsp;resourceId,
+ int&nbsp;msDuration)</pre>
+</li>
+</ul>
+<a name="SoundInfo-java.io.File-int-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SoundInfo</h4>
-<pre>public&nbsp;SoundInfo(int&nbsp;resourceId,
- int&nbsp;sampleId,
+<pre>public&nbsp;SoundInfo(java.io.File&nbsp;file,
int&nbsp;msDuration)</pre>
</li>
</ul>
</li>
</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="toString--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;java.lang.String&nbsp;toString()</pre>
+</li>
+</ul>
+<a name="initialize-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>initialize</h4>
+<pre>public&nbsp;void&nbsp;initialize(int&nbsp;sampleId)</pre>
+</li>
+</ul>
+<a name="destructor--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>destructor</h4>
+<pre>protected&nbsp;void&nbsp;destructor()</pre>
+</li>
+</ul>
+<a name="getInputStream--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getInputStream</h4>
+<pre>public&nbsp;java.io.InputStream&nbsp;getInputStream()</pre>
+</li>
+</ul>
+<a name="computeHash--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>computeHash</h4>
+<pre>protected&nbsp;java.lang.String&nbsp;computeHash()</pre>
+</li>
+</ul>
+<a name="getKey--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getKey</h4>
+<pre>public&nbsp;java.lang.Object&nbsp;getKey()</pre>
+</li>
+</ul>
+</li>
+</ul>
</li>
</ul>
</div>
@@ -272,8 +442,8 @@ extends java.lang.Object</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" target="_top">Frames</a></li>
@@ -300,13 +470,13 @@ extends java.lang.Object</pre>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#methods.inherited.from.class.java.lang.Object">Method</a></li>
+<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li>Method</li>
+<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.StopWhat.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.StopWhat.html
new file mode 100644
index 0000000..c148bd6
--- /dev/null
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.StopWhat.html
@@ -0,0 +1,342 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<title>SoundPlayer.StopWhat</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SoundPlayer.StopWhat";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":9,"i1":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.StopWhat.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">com.qualcomm.ftccommon</div>
+<h2 title="Enum SoundPlayer.StopWhat" class="title">Enum SoundPlayer.StopWhat</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>java.lang.Enum&lt;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&gt;</li>
+<li>
+<ul class="inheritance">
+<li>com.qualcomm.ftccommon.SoundPlayer.StopWhat</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>java.io.Serializable, java.lang.Comparable&lt;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&gt;</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></dd>
+</dl>
+<hr>
+<br>
+<pre>protected static enum <span class="typeNameLabel">SoundPlayer.StopWhat</span>
+extends java.lang.Enum&lt;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&gt;</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.summary">
+<!-- -->
+</a>
+<h3>Enum Constant Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
+<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Enum Constant and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html#All">All</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html#Loops">Loops</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html#valueOf-java.lang.String-">valueOf</a></span>(java.lang.String&nbsp;name)</code>
+<div class="block">Returns the enum constant of this type with the specified name.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html#values--">values</a></span>()</code>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Enum</h3>
+<code>clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>getClass, notify, notifyAll, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ ENUM CONSTANT DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="enum.constant.detail">
+<!-- -->
+</a>
+<h3>Enum Constant Detail</h3>
+<a name="All">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>All</h4>
+<pre>public static final&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a> All</pre>
+</li>
+</ul>
+<a name="Loops">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Loops</h4>
+<pre>public static final&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a> Loops</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="values--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>values</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>[]&nbsp;values()</pre>
+<div class="block">Returns an array containing the constants of this enum type, in
+the order they are declared. This method may be used to iterate
+over the constants as follows:
+<pre>
+for (SoundPlayer.StopWhat c : SoundPlayer.StopWhat.values())
+&nbsp; System.out.println(c);
+</pre></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>an array containing the constants of this enum type, in the order they are declared</dd>
+</dl>
+</li>
+</ul>
+<a name="valueOf-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>valueOf</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&nbsp;valueOf(java.lang.String&nbsp;name)</pre>
+<div class="block">Returns the enum constant of this type with the specified name.
+The string must match <i>exactly</i> an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - the name of the enum constant to be returned.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the enum constant with the specified name</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.lang.IllegalArgumentException</code> - if this enum type has no constant with the specified name</dd>
+<dd><code>java.lang.NullPointerException</code> - if the argument is null</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" target="_top">Frames</a></li>
+<li><a href="SoundPlayer.StopWhat.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.html b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.html
index c3cec16..10ff5cb 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/SoundPlayer.html
@@ -17,8 +17,8 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":9,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":42,"i23":42,"i24":10,"i25":10,"i26":10,"i27":9,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
@@ -48,7 +48,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/Restarter.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.html" target="_top">Frames</a></li>
@@ -110,10 +110,10 @@ var activeTableTab = "activeTableTab";
<pre>public class <span class="typeNameLabel">SoundPlayer</span>
extends java.lang.Object</pre>
<div class="block"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer</code></a> is a simple utility class that plays sounds on the phone. The class
- is typically used through its singleton instance.</div>
+ is used through its singleton instance.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#play-Context-int-"><code>play(Context, int)</code></a></dd>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-int-"><code>startPlaying(Context, int)</code></a></dd>
</dl>
</li>
</ul>
@@ -134,6 +134,14 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>protected static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon">SoundPlayer.CurrentlyPlaying</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon">SoundPlayer.InstanceHolder</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon">SoundPlayer.LoadedSoundCache</a></span></code>
<div class="block"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.LoadedSoundCache</code></a> keeps track of loaded sounds, mapping sound resource id to loaded
@@ -141,9 +149,21 @@ extends java.lang.Object</pre>
</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static interface&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></span></code>&nbsp;</td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a></span></code>&nbsp;</td>
+</tr>
</table>
</li>
</ul>
@@ -160,32 +180,40 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>protected Context</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#context">context</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#currentlyLoadingInfo">currentlyLoadingInfo</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#currentlyLoading">currentlyLoading</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected java.util.concurrent.CountDownLatch</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#currentlyLoadingLatch">currentlyLoadingLatch</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#DEBUG">DEBUG</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected java.util.Set&lt;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon">SoundPlayer.CurrentlyPlaying</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#currentlyPlayingSounds">currentlyPlayingSounds</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>protected java.util.concurrent.ExecutorService</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#executorService">executorService</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#isRobotController">isRobotController</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon">SoundPlayer.LoadedSoundCache</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#loadedSounds">loadedSounds</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>protected Looper</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#looper">looper</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected java.lang.Object</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#lock">lock</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>protected long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#msFinishPlaying">msFinishPlaying</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#masterVolume">masterVolume</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#msSoundTransmissionFreshness">msSoundTransmissionFreshness</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected java.util.concurrent.ScheduledExecutorService</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#scheduledThreadPool">scheduledThreadPool</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected SharedPreferences</code></td>
@@ -193,11 +221,11 @@ extends java.lang.Object</pre>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected float</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#soundOffLevel">soundOffLevel</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#soundOffVolume">soundOffVolume</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected float</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#soundOnLevel">soundOnLevel</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#soundOnVolume">soundOnVolume</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected SoundPool</code></td>
@@ -208,8 +236,16 @@ extends java.lang.Object</pre>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#TAG">TAG</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>protected static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#theInstance">theInstance</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>protected java.util.concurrent.ExecutorService</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#threadPool">threadPool</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#TRACE">TRACE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected Tracer</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#tracer">tracer</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
@@ -241,75 +277,235 @@ extends java.lang.Object</pre>
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#close--">close</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#addRef-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">addRef</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getCurrentMilliseconds--">getCurrentMilliseconds</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#close--">close</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#copy-java.io.InputStream-java.io.OutputStream-int-">copy</a></span>(java.io.InputStream&nbsp;inputStream,
+ java.io.OutputStream&nbsp;outputStream,
+ int&nbsp;cbToCopy)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#ensureCached-Context-int-">ensureCached</a></span>(Context&nbsp;context,
+ int&nbsp;resId)</code>
+<div class="block">Ensures this local sound is also in the local cache.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#ensureCached-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.SoundFromFile-">ensureCached</a></span>(java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a>&nbsp;ifAbsent)</code>
+<div class="block">returns a new ref on the returned <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.SoundInfo</code></a>; caller must releaseRef()</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#ensureLoaded-Context-java.io.File-">ensureLoaded</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#ensureLoaded-Context-int-">ensureLoaded</a></span>(Context&nbsp;context,
+ int&nbsp;resourceId)</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#ensureLoaded-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.SoundFromFile-">ensureLoaded</a></span>(java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a>&nbsp;ifAbsent)</code>
+<div class="block">returns a new ref on the returned <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.SoundInfo</code></a>; caller must releaseRef()</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
<td class="colFirst"><code>static <a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getInstance--">getInstance</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i3" class="rowColor">
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getMasterVolume--">getMasterVolume</a></span>()</code>
+<div class="block">Returns the master volume control that is applied to all played sounds</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getMsDuration-Context-java.io.File-">getMsDuration</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file)</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getMsDuration-Context-int-">getMsDuration</a></span>(Context&nbsp;context,
int&nbsp;resourceId)</code>&nbsp;</td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>protected long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getMsNow--">getMsNow</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>CallbackResult</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#handleCommandPlaySound-java.lang.String-">handleCommandPlaySound</a></span>(java.lang.String&nbsp;extra)</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>CallbackResult</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#handleCommandRequestSound-Command-">handleCommandRequestSound</a></span>(Command&nbsp;requestSoundCommand)</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>CallbackResult</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#handleCommandStopPlayingSounds-Command-">handleCommandStopPlayingSounds</a></span>(Command&nbsp;stopPlayingSoundsCommand)</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#loadAndPlay-Context-int-boolean-">loadAndPlay</a></span>(Context&nbsp;context,
- int&nbsp;resourceId,
- boolean&nbsp;waitForCompletion)</code>
-<div class="block">Loads the requested sound if necessary, then (eventually) plays it.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#internalStopPlaying-com.qualcomm.ftccommon.SoundPlayer.StopWhat-">internalStopPlaying</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&nbsp;stopWhat)</code>&nbsp;</td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#isLocalSoundOn--">isLocalSoundOn</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#loadAndStartPlaying-Context-java.io.File-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">loadAndStartPlaying</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#loadAndStartPlaying-Context-int-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">loadAndStartPlaying</a></span>(Context&nbsp;context,
+ int&nbsp;resourceId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</code>&nbsp;</td>
+</tr>
+<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#onLoadComplete-SoundPool-int-int-">onLoadComplete</a></span>(SoundPool&nbsp;soundPool,
int&nbsp;sampleId,
- int&nbsp;status)</code>
-<div class="block">Called when a sound has completed loading.</div>
-</td>
+ int&nbsp;status)</code>&nbsp;</td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i21" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#play-Context-java.io.File-float-int-float-">play</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ float&nbsp;volume,
+ int&nbsp;loop,
+ float&nbsp;rate)</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#play-Context-int-">play</a></span>(Context&nbsp;context,
int&nbsp;resId)</code>
-<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
- initiates its play once any current sound is finished playing.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">use <a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-int-"><code>startPlaying(Context, int)</code></a> instead</span></div>
+</div>
</td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#play-Context-int-boolean-">play</a></span>(Context&nbsp;context,
int&nbsp;resId,
boolean&nbsp;waitForCompletion)</code>
-<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
- initiates its play, optionally waiting for any currently playing sound to finish first.</div>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">use <code>#startPlaying(Context, int, PlaySoundParams, Consumer, Runnable)</code> instead</span></div>
+</div>
</td>
</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#playLoadedSound-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-boolean-">playLoadedSound</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo,
- boolean&nbsp;waitForCompletion)</code>&nbsp;</td>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#prefillSoundCache-int...-">prefillSoundCache</a></span>(int...&nbsp;resourceIds)</code>
+<div class="block">Ensures that these local sounds are also in the local cache</div>
+</td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i25" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#preload-Context-java.io.File-">preload</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file)</code>
+<div class="block">Preloads the sound so as to to reduce delays if the sound is subsequently played.</div>
+</td>
+</tr>
+<tr id="i26" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#preload-Context-int-">preload</a></span>(Context&nbsp;context,
+ int&nbsp;resourceId)</code>
+<div class="block">Preloads the sound so as to to reduce delays if the sound is subsequently played.</div>
+</td>
+</tr>
+<tr id="i27" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#releaseRef-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">releaseRef</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#shutdown--">shutdown</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#safeClose-java.lang.Object-">safeClose</a></span>(java.lang.Object&nbsp;closeable)</code>&nbsp;</td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i29" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#setMasterVolume-float-">setMasterVolume</a></span>(float&nbsp;masterVolume)</code>
+<div class="block">Sets the master volume control that is applied to all played sounds</div>
+</td>
+</tr>
+<tr id="i30" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-java.io.File-">startPlaying</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file)</code>&nbsp;</td>
+</tr>
+<tr id="i31" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-java.io.File-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">startPlaying</a></span>(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</code>&nbsp;</td>
+</tr>
+<tr id="i32" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-int-">startPlaying</a></span>(Context&nbsp;context,
+ int&nbsp;resId)</code>
+<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
+ initiates its play once any current non-looping sound is finished playing.</div>
+</td>
+</tr>
+<tr id="i33" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-int-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">startPlaying</a></span>(Context&nbsp;context,
+ int&nbsp;resId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</code>
+<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
+ initiates its play, optionally waiting for any currently non-looping playing sounds to finish first.</div>
+</td>
+</tr>
+<tr id="i34" class="altColor">
<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startup--">startup</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlayingLoadedSound-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">startPlayingLoadedSound</a></span>(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;paramsIn,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</code>&nbsp;</td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i35" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#stopPlayingAll--">stopPlayingAll</a></span>()</code>
+<div class="block">Stops playing all sounds that are currently playing</div>
+</td>
+</tr>
+<tr id="i36" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#stopPlayingLoops--">stopPlayingLoops</a></span>()</code>
+<div class="block">Stops playing all sounds that are currently playing in a loop</div>
+</td>
+</tr>
+<tr id="i37" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#waitForLoadCompletion--">waitForLoadCompletion</a></span>()</code>&nbsp;</td>
</tr>
@@ -348,26 +544,53 @@ extends java.lang.Object</pre>
</dl>
</li>
</ul>
-<a name="DEBUG">
+<a name="TRACE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>DEBUG</h4>
-<pre>public static final&nbsp;boolean DEBUG</pre>
+<h4>TRACE</h4>
+<pre>public static&nbsp;boolean TRACE</pre>
+</li>
+</ul>
+<a name="tracer">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tracer</h4>
+<pre>protected&nbsp;Tracer tracer</pre>
+</li>
+</ul>
+<a name="msSoundTransmissionFreshness">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>msSoundTransmissionFreshness</h4>
+<pre>public static final&nbsp;int msSoundTransmissionFreshness</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.SoundPlayer.DEBUG">Constant Field Values</a></dd>
+<dd><a href="../../../constant-values.html#com.qualcomm.ftccommon.SoundPlayer.msSoundTransmissionFreshness">Constant Field Values</a></dd>
</dl>
</li>
</ul>
-<a name="theInstance">
+<a name="lock">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>lock</h4>
+<pre>protected final&nbsp;java.lang.Object lock</pre>
+</li>
+</ul>
+<a name="isRobotController">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>theInstance</h4>
-<pre>protected static&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon">SoundPlayer</a> theInstance</pre>
+<h4>isRobotController</h4>
+<pre>protected final&nbsp;boolean isRobotController</pre>
</li>
</ul>
<a name="soundPool">
@@ -379,22 +602,22 @@ extends java.lang.Object</pre>
<pre>protected&nbsp;SoundPool soundPool</pre>
</li>
</ul>
-<a name="currentlyLoading">
+<a name="currentlyLoadingLatch">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>currentlyLoading</h4>
-<pre>protected volatile&nbsp;int currentlyLoading</pre>
+<h4>currentlyLoadingLatch</h4>
+<pre>protected&nbsp;java.util.concurrent.CountDownLatch currentlyLoadingLatch</pre>
</li>
</ul>
-<a name="msFinishPlaying">
+<a name="currentlyLoadingInfo">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>msFinishPlaying</h4>
-<pre>protected&nbsp;long msFinishPlaying</pre>
+<h4>currentlyLoadingInfo</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a> currentlyLoadingInfo</pre>
</li>
</ul>
<a name="loadedSounds">
@@ -406,58 +629,67 @@ extends java.lang.Object</pre>
<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon">SoundPlayer.LoadedSoundCache</a> loadedSounds</pre>
</li>
</ul>
-<a name="executorService">
+<a name="threadPool">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>executorService</h4>
-<pre>protected&nbsp;java.util.concurrent.ExecutorService executorService</pre>
+<h4>threadPool</h4>
+<pre>protected&nbsp;java.util.concurrent.ExecutorService threadPool</pre>
</li>
</ul>
-<a name="looper">
+<a name="scheduledThreadPool">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>looper</h4>
-<pre>protected&nbsp;Looper looper</pre>
+<h4>scheduledThreadPool</h4>
+<pre>protected&nbsp;java.util.concurrent.ScheduledExecutorService scheduledThreadPool</pre>
</li>
</ul>
-<a name="context">
+<a name="sharedPreferences">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>context</h4>
-<pre>protected&nbsp;Context context</pre>
+<h4>sharedPreferences</h4>
+<pre>protected&nbsp;SharedPreferences sharedPreferences</pre>
</li>
</ul>
-<a name="sharedPreferences">
+<a name="soundOnVolume">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>sharedPreferences</h4>
-<pre>protected&nbsp;SharedPreferences sharedPreferences</pre>
+<h4>soundOnVolume</h4>
+<pre>protected&nbsp;float soundOnVolume</pre>
</li>
</ul>
-<a name="soundOnLevel">
+<a name="soundOffVolume">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>soundOnLevel</h4>
-<pre>protected&nbsp;float soundOnLevel</pre>
+<h4>soundOffVolume</h4>
+<pre>protected&nbsp;float soundOffVolume</pre>
</li>
</ul>
-<a name="soundOffLevel">
+<a name="masterVolume">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>masterVolume</h4>
+<pre>protected&nbsp;float masterVolume</pre>
+</li>
+</ul>
+<a name="currentlyPlayingSounds">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>soundOffLevel</h4>
-<pre>protected&nbsp;float soundOffLevel</pre>
+<h4>currentlyPlayingSounds</h4>
+<pre>protected&nbsp;java.util.Set&lt;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon">SoundPlayer.CurrentlyPlaying</a>&gt; currentlyPlayingSounds</pre>
</li>
</ul>
</li>
@@ -512,74 +744,248 @@ extends java.lang.Object</pre>
<pre>public&nbsp;void&nbsp;close()</pre>
</li>
</ul>
-<a name="startup--">
+<a name="prefillSoundCache-int...-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>startup</h4>
-<pre>protected&nbsp;void&nbsp;startup()</pre>
+<h4>prefillSoundCache</h4>
+<pre>public&nbsp;void&nbsp;prefillSoundCache(int...&nbsp;resourceIds)</pre>
+<div class="block">Ensures that these local sounds are also in the local cache</div>
</li>
</ul>
-<a name="shutdown--">
+<a name="startPlaying-Context-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>shutdown</h4>
-<pre>protected&nbsp;void&nbsp;shutdown()</pre>
+<h4>startPlaying</h4>
+<pre>public&nbsp;void&nbsp;startPlaying(Context&nbsp;context,
+ int&nbsp;resId)</pre>
+<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
+ initiates its play once any current non-looping sound is finished playing.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>context</code> - the context in which resId is to be interpreted</dd>
+<dd><code>resId</code> - the resource id of the raw resource containing the sound.</dd>
+</dl>
</li>
</ul>
-<a name="play-Context-int-">
+<a name="startPlaying-Context-java.io.File-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>play</h4>
-<pre>public&nbsp;void&nbsp;play(Context&nbsp;context,
- int&nbsp;resId)</pre>
+<h4>startPlaying</h4>
+<pre>public&nbsp;void&nbsp;startPlaying(Context&nbsp;context,
+ java.io.File&nbsp;file)</pre>
+</li>
+</ul>
+<a name="startPlaying-Context-int-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startPlaying</h4>
+<pre>public&nbsp;void&nbsp;startPlaying(Context&nbsp;context,
+ int&nbsp;resId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</pre>
<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
- initiates its play once any current sound is finished playing.</div>
+ initiates its play, optionally waiting for any currently non-looping playing sounds to finish first.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - the context in which resId is to be interpreted</dd>
<dd><code>resId</code> - the resource id of the raw resource containing the sound.</dd>
+<dd><code>params</code> - controls how the playback proceeds</dd>
+<dd><code>runWhenStarted</code> - executed when the stream starts to play</dd>
+<dd><code>runWhenFinished</code> - executed when the stream finishes playing</dd>
</dl>
</li>
</ul>
-<a name="play-Context-int-boolean-">
+<a name="startPlaying-Context-java.io.File-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>play</h4>
-<pre>public&nbsp;void&nbsp;play(Context&nbsp;context,
- int&nbsp;resId,
- boolean&nbsp;waitForCompletion)</pre>
-<div class="block">Asynchronously loads the indicated sound from its resource (if not already loaded), then
- initiates its play, optionally waiting for any currently playing sound to finish first.</div>
+<h4>startPlaying</h4>
+<pre>public&nbsp;void&nbsp;startPlaying(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</pre>
+</li>
+</ul>
+<a name="stopPlayingAll--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stopPlayingAll</h4>
+<pre>public&nbsp;void&nbsp;stopPlayingAll()</pre>
+<div class="block">Stops playing all sounds that are currently playing</div>
+</li>
+</ul>
+<a name="stopPlayingLoops--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stopPlayingLoops</h4>
+<pre>public&nbsp;void&nbsp;stopPlayingLoops()</pre>
+<div class="block">Stops playing all sounds that are currently playing in a loop</div>
+</li>
+</ul>
+<a name="internalStopPlaying-com.qualcomm.ftccommon.SoundPlayer.StopWhat-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>internalStopPlaying</h4>
+<pre>protected&nbsp;void&nbsp;internalStopPlaying(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a>&nbsp;stopWhat)</pre>
+</li>
+</ul>
+<a name="preload-Context-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>preload</h4>
+<pre>public&nbsp;boolean&nbsp;preload(Context&nbsp;context,
+ int&nbsp;resourceId)</pre>
+<div class="block">Preloads the sound so as to to reduce delays if the sound is subsequently played.</div>
+</li>
+</ul>
+<a name="preload-Context-java.io.File-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>preload</h4>
+<pre>public&nbsp;boolean&nbsp;preload(Context&nbsp;context,
+ java.io.File&nbsp;file)</pre>
+<div class="block">Preloads the sound so as to to reduce delays if the sound is subsequently played.</div>
+</li>
+</ul>
+<a name="setMasterVolume-float-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setMasterVolume</h4>
+<pre>public&nbsp;void&nbsp;setMasterVolume(float&nbsp;masterVolume)</pre>
+<div class="block">Sets the master volume control that is applied to all played sounds</div>
<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>context</code> - the context in which resId is to be interpreted</dd>
-<dd><code>resId</code> - the resource id of the raw resource containing the sound.</dd>
-<dd><code>waitForCompletion</code> - whether to wait for any current sound to finish playing first or not</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#getMasterVolume--"><code>getMasterVolume()</code></a></dd>
</dl>
</li>
</ul>
-<a name="loadAndPlay-Context-int-boolean-">
+<a name="getMasterVolume--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMasterVolume</h4>
+<pre>public&nbsp;float&nbsp;getMasterVolume()</pre>
+<div class="block">Returns the master volume control that is applied to all played sounds</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#setMasterVolume-float-"><code>setMasterVolume(float)</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="play-Context-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>play</h4>
+<pre>@Deprecated
+public&nbsp;void&nbsp;play(Context&nbsp;context,
+ int&nbsp;resId)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../com/qualcomm/ftccommon/SoundPlayer.html#startPlaying-Context-int-"><code>startPlaying(Context, int)</code></a> instead</span></div>
+</li>
+</ul>
+<a name="play-Context-int-boolean-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>play</h4>
+<pre>@Deprecated
+public&nbsp;void&nbsp;play(Context&nbsp;context,
+ int&nbsp;resId,
+ boolean&nbsp;waitForCompletion)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <code>#startPlaying(Context, int, PlaySoundParams, Consumer, Runnable)</code> instead</span></div>
+</li>
+</ul>
+<a name="loadAndStartPlaying-Context-int-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loadAndStartPlaying</h4>
+<pre>protected&nbsp;void&nbsp;loadAndStartPlaying(Context&nbsp;context,
+ int&nbsp;resourceId,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</pre>
+</li>
+</ul>
+<a name="loadAndStartPlaying-Context-java.io.File-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loadAndStartPlaying</h4>
+<pre>protected&nbsp;void&nbsp;loadAndStartPlaying(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;params,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</pre>
+</li>
+</ul>
+<a name="ensureLoaded-Context-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ensureLoaded</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;ensureLoaded(Context&nbsp;context,
+ int&nbsp;resourceId)</pre>
+</li>
+</ul>
+<a name="ensureLoaded-Context-java.io.File-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ensureLoaded</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;ensureLoaded(Context&nbsp;context,
+ java.io.File&nbsp;file)</pre>
+</li>
+</ul>
+<a name="isLocalSoundOn--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isLocalSoundOn</h4>
+<pre>public&nbsp;boolean&nbsp;isLocalSoundOn()</pre>
+</li>
+</ul>
+<a name="startPlayingLoadedSound-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-com.qualcomm.ftccommon.SoundPlayer.PlaySoundParams--java.lang.Runnable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>loadAndPlay</h4>
-<pre>protected&nbsp;void&nbsp;loadAndPlay(Context&nbsp;context,
- int&nbsp;resourceId,
- boolean&nbsp;waitForCompletion)</pre>
-<div class="block">Loads the requested sound if necessary, then (eventually) plays it.
- Note: this always runs on our dedicate executor thread. We do that because
- that allows us to have a looper that *only* sees load completions, which will
- prevent us from accepting new play requests while we're waiting for loads to
- complete.</div>
+<h4>startPlayingLoadedSound</h4>
+<pre>protected&nbsp;void&nbsp;startPlayingLoadedSound(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a>&nbsp;paramsIn,
+ &lt;any&gt;&nbsp;runWhenStarted,
+ java.lang.Runnable&nbsp;runWhenFinished)</pre>
</li>
</ul>
<a name="getMsDuration-Context-int-">
@@ -592,6 +998,16 @@ extends java.lang.Object</pre>
int&nbsp;resourceId)</pre>
</li>
</ul>
+<a name="getMsDuration-Context-java.io.File-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMsDuration</h4>
+<pre>protected&nbsp;int&nbsp;getMsDuration(Context&nbsp;context,
+ java.io.File&nbsp;file)</pre>
+</li>
+</ul>
<a name="waitForLoadCompletion--">
<!-- -->
</a>
@@ -601,43 +1017,142 @@ extends java.lang.Object</pre>
<pre>protected&nbsp;void&nbsp;waitForLoadCompletion()</pre>
</li>
</ul>
-<a name="playLoadedSound-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-boolean-">
+<a name="onLoadComplete-SoundPool-int-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>playLoadedSound</h4>
-<pre>protected&nbsp;void&nbsp;playLoadedSound(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo,
- boolean&nbsp;waitForCompletion)</pre>
+<h4>onLoadComplete</h4>
+<pre>public&nbsp;void&nbsp;onLoadComplete(SoundPool&nbsp;soundPool,
+ int&nbsp;sampleId,
+ int&nbsp;status)</pre>
</li>
</ul>
-<a name="getCurrentMilliseconds--">
+<a name="getMsNow--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getCurrentMilliseconds</h4>
-<pre>protected&nbsp;long&nbsp;getCurrentMilliseconds()</pre>
+<h4>getMsNow</h4>
+<pre>protected&nbsp;long&nbsp;getMsNow()</pre>
</li>
</ul>
-<a name="onLoadComplete-SoundPool-int-int-">
+<a name="ensureLoaded-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.SoundFromFile-">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
-<h4>onLoadComplete</h4>
-<pre>public&nbsp;void&nbsp;onLoadComplete(SoundPool&nbsp;soundPool,
- int&nbsp;sampleId,
- int&nbsp;status)</pre>
-<div class="block">Called when a sound has completed loading.</div>
+<h4>ensureLoaded</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;ensureLoaded(java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a>&nbsp;ifAbsent)</pre>
+<div class="block">returns a new ref on the returned <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.SoundInfo</code></a>; caller must releaseRef()</div>
+</li>
+</ul>
+<a name="ensureCached-Context-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ensureCached</h4>
+<pre>protected&nbsp;void&nbsp;ensureCached(Context&nbsp;context,
+ int&nbsp;resId)</pre>
+<div class="block">Ensures this local sound is also in the local cache.</div>
+</li>
+</ul>
+<a name="ensureCached-java.lang.String-com.qualcomm.ftccommon.SoundPlayer.SoundFromFile-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ensureCached</h4>
+<pre>protected&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;ensureCached(java.lang.String&nbsp;hashString,
+ <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a>&nbsp;ifAbsent)</pre>
+<div class="block">returns a new ref on the returned <a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><code>SoundPlayer.SoundInfo</code></a>; caller must releaseRef()</div>
+</li>
+</ul>
+<a name="handleCommandPlaySound-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>handleCommandPlaySound</h4>
+<pre>public&nbsp;CallbackResult&nbsp;handleCommandPlaySound(java.lang.String&nbsp;extra)</pre>
+</li>
+</ul>
+<a name="handleCommandStopPlayingSounds-Command-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>handleCommandStopPlayingSounds</h4>
+<pre>public&nbsp;CallbackResult&nbsp;handleCommandStopPlayingSounds(Command&nbsp;stopPlayingSoundsCommand)</pre>
+</li>
+</ul>
+<a name="copy-java.io.InputStream-java.io.OutputStream-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copy</h4>
+<pre>protected static&nbsp;void&nbsp;copy(java.io.InputStream&nbsp;inputStream,
+ java.io.OutputStream&nbsp;outputStream,
+ int&nbsp;cbToCopy)
+ throws java.io.IOException</pre>
<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>soundPool</code> - SoundPool object from the load() method</dd>
-<dd><code>sampleId</code> - the sample ID of the sound loaded.</dd>
-<dd><code>status</code> - the status of the load operation (0 = success)</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
+<a name="handleCommandRequestSound-Command-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>handleCommandRequestSound</h4>
+<pre>public&nbsp;CallbackResult&nbsp;handleCommandRequestSound(Command&nbsp;requestSoundCommand)</pre>
+</li>
+</ul>
+<a name="safeClose-java.lang.Object-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>safeClose</h4>
+<pre>protected&nbsp;void&nbsp;safeClose(java.lang.Object&nbsp;closeable)</pre>
+</li>
+</ul>
+<a name="addRef-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addRef</h4>
+<pre>public static&nbsp;<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;addRef(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</pre>
+</li>
+</ul>
+<a name="releaseRef-com.qualcomm.ftccommon.SoundPlayer.SoundInfo-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>releaseRef</h4>
+<pre>public static&nbsp;void&nbsp;releaseRef(<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon">SoundPlayer.SoundInfo</a>&nbsp;soundInfo)</pre>
+</li>
+</ul>
+<a name="play-Context-java.io.File-float-int-float-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>play</h4>
+<pre>public&nbsp;void&nbsp;play(Context&nbsp;context,
+ java.io.File&nbsp;file,
+ float&nbsp;volume,
+ int&nbsp;loop,
+ float&nbsp;rate)</pre>
+</li>
+</ul>
</li>
</ul>
</li>
@@ -666,7 +1181,7 @@ extends java.lang.Object</pre>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/qualcomm/ftccommon/Restarter.html" title="interface in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/qualcomm/ftccommon/SoundPlayer.html" target="_top">Frames</a></li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/USBAccessibleLynxModule.html b/doc/javadoc/com/qualcomm/ftccommon/USBAccessibleLynxModule.html
index 37d7931..5cb56a2 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/USBAccessibleLynxModule.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/USBAccessibleLynxModule.html
@@ -17,7 +17,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -129,14 +129,18 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>protected java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#firmwareVersionString">firmwareVersionString</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#moduleAddress">moduleAddress</a></span></code>&nbsp;</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#moduleAddressChangeable">moduleAddressChangeable</a></span></code>&nbsp;</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#serialNumber">serialNumber</a></span></code>&nbsp;</td>
</tr>
@@ -177,26 +181,38 @@ extends java.lang.Object</pre>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#getFinishedFirmwareVersionString--">getFinishedFirmwareVersionString</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#getFirmwareVersionString--">getFirmwareVersionString</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#getModuleAddress--">getModuleAddress</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i1" class="rowColor">
+<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#getSerialNumber--">getSerialNumber</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i2" class="altColor">
+<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#isModuleAddressChangeable--">isModuleAddressChangeable</a></span>()</code>&nbsp;</td>
</tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#setFirmwareVersionString-java.lang.String-">setFirmwareVersionString</a></span>(java.lang.String&nbsp;firmwareVersionString)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#setModuleAddress-int-">setModuleAddress</a></span>(int&nbsp;moduleAddress)</code>&nbsp;</td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#setModuleAddressChangeable-boolean-">setModuleAddressChangeable</a></span>(boolean&nbsp;moduleAddressChangeable)</code>&nbsp;</td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html#setSerialNumber-com.qualcomm.robotcore.util.SerialNumber-">setSerialNumber</a></span>(<a href="../../../com/qualcomm/robotcore/util/SerialNumber.html" title="class in com.qualcomm.robotcore.util">SerialNumber</a>&nbsp;serialNumber)</code>&nbsp;</td>
</tr>
@@ -243,12 +259,21 @@ extends java.lang.Object</pre>
<a name="moduleAddressChangeable">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>moduleAddressChangeable</h4>
<pre>protected&nbsp;boolean moduleAddressChangeable</pre>
</li>
</ul>
+<a name="firmwareVersionString">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>firmwareVersionString</h4>
+<pre>protected&nbsp;java.lang.String firmwareVersionString</pre>
+</li>
+</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -332,12 +357,39 @@ extends java.lang.Object</pre>
<a name="setModuleAddressChangeable-boolean-">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>setModuleAddressChangeable</h4>
<pre>public&nbsp;void&nbsp;setModuleAddressChangeable(boolean&nbsp;moduleAddressChangeable)</pre>
</li>
</ul>
+<a name="getFirmwareVersionString--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFirmwareVersionString</h4>
+<pre>public&nbsp;java.lang.String&nbsp;getFirmwareVersionString()</pre>
+</li>
+</ul>
+<a name="getFinishedFirmwareVersionString--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFinishedFirmwareVersionString</h4>
+<pre>public&nbsp;java.lang.String&nbsp;getFinishedFirmwareVersionString()</pre>
+</li>
+</ul>
+<a name="setFirmwareVersionString-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>setFirmwareVersionString</h4>
+<pre>public&nbsp;void&nbsp;setFirmwareVersionString(java.lang.String&nbsp;firmwareVersionString)</pre>
+</li>
+</ul>
</li>
</ul>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.Callback.html b/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.Callback.html
index 72680b5..ba92a2c 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.Callback.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.Callback.html
@@ -181,7 +181,7 @@ extends java.lang.Object</pre>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/UpdateUI.Callback.html#networkConnectionUpdate-WifiDirectAssistant.Event-">networkConnectionUpdate</a></span>(WifiDirectAssistant.Event&nbsp;event)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/qualcomm/ftccommon/UpdateUI.Callback.html#networkConnectionUpdate-NetworkConnection.NetworkEvent-">networkConnectionUpdate</a></span>(NetworkConnection.NetworkEvent&nbsp;event)</code>&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
@@ -313,13 +313,13 @@ extends java.lang.Object</pre>
<a href="../../../com/qualcomm/robotcore/hardware/Gamepad.html" title="class in com.qualcomm.robotcore.hardware">Gamepad</a>[]&nbsp;gamepads)</pre>
</li>
</ul>
-<a name="networkConnectionUpdate-WifiDirectAssistant.Event-">
+<a name="networkConnectionUpdate-NetworkConnection.NetworkEvent-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>networkConnectionUpdate</h4>
-<pre>public&nbsp;void&nbsp;networkConnectionUpdate(WifiDirectAssistant.Event&nbsp;event)</pre>
+<pre>public&nbsp;void&nbsp;networkConnectionUpdate(NetworkConnection.NetworkEvent&nbsp;event)</pre>
</li>
</ul>
<a name="displayDeviceName-java.lang.String-">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.html b/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.html
index 93cd5d6..3a07dfb 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/UpdateUI.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.Callback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@@ -517,7 +517,7 @@ extends java.lang.Object</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/qualcomm/ftccommon/UpdateUI.Callback.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
diff --git a/doc/javadoc/com/qualcomm/ftccommon/package-frame.html b/doc/javadoc/com/qualcomm/ftccommon/package-frame.html
index 40f4ef7..c7f8298 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/package-frame.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/package-frame.html
@@ -14,14 +14,17 @@
<ul title="Interfaces">
<li><a href="ProgrammingModeController.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">ProgrammingModeController</span></a></li>
<li><a href="Restarter.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">Restarter</span></a></li>
+<li><a href="SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">SoundPlayer.SoundFromFile</span></a></li>
<li><a href="UsbModuleAttachmentHandler.html" title="interface in com.qualcomm.ftccommon" target="classFrame"><span class="interfaceName">UsbModuleAttachmentHandler</span></a></li>
</ul>
<h2 title="Classes">Classes</h2>
<ul title="Classes">
-<li><a href="AboutActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">AboutActivity</a></li>
-<li><a href="AboutActivity.Item.html" title="class in com.qualcomm.ftccommon" target="classFrame">AboutActivity.Item</a></li>
<li><a href="ClassManagerFactory.html" title="class in com.qualcomm.ftccommon" target="classFrame">ClassManagerFactory</a></li>
<li><a href="CommandList.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList</a></li>
+<li><a href="CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdPlaySound</a></li>
+<li><a href="CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdRequestSound</a></li>
+<li><a href="CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdStopPlayingSounds</a></li>
+<li><a href="CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.CmdVisuallyIdentify</a></li>
<li><a href="CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxAddressChangeRequest</a></li>
<li><a href="CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxAddressChangeRequest.AddressChange</a></li>
<li><a href="CommandList.LynxFirmwareImagesResp.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.LynxFirmwareImagesResp</a></li>
@@ -30,6 +33,8 @@
<li><a href="CommandList.USBAccessibleLynxModulesRequest.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.USBAccessibleLynxModulesRequest</a></li>
<li><a href="CommandList.USBAccessibleLynxModulesResp.html" title="class in com.qualcomm.ftccommon" target="classFrame">CommandList.USBAccessibleLynxModulesResp</a></li>
<li><a href="ConfigWifiDirectActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">ConfigWifiDirectActivity</a></li>
+<li><a href="FtcAboutActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAboutActivity</a></li>
+<li><a href="FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAboutActivity.AboutFragment</a></li>
<li><a href="FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAdvancedRCSettingsActivity</a></li>
<li><a href="FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcAdvancedRCSettingsActivity.SettingsFragment</a></li>
<li><a href="FtcEventLoop.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcEventLoop</a></li>
@@ -46,6 +51,9 @@
<li><a href="FtcWifiDirectRememberedGroupsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">FtcWifiDirectRememberedGroupsActivity</a></li>
<li><a href="LaunchActivityConstantsList.html" title="class in com.qualcomm.ftccommon" target="classFrame">LaunchActivityConstantsList</a></li>
<li><a href="SoundPlayer.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer</a></li>
+<li><a href="SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.CurrentlyPlaying</a></li>
+<li><a href="SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.InstanceHolder</a></li>
+<li><a href="SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.PlaySoundParams</a></li>
<li><a href="UpdateUI.html" title="class in com.qualcomm.ftccommon" target="classFrame">UpdateUI</a></li>
<li><a href="USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon" target="classFrame">USBAccessibleLynxModule</a></li>
<li><a href="ViewLogsActivity.html" title="class in com.qualcomm.ftccommon" target="classFrame">ViewLogsActivity</a></li>
@@ -53,7 +61,9 @@
<h2 title="Enums">Enums</h2>
<ul title="Enums">
<li><a href="ConfigWifiDirectActivity.Flag.html" title="enum in com.qualcomm.ftccommon" target="classFrame">ConfigWifiDirectActivity.Flag</a></li>
+<li><a href="FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon" target="classFrame">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></li>
<li><a href="LaunchActivityConstantsList.RequestCode.html" title="enum in com.qualcomm.ftccommon" target="classFrame">LaunchActivityConstantsList.RequestCode</a></li>
+<li><a href="SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon" target="classFrame">SoundPlayer.StopWhat</a></li>
</ul>
</div>
</body>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/package-summary.html b/doc/javadoc/com/qualcomm/ftccommon/package-summary.html
index 557545b..e889fe9 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/package-summary.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/package-summary.html
@@ -96,6 +96,10 @@
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundFromFile.html" title="interface in com.qualcomm.ftccommon">SoundPlayer.SoundFromFile</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/UsbModuleAttachmentHandler.html" title="interface in com.qualcomm.ftccommon">UsbModuleAttachmentHandler</a></td>
<td class="colLast">
<div class="block">UsbModuleAttachmentHandler is a notification interface through which policies for dealing
@@ -114,14 +118,6 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/AboutActivity.html" title="class in com.qualcomm.ftccommon">AboutActivity</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon">AboutActivity.Item</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon">ClassManagerFactory</a></td>
<td class="colLast">
<div class="block">A helper for classes that want to inspect the list of classes packaged with an APK.</div>
@@ -134,6 +130,22 @@
</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdPlaySound</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon">CommandList.CmdRequestSound</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon">CommandList.CmdStopPlayingSounds</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon">CommandList.CmdVisuallyIdentify</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon">CommandList.LynxAddressChangeRequest</a></td>
<td class="colLast">&nbsp;</td>
</tr>
@@ -169,6 +181,14 @@
</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon">FtcAboutActivity.AboutFragment</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon">FtcAdvancedRCSettingsActivity</a></td>
<td class="colLast">
<div class="block"><a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.html" title="class in com.qualcomm.ftccommon"><code>FtcAdvancedRCSettingsActivity</code></a> manages the editing of advanced RC settings</div>
@@ -255,16 +275,28 @@
</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon">UpdateUI</a></td>
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon">SoundPlayer.CurrentlyPlaying</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon">SoundPlayer.InstanceHolder</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon">SoundPlayer.PlaySoundParams</a></td>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/UpdateUI.html" title="class in com.qualcomm.ftccommon">UpdateUI</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/USBAccessibleLynxModule.html" title="class in com.qualcomm.ftccommon">USBAccessibleLynxModule</a></td>
<td class="colLast">
<div class="block">A simple utility class holding the serial number of a USB accessible lynx module and (optionally) its module address</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/ViewLogsActivity.html" title="class in com.qualcomm.ftccommon">ViewLogsActivity</a></td>
<td class="colLast">&nbsp;</td>
</tr>
@@ -284,12 +316,20 @@
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/FtcLynxFirmwareUpdateActivity.FwResponseStatus.html" title="enum in com.qualcomm.ftccommon">FtcLynxFirmwareUpdateActivity.FwResponseStatus</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.RequestCode.html" title="enum in com.qualcomm.ftccommon">LaunchActivityConstantsList.RequestCode</a></td>
<td class="colLast">
<div class="block">Used internally to distinguish the results coming back from various launched
(sub)activities</div>
</td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../com/qualcomm/ftccommon/SoundPlayer.StopWhat.html" title="enum in com.qualcomm.ftccommon">SoundPlayer.StopWhat</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
</tbody>
</table>
</li>
diff --git a/doc/javadoc/com/qualcomm/ftccommon/package-tree.html b/doc/javadoc/com/qualcomm/ftccommon/package-tree.html
index 4a2dc4f..e39720e 100644
--- a/doc/javadoc/com/qualcomm/ftccommon/package-tree.html
+++ b/doc/javadoc/com/qualcomm/ftccommon/package-tree.html
@@ -85,26 +85,16 @@
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcWifiDirectRememberedGroupsActivity.WifiP2pGroupItemAdapter.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcWifiDirectRememberedGroupsActivity.WifiP2pGroupItemAdapter</span></a></li>
</ul>
</li>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/AboutActivity.Item.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">AboutActivity.Item</span></a></li>
-<li type="circle">java.util.AbstractMap&lt;K,V&gt; (implements java.util.Map&lt;K,V&gt;)
-<ul>
-<li type="circle">java.util.HashMap&lt;K,V&gt; (implements java.lang.Cloneable, java.util.Map&lt;K,V&gt;, java.io.Serializable)
-<ul>
-<li type="circle">java.util.LinkedHashMap&lt;K,V&gt; (implements java.util.Map&lt;K,V&gt;)
-<ul>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.LoadedSoundCache</span></a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
<li type="circle">Binder
<ul>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcRobotControllerService.FtcRobotControllerBinder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcRobotControllerService.FtcRobotControllerBinder</span></a></li>
</ul>
</li>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/ClassManagerFactory.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">ClassManagerFactory</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.CmdPlaySound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.CmdPlaySound</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.CmdRequestSound.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.CmdRequestSound</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.CmdStopPlayingSounds.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.CmdStopPlayingSounds</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.CmdVisuallyIdentify.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.CmdVisuallyIdentify</span></a></li>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.LynxAddressChangeRequest</span></a></li>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.LynxAddressChangeRequest.AddressChange.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.LynxAddressChangeRequest.AddressChange</span></a></li>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/CommandList.LynxFirmwareImagesResp.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">CommandList.LynxFirmwareImagesResp</span></a></li>
@@ -148,12 +138,22 @@
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/LaunchActivityConstantsList.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">LaunchActivityConstantsList</span></a></li>
<li type="circle">PreferenceFragment
<ul>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcAdvancedRCSettingsActivity.SettingsFragment</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcRobotControllerSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcRobotControllerSettingsActivity.SettingsFragment</span></a></li>
</ul>
</li>
<li type="circle">PreferenceFragment
<ul>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcRobotControllerSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcRobotControllerSettingsActivity.SettingsFragment</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcAboutActivity.AboutFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcAboutActivity.AboutFragment</span></a></li>
+</ul>
+</li>
+<li type="circle">PreferenceFragment
+<ul>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/FtcAdvancedRCSettingsActivity.SettingsFragment.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">FtcAdvancedRCSettingsActivity.SettingsFragment</span></a></li>
+</ul>
+</li>
+<li type="circle">RefCounted
+<ul>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.SoundInfo</span></a></li>
</ul>
</li>
<li type="circle">RobotCoreCommandList
@@ -167,45 +167,48 @@
</ul>
</li>
<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer</span></a></li>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.SoundInfo.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.SoundInfo</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.CurrentlyPlaying.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.CurrentlyPlaying</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.InstanceHolder.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.InstanceHolder</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.LoadedSoundCache.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.LoadedSoundCache</span></a></li>
+<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/SoundPlayer.PlaySoundParams.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">SoundPlayer.PlaySoundParams</span></a></li>
<li type="circle">ThemedActivity
<ul>
-<li type="circle">com.qualcomm.ftccommon.<a href="../../../com/qualcomm/ftccommon/ConfigWifiDirectActivity.html" title="class in com.qualcomm.ftccommon"><span class="typeNameLink">ConfigWifiDirectActivity</span></a></li>
+&l