#if 0
# Copyright (C) 1994-1998, Massachusetts Institute of Technology.
# Modifications Copyright (C) 1999-2006 Webb Research Corporation
# Proprietary to Sea Grant AUV Laboratory. All rights reserved.
# -- deleted a bunch of history -- 12-May-99 tc@DinkumSoftware.com
# -- deleted a bunch of history -- 27-Apr-99 thru 17-jul-99
# -- deleted a bunch of history -- 26-jul-99 thru 27-mar-00
# -- deleted a bunch of history -- 05-Apr-00 thru 07-may-00
# -- deleted a bunch of history -- 08-may-00 thru 31-jul-00
# -- deleted a bunch of history -- 01-Aug-00 thru 04-Oct-00
# -- deleted a bunch of history -- 19-Oct-00 thru 29-Oct-01
# -- deleted a bunch of history -- 09-Nov-01 thru 02-Jan-02
# -- deleted a bunch of history -- 02-Jan-02 thru 29-jul-02
# -- deleted a bunch of history -- 02-Aug-02 thru 20-Dec-02
# -- deleted a bunch of history -- 18-jan-03 thru 21-Dec-03
# -- deleted a bunch of history -- 31-jan-04 thru 08-Dec-04
# 05-Jan-05 fnj@DinkumSoftware.com SN#3193 Changed reqd_spare_heap from 150000 to 75000.
# We were getting heap aborts at start of
# mission or during the mission.
# 10-Jan-05 pfurey@DinkumSoftware.com SN#3194 Added c_oil_volume_time(sec),
# c_oil_volume_recall(msec),
# c_oil_volume_measuring_delay(sec),
# c_oil_volume(cc),
# m_oil_volume(cc),
# dc_c_de_updown(enum),
# f_oil_volume_safety_max(cc),
# f_oil_volume_deadz_width(cc),
# f_oil_volume_cal_m(cc/volt),
# f_oil_volume_cal_b(cc),
# f_oil_volume_db_frac_dz(nodim),
# f_neutral_oil_volume(cc),
# f_oil_pot_voltage_min(volts),
# f_oil_pot_voltage_max(volts),
# f_oil_volume_in_system(cc),
# x_oil_volume_max(cc),
# x_oil_volume_deadband(cc),
# m_oil_pot_voltage(volts),
# cc_de_eng_mode(enum),
# cc_final_de_eng_mode(enum),
# dc_c_oil_volume(cc),
# c_de_updown(enum),
# m_de_updown(enum),
# c_de_pump(enum),
# m_de_pump(enum),
# m_secs_since_de_substate_change(secs),
# c_alt_recall(msec),
# c_att_recall(msec),
# u_battery_recall(msec),
# c_profile_recall(msec),
# c_pressure_recall(msec),
# c_leakdetect_recall(msec),
# c_eng_pressure_recall(msec),
# u_vacuum_recall(msec),
# c_de_recall(msec),
# m_de_recall(msec),
# c_oil_volume_deadband(cc),
# m_is_de_engine_moving(bool),
# m_depth_rejected(bool),
# Added new comments for c_air_pump.
# Added oil_volume_sample_time(sec) argument
# to abend behavior. Added nop_de_eng(bool)
# to nop_cmds behavior.
# 01-Feb-05 pfurey@DinkumSoftware.com SN#3195 Added u_depth_rate_filter_factor
# 07-Feb-05 tc@DinkumSoftware.com SN#3196 Fixed typo in behavior sample
# 18-Feb-05 tc@DinkumSoftware.com SN#3197 behavior surface, new b_arg: end_action:
# 5-wait for ^C quit on timeout
# 28-Feb-05 pfurey@DinkumSoftware.com SN#3198 Added c_viper_on(sec),
# c_viper_turn_on_timeout(sec),
# c_viper_collect_timeout(sec),
# c_viper_reset_timeout(sec),
# c_viper_start_sampling_timeout(sec),
# c_viper_detection_done_timeout(sec),
# c_viper_turn_off_timeout(sec),
# c_viper_gain(nodim),
# c_viper_max_sample_starts(nodim),
# c_viper_max_errors(nodim),
# sci_viper_power_on(bool),
# sci_viper_error(nodim),
# sci_viper_target(enum),
# sci_viper_collect_time(sec),
# sci_viper_is_installed(bool),
# sci_viper_finished(bool), and
# sci_viper_collecting(bool).
# Added bviper behavior and args.
# Support for start_when arg
# BAW_WHEN_UTC_TIME.
# Added comatose arg
# start_sci_viper_collecting
# 15-Mar-05 pfurey@DinkumSoftware.com SN#3199 Added c_whfctd_on(sec),
# c_whfctd_num_fields_to_send(nodim),
# sci_whfctd_is_installed(bool),
# sci_whfctd_ref_hi(nodim),
# sci_whfctd_ref_mid(nodim),
# sci_whfctd_ref_lo(nodim),
# sci_whfctd_raw_temp(nodim),
# sci_whfctd_raw_con1(nodim),
# sci_whfctd_raw_con2(nodim),
# sci_whfctd_raw_pres(nodim), and
# sci_whfctd_elap_time(nodim).
# Added f_thermal_valve_rate(msec).
# 19-Mar-05 tc@DinkumSoftware.com Merged 3 at sea changes into cvs: SN#3205
# 07-Mar-05 tc@DinkumSoftware.com SN#3199 at sea on the CFAV quest..
# behavior:bviper, new b_args:
# min_sample_depth(m), max_sample_depth(m)
# 08-Mar-05 tc@DinkumSoftware.com SN#3200 at sea on the CFAV quest.. new sensors:
# m_at_risk_depth(m)
# u_thermal_valve_time_in_down_pos(s)
# 09-Mar-05 tc@DinkumSoftware.com SN#3201 at sea, change default for
# behavior abend: b-arg: eng_pressure_mul
# 0.90 to 1.10
# 24-Mar-05 pfurey@DinkumSoftware.com SN#3202 Made c_whfctd_on a sample b_arg
# 11-Apr-05 pfurey@DinkumSoftware.com SN#3203 Added x_argos_type(enum) and
# f_argos_format(enum).
# 13-Apr-05 fnj@DinkumSoftware.com Fixed spelling of buoyancy in comments.
# Did not change SN.
# 30-Mar-05 tc@DinkumSoftware.com SN#3220 thermal simulator
# Changed computed simulated sensor names for consistency
# sx_water_depth ==> xs_water_depth
# 31-Mar-05 tc@DinkumSoftware.com SN#3222 s_vehicle_temp ==> sx_vehicle_temp
# Added s_vehicle_temp_tc, xs_wax_temp
# s_wax_freeze_temp
# 08-Apr-05 tc@DinkumSoftware.com SN#3223 Added U_PRINT_ENGINE_STATUS
# 09-Apr-05 tc@DinkumSoftware.com SN#3224 F_THERMAL_VALVE_RATE(msec) ==>
# F_THERMAL_VALVE_TIME_OVER_SLOT(msec)
# 18-Apr-05 tc@DinkumSoftware.com SN#3225 massive sensor renaming
# 18-Apr-05 tc@DinkumSoftware.com SN#3226 f_thremal_pres_full_scale ==> f_thermal_pres_full_scale(bar)
# 18-Apr-05 tc@DinkumSoftware.com SN#3227 Missed 5 sensors in conversion
# 19-Apr-05 tc@DinkumSoftware.com SN#3228 screwed up another one in conversion
# f_thermal_acc_pres_full_min/max ==> f_thermal_acc_pres_min/max
# 19-Apr-05 tc@DinkumSoftware.com SN#3240 massive merge of tc-development-11 to head
# 23-Apr-05 tc@DinkumSoftware.com SN#3250 at sea on Walton-Smith
# u_abort_c_battpos(in) -100. max aft,
# rocket to surface, it will clip
# u_pinger_max_depth(m) 1000
# 23-Apr-05 tc@DinkumSoftware.com SN#3251 at sea on Walton-Smith
# U_ABORT_MAX_BURN_TIME 3600 ==> 14400 (4hr)
# 24-Apr-05 tc@DinkumSoftware.com SN#3252 at sea on Walton-Smith
# added u_use_ctd_depth_for_flying
# 11-May-05 tc@DinkumSoftware.com SN#3253 all sx_NNN ==> xs_NNN
# I'll get it right one of these days
# 12-May-05 pfurey@DinkumSoftware.com SN#3254 added X_ARE_RUNNING_ONETIME_SEQUENCE
# and mission_ender behavior
# 13-May-05 tc@DinkumSoftware.com SN#3255 added u_stale_gps_msg_period
# Deleted a whole bunch of history (all of 2004)
# 16-May-05 tc@DinkumSoftware.com SN#3256 Added x_pressure_manual_cal_now(bool)
# note: some serial numbers duplicated in following list as code changes
# were made on development branches. branches merged at SN#3270
# 31-May-05 pfurey@DinkumSoftware.com SN#3257 Added u_ping_n_enabled
# 02-Jun-05 pfurey@DinkumSoftware.com SN#3258 Added: sci_sam_c_mix(nodim),
# sci_sam_vis(nodim),
# sci_sam_filter_age(sec),
# u_sam_exp1coeff(nodim),
# u_sam_exp2coeff(nodim),
# u_sam_eff_pathlength(nodim),
# u_sam_a(nodim),
# u_sam_transition_val(nodim),
# and u_sam_offset(nodim).
# Removed: sci_sam_c_eng_units(nodim),
# sci_sam_c_eng_units_delay(sec),
# u_sam_s_factor(nodim),
# and u_sam_s_offset(nodim).
# 7-Jun-05 tc@DinkumSoftware.com Changes from jhillier@mote.org
# Changed Motebb variables:
# clock rolls backward
# 26-May-05 tc@DinkumSoftware.com SN#3257 added sensor: s_corrupted_pressure_spike(bool)
# 28-May-05 tc@DinkumSoftware.com SN#3258 changed units and meaning of u_pressure_autocal_performed
# Switched xs_pressure_drift from bar to volts to
# accurately simulate
# 29-May-05 tc@DinkumSoftware.com SN#3259 Added s_ocean_pressure_min(volts)
# 09-Jun-05 tc@DinkumSoftware.com SN#3260 u_depth_rate_filter_factor 3==>4
# 10-Jun-05 tc@DinkumSoftware.com SN#3261 Added x_SURFACE_EST_xxx sensors (a bunch)
# 10-Jun-05 tc@DinkumSoftware.com SN#3263 Added u_depth_rate_filter_sub_sur_dep(m)
# changed meaning of M_DEPTH_REJECTED
# Added X_MEASURED_DEPTH and M_CERTAINLY_AT_SURFACE
# 11-Jun-05 tc@DinkumSoftware.com SN#3265 u_sci_cmd_max_ack_wait_time(s) 15 => 60
# added m_device_drivers_called_abnormally
# x_sent_data_files x_num_bang_cmds_done
# 14-Jun-05 tc@DinkumSoftware.com SN#3267 added u_allowable_cycle_overrun(msec)
# added behavior abend:
# b_arg: max_allowable_busy_cpu_cycles(cycles)
# 15-Jun-05 tc@DinkumSoftware.com SN#3270 merged tc-development-12, end of duplicate SN#s
# 15-Jun-05 tc@DinkumSoftware.com SN#3271 u_allowable_cycle_overrun(msec) 750 ==> 1000
# b_arg: max_allowable_busy_cpu_cycles(cycles) 5==>10
# 17-Jun-05 pfurey@DinkumSoftware.com SN#3272 Added u_max_secs_in_de_substate
# 01-Jul-05 tc@DinkumSoftware.com documentation change only: x_lmc_xy_source
# 02-Aug-05 pfurey@DinkumSoftware.com SN#3273 Added surface behavior argument:
# sensor_input_wait_time.
# 04-Aug-05 pfurey@DinkumSoftware.com SN#3274 Changed the default value of
# surface: b_arg report_all(bool)
# from 1 (all sensors) to 0 (just gps).
# 11-Aug-05 pfurey@DinkumSoftware.com SN#3275 Changed the default values of
# dive_to b_arg:
# stop_when_hover_for(sec) 30->180
# stop_when_stalled_for(sec) 60->240
# climb_to b_arg:
# stop_when_stalled_for(sec) 60->240
# yo b_arg:
# c/d_stop_when_hover_for(sec) 30->180
# c/d_stop_when_stalled_for(sec) 60->240
# 17-Aug-05 pfurey@DinkumSoftware.com SN# 3276 Changed the default u_cycle_time
# from 2 to 4 seconds.
# 12-Sep-05 pfurey@DinkumSoftware.com SN# 3277 Added sensors for fl3slo and
# bb3slo proglets.
# 03-Oct-05 pfurey@DinkumSoftware.com SN# 3278 Added u_XXX_is_calibrated(bool)
# sensors for the following
# proglets: bb2c, bb2lss, bb3slo,
# fl3slo, and sam.
# 21-Oct-05 pfurey@DinkumSoftware.com SN# 3279 Added sensors for deep-electric
# rework:
# f_de_max_secs_for_updown_to_finish(secs),
# x_de_target_oil_vol(cc),
# f_de_target_oil_drift_m(cc/bar),
# f_de_target_oil_drift_b(cc), and
# u_thermal_valve_check_time(sec).
# Renamed c_de_oil_vol_deadband(cc),
# to c_neutral_oil_vol_deadband(cc).
# Changed default values of
# f_de_oil_vol_deadz_width(cc)
# from 60.0 to 30.0 and
# f_de_oil_vol_db_frac_dz(cc)
# from 0.25 to 0.5.
# 24-Oct-05 pfurey@DinkumSoftware.com SN# 3280 Changed sign of
# f_de_target_oil_drift_m(cc/bar)
# and f_de_target_oil_drift_b(cc).
# 28-Oct-05 pfurey@DinkumSoftware.com SN# 3281 Added X_DE_OIL_FLUX(cc/sec)
# 03-Nov-05 pfurey@DinkumSoftware.com SN# 3282 Changed default value of
# X_DE_OIL_VOL_MAX from 240
# to 270 cc. Added
# s_de_oil_pot_volt_flux(volts/sec).
# 16-Nov-05 pfurey@DinkumSoftware.com SN# 3283 Removed f_de_oil_vol_cal_m/b.
# Changed default value of
# c_de_oil_vol from 240 to 270.
# Changed default value of
# f_de_oil_vol_in_system(cc)
# from 700 to 714. And made
# f_de_oil_vol_pot_volatage_max/min
# illegal values to force them
# to be put in autoexec.mi
# 16-Dec-05 pfurey@DinkumSoftware.com SN# 3284 Added sensors for bam proglet.
#
# 7-Dec-05 tc@DinkumSoftware.com SN#3284 typo in comment:
# M_SCIENCE_PRESENT_TIME ==> sci_m_present_time
# cleaned up doc on M_SCIENCE_SENT_SOME_DATA
# 20-Dec-05 pfurey@DinkumSoftware.com SN# 3285 Added c_bam_target_id(enum) and
# removed sci_bam_error(nodim).
# 05-Jan-06 pfurey@DinkumSoftware.com SN# 3286 Added calibration constants and
# and engineering units to bbfl2s.
# 10-Feb-06 pfurey@DinkumSoftware.com SN# 3287 Added sensors for radiometer
# proglets ocr504R and ocr504I.
# Reduced reqd_spare_heap(bytes)
# from 75K to 65K.
# 14-Feb-06 pfurey@DinkumSoftware.com SN# 3288 Updated some doco regarding
# de_pump.c to reflect hardware
# changes
# 20-Feb-06 pfurey@DinkumSoftware.com SN# 3289 Changed the value of
# f_de_oil_vol_in_system(cc) from
# 714 to 650 in accordance with
# hardware changes. Updated doco
# for de_pump.
# 13-Mar-06 pfurey@DinkumSoftware.com SN# 3290 Added doco for attitude_tcm3
# 17-Mar-06 tc@DinkumSoftware.com SN# 3291 Added C_IRIDIUM_POWER_ON_DELAY(sec)
# 05-Apr-06 fnj@DinkumSoftware.com SN# 3292 Changed reqd_spare_heap from 65000 to 45000.
# 08-Apr-06 pfurey@DinkumSoftware.com SN# 3293 Added sensors for tcm3.c
# 10-Apr-06 fnj@DinkumSoftware.com Doco change only - add comment to reqd_spare_heap
# saying to track that number in lastgasp.mi.
# 20-Apr-06 tc@DinkumSoftware.com SN# 3294 Added SCI_M_FREE_HEAP(bytes)
# 24-Apr-06 pfurey@DinkumSoftware.com SN# 3295 Added sensors for badd proglet.
# 25-Apr-06 fnj@DinkumSoftware.com SN# 3296 Fixed error proglet whfctd sensor c_whfctd
# was uninitialized.
# 2-May-06 tc@DinkumSoftware.com SN#3297 c_whfctd_on(sec) default 0==> 10
# 03-May-06 pfurey@DinkumSoftware.com SN# 3298 Add badd_b behavior
# 08-May-06 pfurey@DinkumSoftware.com SN# 3299 Removed c_badd_on from sensors_in
# and changed some default input
# vals for badd proglet.
# 25-May-06 tc@DinkumSoftware.com SN#3300 Lower heap threshold again to 30K
# 26-May-06 pfurey@DinkumSoftware.com SN#3301 Added timer sensors for attitude_tcm3
# 10-Jun-06 tc@DinkumSoftware.com SN#3303 Added C_IRIDIUM_ATOK_TIMEOUT(secs)
# C_IRIDIUM_NO_CHAR_TIMEOUT(min)
# 06-Jul-06 moose@DinkumSoftware.com SN#3304 Removed b_arg control_c(bool) from abend behavior.
# 10-Jul-06 pfurey@DinkumSoftware.com SN#3305 Changed default value of
# max_allowable_busy_cpu_cycles(cycles) from 10 to -1.
# 18-Jul-06 moose@DinkumSoftware.com SN#3306 Added sensors M_1MEG_PERSISTOR and U_HEAP_REQUIRED_FOR_1MEG_PERSISTOR.
# 31-Jul-06 moose@DinkumSoftware.com SN#3307 Added sensor S_CORRUPTED_OIL_VOLUME.
# 11-Aug-06 pfurey@DinkumSoftware.com SN#3308 Added sensors for flntu proglet.
# 14-Aug-06 pfurey@DinkumSoftware.com SN#3309 Added sensors for fl3sloV2 and bb3sloV2 proglets.
# 23-Aug-06 pfurey@DinkumSoftware.com SN#3310 Added sensors for ocr507I and ocr507R proglets.
# 28-Aug-06 moose@DinkumSoftware.com SN#3311 Added sensor M_WHY_STARTED.
# 08-Sep-06 moose@DinkumSoftware.com SN#3312 Changes from jhillier@mote.org.
# 21-Sep-06 moose@DinkumSoftware.com SN#3313 Added behavior pinger_on.
# Changed sensors C_pinger_on, u_ping_n_enabled,
# u_pinger_rep_rate, and u_pinger_max_depth to 0.
# 25-Sep-06 pfurey@DinkumSoftware.com SN#3314 Added
# x_avg_msecs_of_post_ds_processing_reqd and
# u_avg_msecs_of_post_ds_processing_alpha
# 06-Oct-06 pfurey@DinkumSoftware.com SN#3315 Changed c_flntu_num_fields_to_send(nodim)
# from 10 to 7.
# 12-Oct-06 pfurey@DinkumSoftware.com SN#3316 Added sensors for bb3sloV3.
# 13-Oct-06 pfurey@DinkumSoftware.com SN#3317 Added sensors for wetlabs_sim
# 20-Oct-06 pfurey@DinkumSoftware.com SN#3318 Added sensors for bb2fls and bb2flsV2
# 24-Oct-06 moose@DinkumSoftware.com SN#3319 Added sensors c_heap_measurement_period(mins),
# m_min_spare_heap(bytes), and m_min_free_heap(bytes).
# Lowered heap requirement from 30000 to 20000.
# 27-Oct-06 pfurey@DinkumSoftware.com SN#3320 Lowered reqd_spare_heap(bytes) from
# 20000 to 15000.
# 30-Oct-06 pfurey@DinkumSoftware.com SN#3321 Increased abend b_arg:
# vacuum_max(inHg) from 10 to 11.0.
# 06-Nov-06 pfurey@DinkumSoftware.com SN#3322 Raised reqd_spare_heap(bytes) from
# 15000 to 50000.
# 14-Nov-06 moose@DinkumSoftware.com SN#3323 Added proglet oxy3835_wphase.
# 06-Nov-06 fnj@DinkumSoftware.com SN#3310 (on branch) Added a bunch of digifin debugging sensors.
# 06-Dec-03 fnj@DinkumSoftware.com SN#3311 (on branch) m_fin_status -> m_digifin_status;
# added m_digifin_motorstep_counter.
# 11-Dec-06 fnj@DinkumSoftware.com SN#3312 (on branch) Added m_digifin_motorstep_counter_delta.
# 12-Dec-06 fnj@DinkumSoftware.com SN#3324 Renamed a bunch of digifin-only sensors from *_fin_* to *_digifin_*.
# 13-Dec-06 pfurey@DinkumSoftware.com SN#3325 Added sci_ctd41cp_timestamp and
# c_ctd41cp_num_fields_to_send
# 20-Dec-06 fnj@DinkumSoftware.com SN#3326 Added f_digifin_busy_timeout.
# 05-Jan-07 pfurey@DinkumSoftware.com SN#3327 Added sensors for auvb proglet.
# 08-Jan-07 pfurey@DinkumSoftware.com SN#3328 Replaced f_de_target_oil_drift_m
# and f_de_target_oil_drift_b with
# f_de_ascent_oil_vol_drift and
# f_de_descent_oil_vol_drift.
# Changed c_de_recall(msec) and
# c_de_oil_vol_recall(msec)
# from 1000 to 500.
# 15-Jan-07 pfurey@DinkumSoftware.com SN#3329 Updated the current mean measured
# value for f_thermal_valve_time_over_slot(msec)
# from 550ms to 150ms.
# 19-Jan-07 fnj@DinkumSoftware.com SN#3330 Added c_digifin_cmd, c_digifin_data, and m_digifin_cmd_done
# to support issuing commands other than set position to digifin.
# 24-Jan-07 fnj@DinkumSoftware.com SN#3331 Replaced c_digifin_cmd, c_digifin_data, and m_digifin_cmd_done
# with c_digifin_write_reg, c_digifin_read_reg,
# c_digifin_cmd_data, m_digifin_resp_data, and m_digifin_cmd_done
# in order to better support issuing commands to digifin.
# 27-Jan-07 moose@DinkumSoftware.com SN#3332 Added timestamp to proglets oxy3835_wphase, oxy3835, bb2f, bb2c, and bb2lss.
# (b9, b10, b11, b12, and b13). Added m_digifin_cmd_error, f_digifin_startup_wait.
# 30-Jan-07 moose@DinkumSoftware.com SN#3333 Bumped num_fields_to_send on SN#3332 proglets down by one.
# To send timestamp, bump num_fields_to_send up by one in autoexec.mi.
# 30-Jan-07 fnj@DinkumSoftware.com SN#3334 Added u_digifin_response_timeout; added new bit definitions to u_digifin_debug.
# 05-Feb-07 moose@DinkumSoftware.com SN#3335 Added timestamp to bbfl2s, bb2fls, bb2flsV2, bb3slo, bb3sloV2,
# fl3slo, fl3sloV2, and flntu proglets.
# 07-Feb-07 moose@DinkumSoftware.com SN#3336 Added timestamp to bb3sloV3 proglet.
# 07-Feb-07 pfurey@DinkumSoftware.com SN#3337 Added u_secs_for_oil_vol_stabilization.
# 07-Feb-07 moose@DinkumSoftware.com SN#3338 Added timestamp to whpar and whgpbm proglets.
# 08-Feb-07 moose@DinkumSoftware.com SN#3339 Added timestamp to auvb proglet.
# 12-Feb-07 pfurey@DinkumSoftware.com SN#3340 Removed legacy sensors used by
# legacy science driver.
# 20-Feb-07 fnj@DinkumSoftware.com SN#3341 Added u_digifin_status_mask, u_digifin_status_force,
# m_digifin_rawposition, m_digifin_boot_counter, m_digifin_uptime_secs,
# m_digifin_uptime_secs_delta, m_digifin_num_pkts_rcvd_by_pic_total,
# m_digifin_num_pkts_rcvd_by_pic_total_delta,
# m_digifin_num_pkts_rcvd_by_pic_with_error,
# m_digifin_num_pkts_rcvd_by_pic_with_error_delta
# m_digifin_num_pkts_rcvd_by_pic_good,
# m_digifin_num_pkts_rcvd_by_pic_good_delta,
# m_digifin_motorstep_counter, m_digifin_motorstep_counter_delta,
# m_digifin_recapture_counter, m_digifin_recapture_counter_delta,
# m_digifin_factorycal_counter, m_digifin_factorycal_counter_delta,
# m_digifin_startupcal_counter, m_digifin_startupcal_counter_delta,
# m_digifin_demandcal_counter, m_digifin_demandcal_counter_delta,
# m_digifin_activecal_counter, m_digifin_activecal_counter_delta,
# m_digifin_leakdetect_counter, m_digifin_leakdetect_counter_delta,
# m_digifin_motorfault_counter, m_digifin_motorfault_counter_delta,
# m_digifin_calbehavior,
# m_digifin_factorycal_portstop, m_digifin_factorycal_stbdstop,
# m_digifin_startupcal_portstop, m_digifin_startupcal_stbdstop,
# m_digifin_demandcal_portstop, m_digifin_demandcal_stbdstop,
# m_digifin_activecal_midpoint, m_digifin_activecal_type,
# m_digifin_leakdetect_reading, m_digifin_leakdetect_threshold,
# m_digifin_bootloader_version, m_digifin_firmware_version,
# m_digifin_firmware_stored_checksum, m_digifin_firmware_calculated_checksum,
# and m_digifin_pic_debug.
# 13-Mar-07 fnj@DinkumSoftware.com SN#3342 Added f_depth_subsampling_rate, m_depth_subsampled,
# xs_pressure_noise, and s_corrupted_pressure_noise
# to support subsampled depth data for better depth rate calculation.
# 11-Apr-07 pfurey@webbresearch.com SN#3343 Added sensors for bb2fV2 proglet
# 26-May-07 pfurey@webbresearch.com SN#3344 Added sensors for tarr proglet
# 01-Jun-07 pfurey@webbresearch.com SN#3345 Added m_number_of_de_substate_timeouts
# and u_max_number_of_de_substate_timeouts
# 06-Aug-07 pfurey@webbresearch.com SN#3346 Added sensors for nbctd proglet
# 07-Aug-07 pfurey@webbresearch.com SN#3347 Added sensors for new de_pump.c
# and removed all obsolete de_engine
# sensors.
# 13-Aug-07 pfurey@webbresearch.com SN#3348 Added new sensors for tarr proglet.
# 17-Aug-07 pfurey@webbresearch.com SN#3349 Replaced timestamp units from secs
# to "timestamp" and replaced units
# of m_science_sent_some_data to nodim.
# 29-Aug-07 pfurey@webbresearch.com SN#3350 Added m_science_ready_for_consci.
# and u_max_clothesline_lag_for_consci.
# 31-Aug-07 pfurey@webbresearch.com SN#3351 Updated the estimated value for
# s_de_oil_pot_volt_flux(volts/sec)
# 06-Sep-07 pfurey@webbresearch.com SN#3352 Changed default value of
# c_profile_recall from -1 to 1000
# 11-Sep-07 pfurey@webbresearch.com SN#3353 Changed default value of
# c_profile_recall from 1000 to 2000
# 24-Sep-07 pfurey@webbresearch.com SN#3354 Removed obsolete nop_de_eng
# 11-Oct-07 pfurey@webbresearch.com SN#3355 Added sensors for bbfl2sV2 proglet
# 15-Oct-07 pfurey@webbresearch.com SN#3356 Changed u_de_avg_oil_vol_ierr_alpha
# from 0.05 to 0.2, and
# u_thermal_vavle_check_time from
# 30 to 180 seconds.
# 15-Oct-07 fnj@webbresearch.com SN#3357 Added sensors related to pressure median filtering
# and optionally storing raw sample values.
# Changed default for f_depth_subsampling_rate from 24 to 0
# (i.e., disabled subsampling by default).
# 16-Oct-07 fnj@webbresearch.com SN#3358 Removed unused median filtering sensor.
# 16-Oct-07 pfurey@webbresearch.com SN#3359 Changed u_de_avg_oil_vol_ierr_alpha
# from 0.2 to 0.1
# 17-Oct-07 fnj@webbresearch.com SN#3360 Changed f_de_oil_vol_db_frac_dz default value
# from 0.5 to 0.667
# 20-Oct-07 pfurey@webbresearch.com SN#3361 Removed x_de_oil_vol_ierr_on_ascent/descent
# and renamed the other XXX_ierr_XXX sesnors.
# 21-Oct-07 pfurey@webbresearch.com SN#3362 Changed u_de_avg_oil_vol_err_alpha
# from 0.1 to 0.05
# 26-Oct-07 fnj@webbresearch.com SN#3363 Added m_depth_rate_subsampled,
# f_depth_subsampling_rate_default_deep,
# f_depth_subsampling_rate_default_shallow.
# Changed u_pressure_median from 1 to 0.
# Re-spec'ed f_depth_subsampling_rate.
# 30-Oct-07 fnj@webbresearch.com SN#3364 Documentation only change
# m_depth_rate_subsampled (m) ==> (m/s)
# When you edit this file, increment MASTERDATA_SN by one.
# This serial number is used to detect whether edit_struct.exe was run
# before the software was compiled.
#endif
#define MASTERDATA_SN 3364
#if 0
# -----------------------------------------------------------------------
# prefix meanings:
# m_ measured
# c_ commanded
# u_ user defined before run time
# f_ Set in factory, do not change unless you know what you are doing
# x_ Do not ever set this. Typically computed at run-time.
# s_ simulated state variables
# -----------------------------------------------------------------------
# Sensor values being passed to science over the clothesline have a
# decimal precision limit of 6 places. As a workaround for sensor values
# with very small values (<< 0, high decimal precision), say
# u_bb2c_beta532_factor (0.000007494) we developed the following concepts:
# "Mnodim" which signifies that the true value of the sensor has been
# multiplied by 1.e6 and therefor must be divided by 1.e6 on the science side.
# "Tnodim" which signifies that the true value of the sensor has been
# multiplied by 1.e13 and therefor must be divided by 1.e13 on the science side.
# -----------------------------------------------------------------------
# Some general glider specific characteristics
sensor: f_max_working_depth(m) 30.0 # How deep glider can work
# NOTE: set this to 194m if you want a regular
# electric glider to bottom out at 200m
sensor: f_nominal_dive_rate(m/s) 0.19 # clips 0-1
sensor: f_nominal_pitch(rad) 0.4363 # 25 degs, clips 0-90 degs
# SENSORS
# --- Configuration, Read Only at reset time
sensor: f_enable_picozoom(bool) 1.0 # 0=> never enable picozomm
# 1=> enable it if M_FREE_HEAP is > F_AUTO_PICOZOOM_HEAP_REQD
# 2=> always enabled Picozoom
sensor: f_auto_picozoom_heap_reqd(bytes) 100000 # heap required to autoenable picozoom
# --- Set at init time
sensor: x_hardware_ver(nodim) -3.0 # hardware rev
# 128 RevE
# -2 initial value, i.e. before set
# -1 error reading jumpers
# 0 early board without jumpers --or--
# Board has jumpers, none set
# --- Set/used in gliderdos
sensor: x_software_ver(nodim) 0.0 # current software version
sensor: x_in_gliderdos(bool) 0.0 # true->in glider as opposed to a mission
sensor: x_are_in_lab(bool) 0.0 # true->started with -lab command line switch
sensor: x_are_running_onetime_sequence(bool) 0.0 # true -> onetime.seq active
sensor: u_max_time_in_gliderdos(sec) 600.0 # in, run "sequence" after this much time
# in gliderdos without receiving a keystroke
# disabled in -lab mode
# disabled if <= 0
# these are used
sensor: u_max_sequence_repetitions(nodim) 100 # in, upper limit on # repetitions allowed
# in a sequence specifier listed in a
# sequence command (e.g., sequence foo.mi(100)
sensor: u_max_total_sequenced_missions(nodim) 100 # in, upper limit on total missions sequenced
sensor: u_max_allowed_lastgasp_aborts(nodim) 1 # in, how many lastgasp.mi aborts to allow
# before returning to GliderDos
sensor: u_sequence_max_time_in_gliderdos(s) 900 # in, how long to stay in Gliderdos after
# a lastgasp.mi abort
sensor: u_stale_gps_msg_time(s) 600
sensor: u_stale_gps_msg_period(s) 300 # in, In gliderdos msg delivered every u_stale_gps_msg_period
# seconds if its been u_stale_gps_msg_time since
# the last gps fix.
# -1 (on either sensor) disables (no msg every delivered)
# intended to alert shore side control to do a
# "callback" when operating over iridium.
# the msg: "NOTE:GPS fix is getting stale: X secs old"
sensor: m_1meg_persistor(bool) 0 # out, 1 if M_FREE_HEAP > U_HEAP_REQUIRED_FOR_1MEG_PERSISTOR
sensor: u_heap_required_for_1meg_persistor(bytes) 500000 # in, heap required for 1 MB persistor
sensor: m_why_started(enum) 255 # out, how GliderDos started
# 128 -> External (the reset button)
# 64 -> Power-On
# 32 -> Software Watchdog
# 16 -> Dbl Bus Fault
# 4 -> Loss of Clock
# 2 -> RESET instruction
# 1 -> Test Submodule
# 255 -> Uninitialized
sensor: c_heap_measurement_period(mins) -1 # how often to measure the heap, <= 0 disables
sensor: m_min_spare_heap(bytes) -1 # out, minimum spare heap seen
sensor: m_min_free_heap(bytes) -1 # out, minimum free heap seen
# --- Set in outer control loop,
# main_per.c
sensor: u_cycle_time(sec) 4.0 # in, num of secs/cycle
sensor: u_max_sensor_logs_per_cycle(nodim) 4 # in, max high density sensor records
# per dbd/sbd logging cycle, valid
# range is 2 - 15
sensor: m_present_time(timestamp) 0 # out, secs since 1970 @ start of cycle
sensor: m_present_secs_into_mission(sec) 0 # out, secs since mission started
sensor: m_cycle_number(nodim) 0 # out, cycles since mission started
sensor: x_cycle_overrun_in_ms(msec) 0 # out, set every cycle
# the number of milliseconds that the
# cycle actually was compared to
# U_CYCLE_TIME
sensor: u_allowable_cycle_overrun(msec) 1000 # how large x_cycle_overrun_in_ms can
# before saying are_device_drivers_called_normally()
# For reasons that aren't clear to me, we are overrunning
# every cycle by 250ms.. someone should figure out why
# 14-Jun-05 tc@DinkumSoftware.com
# These measure time in ms of various states
sensor: x_lc_time(msec) 0 # layered control
sensor: x_dc_time(msec) 0 # dynamic control
sensor: x_ds_time(msec) 0 # device scheduler
sensor: x_sp_time(msec) 0 # sensor processing
sensor: x_log_time(msec) 0 # log_data()
sensor: x_dead_time(msec) 0 # idle at end of loop
# This is for the weighted average of the post device scheduler
# processing time (sensor processing and logging)
sensor: x_avg_msecs_of_post_ds_processing_reqd(msec) 1000 # start here to speed up stabilization
sensor: u_avg_msecs_of_post_ds_processing_alpha(nodim) 0.75 # 0 - 1 (more weight to recent values)
# --- layered_control.c
sensor: x_mission_num(nodim) 0 # out, YYDDxx the current or last mission number
# Old style, before switch to DBD scheme
# Kept for argos
sensor: x_mission_status(enum) -3 # out, current (or last) mission status
sensor: x_old_mission_status_1(enum) -3 # out, old, status from prior missions
sensor: x_old_mission_status_2(enum) -3 # out, older, status from prior missions
sensor: x_old_mission_status_3(enum) -3 # out, oldest, status from prior missions
# New DBD style mission numbering
sensor: x_dbd_mission_number(nodim) 0.0 # out, mmmm of mmmmssss.dbd
sensor: x_dbd_segment_number(nodim) 0.0 # ssss of mmmmssss.dbd
# All these sensors "reflect" the values in struct command
# See commands.h definition of XXX_mode_t for "mode" values
# The cc_XXX variables are updated many times during a cycle
# during the behavior resolution process in layered_control
# The cc_final_XXX variables are updated once per cycle after
# all the behaviors are resolved.
sensor: cc_heading_mode(enum) -1 # out, cmd->heading_mode
sensor: cc_heading_value(X) 0 # argument for heading_mode
sensor: cc_pitch_mode(enum) -1 # out, cmd->pitch_mode
sensor: cc_pitch_value(X) 0 # argument for pitch_mode
sensor: cc_bpump_mode(enum) -1 # out, cmd->bump_mode
sensor: cc_bpump_value(X) 0 # argument for bpump_mode
sensor: cc_threng_mode(enum) -1 # out, cmd->threng_mode
sensor: cc_inflection_mode(enum) -1 # out, cmd->inflection_mode
sensor: cc_depth_state_mode(enum) -1 # out, cmd->depth_state_mode
sensor: cc_mission_status_mode(enum) -3 # out, cmd->mission_status_mode
sensor: cc_is_comatose(bool) 0 # out, cmd->is_comatose
sensor: cc_final_heading_mode(enum) -1 # out, cmd->heading_mode
sensor: cc_final_heading_value(X) 0 # argument for heading_mode
sensor: cc_final_pitch_mode(enum) -1 # out, cmd->pitch_mode
sensor: cc_final_pitch_value(X) 0 # argument for pitch_mode
sensor: cc_final_bpump_mode(enum) -1 # out, cmd->bump_mode
sensor: cc_final_bpump_value(X) 0 # argument for bpump_mode
sensor: cc_final_threng_mode(enum) -1 # out, cmd->threng_mode
sensor: cc_final_inflection_mode(enum) -1 # out, cmd->inflection_mode
sensor: cc_final_depth_state_mode(enum) -1 # out, cmd->depth_state_mode
sensor: cc_final_mission_status_mode(enum) -3 # out, cmd->mission_status_mode
sensor: cc_final_is_comatose(bool) 0 # out, cmd->is_comatose
# behavior specific
# behavior specific, have not sorted it all out
sensor: c_depth(m) -1 # ascend.c, descend.c, glider_yo.c layer_control.c
# surface
sensor: u_max_num_files_to_xmit_at_once(nodim) 30 # in, max files batched in sending
# files from glider to shore
sensor: m_free_heap(bytes) -1 # out, the amount of free heap space
sensor: m_spare_heap(bytes) -1 # out, projected amt of heap if every
# big consumer is activated.
sensor: x_in_surface_dialog(nodim) 0 # out, non-zero means surface behavior
# is in surface dialog and others
# specifically behavior abend should
# not try to read any chars. This is
# a bitfield, with bit assigned to each
# surface behavior by their behavior number
# bit = 1 << (behavior_num-1)
sensor: x_num_bang_cmds_done(nodim) 0 # incremented every time a !cmd execute in
# a surface dialogue, see secs_after_bang_cmd()
sensor: x_sent_data_files(nodim) 0 # set to the number of files sent via zmodem
# set to 0 on failure.
# see secs_after_data_transmission()
# hydro_smp
sensor: dhs_valid(bool) 0 #non-zero means remaining sensors are valid
sensor: dhs_start_time(abstime) 0 #secs since 1970 GMT
sensor: dhs_duration(s) 0
sensor: dhs_gain(dB) 0
sensor: dhs_channel(nodim) 0
sensor: dhs_xmit_files(nodim) 0
sensor: dhs_silence_lvl(nodim) 0
sensor: dhs_sampling(bool) 0 # is set true when data collection in process
# yo
sensor: c_yo_reread_mafile(bool) 0 # 1 -> reread mafile during a mission
# goto_list
sensor: c_goto_list_reread_mafile(bool) 0 # 1 -> reread mafile during a mission
# --- dynamic control.c
# For use in abort sequences, see doco/abort-sequences.txt
sensor: u_abort_min_burn_time(sec) 600 # Never drop the weight before this time
sensor: u_abort_max_burn_time(sec) 14400 # Always drop the weight after this time
sensor: u_abort_c_battpos(in) -100. # C_BATTPOS to use during aborts
# max aft, rocket to surface, it will clip
sensor: u_abort_turn_time(sec) 300 # Max time it takes glider to "turn around vertically"
sensor: x_inflecting(bool) 0 # out, true implies in an inflection
sensor: m_tot_num_inflections(nodim) 0 # out, running count of number of inflections
sensor: m_last_yo_time(sec) 0.0 # out, twice the time between last inflections
sensor: m_avg_yo_time(sec) 60.0 # out, twice the average time between inflections
# exponential average of m_last_yo_time
sensor: m_num_half_yos_in_segment(nodim) # out, number of dive/climbs since last surface
# 0 on first dive after surfacing
# incremented on each inflection
sensor: c_speed(m/s) -1 # out, horizontal speed, <0 means no speed specified
sensor: dc_c_ballast_pumped(cc) 0 # out, what dynamic control wants ballast to be
sensor: f_neutral_ballast(cc) 0 # in, amt of ballast for neutral (~0)
sensor: c_pitch(rad) 0 # out, commanded pitch, <0 to dive
sensor: dc_c_battpos(in) 0 # out, what dynamic control wants fore/aft battery to be
sensor: dc_c_thermal_updown(enum) # out, what dynamic_control wants thermal engine to do
sensor: dc_c_de_updown(enum) # out, what dynamic_control wants deep electric engine to do
sensor: dc_c_oil_volume(cc) 0 # out, what dynamic control wants oil volume to be
sensor: f_neutral_oil_volume(cc) 0 # in, amt of oil volume for neutral (~0)
# also used in g_shell.c: GCmdBallast()
# Generic location stuff, see coord_sys.h for description
sensor: x_lmc_utm_zone_digit(byte) 0 # The utm zone of lmc (0,0)
sensor: x_lmc_utm_zone_char(byte) 0 # ditto, 0->A 1->B etc
sensor: x_lmc_utm_vehicle_zone_digit(byte) 0 # The utm zone of the vehicle
sensor: x_lmc_utm_vehicle_zone_char(byte) 0 # ditto, 0->A 1->B etc
sensor: x_utm_to_lmc_00(nodim) 0 # matrix such that: lmc = [] * utm + off
sensor: x_utm_to_lmc_01(nodim) 0 # |x| |00 01| ( |e| |x0| )
sensor: x_utm_to_lmc_10(nodim) 0 # | | = | | * ( | | + | | )
sensor: x_utm_to_lmc_11(nodim) 0 # |y| |10 11| ( |n| |y0| )
sensor: x_utm_to_lmc_x0(nodim) 0
sensor: x_utm_to_lmc_y0(nodim) 0
sensor: x_last_utm_easting_correction(m) 0 # needed for crossing lon UTM zones
sensor: x_last_utm_northing_correction(m) 0 # needed for crossing equator
#The first two are just used to produce a warning if we cross a UTM zone.
#The second pair are to record current vehicle UTM zone
#The next six convert (northing,easting) -> (x,y).
#All of these are computed when the origin in LMC is established.
#And the last two are used to correct for lon UTM zone and equator crossings.
# Generic heading related stuff
sensor: c_heading(rad) 0 # out, commanded heading
sensor: c_roll(rad) 0 # out, commanded roll
sensor: dc_c_battroll(rad) 0 # out, what dynamic control wants roll battery to be
sensor: f_battroll_offset(rad) 0.0 # in, added to c_roll to handle off center batteries
sensor: m_hdg_error(rad) 0 # out, m_heading - c_heading
sensor: m_hdg_ierror(rad-sec) 0 # out, integrated m_hdg_error
# Waypoint control
sensor: u_use_current_correction(nodim) 1 # 0 calculate, but do not use m_water_vx/y
# 1 use m_water_vx/y to navigate AND aim
sensor: c_wpt_x_lmc(m) 0 # in, command waypoint in lmc units
sensor: c_wpt_y_lmc(m) 0 #
sensor: x_hit_a_waypoint(bool) 0 # set by behavior when reach a waypoint
sensor: x_last_wpt_x_lmc(m) 0 # set by behavior when reach a waypoint
sensor: x_last_wpt_y_lmc(m) 0
# Heading autopilot variables
# Mostly parameteric inputs to control autopilot
# The X_ guys are working variables
# See doco/how-it-works/heading_autopilot.txt
# servo on Heading by adjusting fin
# controls/knobs: the user might change these
# read glider/doco/how-it-works/heading_autopilot.txt
sensor: u_hd_fin_ap_gain(1/rad) 1.00 # The "gain" of controller: 57 deg proportional band
# 1/57 deg
sensor: u_hd_fin_ap_igain(1/rad-sec) 0.03
# percent C_FIN = (-U_HD_FIN_AP_GAIN * M_HDG_ERROR) +
# (-U_HD_FIN_AP_IGAIN * M_HDG_IERROR)
sensor: u_hd_fin_ap_run_time(secs) -1 # How often to "run" the loop
# <= 0, every cycle
# > 0, this many seconds
# What to do around inflections
sensor: u_hd_fin_ap_inflection_holdoff(sec) -1.0 # in, controls steering around inflections
# -1 always steer/integrate_errors during inflection
# >=0 don't steer/integrate errors:
# during inflection --AND--
# for this many secs after START of inflection
# How long to not integrate after big course changes
sensor: u_hd_fin_ap_hardover_holdoff(sec) 120.0 # in, how long to keep zeroing the integrated
# error after fin is "hard over".
# <= 0 causes no holdoff time, i.e. starts integrating
# immediately after fin is NOT hardover.
# various clipping limits
sensor: u_hd_fin_ap_limit_gain_x_error(rad) 1000.0 # Limits the gain*error term, (flattens gain curve)
# Set it large to disable it.
sensor: u_hd_fin_ap_limit_absolute(rad) 1000 # limits final C_FIN value to beween +/- this value.
# Set it large to disable it.
# Note: this is also limited to the
# fin safety limit X_FIN_MAX.
sensor: u_hd_fin_abort_after_y_misses(nodim) 5.0 # in, how many missed attitude measurements
# before we aborting the mission
# <= 0 never abort
# 1 abort on first miss
# >= 2 abort when miss this many times in a row
# state: user shouldn't change, they are outputs only
sensor: x_hd_fin_ap_ran(bool) -10 # Updated on a cycle where heading autopilot executed
# -1 First time initialization
# 0 ; called, but chose not to command motor
# 1 ; did not run cause no fresh input
# 2 ; "ran", controlled motor
sensor: x_hd_fin_ap_is_hardover(bool) 0 # true implies fin is "hardover"
# servo on Heading by adjusting battery roll
# Note: These all are parallels of X_hd_fin_XXX.
# See those variables for a description.
# The Version 1 of battery steering wasn't tested
# on a battery steered glider when implemented. These
# settings probably have to be changed.
sensor: u_hd_broll_ap_gain(1/rad) 1.00
sensor: u_hd_broll_ap_igain(1/rad-sec) 0.03
sensor: u_hd_broll_ap_run_time(secs) -1.0
sensor: u_hd_broll_ap_inflection_holdoff(sec) -1.0
sensor: u_hd_broll_ap_hardover_holdoff(sec) 400.0
sensor: u_hd_broll_ap_limit_gain_x_error(rad) 1000
sensor: u_hd_broll_ap_limit_absolute(rad) 1000
sensor: u_hd_broll_abort_after_y_misses(nodim) 3.0
sensor: x_hd_broll_ap_ran(bool) -10
sensor: x_hd_broll_ap_is_hardover(bool) 0
# Pitch autopilot variables
# specify the curve relating vehicle pitch to battery postion
# pitch(rad) = F_PITCH_BATTPOS_CAL_M(rad/in) * battpos(in) + F_PITCH_BATTPOS_CAL_B(in)
# note: signs on pitch/battpos are documented under C_PITCH and C_BATTPOS
# values for amy from lake seneca
sensor: f_pitch_battpos_cal_m(rad/in) -1.2565 # input
sensor: f_pitch_battpos_cal_b(in) 0.055 # input
# Mostly parameteric inputs to control servor
# The X_ guys are working variables
# Cloned from heading_autopilot, See doco/heading_autopilot.txt
sensor: u_max_pitch_ap_period(sec) 60 # 16 AutoPilot "runs" at least this often
sensor: u_min_pitch_ap_period(sec) 2 # AutoPilot "runs" no more than this often
sensor: x_pitch_ap_period(sec) 0 # Actual computed time until next running of autopilot
sensor: x_pitch_ap_ran(bool) 0 # Updated on a cycle where pitch autopilot executed
sensor: u_pitch_ap_gain(1/rad) -2.86 # 1/ 20deg
# The "gain" of controller:
# percent delta C_BATTPOS = -U_PITCH_AP_GAIN * M_PITCH_ERROR
sensor: u_pitch_ap_deadband(rad) 0.0524 # 3 deg
# The deadband + or - from C_PITCH,
# We do not make corrections if
# abs(M_PITCH_ERROR) < U_PITCH_AP_DEADBAND
sensor: u_pitch_max_delta_battpos(in) 0.020 # 40% of deadband
# in, max delta battpos to apply
# a really big number sets no limit and is safe
# somebody else clips later on
sensor: u_pitch_correction_time_mult(nodim) 0.50 # What fraction assumed correction time we wait before
# running again.
sensor: u_pitch_deadband_time_mult(nodim) 2.0 # How much we increase the time til next attempt if
# we are in the dead band.
sensor: m_pitch_error(rad) 0 # out, difference between m_pitch - c_pitch
# --- sensor_processing.c
sensor: x_sensor_processing_ran(bool) 0 # out, updated on every cycle
# Used to compute integration times
sensor: m_tot_horz_dist(km) 0.0 # out, How far we have moved underwater
sensor: x_current_target_altitude(m) -1.0 # default is none, height above
# bottom glider is currently
# diving/climbing to
sensor: u_print_engine_status(sec) -1.0 # controls printing of thermal/deep electric status
# <0 do not print >0 print status that often
# compute_depth_stuff()
# NOTE: Raw depth data (m_depth) is noisy. Depth rate for purposes of depth state evaluation
# (m_depth_rate_subsampled) will be based on subsampled depth data (m_depth_subsampled)
# in order to minimize false reversals, false motion, and false stalls.
# We take a long enough interval between depth measurements for subsampling, so that
# depth state does not have a significant occurrence of false reversals, false motion,
# and false stalls.
sensor: f_depth_subsampling_rate(sec) -1 # in, time rate of subsampled depth (will be APPROX!)
# 0 ==> no subsampling
# <0 ==> autodetect based on is_deep
sensor: f_depth_subsampling_rate_default_deep(sec) 23 # auto value for deep
sensor: f_depth_subsampling_rate_default_shallow(sec) 0 # auto value for shallow
sensor: m_depth_subsampled(m) 0 # out, subsampled depth measurement
sensor: m_depth_rate(m/s) 0 # out, rate of change of depth, >0 is down
sensor: m_depth_rate_subsampled(m/s) 0 # out, subsampled depth rate measurement
sensor: u_reqd_depth_at_surface(m) 1 # in, depths less than this considered "at surface"
sensor: u_hovering_frac_nom_dive_rate(nodim) 0.25 # in, fraction of f_nominal_dive_rate
# used as threshold for hovering
# clips to 0-1
sensor: m_depth_state(enum) 0 # based on m_depth_rate and u_surface_depth
# matches CC_DEPTH_STATE_MODE (enum depth_state_mode_t)
# compute_surface_estimate()
# These run 0 to 1 and are estimates we are at the surface
sensor: m_surface_est_cmd(nodim) 0 # commanded to surface
sensor: m_surface_est_ctd(nodim) 0 # ctd pressure => depth
sensor: m_surface_est_gps(nodim) 0 # gps talking to satellite
sensor: m_surface_est_fw(nodim) 0 # freewave has carrier
sensor: m_surface_est_irid(nodim) 0 # iridium has carrier
sensor: u_surface_est_time_constant(secs) 30 # m_surface_est_XXX expontially decayed
# by this when corresponding condition is false
sensor: m_surface_est_total(nodim) 0 # sum of above m_surface_est_XXX ....
sensor: u_surface_est_threshold(nodim) 1.5 # and are compared to this
# in order to set...
sensor: m_appear_to_be_at_surface(bool) 0 # The final result
sensor: m_certainly_at_surface(bool) 0 # true if got a gps fix, or freewave/iridium carrier
# on this cycle.
# compute_altitude_stuff()
sensor: u_alt_reduced_usage_mode(bool) 1 # in, default is on, 0 -> off
# reduced usage mode turns on
# altimeter only when necessary
sensor: x_alt_time(sec) 0 # out, calculated c_alt_time value
# <0 altimeter off, =0 as fast as possible,
# >0 that many seconds between measurements
sensor: m_altitude(m) 0 # out, height above the bottom
sensor: m_altimeter_status(enum) 0 # out, 0 is good reading
# non-zero means rejected
# see sensor_processing.h for codes
sensor: u_min_altimeter(m) 2.0 # in, altimeter reading must be between these(inclusive)
sensor: u_max_altimeter(m) 30.0
sensor: m_aground_water_depth(m) -1 # out, set by behavior dive_to when it crashes
# into bottom
sensor: m_water_depth(m) -1.0 # out, m_depth + m_altitude.
# -1 ==> unknown
sensor: u_max_water_depth_lifetime(yos) 3.0 # in, how long we can use m_depth in absence
# of measured data
sensor: u_max_bottom_slope(m/m) 3.0 # in, max slope of bottom. <0 disables all filters
# max change in altitude/horizontal movement
sensor: u_min_water_depth(m) 0 # in, altimeter reading + M_DEPTH must be between these
sensor: u_max_water_depth(m) 2000 # inclusive
# compute_alt_measure_delay()
sensor: u_alt_measure_secs_prior_inflection(sec) 15.0 # seconds prior to
# inflection to start
# measuring continuously
# min legal value is 15.0 secs
sensor: u_alt_measure_fraction(nodim) 0.5 # must be > 0 and < 1, fraction
# of time till inflection to measure
# altitude, used in reduced-usage mode
# compute_heading_rate()
sensor: m_hdg_rate(rad/sec) 0 # rate of change of heading
# compute_vehicle_velocity()
sensor: m_speed(m/s) 0 # out, vehicle horizontal speed THRU WATER
sensor: m_is_speed_estimated(bool) 0 # out, Tells if m_speed is computed from
# M_DEPTH_RATE,M_PITCH -or-
# estimated from M_MISSION_AVG_SPEED_DIVING/CLIMBING when
# M_PITCH is too small
sensor: m_avg_speed(m/s) 0 # out, avg vehicle horizontal speed THRU WATER
# used only computing C_HEADING to way point
sensor: u_avg_speed_alpha(nodim) 0.001 # in, time constant for exponential averaging of
# m_speed ==> m_avg_speed
# 1==> no averaging, i.e. m_avg_speed = m_speed
# smaller numbers (>0) ==> longer time constant
sensor: m_mission_avg_speed_diving(m/s) 0 # out, running average of computed m_speed
sensor: m_mission_avg_speed_climbing(m/s) 0 # since start of mission. Used to estimate
# M_SPEED when M_PITCH is too small (< 11 deg)
sensor: u_coast_time(s) 7.5 # in, how long it takes the gliders
# horizontal speed to go to 0 due to drag
# Used when estimating M_SPEED by linearly
# reducing M_MISSION_AVG_SPEED_* to 0 over
# this time
# <0 ==> disables the damping
# Note: see sensor_processing.c:damp_horz_speed()
# for justification of this time
sensor: m_vx_lmc(m/s) 0 # out, vehicle horizontal velocity OVER GROUND
sensor: m_vy_lmc(m/s) 0
# compute_water_velocity() See doco/water-velocity-caclulation.txt
sensor: m_water_vx(m/s) 0 # in/out How fast the water is going. LMC coord. sys.
sensor: m_water_vy(m/s) 0 # used as input here (if u_use_current_correction is true)
sensor: m_initial_water_vx(m/s) 0 # out, initial computation of m_water_vx/y
sensor: m_initial_water_vy(m/s) 0 #
sensor: m_final_water_vx(m/s) 0 # out, initial computation of m_water_vx/y
sensor: m_final_water_vy(m/s) 0 #
sensor: m_water_delta_vx(m/s) 0 # out, change in water_vx/vy this segment
sensor: m_water_delta_vy(m/s) 0 #
# both computed in compute_water_velocity() when get gps fix.
sensor: x_prior_seg_water_vx(m/s) 0 # in/out water speed used for navigation on prior segment
sensor: x_prior_seg_water_vy(m/s) 0
sensor: u_max_water_speed(m/s) 2.8 # in, 5 knots
# magnitude of (m_water_vx,m_water_vy) clipped to this
# These are part of the state machine used in computing water velocity
# See doco/water-velocity-calculation.txt for writeup
sensor: x_dr_state(enum) 0.0 # out, mission_start=0, underwater=1,awaiting_fix=2,
# awaiting_postfix=3, awaiting_dive=4
sensor: m_dr_time(sec) -1.0 # out, how long underwater, subject to currents
sensor: m_dr_surf_x_lmc(m) 0 # Dead Reckoned location when surface
sensor: m_dr_surf_y_lmc(m) 0
sensor: m_dr_fix_time(sec) -1.0 # out, surface drift time til first gps fix
sensor: m_gps_fix_x_lmc(m) 0 # location of first gps fix
sensor: m_gps_fix_y_lmc(m) 0
sensor: m_dr_x_ini_err(m) 0 # out, m_gps_fix_x/y_lmc - m_dr_surf_x/y_lmc
sensor: m_dr_y_ini_err(m) 0
sensor: m_dr_postfix_time(sec) -1.0 # out, surface drift time til later gps fix that is
# used to correct for surface drift during
# m_dr_fix_time
sensor: m_gps_postfix_x_lmc(m) 0
sensor: m_gps_postfix_y_lmc(m) 0 # Location used to measure surface drift
sensor: m_dr_x_postfix_drift(m) 0 # out, m_gps_postfix_x/y_lmc - x_gps_fix_x/y_lmc
sensor: m_dr_y_postfix_drift(m) 0
sensor: m_dr_x_ta_postfix_drift(m) 0 # out, m_dr_x/y_postfix_drift * time adjusted value
sensor: m_dr_y_ta_postfix_drift(m) 0
sensor: m_dr_x_actual_err(m) 0 # out, m_dr_x/y_ini_err - timeadj(m_dr_x/y_postfix_drift)
sensor: m_dr_y_actual_err(m) 0
# compute_lmc_position()
sensor: m_x_lmc(m) 0 # vehicle position in Local Mission Coordinates
sensor: m_y_lmc(m) 0 # (0,0) at mission start Y axis is magnetic north
sensor: x_lmc_xy_source(enum) 0 # out, how m_x/y_lmc was computed this cycle
# >= 0 means an (x,y) was computed
# 3 gps (surface)
# 2 dead reckon(uw)
# 1 dr estimated speed (uw)
# 0 inited to (0,0) first cycle of mission
# -1 not computed cause at surface and no gps fix this cycle
# -2 not computed cause no DR data (cycle overrun?)
# -10 indicates software error, you should never see this
# compute_waypoint_metrics()
sensor: m_dist_to_wpt(m) # out, How far to (c_wpt_x_lmc,c_wpt_y_lmc)
sensor: m_vmg_to_wpt(m/s) # out, Velocity Made good to (c_wpt_x_lmc,c_wpt_y_lmc)
# translate_to_latlon()
sensor: m_lat(lat) 69696969 # vehicle position in latitude
sensor: m_lon(lon) 69696969 # vehicle position in longitude
sensor: c_wpt_lat(lat) 0 # current waypoint in latitude
sensor: c_wpt_lon(lon) 0 # current waypoint in longitude
sensor: x_last_wpt_lat(lat) # last achieved waypoint
sensor: x_last_wpt_lon(lon)
# compute_comms_stuff
sensor: u_stable_comms_reqd_secs(sec) 60.0 # in, continous seconds of carrier detect
# required to have stable comms
sensor: m_stable_comms(bool) 0.0 # out, true-> comms are stable, i.e. we have
# had m_console_cd for reqd number of secs
# in a row
sensor: u_zmodem_verbosity(nodim) 29.0 # in, controls output to config\zmodem.log
# the higher the number, the more output
# see zmdebug.h for a description
# --- device driver level
sensor: m_device_drivers_called_abnormally(nodim) 0 # non-zero means time base is suspect because
# glider busy, after data transmission, etc
# It is results of:
# devsched.c:device_drivers_called_normally()
# It is a bit-field, there is a bit set for
# each of the possible reasons. See top of
# devsched.c for definitions (#define DDCA_xxx)
sensor: m_device_oddity(nodim) -1.0 # These set to the device number of offending device
sensor: m_device_warning(nodim) -1.0 # whenever it generates error/warning/oddity
sensor: m_device_error(nodim) -1.0
sensor: f_max_time_per_device_ctrl(msec) 500 # In, default max allowable time for
# a device driver to run. oddities
# generated if this time execeeded
sensor: f_noise_floor(volts) 0.050 # Electrical noise in system
# Used to compute how often motor
# velocities are computed and checked
sensor: f_crush_depth(m) 225.0 # When the glider gets crushed
sensor: f_time_to_burn_wire(sec) 20.0 # How long it takes burn wire to drop weight
sensor: m_at_risk_depth(m) 221.0 # When have to start burning the wire to drop the
# in order to drop the weight before f_crush_depth
# when diving at f_nominal_dive_rate
# default= 225m - 20s * 0.19 m/s =
# common to all motors
sensor: u_comatose_enabled(bool) 0.0 # in, true->enables comatose mode
sensor: u_comatose_deadband_mult(nodim) 10.0 # in, how much to increase motor deadbands
# when in comatose mode
sensor: u_motor_fs_travel_mult(nodim) 2.0 # in, used to compute worst case motor travel time
# = U_MOTOR_FS_TRAVEL_MULT *
# 2 * F__SAFETY_MAX / F_NOMINAL_VEL
sensor: f_motor_analyze_deadband(nodim) 1800.0 # enables computation and printing of
# all motor positioning stats, i.e. diffence
# between C_xxx(commanded) and M_xxx(measured)
# <= 0 no action, zero stats
# > 0 accumulate stats (min, mean, max, standev)
# every F_MOTOR_ANALYZE_DEADBAND calls...
# print and zero stats
# ballast/buoyancy pump: motor.c motor_drivers.
sensor: c_ballast_pumped(cc) 0 #in >0 pumps ballast overboard, goes up
sensor: m_ballast_pumped(cc) #out,
sensor: f_ballast_pumped_stall_retry(sec) 10.0 # in, how long to wait for retry if
# pump jams, not moving fast enuf
sensor: x_ballast_pumped_max(cc) 226 # out, Maximum OPERATIONAL limit
sensor: x_ballast_pumped_deadband(cc) 0.0 # out, how close is good enuf
# = f_ballast_pumped_deadz_width * f_ballast_pumped_db_frac_dz
sensor: m_is_ballast_pump_moving(bool) 0 # out, t-> motor is moving
sensor: m_ballast_pumped_vel(cc/sec) 0 # out, measured motor speed
sensor: m_ballast_pumped_energy(joules) 0 #out, How much energy to pump water on last command
# = pressure * volume when extending
sensor: m_tot_ballast_pumped_energy(kjoules) 0 #out, totalized m_ballast_pumped_energy
sensor: u_ballast_pumped_microposition(bool) 0 # T==> microposition the motor
sensor: u_ballast_pumped_micropos_rt(msec) 250 # "run time" >0 max allowable microposition time
sensor: u_ballast_pumped_micropos_wp(nodim) 0.01 #"when pulse" 0-1 when start pulsing the motor
# 0 immediately, 0.5 when half way there, 1 never
sensor: u_ballast_pumped_micropos_dc(nodim) 10 # "duty cycle" 1-N once pulsing,
# pulse motor 1 cycle out of this many
# max = safety_max - deadzone
sensor: f_ballast_pumped_safety_max(cc) 268.0 # in, damage to glider
sensor: f_ballast_pumped_deadz_width(cc) 42.0 # in, sets x_ limit
sensor: f_ballast_pumped_db_frac_dz(nodim) 1.0 # deadband as fraction of dead zone
sensor: f_ballast_pumped_nominal_vel(cc/sec) 132.0 # in, nominal speed
sensor: f_ballast_pumped_reqd_vel_frac(nodim) 0.25 # in, fraction of nominal
# required before saying not
# moving fast enuf
# Specs linear relationship between sensor units (cc) and the
# voltage we actually read out of the AD for position
# pumped(cc) = pumped_cal_m(cc/Volt) * volts + pumped_cal_b(cc)
sensor: f_ballast_pumped_cal_m(cc/Volt) 366.93 # in, slope
sensor: f_ballast_pumped_cal_b(cc) -412.19 # in, y-intercept
# Battery (fore/aft) position: motor.c motor_drivers.
sensor: c_battpos(in) 0 # in, >0 vehicle dives (nose down)
# the battery is moved forward
sensor: m_battpos(in) # out
sensor: x_battpos_max(in) # out, Maximum OPERATIONAL limit
sensor: x_battpos_deadband(in) 0.0 # out, how close is good enuf
# = f_battpos_deadzone_width * f_battpos_db_frac_dz
sensor: m_is_battpos_moving(bool) 0 # out, t-> motor is moving
sensor: m_battpos_vel(in/sec) 0 # out, measured motor velocity
sensor: u_battpos_microposition(bool) 1 # T==> microposition the motor
sensor: u_battpos_micropos_rt(msec) 1000 # "run time" >0 max allowable microposition time
sensor: u_battpos_micropos_wp(nodim) 0.01 #"when pulse" 0-1 when start pulsing the motor
# 0 immediately, 0.5 when half way there, 1 never
sensor: u_battpos_micropos_dc(nodim) 10 # "duty cycle" 1-N once pulsing,
# pulse motor 1 cycle out of this many
# max = safety_max - deadzone
# x_battpos_max = f_safety_max_battpos - f_deadzone_width_battpos
sensor: f_battpos_safety_max(inches) 0.45 # in, damage to glider
sensor: f_battpos_deadzone_width(inches) 0.068 # Sets x_ limit
sensor: f_battpos_db_frac_dz(nodim) 1.0 # deadband as fraction of dead zone
sensor: f_battpos_nominal_vel(inches/sec) 0.16 # nominal speed
sensor: f_battpos_reqd_vel_frac(nodim) 0.25 # in, fraction of nominal
# required before saying not
# moving fast enuf
# Specs linear relationship between sensor units (inches) and the
# voltage we actually read out of the AD for position
# battpos(inches) = _cal_m(inches/Volt) * volts + _cal_b(inches)
sensor: f_battpos_cal_m(inches/Volt) 0.571 # slope
sensor: f_battpos_cal_b(inches) -0.506 # y-intercept
# battery roll, motor.c motor_drivers.
# battroll
sensor: c_battroll(rad) 0 # in, >0 puts stbd wing down
# the battery is rotated ClockWise (CW)
# when looking fwd
sensor: m_battroll(rad) # out
sensor: x_battroll_max(rad) # out, Maximum OPERATIONAL limit
sensor: x_battroll_deadband(rad) 0.0 # out, how close is good enuf
# = f_battroll_deadzone_width * f_battroll_db_frac_dz
sensor: m_is_battroll_moving(bool) 0 # out, t-> motor is moving
sensor: m_battroll_vel(rad/sec) 0 # out, measured motor velocity
sensor: u_battroll_microposition(bool) 0 # T==> microposition the motor
sensor: u_battroll_micropos_rt(msec) 250 # "run time" >0 max allowable microposition time
sensor: u_battroll_micropos_wp(nodim) 0.01 #"when pulse" 0-1 when start pulsing the motor
# 0 immediately, 0.5 when half way there, 1 never
sensor: u_battroll_micropos_dc(nodim) 10 # "duty cycle" 1-N once pulsing,
# pulse motor 1 cycle out of this many
# max = safety_max - deadzone
sensor: f_battroll_safety_max(rad) 0.52 # in, damage to glider
sensor: f_battroll_deadzone_width(rad) 0.088 # in, Sets x_ limit
sensor: f_battroll_db_frac_dz(nodim) 1.0 # deadband as fraction of dead zone
sensor: f_battroll_nominal_vel(rad/sec) 0.09 # in, nominal speed
sensor: f_battroll_reqd_vel_frac(nodim)0.25 # in, fraction of nominal
# required before saying not
# moving fast enuf
# Specs linear relationship between sensor units (rads) and the
# voltage we actually read out of the AD for position
# battroll(rad) = _cal_m(rad/Volt) * volts + battroll_cal_b(rad)
sensor: f_battroll_cal_m(rad/Volt) 0.950 # slope
sensor: f_battroll_cal_b(rad) -1.22 # y-intercept
# fin, motor.c motor_drivers
sensor: f_fin_offset(rad) 0.0 # in, added to c_fin to trim (after autopilot)
sensor: c_fin(rad) 0 # in, >0 vehicle turns right
sensor: m_fin(rad) # out
sensor: x_fin_max(rad) # out, Maximum OPERATIONAL limit
sensor: x_fin_deadband(rad) 0.0 # out, how close is good enuf
# = f_fin_deadzone_width * f_fin_db_frac_dz
sensor: m_is_fin_moving(bool) 0 # out, t-> motor is moving
sensor: m_fin_vel(rad/sec) 0 # out, measured motor velocity
sensor: u_fin_microposition(bool) 1 # T==> microposition the motor
sensor: u_fin_micropos_rt(msec) 750 # "run time" >0 max allowable microposition time
sensor: u_fin_micropos_wp(nodim) 0.01 #"when pulse" 0-1 when start pulsing the motor
# 0 immediately, 0.5 when half way there, 1 never
sensor: u_fin_micropos_dc(nodim) 5 # "duty cycle" 1-N once pulsing,
# pulse motor 1 cycle out of this many
################################################
# start of readbacks which apply only to digifin
################################################
# status
sensor: m_digifin_status(nodim) 0 # bit mapped status
# primary data
# sensor m_digifin -------------------------------- # share use of m_fin for position in radians
sensor: m_digifin_rawposition(nodim) 0 # raw position in A/D counts
# statistics
sensor: m_digifin_boot_counter(nodim) 0 # number of PIC power cycles
sensor: m_digifin_uptime_secs(nodim) 0 # number of seconds into PIC power cycle
sensor: m_digifin_uptime_secs_delta(nodim) 0 # delta of number of seconds into PIC power cycle
sensor: m_digifin_num_pkts_rcvd_by_pic_total(nodim) 0 # total number of packets received by PIC (per power cycle)
sensor: m_digifin_num_pkts_rcvd_by_pic_total_delta(nodim) 0 # delta of total number of packets received by PIC
sensor: m_digifin_num_pkts_rcvd_by_pic_with_error(nodim) 0 # number of packets received with error by PIC (per power cycle)
sensor: m_digifin_num_pkts_rcvd_by_pic_with_error_delta(nodim) 0 # delta of number of packets received with error by PIC
sensor: m_digifin_num_pkts_rcvd_by_pic_good(nodim) 0 # number of packets received good by PIC (per power cycle)
sensor: m_digifin_num_pkts_rcvd_by_pic_good_delta(nodim) 0 # delta of number of packets received good by PIC
sensor: m_digifin_motorstep_counter(nodim) 0 # energy consumption metric (per power cycle)
sensor: m_digifin_motorstep_counter_delta(nodim) 0 # delta of energy consumption metric
sensor: m_digifin_recapture_counter(nodim) 0 # number of times recapture performed (per power cycle)
sensor: m_digifin_recapture_counter_delta(nodim) 0 # delta of number of times recapture performed
sensor: m_digifin_factorycal_counter(nodim) 0 # number of times factory cal performed (per power cycle)
sensor: m_digifin_factorycal_counter_delta(nodim) 0 # delta of number of times factory cal performed
sensor: m_digifin_startupcal_counter(nodim) 0 # number of times startup cal performed (per power cycle)
sensor: m_digifin_startupcal_counter_delta(nodim) 0 # delta of number of times startup cal performed
sensor: m_digifin_demandcal_counter(nodim) 0 # number of times demand cal performed (per power cycle)
sensor: m_digifin_demandcal_counter_delta(nodim) 0 # delta of number of times demand cal performed
sensor: m_digifin_activecal_counter(nodim) 0 # number of times active cal set (per power cycle)
sensor: m_digifin_activecal_counter_delta(nodim) 0 # delta of number of times active cal set
sensor: m_digifin_leakdetect_counter(nodim) 0 # number of times leak detected (per power cycle)
sensor: m_digifin_leakdetect_counter_delta(nodim) 0 # delta of number of times leak detected
sensor: m_digifin_motorfault_counter(nodim) 0 # number of times motor fault registered (per power cycle)
sensor: m_digifin_motorfault_counter_delta(nodim) 0 # delta of number of times motor fault registered
sensor: m_digifin_phases_attempted(nodim) 0 # number of I/O phases attempted by digifin_ctrl
sensor: m_digifin_phases_failed(nodim) 0 # number of I/O phases failed by digifin_ctrl
sensor: m_digifin_phases_busy(nodim) 0 # number of I/O phases by digifin_ctrl with busy response
sensor: m_digifin_phases_good(nodim) 0 # number of I/O phases good by digifin_ctrl
# calibration
sensor: m_digifin_calbehavior(nodim) 0 # 0 -> old behavior, 1 -> new behavior
sensor: m_digifin_factorycal_portstop(nodim) 0 # port stop for factory cal in A/D counts
sensor: m_digifin_factorycal_stbdstop(nodim) 0 # stbd stop for factory cal in A/D counts
sensor: m_digifin_startupcal_portstop(nodim) 0 # port stop for startup cal in A/D counts
sensor: m_digifin_startupcal_stbdstop(nodim) 0 # stbd stop for startup cal in A/D counts
sensor: m_digifin_demandcal_portstop(nodim) 0 # port stop for demand cal in A/D counts
sensor: m_digifin_demandcal_stbdstop(nodim) 0 # stbd stop for demand cal in A/D counts
sensor: m_digifin_activecal_midpoint(nodim) 0 # active cal midpoint in A/D counts
sensor: m_digifin_activecal_type(nodim) 0 # last cal type: 0-1023 -> set to specified value
# 65535 -> set from last factory cal
# 65534 -> set from last startup cal
# 65533 -> set from last demand cal
# 65532 -> set from current position
# leak detect
sensor: m_digifin_leakdetect_reading(nodim) 0 # leak detect reading in A/D counts
sensor: m_digifin_leakdetect_threshold(nodim) 0 # leak detect threshold in A/D counts
# firmware properties
sensor: m_digifin_bootloader_version(nodim) 0 # bootloader version
sensor: m_digifin_firmware_version(nodim) 0 # firmware version
sensor: m_digifin_firmware_stored_checksum(nodim) 0 # firmware checksum stored in flash
sensor: m_digifin_firmware_calculated_checksum(nodim) 0 # firmware checksum calculated at boot time
# debugging
sensor: m_digifin_pic_debug(nodim) 0 # general-use debug register
##############################################
# end of readbacks which apply only to digifin
##############################################
# basically fixed parameters for digifin
sensor: u_digifin_response_timeout(msec) -1 # timeout from issuing command to receiving response from digifin
# (-1 means using gliderbus default value)
sensor: f_digifin_busy_timeout_secs(sec) 45 # max # of secs the digifin can respond to our cmds
# with "busy" responses before we generate an error
# (note: this is in one continuous run of all "busy"
# response packets with no non-"busy" response packets)
sensor: f_digifin_startup_wait(sec) 10 # number of secs after turning digifin power on
# until we start talking to it
sensor: f_digifin_status_mask(nodim) 524031 # every bit 0-18 set except b8 = 256 (leakdetect rdg chgd)
sensor: f_digifin_status_force(nodim) 2 # only bit set b1 = 2 (position changed)
# mechanism for issuing special commands to digifin
sensor: c_digifin_write_reg(nodim) 0 # in; digifin register to write to
sensor: c_digifin_read_reg(nodim) 0 # in, digifin register to read from
sensor: c_digifin_cmd_data(nodim) 0 # in; data for digifin command
sensor: m_digifin_resp_data(nodim) 0 # out; data from digifin response
sensor: m_digifin_cmd_done(nodim) 0 # in/out; flag for command completed; T ==> completed
sensor: m_digifin_cmd_error(nodim) 0 # out; T ==> error running special command
# debugging control - only effective for digifin
sensor: u_digifin_debug(nodim) 0 # Bit-mapped debug control register - add desired elements together
# b0 1 real time trace all rcvd packets
# b1 2 real time trace all gliderbus_transact errors
# b2 4 real time trace all digifin_do_transaction errors
# b3 8 fake a good return from gliderbus_transact errors
# b4 16 fake a good return for missing "$" beginning of packet
# b5 32 fake a good return for packet parse errors
# b6 64 fake a good return for ill-formed checksums
# b7 128 fake a good return for checksum mismatches
# b8 256 print a trace of faked good returns
# b9 512 make response packet timeout only a device oddity
# b10 1024 make all non-hopeless device errors into warnings
# b11 2048 make all non-hopeless device errors and warnings into oddities
# b12 4096 make all non-hopeless device errors, warnings, and oddities into non-entities
# b13 8192 never turn off gliderbus power
# b14 16384 print number of phases attempted during digifin_ctrl execution
# b15 32768 print duration of digifin_ctrl execution
# b16 65536 unassigned
# b17 131072 unassigned
# b18 262144 unassigned
# b19 524288 unassigned
# b20 1048576 unassigned
# b21 2097152 unassigned
# b22 4194304 unassigned
# b23 8388608 unassigned
# b24 16777216 unassigned
# b25 33554432 unassigned
# b26 67108864 unassigned
# b27 134217728 unassigned
# b28 268435456 unassigned
# b29 536870912 unassigned
# b30 1073741824 unassigned
# b31 2147483648 unassigned
# debugging values - only apply to digifin
# reset these by setting c_fin_debug_reset to true (this is edge detected and automatically set back to false)
# max = safety_max - deadzone
sensor: f_fin_safety_max(rad) 0.47 # in, damage to glider
sensor: f_fin_deadzone_width(rad) 0.020 # in, Sets x_ limit
sensor: f_fin_db_frac_dz(nodim) 1.0 # deadband as fraction of dead zone
sensor: f_fin_nominal_vel(rad/sec) 0.0981 # in, nominal speed
sensor: f_fin_reqd_vel_frac(nodim) 0.25 # in, fraction of nominal
# required before saying not
# moving fast enuf
# Specs linear relationship between sensor units (rads) and the
# voltage we actually read out of the AD for position
# fin(rad) = _cal_m(rad/Volt) * volts + fin_cal_b(rad)
sensor: f_fin_cal_m(rad/Volt) 0.6461 # slope
sensor: f_fin_cal_b(rad) -.7904 # y-intercept
# de_pump.c
# Inputs:
sensor: c_de_oil_vol(cc) 270.0 # >0, goes up
sensor: u_min_de_oil_flux(cc/sec) 0.10 # if below, error
sensor: u_de_oil_vol_check_time(sec) 0.0 # monitoring rate while stable
# 0 = every cycle
sensor: u_secs_for_oil_vol_stabilization(secs) 30.0 # <=0 disables, wait time for any gas in system
# to stabilize after ascents
sensor: u_de_avg_oil_vol_err_alpha(nodim) 0.05 # 0 - 0.05 (0.05 = more weight to long term average)
# set these to illegal values to insure them getting set in autoexec.mi
sensor: f_de_oil_vol_pot_voltage_min(volts) -20.0 # raw AD voltage of fully retracted pot
sensor: f_de_oil_vol_pot_voltage_max(volts) -20.0 # raw AD voltage of fully extended pot
sensor: f_de_oil_vol_in_system(cc) 650.0 # volume of internal oil reservoir
sensor: f_de_oil_vol_safety_max(cc) 300.0 # shouldn't go beyond this
sensor: f_de_oil_vol_deadz_width(cc) 30.0 # sets x_ limit
sensor: f_de_oil_vol_db_frac_dz(nodim) 0.667 # deadband as fraction of dead zone
sensor: f_de_max_secs_for_updown_to_finish(secs) 540.0 # 9 minutes (~ how
# long it takes
# to retract 650cc
# of oil at surface)
sensor: x_de_pump_disable(bool) 0 # t-> disable the de_pump driver,
# needed to run GliderDos tvalve command
# Outputs:
sensor: m_de_oil_vol(cc) 0.0 # calibrated from m_de_oil_vol_pot_voltage
sensor: m_de_oil_vol_pot_voltage(volts) 0.0 # raw voltage from AD
sensor: m_is_de_pump_moving(bool) 0 # t-> motor is moving
sensor: x_de_oil_vol_deadband(cc) 0.0 # how close is good enough
# = f_de_oil_vol_deadz_width *
# f_de_oil_vol_db_frac_dz
# max = safety_max - deadz_width
sensor: x_de_oil_vol_max(cc) 0.0 # Maximum OPERATIONAL limit
# Needed to adjust voltage limits in de_pump_chore to account for pump
# and valve power off time latencies, and gas in the system
sensor: x_de_avg_oil_vol_err_on_ascent(cc) 0.0 # avg(measured - commanded)
sensor: x_de_avg_oil_vol_err_on_descent(cc) 0.0 # avg(measured - commanded)
# Keeps tract of the oil flux in the deep electric
sensor: x_de_oil_flux(cc/sec) 0.0 # positive = pumping, negative = retracting
sensor: x_de_ignore_tvalve_oddity(bool) 0 # t-> don't log tvalve oddity after
# de_pump chore
# threng.c
sensor: c_thermal_updown(enum) 0.0 # in
# CTHRENG_DONT_USE(-1) Disable this driver (thrvalve still active)
# CTHRENG_UP_CHARGE(0) Go thru an UP, CHARGE cycle
# CTHRENG_DOWN(1) DOWN
sensor: m_thermal_updown(enum) 3.0 # out
# MTHRENG_CHARGE(0) Stable in the charge position
# MTHRENG_DOWN(1) Stable In the down position
# MTHRENG_MOVING(2) Moving between states
# MTHRENG_NOT_IN_USE(3) Higher level driver disabled
# MTHRENG_ERROR(-1) Something bad happened, someone should abort
sensor: u_thermal_valve_time_in_up_pos(s) 60.0 # in, how long thermal valve says in up position
# before being automatically moved to charge
sensor: u_thermal_valve_time_in_down_pos(s) 300 # in, 5 minutes in seconds
# how long the valve must be in the down
# position before allowed to go to up position
# Used to prevent "double charges". Ignored
# for safety sake if glider is deeper than the
# minimum of f_max_working_depth or f_at_risk_depth
# thrvalve.c
sensor: f_thermal_valve_time_over_slot(msec) 150 # millisecs the thermal valve hole is over the sensor
sensor: c_thermal_valve(enum) # in, THRVALVE_UP(1),THRVALVE_CHARGE(2), THRVALVE_DOWN(3)
sensor: m_thermal_valve(enum) # out, THRVALVE_UNKNOWN(0), THRVALVE_UP(1), THRVALVE_MOVING_TO_UP(-1)
# THRVALVE_CHARGE(2), THRVALVE_MOVING_TO_CHARGE(-2),
# THRVALVE_DOWN(3), THRVALVE_MOVING_TO_DOWN(-3)
sensor: m_is_thermal_valve_moving(bool) # out, true if valve is moving
sensor: x_thermal_valve_move_backwards(bool) 0 # In, non-zero means move valve backwards
# DO NOT MANUALLY set this, it is maintained
# by gliderdos TVALVE command. Only used in -lab.
sensor: u_thermal_valve_check_time(sec) 180 # how often check valve position
# <= 0 to disable
# tcm3.c
sensor: f_tcm3_cal_points(nodim) 50 # Default number of sample points in calibration
sensor: m_tcm3_stddeverr(uT) -1 # The compass samples magnetic field
# standard deviation error.
sensor: m_tcm3_xcoverage(%) -1 # Percentage of how much of the X magnetometer
# axis was covered by the sampling.
sensor: m_tcm3_ycoverage(%) -1 # Percentage of how much of the Y magnetometer
# axis was covered by the sampling.
sensor: m_tcm3_zcoverage(%) -1 # Percentage of how much of the Z magnetometer
# axis was covered by the sampling.
sensor: m_tcm3_magbearth(uT) -1 # The calculated Earth's magnetic field
# magnitude from the calibration samples.
sensor: m_tcm3_is_calibrated(bool) 0 # The compass calibration status flag.
sensor: m_tcm3_poll_time(ms) 0 # Time after open_uart() call we poll for data
sensor: m_tcm3_recv_start_time(ms) 0 # Time after open_uart() call we start receiving data
sensor: m_tcm3_recv_stop_time(ms) 0 # Time after open_uart() call we stop receiving data
# attitude.c/attitude_tcm3.c
sensor: c_att_time(sec) 0 # in, time spacing for attitude checks
# <0 is off, =0 as fast as possible
# otherwise secs between measurements
sensor: c_att_recall(msec) -1.0 # in, <=0 no subcycle measurements
# >0 millisecs between subcycle measurements
# (c_att_time must be 0 to enable)
sensor: m_roll(rad) 0 # out, >0 is port wing up
sensor: m_pitch(rad) 0 # out, >0 is nose up
sensor: m_heading(rad) 0 # out
sensor: m_vehicle_temp(degC) 0 # out
# oceanpres.c
sensor: c_pressure_time(sec) 1 # in, <0 is off, =0 as fast as possible
# >0 num seconds betweens measurements
sensor: c_pressure_recall(msec) -1 # in, <=0 no subcycle measurements
# >0 millisecs between subcycle measurements
# c_pressure_time must be 0 to enable
sensor: m_pressure_voltage(volts) # out, measured, averaged or median filtered from 20 raw samples of AD
sensor: m_pressure(bar) # out, measured NOT clipped:
# <0 not good, glider above the surface,
# 0 surface
# >0 glider below surface in water
sensor: m_depth(m) 0 # out, calculated clips at 0
# 0 surface
# >0 glider below surface in water
sensor: u_use_ctd_depth_for_flying(bool) 0 # true=> use ctd measurement for m_depth
# implemented as emergency workaround for
# broken ocean pressure
sensor: m_depth_rejected(bool) 0 # out, true if depth measurement is filtered
# 1 ==> thinks glider at surface
# U_DEPTH_RATE_FILTER_SUB_SUR_DEP ==> M_DEPTH
# 2 ==> thinks glider is NOT surface
# no M_DEPTH is output
sensor: u_depth_rate_filter_sub_sur_dep(m) 0.05 # used for M_DEPTH when m_pressure rejected at
# the surface
sensor: u_depth_rate_filter_factor(nodim) 4.0 # <=0 disables bad depth filter,
# otherwise multiplies
# f_nominal_dive_rate by this
# value to create the cutoff value
# for an acceptable depth
# rate of change
sensor: x_measured_depth(m) 0.0 # The last published M_DEPTH where M_DEPTH_REJECTED is 0
# i.e. actually came from pressure sensor in lieu of a
# made up value at the surface. Depth rate filter compares
# current "depth" being evaluated against this
sensor: u_pressure_autocal_min_time_between(secs) 180 # minimum interval time
# between auto calibrations
sensor: u_pressure_autocal_enabled(bool) 1 # 0=turned off, 1=turned on
sensor: u_pressure_autocal_deadband(bar) 0.025 # re-calibrate when drift is
# beyond + or - this
sensor: u_pressure_autocal_max_allowed(bar) 0.2 # print oddity when drift is
# beyond + or - this, don't
# re-calibrate
sensor: u_pressure_autocal_performed(bool) 0 # becomes 1 when auto re-calibration is done
# becomes 2 when manual re-calibration is done
# becomes -1 when excessive pressure drift is detect:
# (no calibration is done!)
sensor: x_pressure_manual_cal_now(bool) 0 # non-zero causes manual (non-auto) re-calibration
# set to 1 by GliderDos>zero_pressure_sensor
# set to 0 by ocean_pressure device driver when
# manual re-calibration is done
# inputs, config stuff FS-->full scale
sensor: u_bar_per_meter(bar/m) 0.1 # Converts m_pressure to m_depth
sensor: f_ocean_pressure_full_scale(bar) 13.8 # pressure @ FS volts
sensor: f_ocean_pressure_min(volts) 0.20 # voltage for 0 pressure
sensor: f_ocean_pressure_max(volts) 2.40 # voltage for FS pressure
sensor: u_pressure_median(bool) 0 # T ==> perform median filtering (new behavor),
# F ==> perform averaging only (old behavior)
sensor: u_pressure_median_k(nodim) 1 # standard deviation mutiplier for median filtering
sensor: u_pressure_median_iter(nodim) 1 # number of iterations for median filtering
# (minimum for this sensor is clipped at 1)
sensor: u_pressure_median_median(bool) 0 # T ==> after median filtering, use median of remaining samples for pressure measurement
# F ==> after median filtering, use mean of remaining samples for pressure measurement
sensor: u_pressure_median_debug(enum) 0 # bit-mapped debug control (values are additive):
# 0 = no debug functionality
# 1 = (b0) debug trace for statistics
# 2 = (b1) debug trace for oops
# 4 = (b2) record raw samples
# 8 = (b3) debug trace for timing
# raw samples for debugging the averaging/median filtering code
# (only if enabled by u_pressure_median_debug)
sensor: m_pressure_raw_voltage_sample0(volts) # first raw AD sample
sensor: m_pressure_raw_voltage_sample1(volts) # second raw AD sample
sensor: m_pressure_raw_voltage_sample2(volts) # third raw AD sample
sensor: m_pressure_raw_voltage_sample3(volts) # fourth raw AD sample
sensor: m_pressure_raw_voltage_sample4(volts) # fifth raw AD sample
sensor: m_pressure_raw_voltage_sample5(volts) # sixth raw AD sample
sensor: m_pressure_raw_voltage_sample6(volts) # seventh raw AD sample
sensor: m_pressure_raw_voltage_sample7(volts) # eighth raw AD sample
sensor: m_pressure_raw_voltage_sample8(volts) # ninth raw AD sample
sensor: m_pressure_raw_voltage_sample9(volts) # tenth raw AD sample
sensor: m_pressure_raw_voltage_sample10(volts) # eleventh raw AD sample
sensor: m_pressure_raw_voltage_sample11(volts) # twelfth raw AD sample
sensor: m_pressure_raw_voltage_sample12(volts) # thirteenth raw AD sample
sensor: m_pressure_raw_voltage_sample13(volts) # fourteenth raw AD sample
sensor: m_pressure_raw_voltage_sample14(volts) # fifteenth raw AD sample
sensor: m_pressure_raw_voltage_sample15(volts) # sixteenth raw AD sample
sensor: m_pressure_raw_voltage_sample16(volts) # seventeenth raw AD sample
sensor: m_pressure_raw_voltage_sample17(volts) # eighteenth raw AD sample
sensor: m_pressure_raw_voltage_sample18(volts) # nineteenth raw AD sample
sensor: m_pressure_raw_voltage_sample19(volts) # twentieth raw AD sample
# engpres.c (driver name: thermal_acc_pres)
sensor: c_thermal_acc_pres_time(sec) 1 # in, <0 is off, =0 as fast as possible
# >0 num seconds between measurements
sensor: c_thermal_acc_pres_recall(msec) -1.0 # in, <=0 no subcycle measurements
# >0 millisecs between subcycle measurements
# c_thermal_acc_pres_time must be 0 to enable
sensor: m_thermal_acc_pres_voltage(volts) 0 # out, raw voltage from AD
sensor: m_thermal_acc_pres(bar) 0 # out, calibrated from m_thermal_acc_pres_voltage
# inputs, volts/pressure config stuff FS-->full scale
sensor: f_thermal_acc_pres_full_scale(bar) 248.222 # pressure @ FS volts
sensor: f_thermal_acc_pres_min(volts) 0.143 # voltage for 0 pressure
sensor: f_thermal_acc_pres_max(volts) 2.400 # voltage for FS pressure
sensor: m_thermal_acc_vol(cc) # out, computed oil volume from m_thermal_acc_pres
# inputs, volume/pressure config stuff
# specs PV=k relationship between pressure and volume
# m_thermal_acc_vol(cc) = f_thermal_acc_vol_cal_v0(cc) *
# (1 - f_thermal_acc_vol_cal_p0(bar)/m_thermal_acc_pres(bar))
sensor: f_thermal_acc_vol_cal_v0(cc) 2263.3036 # in, invariant volume with piston full out
sensor: f_thermal_acc_vol_cal_p0(bar) 31.0114 # in, initial pressure with piston full out
sensor: m_thermal_enuf_acc_vol(bool) 0 # out, reflects state of switch that measure
# adequate thermal displacement.
# 0==> not enuf !=0 ==> enuf
sensor: x_thermal_reqd_acc_vol(cc) 300 # out, the volume of oil in accumulator when
# switch says we have enuf
# thrpump.c
sensor: c_thermal_pump(enum) 0 # in, commanded state of thermal pump:
# CTHRPUMP_OFF 0.0
# CTHRPUMP_ON_WITH_CHECKS 1.0
# CTHRPUMP_ON_REGARDLESS 2.0 note: only in -lab
sensor: m_thermal_pump(enum) 0 # out, actual state of thermal pump:
# MTHR_PUMP_OFF 0.0
# MTHR_PUMP_ON 1.0
# MTHR_AWAITING_NOT_ENUF_VOLUME -1.0
# MTHR_AWAITING_REQD_PITCH -2.0
# MTHR_AWAITING_VALVE -3.0
# MTHR_AWAITING_AIR -4.0
sensor: u_thermal_pump_reqd_pitch(rad) -0.1745 # in, how far down glider must be pointing in
# to use the pump (-0.1745rad => -10deg)
sensor: x_thermal_pump_start_in(sec) -1.0 # in/out, advisory time until thermal pump is engaged
# altimeter.c
sensor: c_alt_time(sec) 0 # in, time spacing for altimeter pings
# <0 is off, =0 as fast as possible
# >0 that many seconds betweens measurements
sensor: c_alt_recall(msecs) -1.0 # in, <=0 no subcycle sampling
# >0 millisecs between subcycle measurements
# c_alt_time must be 0 to enable
sensor: f_altimeter_model(enum) 0 # in, which altimeter is installed:
# 0 Benthos, sample 400ms after power on
# 1 AirMar(mod1), sample 3.2 to 5 sec after power on
# -1 experimental, sample u_exp_alt_pwr_stb_time secs
# after power on
sensor: u_exp_alt_pwr_stb_time(s) 0 # in, only looked at if f_altimeter_model == -1
# control when to sample experimental altimeter
# >0 the seconds to wait before reading altimeter
# 0 Never power off the altimeter, i.e. leave
# it powered on all the time.
sensor: u_exp_alt_correction(m) 0 # in, only looked at if f_altimeter_model == -1 (experimental)
# used to compensate for fixed offsets in altimeters
# M_RAW_ALTITUDE(m) = M_RAW_ALTITUDE(m) + U_EXP_ALT_CORRECTION(m)
sensor: u_alt_min_post_inflection_time(sec) 10.0 # num secs after inflection before we take data
sensor: u_alt_min_depth(m) 2.0 # how deep vehicle must be to use altitude
sensor: u_alt_reqd_good_in_a_row(nodim) 3 # how many in a row we require before accepting reading
sensor: m_raw_altitude(m) # out, height above bottom, unfiltered
sensor: m_raw_altitude_rejected(bool) # out, true if altimeter did not supply reading
sensor: m_altimeter_voltage(volts) # out, voltage read from the A/D
# watchdog.c
sensor: c_weight_drop(bool) 0 # in, non-zero->drop the weight
sensor: u_tickle_on_gps(bool) 1 # in, non-zero reset watchdog on every gps fix
sensor: u_tickle_on_console_cd(bool) 1 # in, non-zero reset watchdog if have freewave
sensor: x_hardware_cop_timeout(hours) -1 # out, reflects state of jumper
# -1 can't tell, >=RevE will be 2 or 16
sensor: m_cop_tickle(bool) 1 # out, set to 1 whenever COP is tickled
sensor: m_tot_on_time(days) 0 # out, How long we have been powered on
# airpump.c
sensor: c_air_pump(enum) 0 # in, <0 turns it off regardless
# 0 turns it off unless thermal or deep electric engine needs it
# >0 turns it on
sensor: u_thermal_min_time_in_esc_pos(s) 1800.0 # in, for thermal only
# the number of seconds the air pump solenoid must
# stay in escape position before it is automatically
# returned to fill position. Note: The glider must also
# NOT be at the surface for the valve to be automatically
# moved to fill position for thermal or electric.
sensor: m_air_pump(bool) 0 # out, whether it is on or not
sensor: m_air_fill(bool) 0 # out, T->air pump solenoid in fill position
# F->air pump solenoid in escape position
# battery.c
sensor: u_battery_time(sec) 0 # in, Time between battery measurements
# <0 is off, =0 as fast as possible
# >0 num seconds betweens measurements
sensor: u_battery_recall(msecs) -1.0 # <=0 no subcycle measurements
# >0 millisecs between subcycle measurements
# u_battery_time must be 0 to enable
sensor: m_battery_inst(volts) 12 # out, Instantaneous battery voltage
sensor: m_battery(volts) 12 # out, Average Battery voltage
sensor: u_battery_alpha(nodim) 0.1 # in, The weighting factor to produce the average.
# Should be between 0 and 1.
# 1 ==> no averaging at all
# smaller numbers mean more averaging
#M_BATTERY = U_BATTERY_ALPHA * M_BATTERY_INST +
# (1-U_BATTERY_ALPHA) * M_BATTERY
# vacuum.c
sensor: u_vacuum_time(sec) 0 # in, Time between vacuum measurements
# <0 is off, =0 as fast as possible
# >0 that many seconds betweens measurements
sensor: u_vacuum_recall(msec) -1 # in, <=0 no subcycle measurements
# >0 millisecs between subcycle measurements
# u_vacuum_time must be 0 to enable
sensor: m_vacuum(inHg) # out, Internal glider pressure
sensor: u_vacuum_cal_m(inHg/Volt) -14.4059 # Factory Calibration data
sensor: u_vacuum_cal_b(inHg) 31.64615 # inHg = m V + b
# leakdetect.c
sensor: c_leakdetect_time(s) 0.0 # in, Time between leakdetect measurements
# <0 is off, =0 as fast as possible
# >0 that many seconds betweens measurements
sensor: c_leakdetect_recall(msec) -1.0 # in, <=0, no subcycle measurements
# >0 millisecs between subcycle measurements
# c_leakdetect_time must be 0 to enable
sensor: f_leakdetect_threshold(volts) 2.0 # in, Any M_LEAKDETECT_VOLTAGE below this is considered
# a leak.
sensor: m_leakdetect_voltage(volts) 0.0 # out Voltage that was read
# The lower the voltage, the worse the leak.
sensor: m_leak(bool) 0.0 # non-zero ==> m_leakdetect_voltage < f_leakdetect_threshold
# pinger.c
sensor: u_pinger_rep_rate(sec) 0 #in, secs between primary depth pings
# 0 turns it off
sensor: u_pinger_max_depth(m) 0 #in, Secondary ping at 1 second when m_depth
# is >= this depth. (assuming nominal
# 8 second u_pinger_rep_rate)
sensor: u_ping_n_enabled(bool) 0 # if non-zero enable "ping N times"
# functionality, 0 turns it off for
# "quiet missions"
sensor: c_pinger_on(bool) 0 # in, non-zero means ping N times once
# gps.c
sensor: c_gps_on(enum) 0 # in, <0-> off always 0->off, but surface autoon, 1->gps take fixes
# >1 take fixes + diag output [see gps.h]
sensor: u_gps_reqd_valid_fixes(nodim) 6 # in, reqd number of valid fixes since power on
# before we publish as m_gps_lat/lon
sensor: m_gps_on(bool) 0 # out, >0 means gps is actually turned on
sensor: m_gps_lat(lat) 69696969 # out DDMM.MMMM >0 ==> North <0 ==> South
sensor: m_gps_lon(lon) 69696969 # out DDMM.MMMM >0 ==> East <0 ==> West
sensor: m_gps_x_lmc(m) 0 # out position in local mission coordinates
sensor: m_gps_y_lmc(m) 0 # out
sensor: m_gps_status(enum) 69 # out, updated with status of gps after received a line
sensor: m_gps_full_status(enum) 69 # out, updated with status of gps after every attempt to
# to read characters from the gps
# 0 is good fix, m_gps_lat/lon update
# >0 no fix see gps.h for list of why
sensor: m_gps_ignored_lat(lat) 69696969 # out, first few ignored gps fixes here
sensor: m_gps_ignored_lon(lon) 69696969 # published when m_gps_status == GPS_STATUS_FIRST_IGNORED_VALID(1)
sensor: m_gps_invalid_lat(lat) 69696969 # out, published on A lines
sensor: m_gps_invalid_lon(lon) 69696969
sensor: m_gps_toofar_lat(lat) 69696969 # out, published if too far from DR point
sensor: m_gps_toofar_lon(lat) 69696969 # M_GPS_STATUS == GPS_STATUS_TOOFAR_FIX(3)
sensor: m_gps_dist_from_dr(m) 69696969 # out, how far fix is from dead reckoned position
sensor: x_gps_reasonable_radius(m) 69696969 # out, how far fix CAN BE from dead reckoned position
# = U_GPS_REASONABLE_FACTOR *
# ( U_GPS_UNCERTAINITY + secs_since_last_valid_gps_fix *
# (U_MAX_WATER_SPEED + nominal glider horizontal speed))
sensor: u_gps_reasonable_factor(nodim) 1.0 # in, see equation above
sensor: u_gps_uncertainity(m) 30.0 # in, see equation above
# This data is read from gps and published
sensor: m_gps_utc_day(byte) 0 # 1-31 Date/Time of position
sensor: m_gps_utc_month(byte) 0 # 1-12
sensor: m_gps_utc_year(byte) 0 # 00, 01, ... until Y3K
sensor: m_gps_utc_hour(byte) 0 # 0-23
sensor: m_gps_utc_minute(byte) 0 # 0-59
sensor: m_gps_utc_second(nodim) 0 # 0-59.xxxxxx
sensor: m_gps_speed(m/s) 0 # speed over ground
sensor: m_gps_heading(rad) 0 # magnetic heading
sensor: m_gps_mag_var(rad) 0 # mag_heading = true_heading + mag_var
# mag_var>0 ==> variation is West (like on cape cod)
sensor: m_system_clock_lags_gps(sec) 0 # lagtime between persistor and gps clock
sensor: m_avg_system_clock_lags_gps(sec) 0 # exponential mean of above lagtime
sensor: u_alpha_system_clock_lags_gps(nodim) 0.05 # weight in exponential mean
# generic time syncing sensor, called in surface.c and g_shell.c
sensor: u_max_lag_before_syncing_time(sec) 12 # sync_time when avg lag exceeds 12 secs
# generic sensor to record syncing offsets, called in g_shell.c
sensor: x_system_clock_adjusted(sec) 0 # records the last sync_time offset
# argos.c
sensor: c_argos_on(enum) 0 # <0 PTT is always turned off, even at surface
# 0 PTT powered off, but can be auto turned on at surface
# >0 PTT is powered on and transmitting:
# 1 no diagnostic output
# 2 output xmitted chars to MLOG/TERM
# 3 output xmitted/recvd chars to MLOG/TERM
sensor: m_argos_on(bool) 0 # out, >0 means argos is actually turned on
sensor: m_argos_sent_data(bool) 0 # out, > 0 means data was sent to PTT
sensor: m_argos_is_xmitting(bool) 0 # out, > 0 means PTT is radiating
# sensors to support new PTT format, along with legacy stuff
sensor: x_argos_type(enum) 0 # 0 SmartCAT (legacy)
# 1 X-CAT (external PIC)
sensor: f_argos_format(enum) 0 # 0 rev0 legacy (32 byte)
# 1 rev1 Mar05 (31 byte)
# ctd.c
sensor: c_profile_on(sec) 0 # in, <0 is off, =0 as fast as possible
# >0 that many seconds betweens measurements
sensor: c_profile_recall(msec) 2000 # in, <=0 no subcycle measurements
# millisecs between subcycle measurements
# c_profile_on must be 0 to enable
sensor: m_water_cond(S/m) 3 # out, conductivity
sensor: m_water_temp(degC) 10 # out
sensor: m_water_pressure(bar) 0 # out
# iridium.c
sensor: c_iridium_on(enum) 1 # in
# <0 turns it off
# 0 turns it off
# 1 turns it on, becomes 2nd console when connected
# 2 turns it on, no 2nd console
# 3 turns it on in "send data" mode
# 4 turns it on in "echo data" mode
# >4 turns it off
# Phone number+prefix, assuming 508 548-2446 target
# For a commercial card: 0015085482446
# For a military card: 006975085482446
# You should put YOUR number in autoexec.mi
sensor: c_iridium_phone_num(digits) 15085482446 # WRC phone number !no spaces!
sensor: c_iridium_lead_zeros(nodim) 2 # number of leading zeros in phone number
# typically 2 for both commercial or military
# How long to wait for modem to respond at various times
sensor: c_iridium_atok_timeout(sec) 30 # how long to wait for OK after AT
# should be immediate if phone is attached
sensor: c_iridium_register(sec) 30 # minimum time for iridium to register after
# powerup. We do not try to dial for this many secs.
sensor: c_iridium_await_connect_max(mins) 5 # how long we will wait for a response
# after dialing the iridium phone number.
# When exceeded the iridium power is cycled.
# Zero or negative means wait forever.
sensor: c_iridium_no_char_timeout(mins) 10 # How long to wait for a character at all other times
# This is internally to clipped to never be less than 5 minutes
# unless you are in lab_mode. This is catch all to force an iridium
# error (and a redial) if it ever gets "stuck"
sensor: c_iridium_power_on_delay(sec) 3 # min time between power on and sending AT
# internally clipped to maximum of c_iridium_register secs
sensor: c_iridium_redial_delay(sec) 1 # delay time between redials. Values less than
# the cycle time (nominally two seconds)
# will delay till next cycle (i.e. 2 seconds)
sensor: c_iridium_time_til_callback(sec) 0.0 # Set this non-zero to have iridium
# hang up and call back in that many seconds.
# Call back is canceled if anyone sets C_IRIDUM_ON
sensor: u_iridium_max_time_til_callback(sec) 1800.0 # Maximum legal value for
# C_IRIDIUM_TIME_TIL_CALLBACK
sensor: c_iridium_redials_per_on_off(nodim) 1 # how often we cycle the iridium
# power when trying to connect. Min 1, Max 10.
sensor: c_iridium_cmd_echo(enum) 1 # 0 = do not echo modem commands; 1 = do echo
sensor: m_iridium_on(bool) 0.0 # out 0 it's off, 1 it's on
sensor: m_iridium_connected(bool) 0 # out 1==> modem is connected
sensor: m_iridium_console_on(enum) 0. # out. 0 = iridium console off, 1 = on
sensor: m_iridium_status(enum) 99.0 # out MODEM_NO_CARRIER = 0
# MODEM_OK, = 1
# MODEM_CONNECT, = 2
# MODEM_ERROR, = 3
# MODEM_NO_ANSWER, = 4
# MODEM_BUSY, = 5
# MODEM_NO_DIALTONE, = 6
# LOGGING_IN = 7
# LOGGED_ON = 8
# MODEM_AWAITING_OK = 10,
# MODEM_AWAITING_CONNECTION, = 11
# MODEM_TIMEOUT, = 12
# MODEM_UNKNOWN = 99,
# NO_CHARS_TIMEOUT = 100,
sensor: m_iridium_waiting_registration(bool) # out, 1 ==> waiting for phone to register
sensor: m_iridium_waiting_redial_delay(bool) # out, 1 ==> waiting to redial
sensor: m_iridium_redials(nodim) 0.0 # out, number of redials since phone was on
sensor: m_iridium_dialed_num(nodim) 0.0 # out, number of times phone was dialed
# incremented on every dial attempt
# it is never reset
sensor: m_iridium_call_num(nodim) 0.0 # out, is incremented on every connection,
# it is never reset
# science.c/science_super.c
sensor: c_science_on(bool) 1 # In, nonzero turns on science uart
# 0 off
# 1 on + log only errors
# 2 on + log successfully received variables
# + log all transmitted lines
# 3 on _log all received chars
# + log all transmitted lines
sensor: m_science_on(bool) 0 # Out, actual power state of science uart
sensor: sci_m_science_on(bool) 0 # In, set by science when powered on
# clr by science when safe to power off
sensor: c_science_all_on(secs) 2 # in, if enabled this value is set into the
# C_xxx_ON for all installed sensors on
# the science computer as detected by
# SCI_xxx_IS_INSTALLED on every cycle
sensor: c_science_all_on_enabled(bool) 1 # in, non-zero enables c_science_all_on
sensor: sci_software_ver(nodim) 0 # In, software version running on science
sensor: sci_reqd_heartbeat(secs) -1.0 # In. How often each side must communicate
# over the clothesline
# DISABLED, too many false alarms
sensor: m_science_sent_some_data(nodim) 0 # Out, incremented when the glider pulls a character
# out of the clothesline buffer where chars received
# from science processor are stored.
sensor: u_science_max_power_off_time(s) 120 # In, how long to wait for sci_m_science_on
# to go low before giving up and yanking power
sensor: u_science_power_off_delay(s) 0.5 # In, how long to wait AFTER sci_m_science_on
# has gone to 0 before yanking power. This
# gives science a little time to clean up
sensor: u_max_clothesline_lag_for_consci(s) 20.0 # don't attempt to consci until
# glider-science time lag is
# below this.
sensor: m_science_ready_for_consci(bool) 0 # out, true -> clothesline ready for consci
# determined in sensor_processing.c
sensor: x_sci_cmd_mode_state(enum) 0 # out, state of science console state machine
sensor: x_sci_cmd_mode_state(enum) 0 # out, state of science console state machine
# see science_cmd_execution.h, enum science_cmd_mode_t
sensor: u_sci_cmd_max_ack_wait_time(s) 60.0 # in, how long to wait for science to acknowdge request
# to go to command mode
sensor: u_sci_cmd_max_consci_time(s) 1200. # in, maximum time in consci
sensor: f_sci_max_input_process_time(msec) 200. # In, how long science driver can spend
# processing input lines from science
# on each call. Set only to prevent
# science data from consuming all the
# glider cpu time. Not really an issue
# with superscience, this replaces
# f_sci_max_sensors_per_call(nodim)
sensor: c_science_printout(nodim) 2 # How much science printout is seen
# on the glider:
# 0 none
# 1 proglet _begin()/_end()
# 2 proglet _start()/_stop()
# 3 proglet _run
sensor: c_science_stress_on(sensors/sec) 0 # causes proglet to send SCI_GENERIC_A-Z
# this many times/sec for diagnostic purposes
sensor: sci_m_present_time(timestamp) 0 # In, written by science on every cycle
# their notion of time, secs since 1970
sensor: m_science_clothesline_lag(s) 0 # out, How far behind science is
# M_PRESENT_TIME - SCI_M_PRESENT_TIME
sensor: sci_m_free_heap(bytes) -1 # In, written by science proglet house_elf
# when it is started or stopped
sensor: sci_wants_surface(enum) 0 # In, requests from science computer
# 0 science does not need to surface
# 1 science wants to surface at next reasonable opportunity
# 2 science wants to surface NOW!
sensor: sci_wants_comms(bool) 0 # In, t-> science computer wants direct comms
# CTD data measured by Science. Updates m_water_cond, m_water_temp, & m_water_pressure
sensor: sci_ctd_is_installed(bool) 0 # in, t--> ctd installed on science
#
sensor: sci_ctd41_is_installed(bool) 0 # in, t--> ctd installed on science
sensor: sci_ctd41cp_is_installed(bool) 0 # in, t--> ctd installed on science
sensor: sci_nbctd_is_installed(bool) 0 # in, t--> ctd installed on science
sensor: sci_ctd41cp_sim_is_installed(bool) 0 # in, t--> ctd being simulated on science computer
sensor: c_ctd41cp_num_fields_to_send(nodim) 3 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# A negative value signifies
# to use this value as a bitmap.
# The user may specify any
# outputs regardless of order by
# by using this sensor as a bitmap.
# -1 * 2^(f1-1)+2^(f2-1)+...
# where fn is the field number.
# For example, if the user wished
# to just record temperature
# they would use:
# (-1 *) 2^(2-1) = -2
# we use this one instead for a Neil Brown CTD
sensor: c_nbctd_num_fields_to_send(nodim) 3 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# A negative value signifies
# to use this value as a bitmap.
# The user may specify any
# outputs regardless of order by
# by using this sensor as a bitmap.
# -1 * 2^(f1-1)+2^(f2-1)+...
# where fn is the field number.
# For example, if the user wished
# to just record temperature
# they would use:
# (-1 *) 2^(2-1) = -2
sensor: sci_water_cond(S/m) 3 # out, conductivity f#=1
sensor: sci_water_temp(degC) 10 # out f#=2
sensor: sci_water_pressure(bar) 0 # out f#=3
sensor: sci_ctd41cp_timestamp(timestamp) 0 # out, secs since 1970 f#=4
# we use this one instead for a Neil Brown CTD
sensor: sci_nbctd_timestamp(timestamp) 0 # out, secs since 1970 f#=4
sensor: sci_generic_a(nodim) 0 # unspecified variables for science to use
sensor: sci_generic_b(nodim) 0
sensor: sci_generic_c(nodim) 0
sensor: sci_generic_d(nodim) 0
sensor: sci_generic_e(nodim) 0
sensor: sci_generic_f(nodim) 0
sensor: sci_generic_g(nodim) 0
sensor: sci_generic_h(nodim) 0
sensor: sci_generic_i(nodim) 0
sensor: sci_generic_j(nodim) 0
sensor: sci_generic_k(nodim) 0
sensor: sci_generic_l(nodim) 0
sensor: sci_generic_m(nodim) 0
sensor: sci_generic_n(nodim) 0
sensor: sci_generic_o(nodim) 0
sensor: sci_generic_p(nodim) 0
sensor: sci_generic_q(nodim) 0
sensor: sci_generic_r(nodim) 0
sensor: sci_generic_s(nodim) 0
sensor: sci_generic_t(nodim) 0
sensor: sci_generic_u(nodim) 0
sensor: sci_generic_v(nodim) 0
sensor: sci_generic_w(nodim) 0
sensor: sci_generic_x(nodim) 0
sensor: sci_generic_y(nodim) 0
sensor: sci_generic_z(nodim) 0
# For testing connectivity
sensor: x_ping_glider_to_sci(nodim) 0 # Out, science driver increments this each cycle
# and can be sent to science for testing
sensor: sci_ping_sci_to_glider(nodim) 0 # In, science can send this to us if its copy
# does not match recvd version of x_ping_glider_to_sci
# legacy sensor for Benthos Acoustic Modem amconnect.RUN
sensor: c_acoustic_modem_target_id(enum) 0 # Out, the address of the remote modem
# (typically a deck unit) being called. Used by
# the science program amconnct. min 0, max 31.
# sensors for Benthos Acoustic Modem (bam) proglet
sensor: c_bam_on(sec) 0 # >0 secs between run cycles, <0 off,
# 0 = fast as possible
sensor: c_bam_mode(enum) 0 # 0: command mode
# 1: data collect mode
sensor: c_bam_target_id(enum) 1 # The address of the remote host modem being
# called (typically a deck unit, min 0, max 31).
sensor: c_bam_update_secs(sec) 120 # how often to transmit location and depth,
# <0 => don't transmit location and depth
# minimum value = c_bam_cmd_parse(sec) *
# (c_bam_number_of_echos(nodim) + 1)
sensor: c_bam_inactivity_secs(sec) 60 # how long the modem must be quiet before
# location is broadcast
sensor: c_bam_cmd_parse_secs(sec) 5 # How often to check command input buffer
sensor: c_bam_number_of_echos(nodim) 3 # Number of times to echo commands
sensor: c_bam_chars_to_get_before_surfacing(nodim) 1000 # how many chars to collect
# in modmdata.dat before
# surfacing, <0 => don't
# collect any data
sensor: c_bam_datacol_report_secs(sec) 10 # How often to send bam_datacol
# output sensors to glider
# (xx_rcvd_chars_xx)
sensor: sci_bam_is_installed(bool) # true -> proglet is installed
sensor: sci_bam_science_on(bool) # false -> exit supersci app
# maps to c_science_on
sensor: sci_bam_rcvd_chars_since_last_report(nodim) # num of chars heard in last 10 seconds
sensor: sci_bam_rcvd_chars_since_last_surfacing(nodim) # num of chars heard since last surfacing
# HydroScat2 sensors
sensor: c_hs2_on(sec) 0 # in, sets seconds between hs2 measurements
# < 0 stops hs2 data collection
# >=0 values are forced to be between 2 and 10 inclusive.
sensor: sci_hs2_is_installed(bool) 0 # in, t--> installed on science
sensor: sci_hs2_1bb(nodim) 0 # out, "bb" backscatter for hs2 channel 1
sensor: sci_hs2_1bbu(nodim) 0 # "bbu" backscatter for hs2 channel 1
sensor: sci_hs2_2bb(nodim) 0 # "bb" backscatter for hs2 channel 2
sensor: sci_hs2_2bbu(nodim) 0 # "bbu" backscatter for hs2 channel 2
sensor: sci_hs2_3bb(nodim) 0 # "bb" backscatter for hs2 channel 3
sensor: sci_hs2_3bbu(nodim) 0 # "bbu" backscatter for hs2 channel 3
# proglet bb2f: wet labs bb2f fluorometer / backscatter sensor
sensor: c_bb2f_on(sec) 0 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2f_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb2f_num_fields_to_send(nodim) 7 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# e.g. if c_bb2f_num_fields_to_send is 3, cols 3,5,6 sent
sensor: sci_bb2f_b470(nodim) 0 # col 3, blue scatter
sensor: sci_bb2f_b700(nodim) 0 # col 5, red scatter
sensor: sci_bb2f_fluor(nodim) 0 # col 6, fluorescence
sensor: sci_bb2f_therm(nodim) 0 # col 7, thermistor
sensor: sci_bb2f_b470_ref(nodim) 0 # col 2, blue ref
sensor: sci_bb2f_b700_ref(nodim) 0 # col 4, red ref
sensor: sci_bb2f_counter(nodim) 0 # col 1, counter (resets to zero at each power-up)
sensor: sci_bb2f_timestamp(timestamp) 0 # secs since 1970
# proglet bb2c: Wetlabs no clue what name is or data means
sensor: c_bb2c_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2c_is_installed(bool) 0 # in, t--> installed on science
sensor: u_bb2c_is_calibrated(bool) 0 # false, assume not calibrated
# for deriving bb2c engineering units, these should be tailered for each
# glider with this device in the science bay (these are defaults for RU04)
sensor: u_bb2c_beta532_factor(Mnodim) 7.494 # really 0.000007494 (see Mnodim doco above)
sensor: u_bb2c_beta660_factor(Mnodim) 1.8 # really 0.0000018 " " " "
sensor: u_bb2c_beta532_offset(nodim) 55.37 # offset for eng unit conversion
sensor: u_bb2c_beta660_offset(nodim) 55.0 # " " " "
sensor: c_bb2c_num_fields_to_send(nodim) 9 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# Note: date(col1) and time(col2) fields tossed
sensor: sci_bb2c_beta532_eng_units(nodim) 0 # derived from col 4
sensor: sci_bb2c_beta660_eng_units(nodim) 0 # derived from col 6
sensor: sci_bb2c_beta532(nodim) 0 # col 4
sensor: sci_bb2c_beta660(nodim) 0 # col 6
sensor: sci_bb2c_cdom(nodim) 0 # col 8
sensor: sci_bb2c_ref1(nodim) 0 # col 3
sensor: sci_bb2c_ref2(nodim) 0 # col 5
sensor: sci_bb2c_ref3(nodim) 0 # col 7
sensor: sci_bb2c_temp(nodim) 0 # col 9
sensor: sci_bb2c_timestamp(timestamp) 0 # secs since 1970
# proglet bb2lss, wetlabs Light Scatter Sensor
sensor: c_bb2lss_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2lss_is_installed(bool) 0 # in, t--> installed on science
sensor: u_bb2lss_is_calibrated(bool) 0 # false, assume not calibrated
# for deriving bb2lss engineering units, these should be tailered for each
# glider with this device in the science bay (these are defaults for RU04)
sensor: u_bb2lss_beta880_factor(Mnodim) 2.664 # really 0.000002664 (see Mnodim doco above)
sensor: u_bb2lss_beta880_offset(nodim) 52.97 # offset for eng unit conversion
sensor: c_bb2lss_num_fields_to_send(nodim) 6 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# Note: date(col1) and time(col2) fields tossed
sensor: sci_bb2lss_beta880_eng_units(nodim) 0 # derived from col4
sensor: sci_bb2lss_beta880(nodim) 0 # col4
sensor: sci_bb2lss_lss(nodim) 0 # col6
sensor: sci_bb2lss_ref1(nodim) 0 # col3
sensor: sci_bb2lss_ref2(nodim) 0 # col5
sensor: sci_bb2lss_temp(nodim) 0 # col7
sensor: sci_bb2lss_timestamp(timestamp) 0 # secs since 1970
#proglet sam: Wetlabs: Scattering Attenuation Meter
sensor: c_sam_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_sam_is_installed(bool) 0 # in, t--> installed on science
sensor: u_sam_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific calibration constants
sensor: u_sam_do1(nodim) 68.0 # for deriving engineering units
sensor: u_sam_do2(nodim) 85.0 # " " " "
sensor: u_sam_exp1coeff(nodim) 0.055 # " " " "
sensor: u_sam_exp2coeff(nodim) 4.448 # " " " "
sensor: u_sam_offset(nodim) 7.0 # " " " "
sensor: u_sam_eff_pathlength(nodim) 0.104 # " " " "
sensor: u_sam_a(nodim) 10.0 # " " " "
sensor: u_sam_transition_val(nodim) 1.8 # " " " "
sensor: u_sam_median_window(nodim) 10 # valid range 1-15 (for eng units)
sensor: c_sam_num_fields_to_send(nodim) 9 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
sensor: sci_sam_c_mix(nodim) 0 # engineering unit1, derived from cols 2 and 3
sensor: sci_sam_vis(nodim) 0 # engineering unit2, derived from cols 2 and 3
sensor: sci_sam_filter_age(sec) 0 # age of oldest sample in median window
sensor: sci_sam_s1_filtered(nodim) 0 # median filtered version of sci_sam_s1
sensor: sci_sam_s2_filtered(nodim) 0 # median filtered version of sci_sam_s2
sensor: sci_sam_s1(nodim) 0 # col 2
sensor: sci_sam_s2(nodim) 0 # col 3
sensor: sci_sam_ref(nodim) 0 # col 1
sensor: sci_sam_temp(nodim) 0 # col 4
# proglet whpar: WHOI Photosynthetic Active Radiation
sensor: c_whpar_on(sec) 0 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_whpar_is_installed(bool) 0 # in, t--> installed on science
sensor: c_whpar_num_fields_to_send(nodim) 6 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# e.g. if c_whpar_num_fields_to_send is 2, par and voltage sent
sensor: sci_whpar_par(nodim) 0 # col 2, Primary PAR
sensor: sci_whpar_ref(nodim) 0 # col 3, Second PAR or reference
sensor: sci_whpar_therm(nodim) 0 # col 4, Temperature
sensor: sci_whpar_volt(nodim) 0 # col 5, Voltage
sensor: sci_whpar_counter(nodim) 0 # col 1, Frame counter
sensor: sci_whpar_spare(nodim) 0 # col 6, Spare
sensor: sci_whpar_timestamp(timestamp) 0 # secs since 1970
# proglet whgpbm: WHOI Glider Bathy-PhotoMeter
sensor: c_whgpbm_on(sec) 0 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_whgpbm_is_installed(bool) 0 # in, t--> installed on science
sensor: c_whgpbm_num_fields_to_send(nodim) 7 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# e.g. if c_whgpbm_num_fields_to_send is 2, par and bio are sent
sensor: sci_whgpbm_par(nodim) 0 # col 3, PPPPP
sensor: sci_whgpbm_biolumin(nodim) 0 # col 2, BBBBB
sensor: sci_whgpbm_interval(nodim) 0 # col 7, RR
sensor: sci_whgpbm_volt_excite(nodim) 0 # col 4, LLLL
sensor: sci_whgpbm_volt_left(nodim) 0 # col 5, QQQQ
sensor: sci_whgpbm_volt_bat(nodim) 0 # col 6, VVVV
sensor: sci_whgpbm_counter(nodim) 0 # col 1, CCCC
sensor: sci_whgpbm_timestamp(timestamp) 0 # secs since 1970
# proglet whfctd: WHoi Fast CTD
sensor: c_whfctd_on(sec) 10.0 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: c_whfctd_num_fields_to_send(nodim) 8
# in, number of columns to send on each measurement,
# fields to send chosen by order in the list above
sensor: sci_whfctd_is_installed(bool) 0 # in, t--> installed on science
sensor: sci_whfctd_ref_hi(nodim) 0 # col 1, AAAAAAAA
sensor: sci_whfctd_ref_mid(nodim) 0 # col 2, BBBBBBB
sensor: sci_whfctd_ref_lo(nodim) 0 # col 3, CCCCCC
sensor: sci_whfctd_raw_temp(nodim) 0 # col 4, DDDDDDD
sensor: sci_whfctd_raw_con1(nodim) 0 # col 5, EEEEEE
sensor: sci_whfctd_raw_con2(nodim) 0 # col 6, FFFFFFF
sensor: sci_whfctd_raw_pres(nodim) 0 # col 7, GGGGGG
sensor: sci_whfctd_elap_time(nodim) 0 # col 8, HHHHH
# Mote Marine Lab Optical Phytoplankton Detector (BrevBuster)
# last modified: 12 Jul 2006 jhillier@mote.org
sensor: c_motebb_on(sec) 0 #
sensor: sci_motebb_is_installed(bool) 0 # installed on science
sensor: sci_motebb_sn(nodim) 0 #
sensor: sci_motebb_status(nodim) 0 #
sensor: sci_motebb_volt(nodim) 0 #
sensor: sci_motebb_press(nodim) 0 #
sensor: sci_motebb_cdomref(nodim) 0 #
sensor: sci_motebb_int_time(nodim) 0 #
sensor: sci_motebb_start_time(timestamp) 0 #
sensor: sci_motebb_stop_time(timestamp) 0 #
sensor: sci_motebb_absorb_a(nodim) 0 #
sensor: sci_motebb_absorb_b(nodim) 0 #
sensor: sci_motebb_corr0(nodim) 0 #
sensor: sci_motebb_corr1(nodim) 0 #
sensor: sci_motebb_corr2(nodim) 0 #
sensor: sci_motebb_corr3(nodim) 0 #
sensor: sci_motebb_corr4(nodim) 0 #
sensor: sci_motebb_corr5(nodim) 0 #
sensor: sci_motebb_corr6(nodim) 0 #
sensor: sci_motebb_corr7(nodim) 0 #
sensor: sci_motebb_corr8(nodim) 0 #
sensor: sci_motebb_corr9(nodim) 0 #
sensor: sci_motebb_corr10(nodim) 0 #
sensor: sci_motebb_corr11(nodim) 0 #
# proglet hydrophone
sensor: c_hydrophone_on(sec) -1.0 # positive or zero turns it on and starts sampling sequence
sensor: c_hydrophone_pre_delay(sec) 15.0 # delay between proglet start and sample start
sensor: c_hydrophone_post_delay(sec) 30.0 # delay between sample done and starting over
sensor: c_hydrophone_duration(sec) 30.0 # how long a measurement
sensor: c_hydrophone_gain(nodim) 3.0 # 0-7
sensor: c_hydrophone_num_channels(nodim) 1.0 # 1-4
sensor: c_hydrophone_sample_rate(Hz) 5000.0 # 1000-5000, how fast to AD
sensor: c_hydrophone_drive_num(nodim) 3.0 # 2->C:, 3:->D: etc
sensor: c_hydrophone_pre_pings(nodim) 1.0 # number of pings before sample
sensor: c_hydrophone_post_pings(nodim) 2.0 # number of pings after sample
sensor: sci_hydrophone_is_installed(bool) 0.0 # T-> if proglet installed
sensor: sci_hydrophone_collecting(nodim) 0.0 # set during collection to sample#, DDHHMM
# sample as filename, less two alpha chars
# which encode year and month
# proglet hard_disk
sensor: sci_hard_disk_is_installed(bool) 0.0 # true means installed
# proglet bbfl2s: wet labs bbfl2slo fluorometer / backscatter sensor
sensor: c_bbfl2s_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bbfl2s_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bbfl2s_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bbfl2s_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BBFL2SLO-234)
sensor: u_bbfl2s_bb_cwo(nodim) 55 # clean water offset, nodim == counts
sensor: u_bbfl2s_chlor_cwo(nodim) 56 # clean water offset, nodim == counts
sensor: u_bbfl2s_cdom_cwo(nodim) 54 # clean water offset, nodim == counts
sensor: u_bbfl2s_bb_sf(Mnodim) 2.47 # scale factor (0.00000247)
sensor: u_bbfl2s_chlor_sf(ug/l/nodim) 0.0125 # scale factor to get units
sensor: u_bbfl2s_cdom_sf(ppb/nodim) 0.0979 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_bbfl2s_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_bbfl2s_bb_scaled(nodim) 0 # derived from col 4
sensor: sci_bbfl2s_chlor_scaled(ug/l) 0 # derived from col 6
sensor: sci_bbfl2s_cdom_scaled(ppb) 0 # derived from col 8
sensor: sci_bbfl2s_bb_sig(nodim) 0 # col 4
sensor: sci_bbfl2s_chlor_sig(nodim) 0 # col 6
sensor: sci_bbfl2s_cdom_sig(nodim) 0 # col 8
sensor: sci_bbfl2s_bb_ref(nodim) 0 # col 3
sensor: sci_bbfl2s_chlor_ref(nodim) 0 # col 5
sensor: sci_bbfl2s_cdom_ref(nodim) 0 # col 7
sensor: sci_bbfl2s_temp(nodim) 0 # col 9
sensor: sci_bbfl2s_timestamp(timestamp) 0 # secs since 1970
# proglet bbfl2sV2: wet labs bbfl2slo fluorometer / backscatter sensor, 2nd conf
sensor: c_bbfl2sV2_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bbfl2sV2_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bbfl2sV2_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bbfl2sV2_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BBFL2SLO-407#p)
sensor: u_bbfl2sV2_bb_cwo(nodim) 42 # 532 nm, clean water offset, nodim == counts
sensor: u_bbfl2sV2_fl1_cwo(nodim) 43 # Phycoerythrin, clean water offset, nodim == counts
sensor: u_bbfl2sV2_fl2_cwo(nodim) 52 # CDOM, clean water offset, nodim == counts
sensor: u_bbfl2sV2_bb_sf(Mnodim) 8.328 # 532 nm, scale factor (0.000008328)
sensor: u_bbfl2sV2_fl1_sf(nodim) 0.0434 # Phycoerythrin, scale factor to get units
sensor: u_bbfl2sV2_fl2_sf(nodim) 0.0930 # CDOM, scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_bbfl2s_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_bbfl2sV2_bb_scaled(nodim) 0 # derived from col 4
sensor: sci_bbfl2sV2_fl1_scaled(nodim) 0 # derived from col 6
sensor: sci_bbfl2sV2_fl2_scaled(nodim) 0 # derived from col 8
sensor: sci_bbfl2sV2_bb_sig(nodim) 0 # col 4
sensor: sci_bbfl2sV2_fl1_sig(nodim) 0 # col 6
sensor: sci_bbfl2sV2_fl2_sig(nodim) 0 # col 8
sensor: sci_bbfl2sV2_bb_ref(nodim) 0 # col 3
sensor: sci_bbfl2sV2_fl1_ref(nodim) 0 # col 5
sensor: sci_bbfl2sV2_fl2_ref(nodim) 0 # col 7
sensor: sci_bbfl2sV2_therm(nodim) 0 # col 9
sensor: sci_bbfl2sV2_timestamp(timestamp) 0 # secs since 1970
# proglet fl3slo: wet labs fl3slo fluorometer triplet sensor
sensor: c_fl3slo_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_fl3slo_is_installed(bool) 0 # in, t--> installed on science
sensor: c_fl3slo_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_fl3slo_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for FL3-341)
sensor: u_fl3slo_chlor_cwo(nodim) 55 # clean water offset, nodim == counts
sensor: u_fl3slo_phyco_cwo(nodim) 55 # clean water offset, nodim == counts
sensor: u_fl3slo_cdom_cwo(nodim) 55 # clean water offset, nodim == counts
sensor: u_fl3slo_chlor_sf(ug/l/nodim) 0.0126 # scale factor to get units
sensor: u_fl3slo_phyco_sf(ppb/l/nodim) 0.0459 # scale factor to get units
sensor: u_fl3slo_cdom_sf(ppb/l/nodim) 0.0984 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_fl3slo_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_fl3slo_chlor_units(ug/l) 0 # derived from col 4
sensor: sci_fl3slo_phyco_units(ppb) 0 # derived from col 6
sensor: sci_fl3slo_cdom_units(QSDE) 0 # derived from col 8
sensor: sci_fl3slo_chlor_sig(nodim) 0 # col 4
sensor: sci_fl3slo_phyco_sig(nodim) 0 # col 6
sensor: sci_fl3slo_cdom_sig(nodim) 0 # col 8
sensor: sci_fl3slo_chlor_ref(nodim) 0 # col 3
sensor: sci_fl3slo_phyco_ref(nodim) 0 # col 5
sensor: sci_fl3slo_cdom_ref(nodim) 0 # col 7
sensor: sci_fl3slo_temp(nodim) 0 # col 9
sensor: sci_fl3slo_timestamp(timestamp) 0 # secs since 1970
# proglet bb3slo: wet labs bb3slo backscatter triplet sensor
sensor: c_bb3slo_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb3slo_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb3slo_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bb3slo_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB3SLO-207)
sensor: u_bb3slo_b470_do(nodim) 51 # dark offset, nodim == counts
sensor: u_bb3slo_b532_do(nodim) 51 # dark offset, nodim == counts
sensor: u_bb3slo_b660_do(nodim) 114 # dark offset, nodim == counts
sensor: u_bb3slo_b470_sf(Mnodim) 0.117 # scale factor (0.000000117)
sensor: u_bb3slo_b532_sf(Mnodim) 8.17 # scale factor (0.00000817)
sensor: u_bb3slo_b660_sf(Mnodim) 3.85 # scale factor (0.00000385)
# output sensors, listed in PRIORITY order
# e.g. if c_bb3slo_num_fields_to_send is 3, cols derived from 4,6,8 sent
sensor: sci_bb3slo_b470_scaled(nodim) 0 # from col 4, blue
sensor: sci_bb3slo_b532_scaled(nodim) 0 # from col 6, green
sensor: sci_bb3slo_b660_scaled(nodim) 0 # from col 8, red
sensor: sci_bb3slo_b470_sig(nodim) 0 # col 4, blue
sensor: sci_bb3slo_b532_sig(nodim) 0 # col 6, green
sensor: sci_bb3slo_b660_sig(nodim) 0 # col 8, red
sensor: sci_bb3slo_b470_ref(nodim) 0 # col 3, blue
sensor: sci_bb3slo_b532_ref(nodim) 0 # col 5, green
sensor: sci_bb3slo_b660_ref(nodim) 0 # col 7, red
sensor: sci_bb3slo_temp(nodim) 0 # col 9
sensor: sci_bb3slo_timestamp(timestamp) 0 # secs since 1970
# proglet oxy3835: Aanderaa Oxygen Optode 3835
sensor: c_oxy3835_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_oxy3835_is_installed(bool) 0 # in, t--> installed on science
sensor: c_oxy3835_num_fields_to_send(nodim) 3 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# e.g. if c_oxy3835_num_fields_to_send is 3, cols 3,4,5 sent
sensor: sci_oxy3835_oxygen(nodim) 0 # col 3, oxygen
sensor: sci_oxy3835_saturation(nodim) 0 # col 4, saturation
sensor: sci_oxy3835_temp(nodim) 0 # col 5, temperature
sensor: sci_oxy3835_timestamp(timestamp) 0 # secs since 1970
# proglet oxy3835_wphase: Aanderaa Oxygen Optode 3835
sensor: c_oxy3835_wphase_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_oxy3835_wphase_is_installed(bool) 0 # in, t--> installed on science
sensor: c_oxy3835_wphase_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# output sensors, listed in PRIORITY order
# e.g. if c_oxy3835_wphase_num_fields_to_send is 3, cols 3,4,5 sent
sensor: sci_oxy3835_wphase_oxygen(nodim) 0 # col 3, oxygen
sensor: sci_oxy3835_wphase_saturation(nodim) 0 # col 4, saturation
sensor: sci_oxy3835_wphase_temp(nodim) 0 # col 5, temperature
sensor: sci_oxy3835_wphase_dphase(nodim) 0 # col 6, d-phase
sensor: sci_oxy3835_wphase_bphase(nodim) 0 # col 7, b-phase
sensor: sci_oxy3835_wphase_rphase(nodim) 0 # col 8, r-phase
sensor: sci_oxy3835_wphase_bamp(nodim) 0 # col 9, b-amp
sensor: sci_oxy3835_wphase_bpot(nodim) 0 # col 10, b-pot
sensor: sci_oxy3835_wphase_ramp(nodim) 0 # col 11, r-amp
sensor: sci_oxy3835_wphase_rawtemp(nodim) 0 # col 12, RawTemp
sensor: sci_oxy3835_wphase_timestamp(timestamp) 0 # secs since 1970
# proglet viper: DMA Viper Processor
sensor: c_viper_on(sec) -1.0 # positive or zero turns it on and starts sampling sequence
sensor: c_viper_turn_on_timeout(sec) 120.0 # max wait time for viper to power on
sensor: c_viper_collect_timeout(sec) 200.0 # max wait time for viper to collect/analyse acoustic data
sensor: c_viper_reset_timeout(sec) 60.0 # max wait time for viper to respond to reset gain command
sensor: c_viper_start_sampling_timeout(sec) 60.0 # max wait time for viper to respond to start sampling command
sensor: c_viper_detection_done_timeout(sec) 60.0 # max wait time for viper to respond to detection done command
sensor: c_viper_turn_off_timeout(sec) 120.0 # max wait time for viper to power off
sensor: c_viper_gain(nodim) 3.0 # 0-7 gain sent to viper
sensor: c_viper_max_sample_starts(nodim) 3.0 # max allowable attempts to obtain a definitive detection
sensor: c_viper_max_errors(nodim) 3.0 # max number of viper errors before mission abort
sensor: sci_viper_power_on(bool) 0 # power state of the Viper, true -> on
sensor: sci_viper_error(nodim) 0 # unique number for each error sequence
sensor: sci_viper_target(enum) 0 # target priority returned by Viper
sensor: sci_viper_collect_time(sec) 0 # data collection time returned by Viper
sensor: sci_viper_is_installed(bool) 0.0 # T-> if proglet installed
sensor: sci_viper_finished(bool) 0.0 # T-> viper is ready to be powered down
sensor: sci_viper_collecting(bool) 0.0 # T-> viper is doing it's thing, comatose time
# proglet ocr504R: Satlantic OCR-504 Radiance configuration
#Inputs
sensor: c_ocr504R_on(sec) 0 # sets secs between how often data is sent
# <0 stops, 0 fast as possible, 0> that many secs
sensor: u_ocr504R_is_calibrated(bool) 0 # needs to be set in autoexec.mi
# sensor specific calibration constants (defaults for S/N 004)
sensor: u_ocr504R_dark_counts_c1(nodim) 2147326431.3 # dark offset for channel 1
sensor: u_ocr504R_cal_coeff_c1(Tnodim) 29310.139102 # calibration factor for channel 1
sensor: u_ocr504R_immersion_coeff_c1(nodim) 1.758 # immersion factor for channel 1
sensor: u_ocr504R_dark_counts_c2(nodim) 2147357165.1 # dark offset for channel 2
sensor: u_ocr504R_cal_coeff_c2(Tnodim) 33825.794480 # calibration factor for channel 2
sensor: u_ocr504R_immersion_coeff_c2(nodim) 1.752 # immersion factor for channel 2
sensor: u_ocr504R_dark_counts_c3(nodim) 2147621476.7 # dark offset for channel 3
sensor: u_ocr504R_cal_coeff_c3(Tnodim) 29314.178969 # calibration factor for channel 3
sensor: u_ocr504R_immersion_coeff_c3(nodim) 1.746 # immersion factor for channel 3
sensor: u_ocr504R_dark_counts_c4(nodim) 2147499550.4 # dark offset for channel 4
sensor: u_ocr504R_cal_coeff_c4(Tnodim) 18677.199017 # calibration factor for channel 4
sensor: u_ocr504R_immersion_coeff_c4(nodim) 1.739 # immersion factor for channel 4
sensor: u_ocr504R_Vin_a0(nodim) 0.0 # polynomial coefficient to scale Vin
sensor: u_ocr504R_Vin_a1(nodim) 0.03 # polynomial coefficient to scale Vin
sensor: u_ocr504R_itemp_a0(nodim) -50.0 # polynomial coefficient to scale itemp
sensor: u_ocr504R_itemp_a1(nodim) 0.5 # polynomial coefficient to scale itemp
sensor: c_ocr504R_num_fields_to_send(nodim) 16
# number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: sci_ocr504R_is_installed(bool) 0 # in, t--> installed on science
#Outputs, in order of priority:
sensor: sci_ocr504R_rad1(uW/cm^2/nm) # from channel1
sensor: sci_ocr504R_rad2(uW/cm^2/nm) # from channel2
sensor: sci_ocr504R_rad3(uW/cm^2/nm) # from channel3
sensor: sci_ocr504R_rad4(uW/cm^2/nm) # from channel4
sensor: sci_ocr504R_itemp(Celsius) # internal temperature of instrument
sensor: sci_ocr504R_Vin(volts) # regulated input voltage
sensor: sci_ocr504R_fcount(nodim) # 0-255, count of frame transmitted
sensor: sci_ocr504R_channel1(nodim) # raw counts from discrete optical waveband 1
sensor: sci_ocr504R_channel2(nodim) # raw counts from discrete optical waveband 2
sensor: sci_ocr504R_channel3(nodim) # raw counts from discrete optical waveband 3
sensor: sci_ocr504R_channel4(nodim) # raw counts from discrete optical waveband 4
sensor: sci_ocr504R_itemp_raw(nodim) # raw pre-scaled temperature
sensor: sci_ocr504R_Vin_raw(nodim) # raw pre-scaled regulated input voltage
sensor: sci_ocr504R_timer(sec) # seconds since initialization (power-on)
sensor: sci_ocr504R_delay(msec) # milliseconds offset to timer for
# accurate indication of when frame's sensors
# were sampled
sensor: sci_ocr504R_cksum(nodim) # data integrity sensor, checksum on frame
# proglet ocr504I: Satlantic OCR-504 Irradiance configuration
#Inputs
sensor: c_ocr504I_on(sec) 0 # sets secs between how often data is sent
# <0 stops, 0 fast as possible, 0> that many secs
sensor: u_ocr504I_is_calibrated(bool) 0 # needs to be set in autoexec.mi
# sensor specific calibration constants (defaults for S/N 089)
sensor: u_ocr504I_dark_counts_c1(nodim) 2147679780.3 # dark offset for channel 1
sensor: u_ocr504I_cal_coeff_c1(Tnodim) 1636922.3650 # calibration factor for channel 1
sensor: u_ocr504I_immersion_coeff_c1(nodim) 1.368 # immersion factor for channel 1
sensor: u_ocr504I_dark_counts_c2(nodim) 2147446582.0 # dark offset for channel 2
sensor: u_ocr504I_cal_coeff_c2(Tnodim) 1940758.5765 # calibration factor for channel 2
sensor: u_ocr504I_immersion_coeff_c2(nodim) 1.410 # immersion factor for channel 2
sensor: u_ocr504I_dark_counts_c3(nodim) 2147390884.4 # dark offset for channel 3
sensor: u_ocr504I_cal_coeff_c3(Tnodim) 2286152.2061 # calibration factor for channel 3
sensor: u_ocr504I_immersion_coeff_c3(nodim) 1.365 # immersion factor for channel 3
sensor: u_ocr504I_dark_counts_c4(nodim) 2147443303.2 # dark offset for channel 4
sensor: u_ocr504I_cal_coeff_c4(Tnodim) 1804514.9462 # calibration factor for channel 4
sensor: u_ocr504I_immersion_coeff_c4(nodim) 1.372 # immersion factor for channel 4
sensor: u_ocr504I_Vin_a0(nodim) 0.0 # polynomial coefficient to scale Vin
sensor: u_ocr504I_Vin_a1(nodim) 0.03 # polynomial coefficient to scale Vin
sensor: u_ocr504I_itemp_a0(nodim) -50.0 # polynomial coefficient to scale itemp
sensor: u_ocr504I_itemp_a1(nodim) 0.5 # polynomial coefficient to scale itemp
sensor: c_ocr504I_num_fields_to_send(nodim) 16
# number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: sci_ocr504I_is_installed(bool) 0 # in, t--> installed on science
#Outputs, in order of priority:
sensor: sci_ocr504I_irrad1(uW/cm^2/nm) # from channel1
sensor: sci_ocr504I_irrad2(uW/cm^2/nm) # from channel2
sensor: sci_ocr504I_irrad3(uW/cm^2/nm) # from channel3
sensor: sci_ocr504I_irrad4(uW/cm^2/nm) # from channel4
sensor: sci_ocr504I_itemp(Celsius) # internal temperature of instrument
sensor: sci_ocr504I_Vin(volts) # regulated input voltage
sensor: sci_ocr504I_fcount(nodim) # 0-255, count of frame transmitted
sensor: sci_ocr504I_channel1(nodim) # raw counts from discrete optical waveband 1
sensor: sci_ocr504I_channel2(nodim) # raw counts from discrete optical waveband 2
sensor: sci_ocr504I_channel3(nodim) # raw counts from discrete optical waveband 3
sensor: sci_ocr504I_channel4(nodim) # raw counts from discrete optical waveband 4
sensor: sci_ocr504I_itemp_raw(nodim) # raw pre-scaled temperature
sensor: sci_ocr504I_Vin_raw(nodim) # raw pre-scaled regulated input voltage
sensor: sci_ocr504I_timer(sec) # seconds since initialization (power-on)
sensor: sci_ocr504I_delay(msec) # milliseconds offset to timer for
# accurate indication of when frame's sensors
# were sampled
sensor: sci_ocr504I_cksum(nodim) # data integrity sensor, checksum on frame
# proglet ocr507R: Satlantic OCR-507 Radiance configuration
#Inputs
sensor: c_ocr507R_on(sec) 0 # sets secs between how often data is sent
# <0 stops, 0 fast as possible, 0> that many secs
sensor: u_ocr507R_is_calibrated(bool) 0 # needs to be set in autoexec.mi
# sensor specific calibration constants (defaults for S/N 082)
sensor: u_ocr507R_dark_counts_c1(nodim) 2148739218.5 # dark offset for channel 1
sensor: u_ocr507R_cal_coeff_c1(Tnodim) 27096.112147 # calibration factor for channel 1
sensor: u_ocr507R_immersion_coeff_c1(nodim) 1.758 # immersion factor for channel 1
sensor: u_ocr507R_dark_counts_c2(nodim) 2147915422.1 # dark offset for channel 2
sensor: u_ocr507R_cal_coeff_c2(Tnodim) 27065.322575 # calibration factor for channel 2
sensor: u_ocr507R_immersion_coeff_c2(nodim) 1.754 # immersion factor for channel 2
sensor: u_ocr507R_dark_counts_c3(nodim) 2148704283.1 # dark offset for channel 3
sensor: u_ocr507R_cal_coeff_c3(Tnodim) 26930.360588 # calibration factor for channel 3
sensor: u_ocr507R_immersion_coeff_c3(nodim) 1.745 # immersion factor for channel 3
sensor: u_ocr507R_dark_counts_c4(nodim) 2148332704.3 # dark offset for channel 4
sensor: u_ocr507R_cal_coeff_c4(Tnodim) 17037.140659 # calibration factor for channel 4
sensor: u_ocr507R_immersion_coeff_c4(nodim) 1.741 # immersion factor for channel 4
sensor: u_ocr507R_dark_counts_c5(nodim) 2147608197.8 # dark offset for channel 5
sensor: u_ocr507R_cal_coeff_c5(Tnodim) 16287.406269 # calibration factor for channel 5
sensor: u_ocr507R_immersion_coeff_c5(nodim) 1.739 # immersion factor for channel 5
sensor: u_ocr507R_dark_counts_c6(nodim) 2146048148.6 # dark offset for channel 6
sensor: u_ocr507R_cal_coeff_c6(Tnodim) 11802.500350 # calibration factor for channel 6
sensor: u_ocr507R_immersion_coeff_c6(nodim) 1.730 # immersion factor for channel 6
sensor: u_ocr507R_dark_counts_c7(nodim) 2145662191.9 # dark offset for channel 7
sensor: u_ocr507R_cal_coeff_c7(Tnodim) 5511.536788 # calibration factor for channel 7
sensor: u_ocr507R_immersion_coeff_c7(nodim) 1.729 # immersion factor for channel 7
sensor: u_ocr507R_Vin_a0(nodim) 0.0 # polynomial coefficient to scale Vin
sensor: u_ocr507R_Vin_a1(nodim) 0.03 # polynomial coefficient to scale Vin
sensor: u_ocr507R_Va_a0(nodim) 0.0 # polynomial coefficient to scale Vin
sensor: u_ocr507R_Va_a1(nodim) 0.03 # polynomial coefficient to scale Vin
sensor: u_ocr507R_itemp_a0(nodim) -50.0 # polynomial coefficient to scale itemp
sensor: u_ocr507R_itemp_a1(nodim) 0.5 # polynomial coefficient to scale itemp
sensor: c_ocr507R_num_fields_to_send(nodim) 24
# number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: sci_ocr507R_is_installed(bool) 0 # in, t--> installed on science
#Outputs, in order of priority:
sensor: sci_ocr507R_rad1(uW/cm^2/nm) # from channel1
sensor: sci_ocr507R_rad2(uW/cm^2/nm) # from channel2
sensor: sci_ocr507R_rad3(uW/cm^2/nm) # from channel3
sensor: sci_ocr507R_rad4(uW/cm^2/nm) # from channel4
sensor: sci_ocr507R_rad5(uW/cm^2/nm) # from channel5
sensor: sci_ocr507R_rad6(uW/cm^2/nm) # from channel6
sensor: sci_ocr507R_rad7(uW/cm^2/nm) # from channel7
sensor: sci_ocr507R_itemp(Celsius) # internal temperature of instrument
sensor: sci_ocr507R_Vin(volts) # regulated input voltage
sensor: sci_ocr507R_Va(volts) # analog voltage
sensor: sci_ocr507R_fcount(nodim) # 0-255, count of frame transmitted
sensor: sci_ocr507R_channel1(nodim) # raw counts from discrete optical waveband 1
sensor: sci_ocr507R_channel2(nodim) # raw counts from discrete optical waveband 2
sensor: sci_ocr507R_channel3(nodim) # raw counts from discrete optical waveband 3
sensor: sci_ocr507R_channel4(nodim) # raw counts from discrete optical waveband 4
sensor: sci_ocr507R_channel5(nodim) # raw counts from discrete optical waveband 5
sensor: sci_ocr507R_channel6(nodim) # raw counts from discrete optical waveband 6
sensor: sci_ocr507R_channel7(nodim) # raw counts from discrete optical waveband 7
sensor: sci_ocr507R_itemp_raw(nodim) # raw pre-scaled temperature
sensor: sci_ocr507R_Vin_raw(nodim) # raw pre-scaled regulated input voltage
sensor: sci_ocr507R_Va_raw(nodim) # raw pre-scaled analog voltage
sensor: sci_ocr507R_timer(sec) # seconds since initialization (power-on)
sensor: sci_ocr507R_delay(msec) # milliseconds offset to timer for
# accurate indication of when frame's sensors
# were sampled
sensor: sci_ocr507R_cksum(nodim) # data integrity sensor, checksum on frame
# proglet ocr507I: Satlantic OCR-507 Irradiance configuration
#Inputs
sensor: c_ocr507I_on(sec) 0 # sets secs between how often data is sent
# <0 stops, 0 fast as possible, 0> that many secs
sensor: u_ocr507I_is_calibrated(bool) 0 # needs to be set in autoexec.mi
# sensor specific calibration constants (defaults for S/N 152)
sensor: u_ocr507I_dark_counts_c1(nodim) 2149587489.7 # dark offset for channel 1
sensor: u_ocr507I_cal_coeff_c1(Tnodim) 2139416.2652 # calibration factor for channel 1
sensor: u_ocr507I_immersion_coeff_c1(nodim) 1.368 # immersion factor for channel 1
sensor: u_ocr507I_dark_counts_c2(nodim) 2147351752.0 # dark offset for channel 2
sensor: u_ocr507I_cal_coeff_c2(Tnodim) 1973191.3026 # calibration factor for channel 2
sensor: u_ocr507I_immersion_coeff_c2(nodim) 1.401 # immersion factor for channel 2
sensor: u_ocr507I_dark_counts_c3(nodim) 2148356170.6 # dark offset for channel 3
sensor: u_ocr507I_cal_coeff_c3(Tnodim) 2072416.6110 # calibration factor for channel 3
sensor: u_ocr507I_immersion_coeff_c3(nodim) 1.365 # immersion factor for channel 3
sensor: u_ocr507I_dark_counts_c4(nodim) 2147879094.8 # dark offset for channel 4
sensor: u_ocr507I_cal_coeff_c4(Tnodim) 2070368.1944 # calibration factor for channel 4
sensor: u_ocr507I_immersion_coeff_c4(nodim) 1.378 # immersion factor for channel 4
sensor: u_ocr507I_dark_counts_c5(nodim) 2147571956.1 # dark offset for channel 5
sensor: u_ocr507I_cal_coeff_c5(Tnodim) 2108980.9681 # calibration factor for channel 5
sensor: u_ocr507I_immersion_coeff_c5(nodim) 1.372 # immersion factor for channel 5
sensor: u_ocr507I_dark_counts_c6(nodim) 2147977849.9 # dark offset for channel 6
sensor: u_ocr507I_cal_coeff_c6(Tnodim) 2209709.2232 # calibration factor for channel 6
sensor: u_ocr507I_immersion_coeff_c6(nodim) 1.354 # immersion factor for channel 6
sensor: u_ocr507I_dark_counts_c7(nodim) 2147679441.1 # dark offset for channel 7
sensor: u_ocr507I_cal_coeff_c7(Tnodim) 2090347.2455 # calibration factor for channel 7
sensor: u_ocr507I_immersion_coeff_c7(nodim) 1.347 # immersion factor for channel 7
sensor: u_ocr507I_Vin_a0(nodim) 0.0 # polynomial coefficient to scale Vin
sensor: u_ocr507I_Vin_a1(nodim) 0.03 # polynomial coefficient to scale Vin
sensor: u_ocr507I_Va_a0(nodim) 0.0 # polynomial coefficient to scale Va
sensor: u_ocr507I_Va_a1(nodim) 0.03 # polynomial coefficient to scale Va
sensor: u_ocr507I_itemp_a0(nodim) -50.0 # polynomial coefficient to scale itemp
sensor: u_ocr507I_itemp_a1(nodim) 0.5 # polynomial coefficient to scale itemp
sensor: c_ocr507I_num_fields_to_send(nodim) 24
# number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: sci_ocr507I_is_installed(bool) 0 # in, t--> installed on science
#Outputs, in order of priority:
sensor: sci_ocr507I_irrad1(uW/cm^2/nm) # from channel1
sensor: sci_ocr507I_irrad2(uW/cm^2/nm) # from channel2
sensor: sci_ocr507I_irrad3(uW/cm^2/nm) # from channel3
sensor: sci_ocr507I_irrad4(uW/cm^2/nm) # from channel4
sensor: sci_ocr507I_irrad5(uW/cm^2/nm) # from channel5
sensor: sci_ocr507I_irrad6(uW/cm^2/nm) # from channel6
sensor: sci_ocr507I_irrad7(uW/cm^2/nm) # from channel7
sensor: sci_ocr507I_itemp(Celsius) # internal temperature of instrument
sensor: sci_ocr507I_Vin(volts) # regulated input voltage
sensor: sci_ocr507I_Va(volts) # analog voltag
sensor: sci_ocr507I_fcount(nodim) # 0-255, count of frame transmitted
sensor: sci_ocr507I_channel1(nodim) # raw counts from discrete optical waveband 1
sensor: sci_ocr507I_channel2(nodim) # raw counts from discrete optical waveband 2
sensor: sci_ocr507I_channel3(nodim) # raw counts from discrete optical waveband 3
sensor: sci_ocr507I_channel4(nodim) # raw counts from discrete optical waveband 4
sensor: sci_ocr507I_channel5(nodim) # raw counts from discrete optical waveband 5
sensor: sci_ocr507I_channel6(nodim) # raw counts from discrete optical waveband 6
sensor: sci_ocr507I_channel7(nodim) # raw counts from discrete optical waveband 7
sensor: sci_ocr507I_itemp_raw(nodim) # raw pre-scaled temperature
sensor: sci_ocr507I_Vin_raw(nodim) # raw pre-scaled regulated input voltage
sensor: sci_ocr507I_Va_raw(nodim) # raw pre-scaled analog voltage
sensor: sci_ocr507I_timer(sec) # seconds since initialization (power-on)
sensor: sci_ocr507I_delay(msec) # milliseconds offset to timer for
# accurate indication of when frame's sensors
# were sampled
sensor: sci_ocr507I_cksum(nodim) # data integrity sensor, checksum on frame
# sensors for Benthos Acoustic Data Delivery (badd) proglet
#Inputs:
sensor: c_badd_on(sec) -1 # secs between run cycles
sensor: c_badd_mode(enum) 0 # 0: search mode
# 1: data collect mode
sensor: c_badd_target_id(enum) 0 # address of remote host modem being called
sensor: c_badd_range_secs(sec) 60 # how often to request range to remote mode
# <0 => don't request range,
# min value = c_badd_input_parse_secs(sec) * 2
sensor: c_badd_input_parse_secs(sec) 30 # How long to check command response
# input buffer
sensor: c_badd_datacol_status_secs(sec) 30 # How often to check download status
sensor: c_badd_clear_remote_data(bool) 0 # 0: do NOT clear remote data after successful
#Outputs:
sensor: sci_badd_is_installed(bool) # true -> proglet is installed
sensor: sci_badd_power_on(bool) # power state of modem (true -> on)
sensor: sci_badd_error(enum) # unique number for each error type
sensor: sci_badd_remote_stored_bytes(nodim) # number of stored bytes on remote modem
sensor: sci_badd_retrieved_bytes(nodim) # number of bytes collected from remote modem
sensor: sci_badd_n_tries_to_connect(nodim) # number of attempts to connect with target modem
sensor: sci_badd_target_range(m) # response to range command
sensor: sci_badd_finished(bool) # the proglet has finished
# proglet flntu: wet labs flntu fluorometer and turbidity sensor
sensor: c_flntu_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_flntu_is_installed(bool) 0 # in, t--> installed on science
sensor: c_flntu_num_fields_to_send(nodim) 7 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_flntu_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for FLNTUSLO-513)
sensor: u_flntu_chlor_do(nodim) 39 # dark water offset, nodim == counts
sensor: u_flntu_turb_do(nodim) 47 # dark water offset, nodim == counts
sensor: u_flntu_chlor_sf(ug/l/nodim) 0.0125 # scale factor to get units
sensor: u_flntu_turb_sf(NTU/nodim) 0.0062 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_flntu_num_fields_to_send is 2, cols derived
# from 4,6 sent
sensor: sci_flntu_chlor_units(ug/l) 0 # derived from col 4
sensor: sci_flntu_turb_units(NTU) 0 # derived from col 6
sensor: sci_flntu_chlor_sig(nodim) 0 # col 4
sensor: sci_flntu_turb_sig(nodim) 0 # col 6
sensor: sci_flntu_chlor_ref(nodim) 0 # col 3
sensor: sci_flntu_turb_ref(nodim) 0 # col 5
sensor: sci_flntu_temp(nodim) 0 # col 7
sensor: sci_flntu_timestamp(timestamp) 0 # secs since 1970
# proglet fl3sloV2: wet labs fl3slo fluorometer triplet sensor, 2nd configuration
sensor: c_fl3sloV2_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_fl3sloV2_is_installed(bool) 0 # in, t--> installed on science
sensor: c_fl3sloV2_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_fl3sloV2_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for FL3SLO-496)
sensor: u_fl3sloV2_chlor_cwo(nodim) 46 # clean water offset, nodim == counts
sensor: u_fl3sloV2_rhod_cwo(nodim) 49 # clean water offset, nodim == counts
sensor: u_fl3sloV2_cdom_cwo(nodim) 48 # clean water offset, nodim == counts
sensor: u_fl3sloV2_chlor_sf(ug/l/nodim) 0.0127 # scale factor to get units
sensor: u_fl3sloV2_rhod_sf(ppb/nodim) 0.0481 # scale factor to get units
sensor: u_fl3sloV2_cdom_sf(ppb/nodim) 0.0961 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_fl3sloV2_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_fl3sloV2_chlor_units(ug/l) 0 # derived from col 4
sensor: sci_fl3sloV2_rhod_units(ppb) 0 # derived from col 6
sensor: sci_fl3sloV2_cdom_units(ppb) 0 # derived from col 8
sensor: sci_fl3sloV2_chlor_sig(nodim) 0 # col 4
sensor: sci_fl3sloV2_rhod_sig(nodim) 0 # col 6
sensor: sci_fl3sloV2_cdom_sig(nodim) 0 # col 8
sensor: sci_fl3sloV2_chlor_ref(nodim) 0 # col 3
sensor: sci_fl3sloV2_rhod_ref(nodim) 0 # col 5
sensor: sci_fl3sloV2_cdom_ref(nodim) 0 # col 7
sensor: sci_fl3sloV2_temp(nodim) 0 # col 9
sensor: sci_fl3sloV2_timestamp(timestamp) 0 # secs since 1970
# proglet bb3sloV2: wet labs bb3slo backscatter triplet sensor, 2nd configuration
sensor: c_bb3sloV2_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb3sloV2_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb3sloV2_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bb3sloV2_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB3SLO-286)
sensor: u_bb3sloV2_b532_do(nodim) 44 # dark offset, nodim == counts
sensor: u_bb3sloV2_b660_do(nodim) 49 # dark offset, nodim == counts
sensor: u_bb3sloV2_b880_do(nodim) 52 # dark offset, nodim == counts
sensor: u_bb3sloV2_b532_sf(Mnodim) 8.42 # scale factor (0.00000842)
sensor: u_bb3sloV2_b660_sf(Mnodim) 4.16 # scale factor (0.00000416)
sensor: u_bb3sloV2_b880_sf(Mnodim) 3.27 # scale factor (0.00000327)
# output sensors, listed in PRIORITY order
# e.g. if c_bb3sloV2_num_fields_to_send is 3, cols derived from 4,6,8 sent
sensor: sci_bb3sloV2_b532_scaled(nodim) 0 # from col 4
sensor: sci_bb3sloV2_b660_scaled(nodim) 0 # from col 6
sensor: sci_bb3sloV2_b880_scaled(nodim) 0 # from col 8
sensor: sci_bb3sloV2_b532_sig(nodim) 0 # col 4
sensor: sci_bb3sloV2_b660_sig(nodim) 0 # col 6
sensor: sci_bb3sloV2_b880_sig(nodim) 0 # col 8
sensor: sci_bb3sloV2_b532_ref(nodim) 0 # col 3
sensor: sci_bb3sloV2_b660_ref(nodim) 0 # col 5
sensor: sci_bb3sloV2_b880_ref(nodim) 0 # col 7
sensor: sci_bb3sloV2_temp(nodim) 0 # col 9
sensor: sci_bb3sloV2_timestamp(timestamp) 0 # secs since 1970
# proglet bb3sloV3: wet labs bb3slo backscatter triplet sensor, 3nd configuration
sensor: c_bb3sloV3_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb3sloV3_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb3sloV3_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bb3sloV3_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB3SLO-300)
sensor: u_bb3sloV3_b532_do(nodim) 20 # dark offset, nodim == counts
sensor: u_bb3sloV3_b630_do(nodim) 11 # dark offset, nodim == counts
sensor: u_bb3sloV3_b880_do(nodim) 18 # dark offset, nodim == counts
sensor: u_bb3sloV3_b532_sf(Mnodim) 7.093 # scale factor (0.000007093)
sensor: u_bb3sloV3_b630_sf(Mnodim) 3.888 # scale factor (0.000003888)
sensor: u_bb3sloV3_b880_sf(Mnodim) 2.370 # scale factor (0.000002370)
# output sensors, listed in PRIORITY order
# e.g. if c_bb3sloV3_num_fields_to_send is 3, cols derived from 4,6,8 sent
sensor: sci_bb3sloV3_b532_scaled(nodim) 0 # from col 4
sensor: sci_bb3sloV3_b630_scaled(nodim) 0 # from col 6
sensor: sci_bb3sloV3_b880_scaled(nodim) 0 # from col 8
sensor: sci_bb3sloV3_b532_sig(nodim) 0 # col 4
sensor: sci_bb3sloV3_b630_sig(nodim) 0 # col 6
sensor: sci_bb3sloV3_b880_sig(nodim) 0 # col 8
sensor: sci_bb3sloV3_b532_ref(nodim) 0 # col 3
sensor: sci_bb3sloV3_b630_ref(nodim) 0 # col 5
sensor: sci_bb3sloV3_b880_ref(nodim) 0 # col 7
sensor: sci_bb3sloV3_temp(nodim) 0 # col 9
sensor: sci_bb3sloV3_timestamp(timestamp) 0 # secs since 1970
# simulator proglet wetlabs_sim: generic wet labs sensor simulator
sensor: sci_wetlabs_sim_is_installed(bool) 0 # in, t--> wetlabs sensor is being simulated on science computer
sensor: u_wetlabs_sim_num_eng_units(nodim) 3 # currently, either 2 or 3
# proglet bb2fls: wet labs bb2flslk scatter meter and fluorometer sensor
sensor: c_bb2fls_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2fls_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb2fls_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bb2fls_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB2FLSLK-295)
sensor: u_bb2fls_b660_cwo(nodim) 38 # clean water offset, nodim == counts
sensor: u_bb2fls_b880_cwo(nodim) 48 # clean water offset, nodim == counts
sensor: u_bb2fls_cdom_cwo(nodim) 45 # clean water offset, nodim == counts
sensor: u_bb2fls_b660_sf(Mnodim) 3.298 # scale factor (0.000003298)
sensor: u_bb2fls_b880_sf(Mnodim) 3.079 # scale factor (0.000003079)
sensor: u_bb2fls_cdom_sf(ppb/nodim) 0.1695 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_bb2fls_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_bb2fls_b660_scaled(nodim) 0 # derived from col 4
sensor: sci_bb2fls_b880_scaled(nodim) 0 # derived from col 6
sensor: sci_bb2fls_cdom_scaled(ppb) 0 # derived from col 8
sensor: sci_bb2fls_b660_sig(nodim) 0 # col 4
sensor: sci_bb2fls_b880_sig(nodim) 0 # col 6
sensor: sci_bb2fls_cdom_sig(nodim) 0 # col 8
sensor: sci_bb2fls_b660_ref(nodim) 0 # col 3
sensor: sci_bb2fls_b880_ref(nodim) 0 # col 5
sensor: sci_bb2fls_cdom_ref(nodim) 0 # col 7
sensor: sci_bb2fls_therm(nodim) 0 # col 9
sensor: sci_bb2fls_timestamp(timestamp) 0 # secs since 1970
# proglet bb2flsV2: wet labs bb2flslk scatter meter and fluorometer sensor, 2nd configuration
sensor: c_bb2flsV2_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2flsV2_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb2flsV2_num_fields_to_send(nodim) 10 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
sensor: u_bb2flsV2_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB2FLSLK-296)
sensor: u_bb2flsV2_b470_cwo(nodim) 51 # clean water offset, nodim == counts
sensor: u_bb2flsV2_b532_cwo(nodim) 50 # clean water offset, nodim == counts
sensor: u_bb2flsV2_chl_cwo(nodim) 51 # clean water offset, nodim == counts
sensor: u_bb2flsV2_b470_sf(Mnodim) 11.67 # scale factor (0.00001167)
sensor: u_bb2flsV2_b532_sf(Mnodim) 3.079 # scale factor (0.000003079)
sensor: u_bb2flsV2_chl_sf(ug/l/nodim) 0.0133 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_bb2flsV2_num_fields_to_send is 3, cols derived
# from 4,6,8 sent
sensor: sci_bb2flsV2_b470_scaled(nodim) 0 # derived from col 4
sensor: sci_bb2flsV2_b532_scaled(nodim) 0 # derived from col 6
sensor: sci_bb2flsV2_chl_scaled(ug/l) 0 # derived from col 8
sensor: sci_bb2flsV2_b470_sig(nodim) 0 # col 4
sensor: sci_bb2flsV2_b532_sig(nodim) 0 # col 6
sensor: sci_bb2flsV2_chl_sig(nodim) 0 # col 8
sensor: sci_bb2flsV2_b470_ref(nodim) 0 # col 3
sensor: sci_bb2flsV2_b532_ref(nodim) 0 # col 5
sensor: sci_bb2flsV2_chl_ref(nodim) 0 # col 7
sensor: sci_bb2flsV2_therm(nodim) 0 # col 9
sensor: sci_bb2flsV2_timestamp(timestamp) 0 # secs since 1970
# proglet auvb: wet labs auv-b ECO Fluorometer
sensor: c_auvb_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_auvb_is_installed(bool) 0 # in, t--> installed on science
sensor: c_auvb_num_fields_to_send(nodim) 3 # in, number of columns to send on
# each measurement, fields to send
# chosen by order in the list below
# output sensors, listed in PRIORITY order
sensor: sci_auvb_ref(nodim) 0 # col 3, refernece counts
sensor: sci_auvb_sig(nodim) 0 # col 4, signal counts
sensor: sci_auvb_therm(nodim) 0 # col 5, internal thermistor
sensor: sci_auvb_timestamp(timestamp) 0 # secs since 1970
# proglet bb2fV2: wet labs bb2fslo scatter meter and fluorometer sensor
sensor: c_bb2fV2_on(sec) 2 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: sci_bb2fV2_is_installed(bool) 0 # in, t--> installed on science
sensor: c_bb2fV2_num_fields_to_send(nodim) 9 # in, number of columns to send on each
# measurement, fields to send chosen
# by order in the list below
# A negative value signifies
# to use this value as a bitmap.
# The user may specify any
# outputs regardless of order by
# by using this sensor as a bitmap.
# -1 * 2^(f1-1)+2^(f2-1)+...
# where fn is the field number.
# For example, if the user wished
# to just record sci_bb2fV2_b700_scaled
# they would use:
# (-1 *) 2^(2-1) = -2
sensor: u_bb2fV2_is_calibrated(bool) 0 # false, assume not calibrated
# sensor specific input calibration constants (defaults for BB2FSLO-341)
sensor: u_bb2fV2_b470_cwo(nodim) 54 # clean water offset, nodim == counts
sensor: u_bb2fV2_b700_cwo(nodim) 58 # clean water offset, nodim == counts
sensor: u_bb2fV2_chlor_cwo(nodim) 53 # clean water offset, nodim == counts
sensor: u_bb2fV2_b470_sf(Mnodim) 22.09 # scale factor (0.00002209)
sensor: u_bb2fV2_b700_sf(Mnodim) 1.45 # scale factor (0.00000145)
sensor: u_bb2fV2_chlor_sf(ug/l/nodim) 0.0152 # scale factor to get units
# output sensors, listed in PRIORITY order
# e.g. if c_bb2fV2_num_fields_to_send is 3, cols derived
# from 4,6,7 sent
sensor: sci_bb2fV2_b470_scaled(nodim) 0 # derived from col 4
sensor: sci_bb2fV2_b700_scaled(nodim) 0 # derived from col 6
sensor: sci_bb2fV2_chlor_scaled(ug/l) 0 # derived from col 7
sensor: sci_bb2fV2_b470_sig(nodim) 0 # col 4
sensor: sci_bb2fV2_b700_sig(nodim) 0 # col 6
sensor: sci_bb2fV2_chlor(nodim) 0 # col 7
sensor: sci_bb2fV2_b470_ref(nodim) 0 # col 3
sensor: sci_bb2fV2_b700_ref(nodim) 0 # col 5
sensor: sci_bb2fV2_therm(nodim) 0 # col 9
sensor: sci_bb2fV2_timestamp(timestamp) 0 # secs since 1970
# proglet tarr: OASIS Towed Array Receiver / DSP
#inputs:
sensor: c_tarr_on(sec) 0 # in, sets secs between measurements
# <0 stops, 0 fast as possible, >0 that many secs
sensor: u_tarr_num_errors_before_restart(nodim) 5 # number of errors before cycling
# power, <0 = never cycle power
# 0 = restart on any error
sensor: u_tarr_dsp_power_on_delay(sec) 75.0 # wait time between tarr and dsp power on
#outputs:
sensor: sci_tarr_is_installed(bool) 0 # in, t--> installed on science
sensor: sci_tarr_track_count(nodim) 0 # number of data tracks produced since power on
sensor: sci_tarr_error(nodim) 0 # unique number to indicate error type
# Add additional science proglets here
# console.c
sensor: c_console_on(bool) 2.0 # in 0 power it off
# 1 power on automatically at surface
# power off automatically when underwater AND
# no carrier for U_CONSOLE_REQD_CD_OFF_TIME secs
# 2 power on regardless
sensor: u_console_reqd_cd_off_time(sec) 15.0 # in, how long without CD before powering off
# modem if C_CONSOLE_ON == 1
sensor: m_console_on(bool) 1.0 # out, power state of RF modem
sensor: m_console_cd(bool) 1.0 # out, state of RF modem carrier detect
sensor: u_console_off_if_mission_iridium(bool) 1.0 # in, if non-zero causes the freewave
# to be powered off during a mission if a
# carrier isn't detected.
sensor: f_ignore_console_cd_time(sec) 5.0 # in, how long to "filter", i.e. ignore
# carrier detect after the freewave is
# just powered on.
sensor: m_chars_tossed_with_power_off(nodim) 0 # out, chars eaten with power off
sensor: m_chars_tossed_with_cd_off(nodim) 0 # out, chars eaten with CD off
sensor: m_chars_tossed_by_abend(nodim) 0 # out, chars eaten by abend
# this one maintained by behavior abend,
# listed here for completeness
sensor: u_console_announce_time(sec) 60 # controls how often glidername
# is announced when M_CONSOLE_CD
# <0 disables announcement
sensor: x_console_announcement_made(nodim) 0 # incremented whenever an announcement is made
# A variety of simulated variables. These are all maintained by
# simdrvr.c.
# Keep track of if simulating
sensor: x_are_simulating(enum) 0 # out
# 0 not simulating
# 3 on bench
# 2 just electronics
# 1 no electronics
sensor: s_hardware_ver(nodim) 128 # what no_electronics reports for X_HARDWARE_VER
# RevE board.
# This is only read at startup, to change it,
# you probably have to change it here
# and recompile or store it as longterm sensor.
sensor: s_hardware_cop_jumper(bool) 0 # simulated jumper setting for no_electronics only
# 0 2hr, 1 16hr
# Configuration(environmental) controls
sensor: xs_water_depth(m) 30.0 # How deep the water is (COMPUTED! do not set directly)
# xs_water_depth = s_water_depth_avg -
# s_water_depth_delta *
# sin( 2PI * r / s_water_depth_wavelength)
# where r = current distance from (0,0) LMC
sensor: s_water_depth_avg(m) 30.0
sensor: s_water_depth_delta(m) 0.0
sensor: s_water_depth_wavelength(m) 100.0
sensor: s_water_cond(S/m) 4.0 # conductivity, How salty it is
sensor: xs_water_temp(degC) 00 # How warm water is, (COMPUTED! do not set directly)
sensor: s_water_temp_surface(degc) 20.0 # temp above
sensor: s_water_temp_depth_inft(m) 5.0 # this depth (inflection top)
sensor: s_water_temp_bottom(degc) 4.0 # temp below
sensor: s_water_temp_depth_infb(m) 500.0 # this depth (inflection bottom)
# mnenonic: ....INF(T/B) stands for inflection top and inflection bottom.
#XS_VEHICLE_TEMP = S_VEHICLE_TIME_TC * ( XS_WATER_TEMP - XS_VEHICLE_TEMP) * delta_t
sensor: xs_vehicle_temp(degC) 25.0 # How warm vehicle is
sensor: s_vehicle_temp_tc(1/sec) 0.01 # tc ==> time constant
# See simdrvr.c do_xs_vehicle_temp() for derivation
sensor: s_wind_speed(m/s) 9.0 # how fast the wind is blowing, 3.0 ==> 5.4 knots
sensor: s_wind_direction(rad) 0.0 # Direction wind is blowing FROM
sensor: s_water_speed(m/s) 0.05 # Current speed, 0.5 ==> 1knot
sensor: s_water_direction(rad) 4.712 # direction current is going TO,
# toward the west
sensor: s_mag_var(rad) 0.2810 # mag_heading = true_heading + mag_var
# mag_var>0 ==> variation is West (like on cape cod)
# This is cape cod number
sensor: xs_wax_temp(degC) 20 # temperature of working fluid
sensor: xs_wax_frac_frozen(nodim) 0 # what fraction of the fluid is frozen
sensor: s_wax_freeze_temp(degC) 10 # where it freezes
# combination config/working
# Glider real world location
# DO NOT CHANGE THESE SETTINGS
# Users should PUT s_ini_lat or s_ini_lon to change
# simulated glider location
sensor: xs_lat(deg) 4138.051 # Ashumet
sensor: xs_lon(deg) -7032.124
# Users should change these to move the simulated glider
# position
sensor: s_ini_lat(deg) 69696969 # these are purposely set to
sensor: s_ini_lon(deg) 69696969 # unreasonable values
sensor: x_simulated_position_moved(bool) 0 # non-zero means user moved simulated position
# flag between gps.c and simdrvr.c
# to tell gps to skip moved too far check
# set in simdrvr.c, cleared in gps.c
# deep electric observed oil pot voltage rate of change
sensor: s_de_oil_pot_volt_flux(volts/sec) 0.0031
# working
sensor: x_simdrvr_ran(out) 0 # out, set to 1 on every simdrvr_ctrl() call
sensor: xs_battpos(in) 0 # simdrvr.c, do_glider_internals()
sensor: xs_battroll(rad) 0
sensor: xs_ballast_pumped(cc) 0
sensor: xs_fin(rad) 0
sensor: xs_roll(rad) 0 # simdrvr.c, do_glider_attitude()
sensor: xs_pitch(rad) 0
sensor: xs_depth(m) 0 # simdrvr.c, do_glider_depth()
sensor: xs_altitude(m) 0 # how far above bottm
sensor: xs_vert_speed(m/s) 0 # veh vert speed thru water
sensor: s_ocean_pressure_min(volts) 0.20 # used to generate voltage for 0 pressure
sensor: xs_pressure_drift(volts) 0 # integrated pressure drift
sensor: xs_pressure_noise(bar) 0 # simulated random noise to be added to simulated pressure reading
sensor: xs_hdg_rate(rad/sec) 0
sensor: xs_heading(rad) 0
sensor: xs_speed(m/s) 0 # veh horz speed thru water
sensor: xs_vx_lmc(m/s) 0 # vehicle horizontal velocity OVER GROUND
sensor: xs_vy_lmc(m/s) 0
sensor: xs_x_lmc(m) 0 # vehicle position in Local Mission Coordinates
sensor: xs_y_lmc(m) 0 # (0,0) at mission start Y axis is magnetic north
# These are set to 1 if bad data is generated for a device
sensor: s_corrupted_altitude(bool) 0 # altimeter
sensor: s_corrupted_gps(bool) 0 # The gps, valid or invalid
sensor: s_corrupted_gps_error(bool) 0 # The gps, error added to fix
sensor: s_corrupted_watchdog_oddity(bool) 0 # watchdog generated oddity
sensor: s_corrupted_bpump_stalled(bool) 0 # buoyancy pump "jammed"
sensor: s_corrupted_bpump_overheated(bool) 0 # buoyancy pump overheat bit went high
sensor: s_corrupted_pitch_stalled(bool) 0 # pitch motor "jammed"
sensor: s_corrupted_memory_leak(bool) 0 # We leaked some heap memory
sensor: s_corrupted_pressure_drift(bool) 0 # we generated a pressure drift
sensor: s_corrupted_pressure_spike(bool) 0 # we generated an ocean pressure spike
sensor: s_corrupted_pressure_noise(bool) 0 # we generated ocean pressure noise
sensor: s_corrupted_oil_volume(bool) 0 # we generated an oil volume out-of-deadband
# error metrics
sensor: xs_x_lmc_error(m) 0 # m_x/y_lmc - s_x/y_lmc
sensor: xs_y_lmc_error(m) 0
sensor: xs_speed_error(m/s) 0 #xs_speed_error = m_speed - xs_speed
# test_driver
sensor: u_test_driver_errors_per_min(nodim) 0.0 # Only for testing error handling
sensor: u_test_driver_warnings_per_min(nodim) 0.0 # Only for testing error handling
sensor: u_test_driver_oddities_per_min(nodim) 0.0 # Only for testing error handling
# DBD/SBD header control for header
sensor: u_dbd_sensor_list_xmit_control(enum) 1 # -1 = always transmit header, compatibility mode
# use for legacy shore side programs
# 0 = always transmit header
# 1 = transmit header on initial mission segment only
# 2 = transmit header if THIS glider hasn't sent it before
# 3 = never transmit header
# File system make-space pruning
sensor: u_reqd_disk_space(Mbytes) 10.0 # How much disk space do we want to keep free
# as a minimum. ~ 1 Mbyte/hour is generated
sensor: m_disk_usage(Mbytes) 0.0 # How much disk space is currently used
sensor: m_disk_free(Mbytes) 0.0 # How much disk space is currently free
sensor: x_disk_files_removed(nodim) 0 # Count of how many files pruned last time
# Send log files time requirement calculation
sensor: u_freewave_data_rate(KBps) 3.0 # Nominal data throughput on Freewave kilobytes per second
sensor: u_iridium_data_rate(KBps) 0.1 # Nominal data throughput on Iridium kilobytes per second
# Some documentation on b_args common to all behaviors
# NOTE: When you add these common b_args, put them at END of b_arg
# list for behaviors. They do not "naturally" belong there, but
# it means you do not have to edit behaviors which typically have
# hardwired b_arg positions in them
# NOTE: These are symbolically defined beh_args.h
# b_arg: START_WHEN When the behavior should start, i.e. go from UNITIALIZED to ACTIVE
# BAW_IMMEDIATELY 0 // immediately
# BAW_STK_IDLE 1 // When stack is idle (nothing is being commanded)
# BAW_PITCH_IDLE 2 // When pitch is idle(nothing is being commanded)
# BAW_HEADING_IDLE 3 // When heading is idle(nothing is being commanded)
# BAW_UPDWN_IDLE 4 // When bpump/threng is idle(nothing is being commanded)
# BAW_NEVER 5 // Never stop
# BAW_WHEN_SECS 6 // After behavior arg "when_secs", from prior END if cycling
# BAW_WHEN_WPT_DIST 7 // When sensor(m_dist_to_wpt) < behavior arg "when_wpt_dist"
# BAW_WHEN_HIT_WAYPOINT 8 // When X_HIT_A_WAYPOINT is set by goto_wpt behavior
# BAW_EVERY_SECS 9 // After behavior arg "when_secs", from prior START if cycling
# BAW_EVERY_SECS_UPDWN_IDLE 10 // After behavior arg "when_secs", from prior START AND
# // updown is idle, no one commanding vertical motion
# BAW_SCI_SURFACE 11 // SCI_WANTS_SURFACE is non-zero
# BAW_NOCOMM_SECS 12 // when have not had comms for WHEN_SECS secs
# BAW_WHEN_UTC_TIME 13 // At a specific UTC time or UTC minute into the hour
#
# b_arg: STOP_WHEN
# 0 complete
# 1-N same as "start_when"
# ----- This is the start of a typical mission
behavior: abend
# MS_ABORT_OVERDEPTH
b_arg: overdepth(m) 10000.0 # <0 disables,
# clipped to F_MAX_WORKING_DEPTH
b_arg: overdepth_sample_time(sec) 60.0 # how often to check
# MS_ABORT_OVERTIME
b_arg: overtime(sec) 7200.0 # < 0 disables
# MS_ABORT_UNDERVOLTS
b_arg: undervolts(volts) 10.0 # < 0 disables
b_arg: undervolts_sample_time(sec) 60.0 # how often to check
# MS_ABORT_SAMEDEPTH
b_arg: samedepth_for(sec) 1800.0 # <0 disables
b_arg: samedepth_for_sample_time(sec) 1800.0 # how often to check
# MS_ABORT_STALLED
b_arg: stalled_for(sec) 1800.0 # <0 disables
b_arg: stalled_for_sample_time(sec) 1800.0 # how often to check
# MS_ABORT_NO_TICKLE
b_arg: no_cop_tickle_for(sec) 6300.0 # secs, abort mission if watchdog
# not tickled this often, <0 disables
b_arg: no_cop_tickle_percent(%) 12.5 # 0-100, <0 disables
# Abort this % of time before
# hardware, i.e. for 12.5%
# hardware 2hr 15min before
# 16hr 2hr before
# Note: no_cop_tickle_percento only used on RevE boards or later
# If non-zero and hardware supports COP timeout readback...
# causes no_cop_tickle_for(sec) to be IGNORED
# On old boards, no_cop_tickle_percent(%) is IGNORED and
# control reverts to no_cop_tickle_for(sec)
# MS_ABORT_ENG_PRESSURE, thermal only
b_arg: eng_pressure_mul(nodim) 1.10 # abort if M_THERMAL_ACC_PRES < eng_pressure_mul*M_PRESSURE
# Must be > 1, make bigger to be safer
b_arg: eng_pressure_sample_time(sec) 15.0 # how often to measure, <0 disables
b_arg: max_wpt_distance(m) 3000 # MS_ABORT_WPT_TOOFAR
# Maximum allowable distance to a waypoint
# < 0 disables
b_arg: chk_sensor_reasonableness(bool) 1 # MS_ABORT_UNREASONABLE_SETTINGS
# 0 disables check
b_arg: reqd_spare_heap(bytes) 50000 # MS_ABORT_NO_HEAP if M_SPARE_HEAP is less than this
# <0 disables check
####################################################
# NOTE - VALUE OF REQD_SPARE_HEAP IN LASTGASP.MI
# SHOULD BE MAINTAINED LOWER THAN THIS NUMBER SO
# IF A MISSION ABORTS WITH MS_ABORT_NO_HEAP AND WE
# SEQUENCE TO LASTGASP.MI, THAT IN TURN WILL NOT
# ITSELF LIKEWISE DO A HEAP ABORT
####################################################
b_arg: leakdetect_sample_time(sec) 60.0 # MS_ABORT_LEAK, M_LEAK is non-zero
# <0 disables check
b_arg: vacuum_min(inHg) 4.0 # MS_ABORT_VACUUM, M_VACUUM out of limits
b_arg: vacuum_max(inHg) 11.0
b_arg: vacuum_sample_time(sec) 120.0 # <0 disables check
b_arg: oil_volume_sample_time(sec) 180.0 # how often to measure, <0 disables check
b_arg: max_allowable_busy_cpu_cycles(cycles) -1 # aborts if M_DEVICE_DRIVERS_CALLED_ABNORMALLY
# is true for this many cycles in a row
# <= 0 disables the abort
behavior: surface
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/surfac.ma
b_arg: start_when(enum) 0 # See doco above
b_arg: when_secs(sec) 180 # How long between surfacing, only if start_when==6,9, or 12
b_arg: when_wpt_dist(m) 10 # how close to waypoint before surface, only if start_when==7
b_arg: end_action(enum) 1 # 0-quit, 1-wait for ^C quit/resume, 2-resume, 3-drift til "end_wpt_dist"
# 4-wait for ^C once 5-wait for ^C quit on timeout
b_arg: report_all(bool) 0 # T->report all sensors once, F->just gps
b_arg: gps_wait_time(sec) 120 # how long to wait for gps
b_arg: keystroke_wait_time(sec) 30 # how long to wait for control-C
b_arg: end_wpt_dist(m) 0 # end_action == 3 ==> stop when m_dist_to_wpt > this arg
# Arguments for climb_to when going to surface
b_arg: c_use_bpump(enum) 2
b_arg: c_bpump_value(X) 1000.0
b_arg: c_use_pitch(enum) 3 # servo on pitch
b_arg: c_pitch_value(X) 0.4363 # 25 degrees
b_arg: printout_cycle_time(sec) 20.0 # How often to print dialog
# iridium related stuff
b_arg: gps_postfix_wait_time(sec) 60.0 # How long to wait after initial
# gps fix before turning the iridium
# on (which disables the gps). It will
# wait the shorter of this time or until
# all the water velocity calculations are
# complete.
b_arg: force_iridium_use(nodim) 0.0 # Only for test. non-zero values are set
# into C_IRIDIUM_ON. Used to force the
# use of the iridium even if freewave is
# present.
b_arg: min_time_between_gps_fixes(sec) 300.0 # The irdium will be hung up this often
# to get gps fixes. It will call back however.
# Primarily for use in hold missions to get
# periodic gps fixes to tell how far the glider
# has drifted.
b_arg: sensor_input_wait_time(sec) 10.0 # Time limit to wait for input sensors at surface.
behavior: goto_wpt
b_arg: start_when(enum) 0 # See doco above
b_arg: stop_when(enum) 2 # See doco above
b_arg: when_wpt_dist(m) 0 # stop_when == 7 ==> stop when m_dist_to_wpt < this arg
b_arg: wpt_units(enum) 0 # 0 LMC, 1 UTM, 2 LAT/LONG
b_arg: wpt_x(X) 0 # The waypoint (east or lon)
b_arg: wpt_y(X) 0 # (north or lat)
# These only used for UTM waypoints
b_arg: utm_zd(byte) 19.0 # UTM Zone as digit (see coord_sys.h)
b_arg: utm_zc(byte) 19.0 # (T) UTM Zone as char (see coord_sys.h)
b_arg: end_action(enum) 0 # 0-quit, 2 resume
behavior: goto_list
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/goto_l.ma
b_arg: start_when(enum) 0 # See doco above
b_arg: num_waypoints(nodim) 0 # Number of valid waypoints in list
# maximum of 8 (this can be increased at compile-time)
b_arg: num_legs_to_run(nodim) 0 # Number of waypoints to sequence thru
# 1-N exactly this many waypoints
# 0 illegal
# -1 loop forever
# -2 traverse list once (stop at last in list)
# <-2 illegal
b_arg: initial_wpt(enum) 0 # Which waypoint to head for first
# 0 to N-1 the waypoint in the list
# -1 ==> one after last one achieved
# -2 ==> closest
# Stopping condition applied to all of waypoints in the list
b_arg: list_stop_when(enum) 7 # See doco above
b_arg: list_when_wpt_dist(m) 10. # used if list_stop_when == 7
# The waypoints
b_arg: wpt_units_0(enum) 0 # 0 LMC, 1 UTM, 2 LAT/LONG
b_arg: wpt_x_0(X) 0 # The waypoint (east or lon)
b_arg: wpt_y_0(X) 0 # (north or lat)
b_arg: wpt_units_1(enum) 0
b_arg: wpt_x_1(X) 0
b_arg: wpt_y_1(X) 0
b_arg: wpt_units_2(enum) 0
b_arg: wpt_x_2(X) 0
b_arg: wpt_y_2(X) 0
b_arg: wpt_units_3(enum) 0
b_arg: wpt_x_3(X) 0
b_arg: wpt_y_3(X) 0
b_arg: wpt_units_4(enum) 0
b_arg: wpt_x_4(X) 0
b_arg: wpt_y_4(X) 0
b_arg: wpt_units_5(enum) 0
b_arg: wpt_x_5(X) 0
b_arg: wpt_y_5(X) 0
b_arg: wpt_units_6(enum) 0
b_arg: wpt_x_6(X) 0
b_arg: wpt_y_6(X) 0
b_arg: wpt_units_7(enum) 0
b_arg: wpt_x_7(X) 0
b_arg: wpt_y_7(X) 0
behavior: yo
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/yo.ma
b_arg: start_when(enum) 0 # See doco above
b_arg: start_diving(bool) 1 # T-> dive first, F->climb first
b_arg: num_half_cycles_to_do(nodim) 2 # Number of dive/climbs to perform
# <0 is infinite, i.e. never finishes
# arguments for dive_to
b_arg: d_target_depth(m) 10
b_arg: d_target_altitude(m) -1
b_arg: d_use_bpump(enum) 2
b_arg: d_bpump_value(X) -1000.0
b_arg: d_use_pitch(enum) 1
b_arg: d_pitch_value(X) 0.0
b_arg: d_stop_when_hover_for(sec) 180.0
b_arg: d_stop_when_stalled_for(sec) 240.0
b_arg: d_max_thermal_charge_time(sec) 1200.0
b_arg: d_max_pumping_charge_time(sec) 300.0
b_arg: d_thr_reqd_pres_mul(nodim) 1.10
# arguments for climb_to
b_arg: c_target_depth(m) 10
b_arg: c_target_altitude(m) -1
b_arg: c_use_bpump(enum) 2
b_arg: c_bpump_value(X) 1000.0
b_arg: c_use_pitch(enum) 1
b_arg: c_pitch_value(X) 0.0
b_arg: c_stop_when_hover_for(sec) 180.0
b_arg: c_stop_when_stalled_for(sec) 240.0
b_arg: end_action(enum) 0 # 0-quit, 2 resume
behavior: prepare_to_dive
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/prepar.ma
b_arg: start_when(enum) 0 # See doco above
b_arg: wait_time(sec) 720 # 12minutes, how long to wait for gps
b_arg: max_thermal_charge_time(sec) 120 # The maximum length of time to wait for
# charge from thermal tubes. After this time the
# electric charge pump is used.
b_arg: max_pumping_charge_time(sec) 300 # The maximum length of time to wait for a charge
# after using electric c charge pump.
# max time to wait = max_thermal_charge_time +
# max_pumping_charge_time
behavior: sensors_in
# <0 off, 0 as fast as possible, N, sample every N secs
b_arg: c_att_time(sec) -1.0
b_arg: c_pressure_time(sec) -1.0
b_arg: c_alt_time(sec) -1.0
b_arg: u_battery_time(sec) -1.0
b_arg: u_vacuum_time(sec) -1.0
b_arg: c_profile_on(sec) -1.0
b_arg: c_leakdetect_time(sec) -1.0
b_arg: c_gps_on(bool) 0.0 # Special, 1 is on, 0 is off
b_arg: c_science_all_on(sec) -1.0
b_arg: c_hs2_on(sec) -1.0
b_arg: c_bb2f_on(sec) -1.0
b_arg: c_bb2c_on(sec) -1.0
b_arg: c_bb2lss_on(sec) -1.0
b_arg: c_sam_on(sec) -1.0
b_arg: c_whpar_on(sec) -1.0
b_arg: c_motebb_on(sec) -1.0
b_arg: c_bbfl2s_on(sec) -1.0
b_arg: c_fl3slo_on(sec) -1.0
b_arg: c_bb3slo_on(sec) -1.0
b_arg: c_oxy3835_on(sec) -1.0
b_arg: c_oxy3835_wphase_on(sec) -1.0
b_arg: c_whfctd_on(sec) -1.0
b_arg: c_bam_on(sec) -1.0
b_arg: c_ocr504R_on(sec) -1.0
b_arg: c_ocr504I_on(sec) -1.0
b_arg: c_ocr507R_on(sec) -1.0
b_arg: c_ocr507I_on(sec) -1.0
b_arg: c_bb2fls_on(sec) -1.0
b_arg: c_bb2flsV2_on(sec) -1.0
b_arg: c_auvb_on(sec) -1.0
b_arg: c_bb2fV2_on(sec) -1.0
b_arg: c_tarr_on(sec) -1.0
b_arg: c_bbfl2sV2_on(sec) -1.0
# Add additional science proglets here
# ----- This is end of a typical mission
# These usually do not get called directly
behavior: set_heading
b_arg: use_heading(bool) 2 # in, 1 HM_HEADING
# in, 2 HM_ROLL
# in, 3 HM_BATTROLL
# in, 4 HM_FIN
b_arg: heading_value(X) 1000.0
# use_heading == 1 C_HEADING(rad) desired heading
# use_heading == 2 C_ROLL(rad), >0 bank right
# use_heading == 3 C_BATTROLL(rad) >0 puts stbd wing down
# use_heading == 4 C_FIN(rad), >0 turns to stbd
b_arg: start_when(enum) 0 # See doco above
b_arg: stop_when(enum) 2 # See doco above
behavior: dive_to
b_arg: target_depth(m) 10 # how deep to dive
b_arg: target_altitude(m) -1 # stop this far from bottom, <0 disables
# bpump_mode_t values - ballast control
# Electric only, ignored in thermal
b_arg: use_bpump(enum) 2 # 0 Speed - servo
# 1 Buoyancy Pump relative to neutral
# 2 Buoyancy Pump absolute
b_arg: bpump_value(X) -1000.0 # use_bpump == 0 m/s desired thru water
# use_bpump == 1 cc, clips to max legal, >0 goes up
# use_bpump == 2 cc, clips to max legal >0 goes up
# pitch_mode_t values - battery fore/aft control
b_arg: use_pitch(enum) 1 # 3 Servo on Pitch
# 2 Pitch, set once from curve
# 1 BattPos
b_arg: pitch_value(X) 0.0 # use_pitch == 2,3 rad, desired pitch angle, <0 to dive
# use_pitch == 1 in, desired battpos, >0 to nose down
# clips to max legal
b_arg: start_when(enum) 0 # See doco above
b_arg: stop_when_hover_for(sec) 180.0 # terminate dive when depth does not change for
# this many secs, <0 to disable
b_arg: stop_when_stalled_for(sec) 240.0 # terminate dive when glider not moving thru water
# this many secs, i.e. M_SPEED is 0
# <0 to disable
b_arg: initial_inflection(bool) 1.0 # T->Want to start with an inflection
# Thermal only, ignored in electric
b_arg: max_thermal_charge_time(sec) 1200.0 # How long to wait for thermal
# charge before using the thermal pump
b_arg: max_pumping_charge_time(sec) 300.0 # how long to wait after starting charge pump
# before an error
b_arg: thr_reqd_pres_mul(nodim) 1.10 # engine pressure must be this many
# times the ocean pressure at target_depth
# before the dive is started.
behavior: climb_to
b_arg: target_depth(m) 10 # how deep to dive
b_arg: target_altitude(m) -1 # stop this far from bottom, <0 disables
# bpump_mode_t values - ballast control
b_arg: use_bpump(enum) 2 # 0 Speed - servo
# 1 Buoyancy Pump relative to neutral
# 2 Buoyancy Pump absolute
b_arg: bpump_value(X) 1000.0 # use_bpump == 0 m/s desired thru water
# use_bpump == 1 cc, clips to max legal, >0 goes up
# use_bpump == 2 cc, clips to max legal >0 goes up
# pitch_mode_t values - battery fore/aft control
b_arg: use_pitch(enum) 1 # 3 Servo on Pitch
# 2 Pitch, set once from curve
# 1 BattPos
b_arg: pitch_value(X) 0.0 # use_pitch == 2,3 rad, desired pitch angle, <0 to dive
# use_pitch == 1 in, desired battpos, >0 to nose down
# clips to max legal
b_arg: start_when(enum) 0 # See doco above
b_arg: stop_when_hover_for(sec) -1.0 # terminate dive when depth does not change for
# this many secs, <0 to disable
b_arg: stop_when_stalled_for(sec) 240.0 # terminate climb when glider not moving thru water
# this many secs, i.e. M_SPEED is 0
# <0 to disable
b_arg: initial_inflection(bool) 1.0 # T->Want to start with an inflection
# behaviors which control/communicate with the science computer
# bconsci
# A terminal session with the glider.
# Stops by loss of carrier. Package with abend
# to stop by time/depth
behavior: bconsci
b_arg: terminate_mission_when_done(bool) 1 # end mission when this behavior is done
# Controls the sampling of the hydrophones
# Obsolete, should be removed
# replaced by behavior: bhydrophone
behavior: hydrosmp
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/hydros.ma
#
b_arg: num_samples(nodim) 1 # How many collections, -1 runs forever
b_arg: time_between_samples(min) 10 # wait time between samples
# controls initial start minute sych to hour
b_arg: duration(sec) 30 # How long each sample is
b_arg: gain(dB) 0 # 0, 5, 10, .., 35
b_arg: channel(nodim) 0 # 0-3, which channel
b_arg: xmit_files(bool) 0 # t-> have science xmit files
b_arg: silence_lvl(nodim) 0 # 0-1, higher the number, the quieter the glider
b_arg: idle_stack_when_done(bool) 1 # T-> idle the stack to terminate
# mission when sampling is done
# bhydrophone
# A behavior to control the superscience (quest-2003) version of
# drea hydrophone sampling
behavior: bhydrophone
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/bhydro.ma
b_arg: start_when(enum) 0 # See doco above: 0, 9
b_arg: when_secs(sec) 0 #
# Behavior ends when either of these conditions met
b_arg: max_collection_time(sec) -1 # Collect for this long maximum, <0 ==> forever
b_arg: num_collections(nodim) -1 # Number of collections to make, <0 ==> infinite
# Timing of collection
b_arg: c_hydrophone_duration(sec) 60.0 # How long to collect
b_arg: c_hydrophone_pre_delay(sec) 15.0 # Delay between proglet start and collection
b_arg: no_sample_time(sec) 15.0 # Time between collection
# c_hydrophone_pre_delay+no_sample_time is total
# time when NOT sampling
b_arg: c_hydrophone_post_delay(sec) 30.0 # How long before proglet recycles
# This is not part of duty cycle
# only how long before proglet recycles
# It is normally stopped after every measurement
# Ping control
b_arg: c_hydrophone_pre_pings(nodim) 1 # number of pings before sample
b_arg: c_hydrophone_post_pings(nodim) 2 # number of pings after sample
# Collection parameters
b_arg: c_hydrophone_gain(nodim) 3.0 # 0-7
b_arg: c_hydrophone_num_channels(nodim) 1.0 # 1-4
b_arg: c_hydrophone_sample_rate(Hz) 5000.0 # 1000-5000, how fast to AD
b_arg: c_hydrophone_drive_num(nodim) 3.0 # 2->C:, 3:->D: etc
# bviper
# A behavior to control the DMA Viper processor
behavior: bviper
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/bhydro.ma
b_arg: start_when(enum) 0 # See doco above: 0, 9, 13
b_arg: when_secs(sec) 0 #
b_arg: when_utc_min -1 # 0-59, -1 any minute
b_arg: when_utc_hour -1 # 0-23, -1 any hour
b_arg: when_utc_day -1 # 1-31, -1 any day
b_arg: when_utc_month -1 # 1-12, -1 any month
# Behavior ends when either of these conditions met
b_arg: max_collection_time(sec) -1 # Collect for this long maximum, <0 ==> forever
b_arg: num_collections(nodim) -1 # Number of collections to make, <0 ==> infinite
# Timing of collection
b_arg: no_sample_time(sec) 300.0 # Time between collection
# time when NOT sampling
# Collection parameters
b_arg: c_viper_turn_on_timeout(sec) 120.0 # max wait time for viper to power on
b_arg: c_viper_collect_timeout(sec) 200.0 # max wait time for viper to collect/analyse acoustic data
b_arg: c_viper_reset_timeout(sec) 60.0 # max wait time for viper to respond to reset gain command
b_arg: c_viper_start_sampling_timeout(sec) 60.0 # max wait time for viper to respond to start sampling command
b_arg: c_viper_detection_done_timeout(sec) 60.0 # max wait time for viper to respond to detection done command
b_arg: c_viper_turn_off_timeout(sec) 120.0 # max wait time for viper to power off
b_arg: c_viper_gain(nodim) 3.0 # 0-7 gain sent to viper
b_arg: c_viper_max_sample_starts(nodim) 3.0 # max allowable attempts to obtain a definitive detection
b_arg: c_viper_max_errors(nodim) 3.0 # max number of viper errors before mission abort
# Added at sea (that's why out of order)
b_arg: min_sample_depth(m) 20 # min depth to start, <0 disables
b_arg: max_sample_depth(m) 60 # max depth to start, <0 disables
# Controls the sampling of specified sensor type (b_arg: sensor_type)
behavior: sample
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/sample.ma
b_arg: sensor_type(enum) 0 # 0 C_SCIENCE_ALL_ON
# 1 C_PROFILE_ON
# 2 C_HS2_ON
# 3 C_BB2F_ON
# 4 C_BB2C_ON
# 5 C_BB2LSS_ON
# 6 C_SAM_ON
# 7 C_WHPAR_ON
# 8 C_WHGPBM_ON
# 9 C_MOTEBB_ON
# 10 C_BBFL2S_ON
# 11 C_FL3SLO_ON
# 12 C_BB3SLO_ON
# 13 C_OXY3835_ON
# 14 C_WHFCTD_ON
# 15 C_BAM_ON
# 16 C_OCR504R_ON
# 17 C_OCR504I_ON
# 18 C_FLNTU_ON
# 19 C_FL3SLOV2_ON
# 20 C_BB3SLOV2_ON
# 21 C_OCR507R_ON
# 22 C_OCR507I_ON
# 23 C_BB3SLOV3_ON
# 24 C_BB2FLS_ON
# 25 C_BB2FLSV2_ON
# 26 C_OXY3835_WPHASE_ON
# 27 C_AUVB_ON
# 28 C_BB2FV2_ON
# 29 C_TARR_ON
# 30 C_BBFL2SV2_ON
# pick next number here for new proglet
# REQUIRED: also add it to: science_super.c: __ss_indexes[],
# add it to output_sensors[] in snsr_in.c,
# and update header doco in sample.c.
# This is a bit-field, combine:
# 8 on_surface, 4 climbing, 2 hovering, 1 diving
b_arg: state_to_sample(enum) 1 # 0 none
# 1 diving
# 2 hovering
# 3 diving|hovering
# 4 climbing
# 5 diving|climbing
# 6 hovering|climbing
# 7 diving|hovering|climbing
# 8 on_surface
# 9 diving|on_surface
# 10 hovering|on_surface
# 11 diving|hovering|on_surface
# 12 climbing|on_surface
# 13 diving|climbing|on_surface
# 14 hovering|climbing|on_surface
# 15 diving|hovering|climbing|on_surface
b_arg: sample_time_after_state_change(s) 15 # time after a positional stat
# change to continue sampling
b_arg: intersample_time(s) 2 # if < 0 then off, if = 0 then
# as fast as possible, and if
# > 0 then that many seconds
# between measurements
behavior: badd_b
b_arg: args_from_file(enum) -1 # >= 0 enables reading from mafiles/bhydro.ma
b_arg: start_when(enum) 1 # See doco above: 0, 1, 2
b_arg: stop_when(enum) 12 # BAW_NOCOMM_SECS
b_arg: max_collection_time(sec) 1800 # timeout for data collect mode
b_arg: max_search_time(sec) 1800 # timeout for search mode
b_arg: min_download_range(m) 2000 # minimum range to start collecting data
b_arg: max_tries_to_connect(nodim) 15 # max number of connection attempts
b_arg: max_badd_errors(nodim) 30 # abort after this many errors
b_arg: run_on_surface(bool) 0 # 1 -> allow running on surface
# 0 -> don't allow to run on surface
b_arg: collect_data_after_range(bool) 1 # 1 -> collect data after range mode
# 0 -> don't collect data after range mode
# Collection parameters
b_arg: c_badd_mode(enum) 0 # 0: search, 1: collect data
b_arg: c_badd_target_id(enum) 0 # address of remote host modem being called
b_arg: c_badd_range_secs(sec) 60 # how often to request range to remote modem
# <0 => don't request range,
# min value = c_badd_input_parse_secs(sec) * 2
b_arg: c_badd_input_parse_secs(sec) 30 # How long to check command response input buffer
b_arg: c_badd_datacol_status_secs(sec) 30 # How long to check command response input buffer
b_arg: c_badd_clear_remote_data(bool) 0 # 0: do NOT clear remote data after successful
# download, 1: clear remote data after download
# An alternative method of terminating a mission (b_arg: sensor_type)
behavior: mission_ender
b_arg: start_when(enum) 1 # See doco above: 1,2,3, or 4
behavior: comatose
b_arg: start_sci_hydrophone_collecting(bool) 1.0 # in, t-> start when this sensor true
b_arg: start_sci_viper_collecting(bool) 1.0 # in, t-> start when this sensor true
b_arg: post_inflection_holdoff(s) 30.0 # in, how many secs post inflection to
# hold off before going comatose
# These do not get used to much. Generally only for testing
behavior: nop_cmds
b_arg: nop_pitch(bool) 0 # t-> cmd pitch to _IGNORE to keep stack busy
b_arg: nop_bpump(bool) 0 # t-> cmd bpump to _IGNORE to keep stack busy
b_arg: nop_heading(bool) 0 # t-> cmd heading to _IGNORE to keep stack busy
b_arg: nop_threng(bool) 0 # t-> cmd threng to _IGNORE to keep stack busy
b_arg: secs_to_run(sec) -1 # how long this behavior runs, <0 to run forever
behavior: oob_abort
b_arg: start_when(enum) 6 # see doco above
b_arg: when_secs(sec) 120.0 # How long to wait for issuing out of band abort
# For testing iridium, sends file irdatst.dat
behavior: iridium_ascii_test
b_arg: time_between_xmit(secs) 900.0 # 15 minutes
b_arg: tries_per_xmit(nodim) 5 # How many attempts to send file
b_arg: link_ok_timeout(secs) 30.0 # How long to wait for link ok
# < 0 means do not expect "link ok"
b_arg: modem_drain_time(secs) 30.0 # How long to delay phone power off
# Turn the pinger on during a test mission
behavior: pinger_on
b_arg: c_pinger_on(bool) 1
b_arg: u_ping_n_enabled(bool) 1
b_arg: u_pinger_rep_rate(sec) 8
b_arg: u_pinger_max_depth(m) 1000
END
#endif