#if 0 # Copyright (C) 1994-1998, Massachusetts Institute of Technology. # Modifications Copyright (C) 1999-2005 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. # # 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 3277 #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 concept of "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. # ----------------------------------------------------------------------- # 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" # --- 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(sec) 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 # --- 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_de_eng_mode(enum) -1 # out, cmd->de_eng_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_de_eng_mode(enum) -1 # out, cmd->de_eng_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) # 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() sensor: m_depth_rate(m/s) 0 # out, rate of change of depth, >0 is down 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 # 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_eng.c sensor: c_de_recall(msec) 1000.0 # in, <= 0 next_cycle # > millisecs between state machine calls sensor: m_de_recall(msec) 0.0 # out, = 0 next_cycle # > millisecs between state machine calls sensor: c_de_updown(enum) 0.0 # in # C_DE_ENG_DONT_USE(-1) Disable this driver (thrvalve still active) # C_DE_ENG_UP(0) UP # C_DE_ENG_DOWN(1) DOWN sensor: m_de_updown(enum) 3.0 # out # M_DE_ENG_UP(0) In the ascending state # M_DE_ENG_DOWN(1) In the descending state # M_DE_ENG_STABLE(2) In the stable state # M_DE_ENG_NOT_IN_USE(3) Higher level driver disabled # M_DE_ENG_ERROR(-1) Something bad happened, someone should abort sensor: m_is_de_engine_moving(bool) 0 # out, t-> engine is moving sensor: m_secs_since_de_substate_change(secs) 0 # timer for state machine sensor: u_max_secs_in_de_substate(secs) 50 # max time in a deep electric substate # de_pump.c sensor: c_de_pump(enum) 0.0 # in # C_DE_PUMP_OFF(0) # C_DE_PUMP_UP(1) # C_DE_PUMP_DOWN(2) # C_DE_PUMP_UP_IN_LAB(3) lab_mode (-lab) only, ignore # C_DE_PUMP_DOWN_IN_LAB(4) M_THERMAL_VALVE and M_AIR_PUMP sensor: m_de_pump(enum) 0.0 # out # M_DE_PUMP_OFF(0) # M_DE_PUMP_UP(1) # M_DE_PUMP_DOWN(2) # M_DE_AWAITING_VALVE(-1) M_THERMAL_VALVE != THRVALVE_UP...THRVALVE_DOWN # M_DE_AWAITING_AIR(-2) M_AIR_PUMP == 0 ... != 0 # 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) 600 # 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. # attitude.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, raw reading from 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 # oilvol.c sensor: c_de_oil_vol_time(sec) 0 # in, <0 is off, =0 as fast as possible # >0 num seconds between measurements sensor: c_de_oil_vol_recall(msec) 1000.0 # in, <=0 no subcycle sampling # >0 millisecs between subcycle # measurements, c_de_oil_vol_time must # be 0 to enable sensor: c_de_oil_vol_deadband(cc) 5.0 # in, user defineable limit on how close # is close enough for setting the # neutral buoyancy volume sensor: c_de_oil_vol_measuring_delay(sec) 180 # stable state periodic monitoring rate sensor: c_de_oil_vol(cc) 240.0 # in >0, goes up sensor: m_de_oil_vol(cc) 0 # out, calibrated from m_de_oil_vol_pot_voltage sensor: m_de_oil_vol_pot_voltage(volts) 0 # out, raw voltage from AD sensor: f_de_oil_vol_pot_voltage_min(volts) 0.027 # raw AD voltage of fully retracted pot sensor: f_de_oil_vol_pot_voltage_max(volts) 1.514 # raw AD voltage of fully extended pot sensor: f_de_oil_vol_in_system(cc) 700 # total amount of oil in glider sensor: x_de_oil_vol_deadband(cc) 0.0 # out, how close is good enuf # = f_de_oil_vol_deadz_width * # f_de_oil_vol_db_frac_dz sensor: x_de_oil_vol_max(cc) 240.0 # out, Maximum OPERATIONAL limit # max = safety_max - deadz_width sensor: f_de_oil_vol_safety_max(cc) 300.0 # in, damage to glider sensor: f_de_oil_vol_deadz_width(cc) 60.0 # in, sets x_ limit sensor: f_de_oil_vol_db_frac_dz(nodim) 0.25 # deadband as fraction of dead zone # Specs linear relationship between sensor units (cc) and the voltage # we actually read out of the AD for position # oil_volume(cc) = oil_volume_cal_m(cc/volt) * volts + oil_volume_cal_b(cc) sensor: f_de_oil_vol_cal_m(cc/volt) 470.7464 # in, slope sensor: f_de_oil_vol_cal_b(cc) -312.7101 # in, y-intercept # 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 1.1 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) 8 #in, secs between primary depth pings # 0 turns it off sensor: u_pinger_max_depth(m) 1000 #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) 1 # if non-zero enable "ping N times" # functionality, 0 turns it off for # "quiet missions" sensor: c_pinger_on(bool) 1 # 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) -1 # 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 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_register(sec) 30 # minimum time for iridium to register after # powerup. We do not try to dial for this many secs. sensor: m_iridium_waiting_registration(bool) # out, 1 ==> waiting for phone to register 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: m_iridium_waiting_redial_delay(bool) # out, 1 ==> waiting to redial 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_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_cmd_echo(enum) 1 # 0 = do not echo modem commands; 1 = do echo sensor: m_iridium_connected(bool) 0 # out 1==> modem is connected sensor: m_iridium_on(bool) 0.0 # out 0 it's off, 1 it's 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_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 sensor: m_iridium_console_on(enum) 0. # out. 0 = iridium console off, 1 = on # 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(timestamp) 0 # Out, touched when science sent us data. 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: 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(sec) 0 # In, written by science on every cycle # their notion of time sensor: m_science_clothesline_lag(s) 0 # out, How far behind science is # M_PRESENT_TIME - M_SCIENCE_PRESENT_TIME sensor: f_sci_max_sensors_per_call(nodim) 2 # max. number of sensor lines # that glider will consume from # the clothesline before relinquishing # control. # see science.c/exchange_sensors_with_science() 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_has_error(enum) 0 # In, t-> science has error condition sensor: sci_has_warning(enum) 0 # In, t-> science has warning sensor: sci_has_oddity(enum) 0 # In, t-> science has oddity sensor: sci_wants_comms(bool) 0 # In, t-> science computer wants direct comms sensor: u_sci_max_comm_time(sec) 300 # In, max time that science can have direct comms sensor: c_console_to_science(bool) 0 # Set by a behavior to switch the console # cleared by science driver when recognized # >0 give science console # 1 science computer requested (CONS2SCI_VAL_SCIENCE) # 2 behavior Bconsci requested (CONS2SCI_VAL_BCONSCI) # <0 take console back # reset to 0 by driver sensor: m_console_to_science(bool) 0 # out, set by science driver when science has console # 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_ctd41cp_sim_is_installed(bool) 0 # in, t--> ctd being simulated on science computer sensor: sci_water_cond(S/m) 3 # out, conductivity sensor: sci_water_temp(degC) 10 # out sensor: sci_water_pressure(bar) 0 # out 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 # sensors for Acoustic Modem (driven by Science computer) 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. # 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) # 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 # 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 # 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 # 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 #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_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 # proglet whgpbm: WHOI Photosynthetic Active Radiation 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 # proglet whfctd: WHoi Fast CTD sensor: c_whfctd_on(sec) # 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: 24 May-05 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(nodim) 0 # sensor: sci_motebb_stop_time(nodim) 0 # sensor: sci_motebb_absorb_a(nodim) 0 # sensor: sci_motebb_absorb_b(nodim) 0 # sensor: sci_motebb_corr0(nodim) 0 # sensor: sci_motebb_cell0(nodim) 0 # sensor: sci_motebb_corr1(nodim) 0 # sensor: sci_motebb_cell1(nodim) 0 # sensor: sci_motebb_corr2(nodim) 0 # sensor: sci_motebb_cell2(nodim) 0 # sensor: sci_motebb_corr3(nodim) 0 # sensor: sci_motebb_cell3(nodim) 0 # sensor: sci_motebb_corr4(nodim) 0 # sensor: sci_motebb_cell4(nodim) 0 # sensor: sci_motebb_corr5(nodim) 0 # sensor: sci_motebb_cell5(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 bbfl2swlo 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) 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_bbfl2s_num_fields_to_send is 3, cols 4,6,8 sent 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 # 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 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 # 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 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 # 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 # 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 # 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 # 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_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 # 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_USER_INTERRUPT b_arg: control_c(bool) 1.0 # bool, T-> let user interrupt # with control-c # 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) 75000. # MS_ABORT_NO_HEAP if M_SPARE_HEAP is less than this # <0 disables check 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) 10.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) 10.0 # 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_whfctd_on(sec) -1.0 # ----- 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_OXY3835_ON # 12 C_WHFCTD_ON # pick next number here for new proglets # 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 # 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: nop_de_eng(bool) 0 # t-> cmd de_eng 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 END #endif