/** \page dev Tethys/LRAUV Development Plan
 *
 * \section dev_philosophies Guiding philosophies
 * - Demonstrate advanced & innovative capabilities continuously and incrementally.
 * - Drop capabilities and re-architect if demonstration reveals fundamental flaws.
 * - Identify critical elements and test them thoroughly
 * - Define full interfaces backed by reduced, but functional implementations
 * - Unimplemented components must not lead to failure of code.
 *
 * \section dev_capabilities Capabilities
 *
 * The Tethys/LRAUV software development plan is divided in the following sections:
 * \li \subpage dev_modular
 * \li \subpage dev_sim
 * \li \subpage dev_control
 * \li \subpage dev_dependency
 * \li \subpage dev_universal
 * \li \subpage dev_mission
 * \li \subpage dev_hardware
 * \li \subpage dev_comms
 * \li \subpage dev_failure
 * \li \subpage dev_script
 * \li \subpage dev_shore
 * \li \subpage dev_hardening
 *
 * \section dev_progressSymbols Progress Symbols
 * 	 \planning In planning phase, not started, or not working at all \n
 * 	 \broken Broken, not working, or working with major bugs \n
 * 	 \partial Partially working \n
 * 	 \mostly Mostly working \n
 * 	 \working Working well (inc'l test, if applicable) \n
 *
 * \section dev_urgencySymbols Urgency Symbols (for incomplete items)
 * 	!! Required to operate vehicle in water first time (with developer & day estimate) \n
 * 	--HS Required in 2009 for high speed ( followed by developer & day estimate)\n
 *  --LS Required in 2009 for low speed ( followed by developer & day estimate)\n
 *  --MM Required in 2009 for multimode (followed by developer & day estimate)\n
 *  --SO Required in 2009 for science operations (followed by developer & day estimate)\n
 * 	__ Not a requirement, but may be very useful\n
 * 	(developers include MG, BK, and RM)\n
 *
 */

/**
 * \page dev_modular Modular Architecture
 *
 * - Component definition (Plug1)
 *   - \working A definition of the Component c++ class
 *   - Example C++ Component class implementations
 *     - \working Example C++ (simulated) sensor
 *     - \working Example C++ derivation
 *     - \working Example C++ behavior
 *     - \working Example C++ control component
 *     - \working Example (simulated) controller component
 *   - \broken --SO (MG, 1) API for scripted components (API currently broken)
 *   - Example Lua component implementations
 *     - \broken --SO (MG, 1) Example Lua derivation component (API currently broken)
 *     - \planning --SO (MG, 1) Example Lua behavior component
 * - Module definiton (Plug2)
 *   - \working A definition of the Module c++ class
 *   - \working Example C++ Module
 *   - \broken --SO (MG, 1) API for scripted modules
 *   - \broken --SO (MG, 1) Example lua Module
 * - A “slate” that can contain component inputs and outputs
 *   - \working A buffer to capture updates to the slate for logging
 *   - \working All values have intrinsic units.
 */

/**
 * \page dev_sim Simulation
 * - Dynamic Simulation
 *   - \working Initially, with Dorado parameters
 *   - \planning !! (RM, 2) With parameters minimally tuned for Tethys
 *   - \working Including moving mass
 *   - \planning --HS (RM, 2) With parameters fine-tuned for Tethys
 *   - \planning --HS (RM, 2) Including buoyancy change at depth
 *   - \planning --HS (RM, 1) Including adjustable buoyancy
 *   - \working Simulation running on external machine
 * - Simulation of environmental parameters
 *   - \mostly !! (MG, 1) Non time-variant (Needs testing)
 *   - \planning --SO (MG, 2) Time-varying
 * - \planning --HS (RM, 10) Fast kinematic simulation capable of displaying likely vehicle path
 * - \planning --LS (MG, 3) Simulator error-injection
 * - \planning __ Simulator capable of displaying probabilistic event-driven paths
 * - \planning __ Multi-Vehicle simulation
 */

/**
 * \page dev_control Vehicle control
 * - Navigation Component
 *   - \partial !! (MG, 1) simplistic (underestimates speed)
 *   - \planning !! (MG, 2) using internal dynamic simulation
 *   - \planning !! (RM, 2) including DVL information
 *   - \planning !! (RM, 2) including ADCP information
 * - Dynamic Control Component
 *   - \working simplistic
 *   - \working Using Dorado Control Constants
 *   - \planning !! (RM, 2) Approximate Tethys Dynamic Control Constants
 *   - \planning --HS (RM, 5) Tuned Tethys Dynamic Control Constants
 *   - \planning --HS (RM, 3) Cross-track control
 *   - \planning !! (RM, 20) Develop control algorithms that can control buoyancy and movable mass.
 *   - \planning !! (RM, 10) Code Dynamic control that can control movable mass.
 *   - \planning --LS (RM, 10) Code Dynamic control that can control buoyancy.
 *   - \planning --LS (RM, 5) Dynamic Control optimizations to reduce energy usage
 */

/**
 * \page dev_dependency Dependency-based execution within a computation cycle
 * - A supervisor capable of loading the components and mission, managing the control thread, and creating the sequence of operations to occur within the control thread (this sequence creation could occur within the control thread, to lessen synchronization issues)
 *   - \partial --LS (MG, 5) Component execution sequencing
 *   - \mostly !! (MG, 5) Mission loading (Works, but needs lots of testing)
 *   - \partial --LS (MG, 2) Mission unloading
 *   - \broken !! (MG, 1) Signal-based error trapping and failure flagging (Broken in Thread )
 * - A "syslog" logging facility for capturing the execution sequence
 *   - \planning Basic Syslog
 *   - \partial --MM (MG, 3) Compressed Syslog
 * - A data logging facility for capturing sensor data and resultant control commands
 *   - \working Basic Logging
 *   - \working Minimally Compressed Logging
 *   - \planning --MM (MG, 5) Very compressed logging
 */

/**
 * \page dev_universal Ability to fall-back on abstract alternative to a faulty function input
 * - API for declaring function inputs and outputs as “universal” values that can be replaced by other values
 *   - \working Ability to mark values as faulty/disabled or recovered
 *   - \working Ability to mark entire components as faulty/disabled or recovered
 *   - \mostly !! (MG, 2) Ability to define an accuracy for values, in engineering units (units need testing)
 * - Components capable of finding a sensor reading to be "faulty" -- probably should demonstrate this three ways:
 *   - \working An example sensor component that determines its sensor is bad, for a very obvious reason
 *   - \planning --HS (BK, 2) An example sensor component that determines its sensor is bad, for a non-obvious reason
 *   - \planning --MM (BK, 30) CBIT (Built In Test) that determines sensors are bad, via heuristics, comparison with other readings, or other means.
 * - Components capable of providing an alternate sensor reading.
 *   - \planning An example derivation component that estimates a the value based on other readings
 * - \working Algorithm within the state table to provide the "best" value when an abstract value is requested.
 * - \working Logging capability to indicate which is  “best” value.
 */

/**
 * \page dev_mission Missions including sub-sequences, triggers, and re-entrant states
 * - \working Simple linear mission syntax & API
 *   - \working BEHAVIORS
 *   - \working COMMANDS
 *   - \planning --SO (MG, 3) Further simplifications and refinements
 *   - \planning --LS (MG, 2) Avoiding items that contain unachievable mission states
 * - \partial !! (MG, 5) Generate suite of basic behaviors for use in missions (need more behaviors!)
 * - \working Sub-stack mission syntax & API
 * - Boolean clause evaluation for WHEN and UNTIL clauses
 *   - \broken !! (MG, 1) Component outputs (true = non-zero not yet intrinsic)
 *   - \mostly !! (MG, 0.5) Boolean (AND/OR) computations (needs testing)
 *   - \mostly !! (MG, 0.5) Comparison (LT/GT/EQ/etc) computations (needs testing)
 *   - \planning --SO (MG, 2) Mission-defined functions
 * - \mostly !! (MG, 1) UNTIL clause syntax and API (needs testing)
 * - \broken !! (MG, 1) REPEAT clause syntax and API (non-zero not recognized as "true")
 * - \working reactive “WHEN” syntax
 *   - \mostly !! (MG, 0.5) non-PREEMPTIVE non-re-entrant (needs testing)
 *   - \mostly !! (MG, 0.5) PREEMPTIVE non-re-entrant (needs testing)
 *   - \planning --LS (MG, 2) re-entrant (resumes mission state)
 */

/**
 * \page dev_hardware Hardware control
 * - Navigation Sensor components
 *   - \mostly !! (BK, 5) AHRS (Needs testing)
 *   - \mostly !! (BK, 3) GPS (Needs testing)
 *   - \mostly !! (BK, 5) Iridium send (Needs development & testing)
 *   - \mostly !! (BK, 5) Iridium receive (Needs development & testing)
 *   - \planning !! (BK, 3) Depth
 *   - \planning !! (BK, 3) DVL
 *   - \planning !! (BK, 2) ADCP
 * - Science Sensor components
 *   - \planning !! (BK, 2) Conductivity/Temperature
 *   - \planning !! (BK, 2) Oxygen
 *   - \planning !! (BK, 2) Fluorescence & Backscatter
 *   - \planning __/--SO (BK, 15) BIOSA, Nitrate, Sampler
 * - Servo components
 *   - \mostly !! (BK, 2) Elevator (Needs testing)
 *   - \mostly !! (BK, 2) Rudder (Needs testing)
 *   - \mostly !! (BK, 5) Thruster (Needs testing)
 *   - \mostly !! (BK, 5) Movable Mass (Needs testing)
 *   - \planning --LS (BK, 5) Buoyancy (First implementation)
 * - Servo components with Rev 2 motor controller
 *   - \planning --HS (BK, 5) Thruster
 *   - \planning --HS (BK, 5) Movable Mass
 *   - \planning --HS (BK, 5) Elevator
 *   - \planning --HS (BK, 5) Rudder
 *   - \planning --SO (BK, 5) Buoyancy
 * - \planning !! (BK, 5) Startup built in test (SBIT)
 * - \planning !! (BK, 2) Shut down built in test (SDBIT)
 */

/**
 * \page dev_comms Data transmission and command/control via limited/intermittent/noisy communications channels.
 * - Core/API for communications
 *   - \partial !! (BK, 2) Data reporting from vehicle (needs development & testing)
 *   - \planning !! (BK, 2) Simple commands to vehicle
 *   - \planning --MM (MG, 10) Efficient communications protocols
 *   - \planning --MM (MG, 5) Decimation API (Log5)
 *   - \planning --MM (MG, 5) Decimation recipes (Log6)
 * - Shore-side sattelite data communications
 *   - \planning --HS (MG, 10) Server software for receiving & processing Iridium SBD e-mails
 *   - \planning --HS (MG, 5) Server software for sending Iridium SBD e-mails
 * - Ship-based high-bandwidth commutications
 *   - \planning --SO (BK, 10) Remote control mode
 */

/**
 * \page dev_failure Actuator failure recovery
 * - \planning --MM (RM, 30) CBIT (Built In Test) that determines that vehicle control or performance is bad, via heuristics, simulation, or other means.
 * - Accommodate a failed actuator
 *   - \working Servo that can detect a failed actuator
 *   - \planning --SO (RM, 5) Capability to use other actuators to compensate for missing actuation
 */

/**
 * \page dev_script Assisted script generation
 * - Mission editor
 *   - \planning --MM (MG, 3) Syntax highlighting and syntax checking
 *   - \planning --MM (MG, 2) Mission previewing
 * - \planning --SO (MG, 3) Enumerate the kinds of mission elements that are likely to be executed by scientists, and the parameters that can be used to configure those elements
 * - \planning --SO (MG, 15) Provide GUI for selecting and chaining mission elements together and setting parameters (a la LabView).
 */

/**
 * \page dev_shore Ship/Shore Side Tools
 * - Topside/vehicle mission update/synchronization
 *   - \planning --LS (BK, 3) Send diffs only
 *   - \planning --LS (BK, 0.5) Only exec on complete transmission & QC of sent script
 * - Visualizing mission trajectories
 *   - \working Post-cruise Google GMX/KML visualization
 *   - \planning --HS (BK, 3) During-cruise visualization
 * - \planning __  Visualizing probabilistic event-driven behaviors.
 * - \planning --HS (MG, 3) Log Handling
 * - \planning --SO (RM, 20) Data Analysis and Post-Processing
 */

/**
 * \page dev_hardening Hardening
 * - Software-Only Verification & Validation
 *   - \planning !! (MG, 8) CxxChecker style validation & refactoring
 *   - \planning !! (MG, 10) Retroactive code documentation
 *   - Automated check-out and build
 *     - \working Host software
 *     - \working Target software
 *   - Automated unit testing (via VectorCast)
 *     - \planning !! (MG, 2) Basic core software test
 *     - \planning !! (BK, 2) Basic core sensors and controllers test
 *     - \planning --HS (MG, 10) Core software test
 *     - \planning --HS (BK, 10) Kernel device drivers test
 *     - \planning --LS (MG, 10) Core behaviors and commands test
 *     - \planning --LS (RM, 10) Navigation, Dynamic Control, & Sim components test
 *     - \planning --LS (BK, 10) Core sensors and controllers test
 *   - \working Automated static testing (via Coverity)
 *   - \planning !! (MG, 1) Automated dynamic regression test (via Valgrind)
 *   - \planning !! (BK, 3) Source-level debugging on target
 * - Benchtop test
 *   - \planning !! (MG, 1) Automated regression test
 *   - \planning !! (BK, 2) Automated regression test
 *   - \planning --HS (MG, 10) Automated failure-recovery regression tests
 *   - \planning --LS (BK, 10) Automated failure-recovery regression tests
 * - Initial Test tank test
 *   - \planning !! (MG, 10) Core components
 *   - \planning !! (BK, 10) Core hardware interfaces
 *   - \planning !! (RM, 10) Core navigation and dynamic control
 * - Initial Ocean test
 *   - \planning !! (MG, 10) Core components
 *   - \planning !! (BK, 10) Core hardware interfaces
 *   - \planning !! (RM, 10) Core navigation and dynamic control
 */
