Mercurial > public > hwos_code
view src/menu_tree.asm @ 611:cd7991986ace
undo BOR bit
author | heinrichsweikamp |
---|---|
date | Wed, 09 Jan 2019 21:28:53 +0100 (2019-01-09) |
parents | 6341f6663579 |
children | a32212cd5ea9 |
line wrap: on
line source
;============================================================================= ; ; File menu_tree.asm REFACTORED VERSION V2.99e ; ; OSTC menus ; ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. ;============================================================================= ; HISTORY ; 2011-07-11 : [jDG] Creation. #include "hwos.inc" ; mandatory header #include "gaslist.inc" #include "menu_processor.inc" #include "start.inc" #include "comm.inc" #include "logbook.inc" #include "tft.inc" #include "eeprom_rs232.inc" #include "external_flash.inc" #include "shared_definitions.h" ; mailbox from/to p2_deco.c #include "isr.inc" #include "ghostwriter.inc" #include "adc_lightsensor.inc" #include "wait.inc" #include "i2c.inc" extern do_demo_divemode extern restart extern option_save_all extern option_reset extern do_demo_planner extern calibrate_mix extern comm_mode0 extern piezo_config extern compass_calibration_loop extern option_reset_all extern rtc_set_rtc extern surfloop extern oColorSetDive extern option_cleanup_oCCRMode menu_tree CODE ;============================================================================= ; Main Menu do_return_main_menu: call menu_processor_double_pop ; drop exit line and back to last line bra do_main_menu_common global do_main_menu do_main_menu: movff menupos3,customview_surfmode ; save last customview global do_main_menu2 do_main_menu2: ; entry point used by logbook.asm call TFT_boot bcf sleepmode ; for timeout call menu_processor_reset ; restart from first icon do_main_menu_common: MENU_BEGIN tMainMenu, .7 MENU_CALL tLogbook, logbook MENU_CALL tGasSetup, do_gas_menu MENU_CALL tCCRSetup, do_ccr_menu MENU_CALL tPlan, do_planner_menu MENU_CALL tDiveModeMenu, do_divemode_menu MENU_CALL tSystSets, do_settings_menu MENU_CALL tExit, restart MENU_END ;============================================================================= ; CCR Setup do_return_ccr_menu: call menu_processor_double_pop ; drop exit line and back to last line do_ccr_menu: bcf menu_update_sensor_mv ; stop imprinting of live sensor values call option_cleanup_oCCRMode ; in pSCR mode, revert AutoSP (2) to calculated SP (0) btfsc analog_o2_input bra do_ccr_menu_cR ; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu ; btfss optical_input ; bra do_ccr_menu_ostc2 MENU_BEGIN tCCRSetup, .6 ; OSTC3 menu (and currently also the OSTC2 menu) MENU_OPTION tCCRMode, oCCRMode, 0 MENU_CALL tDiluentSetup, do_diluent_setup MENU_CALL tFixedSetpoints, do_fixed_setpoints MENU_CALL tPSCRMenu, do_PSCR_menu MENU_OPTION tCCmaxFracO2, oCCmaxFracO2, 0 MENU_CALL tBack, do_return_main_menu MENU_END do_ccr_menu_cR: ; cR menu MENU_BEGIN tCCRSetup, .7 MENU_OPTION tCCRMode, oCCRMode, 0 MENU_CALL tCalibrateMenu, do_calibrate_menu MENU_CALL tDiluentSetup, do_diluent_setup MENU_CALL tFixedSetpoints, do_fixed_setpoints MENU_CALL tPSCRMenu, do_PSCR_menu MENU_OPTION tCCmaxFracO2, oCCmaxFracO2, 0 MENU_CALL tBack, do_return_main_menu MENU_END ; COMMENTED OUT - currently there is no difference between the OSTC 2 and 3 regarding this menu ;do_ccr_menu_ostc2: ; MENU_BEGIN tCCRSetup, .6 ; ostc2 menu ; MENU_OPTION tCCRMode, oCCRMode, 0 ; MENU_CALL tDiluentSetup, do_diluent_setup ; MENU_CALL tFixedSetpoints, do_fixed_setpoints ; MENU_CALL tPSCRMenu, do_PSCR_menu ; MENU_OPTION tCCmaxFracO2, oCCmaxFracO2, 0 ; MENU_CALL tBack, do_return_main_menu ; MENU_END do_calibrate_menu: call enable_ir_s8 ; enable IR/S8-Port bsf menu_update_sensor_mv ; start imprinting of live sensor values do_calibrate_menu2: MENU_BEGIN tCalibrateMenu, .6 MENU_CALL tDiveHudMask1, 0 MENU_CALL tDiveHudMask2, 0 MENU_CALL tDiveHudMask3, 0 MENU_OPTION tCalibrationGas,oCalGasO2, 0 MENU_CALL tCalibrate, do_calibrate_mix MENU_CALL tBack, do_return_ccr_menu MENU_END do_calibrate_mix: call calibrate_mix ; calibrate with opt_calibration_O2_ratio, also calibrate S8 HUD if connected WAITMS d'250' ; wait for HUD v3 movlw .9 movff WREG,customview_surfmode ; show sensor mV custom view after restart goto restart ; restart into surface mode do_diluent_setup: bsf FLAG_diluent_setup ; setting up diluents bcf short_gas_decriptions ; do not use short versions of gaslist_strcat_gas_cd and gaslist_strcat_setpoint bcf better_gas_hint ; do not mark the best gas/diluent (to be used in dive mode only) call gaslist_cleanup_list ; take care that only one gas can be first MENU_BEGIN tDiluentSetup, .6 MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_CALL tBack, do_return_ccr_menu MENU_END do_return_fixed_setpoints: call menu_processor_double_pop ; drop exit line and back to last line do_fixed_setpoints: bcf short_gas_decriptions ; =1: use short versions of gaslist_strcat_gas_cd and gaslist_strcat_setpoint bcf better_gas_hint ; do not mark the best gas/diluent (to be used in dive mode only) MENU_BEGIN tFixedSetpoints, .6 MENU_DYNAMIC gaslist_strcat_setpoint, do_edit_sp_menu MENU_DYNAMIC gaslist_strcat_setpoint, do_edit_sp_menu MENU_DYNAMIC gaslist_strcat_setpoint, do_edit_sp_menu MENU_DYNAMIC gaslist_strcat_setpoint, do_edit_sp_menu MENU_DYNAMIC gaslist_strcat_setpoint, do_edit_sp_menu MENU_CALL tBack, do_return_ccr_menu MENU_END do_edit_sp_menu: movff PRODL,gaslist_gas ; get menu item we came from (0-4) MENU_BEGIN tFixedSetpoints, .5 MENU_DYNAMIC gaslist_strcat_setpoint_0, 0 MENU_CALL tSPPlus, gaslist_spplus MENU_CALL tDepthPlus, gaslist_spdepthplus MENU_CALL tDepthMinus, gaslist_spdepthminus MENU_CALL tBack, do_return_fixed_setpoints MENU_END do_PSCR_menu: MENU_BEGIN tPSCRMenu, .3 ; pSCR Menu MENU_OPTION tPSCR_O2_drop, oPSCR_drop, 0 MENU_OPTION tPSCR_lungratio, oPSCR_lungratio, 0 MENU_CALL tBack, do_return_ccr_menu MENU_END ;============================================================================= ; OC Gas Setup do_return_gas_menu: call menu_processor_double_pop ; drop exit line and back to last line btfsc FLAG_diluent_setup ; return to CCR-Menu? bra do_diluent_setup ; YES do_gas_menu: bcf FLAG_diluent_setup ; not setting up diluents bcf short_gas_decriptions ; do not use short versions of gaslist_strcat_gas_cd and gaslist_strcat_setpoint bcf better_gas_hint ; do not mark the best gas/diluent (to be used in dive mode only) call gaslist_cleanup_list ; takes care that only one gas can be first MENU_BEGIN tGaslist, .6 MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_DYNAMIC gaslist_strcat_gas_cd, do_edit_gas_menu MENU_CALL tBack, do_return_main_menu MENU_END do_return_edit_gas_menu: IFDEF _rx_functions bcf menu_update_tank_pres ; stop imprinting of tank pressure updates bcf FLAG_pairing_mode ; not in pairing menu any more (back to normal timeout) ENDIF call menu_processor_pop ; drop exit line and ... do_abort_gas_depth_menu: call menu_processor_pop ; back to last line bra do_edit_gas_menu_common do_edit_gas_menu: movff PRODL,gaslist_gas ; get menu item we came from (0-4) movlw .5 ; offset between gases and diluents btfsc FLAG_diluent_setup ; in CCR menu? addwf gaslist_gas,F ; YES - add the offset do_edit_gas_menu_common: MENU_BEGIN tGasEdit, .7 MENU_DYNAMIC gaslist_gastitle, 0 MENU_DYNAMIC gaslist_MOD_END, 0 MENU_DYNAMIC gaslist_show_type, gaslist_toggle_type MENU_CALL tSetup_GasMix, do_setup_mix_menu MENU_DYNAMIC gaslist_GasDepth, do_setup_depth_menu MENU_CALL tSetup_Tank, do_setup_tank_menu MENU_CALL tBack, do_return_gas_menu MENU_END do_setup_mix_menu: MENU_BEGIN tGasEdit, .7 MENU_DYNAMIC gaslist_gastitle, 0 MENU_DYNAMIC gaslist_MOD_END, 0 MENU_CALL tO2Plus, gaslist_pO2 MENU_CALL tO2Minus, gaslist_mO2 MENU_CALL tHePlus, gaslist_pHe MENU_CALL tHeMinus, gaslist_mHe MENU_CALL tBack, do_return_edit_gas_menu MENU_END do_setup_tank_menu: IFDEF _rx_functions btfsc FLAG_tr_enabled ; TR functions enabled? bra do_setup_tank_menu_rx ; YES ENDIF MENU_BEGIN tSetup_Tank, .6 MENU_DYNAMIC gaslist_gastitle, 0 MENU_DYNAMIC gaslist_tank_size_pres, 0 MENU_CALL tTankSize, gaslist_tank_size MENU_CALL tTankUsablePress, gaslist_tank_pres MENU_CALL tCopyDilToOC, gaslist_copy_dil_to_oc MENU_CALL tBack, do_return_edit_gas_menu MENU_END IFDEF _rx_functions do_setup_tank_menu_rx: setf pairing_slot ; prime slot number with 255 aka -1, used in pairing function bsf FLAG_pairing_mode ; in pairing menu (longer timeout) MENU_BEGIN tSetup_Tank, .7 MENU_DYNAMIC gaslist_gastitle, 0 MENU_DYNAMIC gaslist_tank_id_pres, 0 ; when changing position, adopt TFT_menu_tank_pres! MENU_DYNAMIC gaslist_tank_size_pres, 0 MENU_CALL tTankPairing, gaslist_tank_pairing MENU_CALL tTankSize, gaslist_tank_size MENU_CALL tTankUsablePress, gaslist_tank_pres MENU_CALL tBack, do_return_edit_gas_menu MENU_END ENDIF do_setup_depth_menu: MENU_BEGIN tGasEdit, .7 MENU_DYNAMIC gaslist_gastitle, 0 MENU_DYNAMIC gaslist_MOD_END, 0 MENU_DYNAMIC gaslist_ppo2, 0 ; ppO2 at change depth MENU_CALL tDepthPlus, gaslist_pDepth MENU_CALL tDepthMinus, gaslist_mDepth MENU_DYNAMIC gaslist_reset_mod_title, gaslist_reset_mod MENU_CALL tBack, do_return_edit_gas_menu MENU_END ;============================================================================= ; Simulator Menus do_return_planner_menu: call menu_processor_pop ; drop exit line and ... global do_return_demo_planner do_return_demo_planner: call menu_processor_pop ; back to last line bra do_planner_common do_planner_menu: ; to have correct simulator results after mode changes without prior excursion to surfacemode call option_save_all call restart_set_modes_and_flags ; reset dive time/depth to default values lfsr FSR0,odiveInterval call option_reset lfsr FSR0,obottomTime call option_reset lfsr FSR0,obottomDepth call option_reset lfsr FSR0,oSimAGF call option_reset do_planner_common: movff opt_dive_mode,WREG ; get dive mode: 0=OC, 1=CCR, 2=Gauge, 3=Apnea, 4=pSCR dcfsnz WREG,W ; subtract one, became zero? bra do_planner_common_ccr ; YES - use CCR version MENU_BEGIN tPlan, .7 MENU_OPTION tIntvl, odiveInterval, 0 MENU_OPTION tBtDep, obottomDepth, 0 MENU_CALL tInter, do_demo_divemode MENU_OPTION tBtTm, obottomTime, 0 MENU_OPTION tuseAGF, oSimAGF, 0 MENU_CALL tDeco, do_demo_planner MENU_CALL tBack, do_return_main_menu MENU_END do_planner_common_ccr: MENU_BEGIN tPlan, .7 MENU_OPTION tIntvl, odiveInterval, 0 MENU_OPTION tBtDep, obottomDepth, 0 MENU_CALL tInter, do_demo_divemode MENU_OPTION tBtTm, obottomTime, 0 MENU_CALL tDecoSetup, do_planner_config MENU_CALL tDeco, do_demo_planner MENU_CALL tBack, do_return_main_menu MENU_END do_planner_config: MENU_BEGIN tPlan, .3 MENU_OPTION tSelectSetpoint, oSimSetpoint, 0 MENU_OPTION tuseAGF, oSimAGF, 0 MENU_CALL tBack, do_return_planner_menu MENU_END ;============================================================================= ; Divemode Menu do_return_divemode_menu: call menu_processor_double_pop ; drop exit line and back to last line do_divemode_menu: MENU_BEGIN tDiveModeMenu, .7 MENU_OPTION tDvMode, oDiveMode, 0 MENU_OPTION tDkMode, oDecoMode, 0 MENU_CALL tppO2settings, do_ppo2_menu MENU_OPTION tsafetystopmenu, oSafetyStop, 0 MENU_CALL tDecoparameters, do_decoparameters_menu MENU_CALL t2ndDecoPlanMenu, do_2nd_deco_plan_menu MENU_CALL tBack, do_return_main_menu MENU_END do_ppo2_menu: MENU_BEGIN tppO2settings, .6 MENU_DYNAMIC divesets_ppo2_max, do_toggle_ppo2_max MENU_DYNAMIC divesets_ppo2_max_deco, do_toggle_ppo2_max_deco MENU_DYNAMIC divesets_ppo2_min, do_toggle_ppo2_min MENU_DYNAMIC divesets_ppo2_min_cc, do_toggle_ppo2_min_cc MENU_OPTION tShowppO2, oShowppO2, 0 MENU_CALL tBack, do_return_divemode_menu MENU_END do_return_decoparameters_menu: call menu_processor_double_pop ; drop exit line and back to last line do_decoparameters_menu: movff char_I_deco_model,lo ; 0 = ZH-L16, 1 = ZH-L16-GF tstfsz lo bra do_decoparameters_menu_gf ; <> 0 -> GF menu! ; NON-GF menu MENU_BEGIN tDecoparameters, .6 MENU_OPTION tSetBotUse, obottom_usage, 0 MENU_OPTION tSetDecoUse, odeco_usage, 0 MENU_OPTION tSaturationMult, osatmult, 0 MENU_OPTION tDesaturationMult, odesatmult, 0 MENU_CALL tMore, do_decoparameters_menu_more MENU_CALL tBack, do_return_divemode_menu MENU_END do_decoparameters_menu_gf: ; GF menu MENU_BEGIN tDecoparameters, .7 MENU_OPTION tSetBotUse, obottom_usage, 0 MENU_OPTION tSetDecoUse, odeco_usage, 0 MENU_CALL tGFMenu, do_GF_menu MENU_OPTION tSaturationMult, osatmultgf, 0 MENU_OPTION tDesaturationMult, odesatmultgf, 0 MENU_CALL tMore, do_decoparameters_menu_more MENU_CALL tBack, do_return_divemode_menu MENU_END do_decoparameters_menu_more: MENU_BEGIN tDecoparameters, .4 MENU_OPTION tLastDecostop, oLastDeco, 0 MENU_OPTION tAscentSpeed, oAscentSpeed, 0 MENU_OPTION tGasChangeTime, oGasChangeTime, 0 MENU_CALL tBack, do_return_decoparameters_menu MENU_END do_2nd_deco_plan_menu: MENU_BEGIN t2ndDecoPlanMenu, .3 MENU_OPTION tFTTSMenu, oExtraTime, 0 MENU_OPTION tCalcAscGas, oCalcAscGas, 0 MENU_CALL tBack, do_return_divemode_menu MENU_END do_GF_menu: MENU_BEGIN tGFMenu, .6 MENU_OPTION tGF_low, oGF_low, 0 MENU_OPTION tGF_high, oGF_high, 0 MENU_OPTION taGF_enable, oEnable_aGF, 0 MENU_OPTION taGF_low, oaGF_low, 0 MENU_OPTION taGF_high, oaGF_high, 0 MENU_CALL tBack, do_return_decoparameters_menu MENU_END ;============================================================================= ; Setup Menu do_return_settings_deeper: ; entry point for return from set time/date sub-menu bcf settime_setdate ; clear flag call menu_processor_pop ; drop one more stack entry do_return_settings: call menu_processor_double_pop ; drop exit line and back to last line IFDEF _rx_mode bcf FLAG_tr_enabled ; clear TR functions flag by default movff opt_TR_mode,WREG ; get TR functions mode tstfsz WREG ; TR functions enabled? bsf FLAG_tr_enabled ; YES ENDIF do_settings_menu: btfsc ble_available ; ble available? bra do_settings_menu_ble ; YES MENU_BEGIN tSystSets, .5 MENU_CALL tInfoMenu, do_info_menu MENU_CALL tSetTimeDate, do_date_time_menu MENU_CALL tDispSets, do_dispsets_menu MENU_CALL tMore, do_settings_menu_more MENU_CALL tBack, do_return_main_menu MENU_END do_settings_menu_ble: IFDEF _rx_functions btfsc ostc_rx_present ; RX model? bra do_settings_menu_rx ; YES ENDIF MENU_BEGIN tSystSets, .6 MENU_CALL tInfoMenu, do_info_menu MENU_CALL tBleTitle, comm_mode0 MENU_CALL tSetTimeDate, do_date_time_menu MENU_CALL tDispSets, do_dispsets_menu MENU_CALL tMore, do_settings_menu_more MENU_CALL tBack, do_return_main_menu MENU_END IFDEF _rx_functions do_settings_menu_rx: MENU_BEGIN tSystSets, .7 MENU_CALL tInfoMenu, do_info_menu MENU_CALL tBleTitle, comm_mode0 MENU_CALL tTrSettings, do_settings_menu_TR MENU_CALL tSetTimeDate, do_date_time_menu MENU_CALL tDispSets, do_dispsets_menu MENU_CALL tMore, do_settings_menu_more MENU_CALL tBack, do_return_main_menu MENU_END ENDIF do_info_menu: IFDEF _rx_functions btfsc ostc_rx_present ; TR model? bra do_info_menu_TR ; YES ENDIF MENU_BEGIN tInfoMenu, .6 MENU_DYNAMIC info_menu_serial, 0 MENU_DYNAMIC info_menu_firmware, 0 MENU_DYNAMIC info_menu_battery_volts, 0 MENU_DYNAMIC info_menu_uptime, 0 MENU_DYNAMIC info_menu_total_dives, 0 MENU_CALL tBack, do_return_settings MENU_END IFDEF _rx_functions do_info_menu_TR: MENU_BEGIN tInfoMenu, .7 MENU_DYNAMIC info_menu_serial, 0 MENU_DYNAMIC info_menu_firmware, 0 MENU_DYNAMIC info_menu_firmware_rx, 0 MENU_DYNAMIC info_menu_total_dives, 0 MENU_DYNAMIC info_menu_battery_volts, 0 MENU_DYNAMIC info_menu_uptime, 0 MENU_CALL tBack, do_return_settings MENU_END ENDIF IFDEF _rx_functions do_settings_menu_TR: movff opt_dive_mode,WREG ; get dive mode: 0=OC, 1=CCR, 2=Gauge, 3=Apnea, 4=pSCR incf WREG,W ; add 1 dcfsnz WREG,W ; subtract one, became zero? bra do_settings_menu_TR_MaxDelta; YES - OC dcfsnz WREG,W ; subtract one, became zero? bra do_settings_menu_TR_BailPres; YES - CCR dcfsnz WREG,W ; subtract one, became zero? bra do_settings_menu_TR_MaxDelta; YES - Gauge dcfsnz WREG,W ; subtract one, became zero? bra do_settings_menu_TR_abort ; YES - Apnea, abort dcfsnz WREG,W ; subtract one, became zero? bra do_settings_menu_TR_both ; YES - pSCR do_settings_menu_TR_abort: call menu_processor_pop ; drop last menu selection bra do_settings_menu ; back to last menu do_settings_menu_TR_MaxDelta: ; menu with oTrMaxDeltaPres MENU_BEGIN tTrSettings, .5 MENU_OPTION tTrMode, oTrMode, 0 MENU_OPTION tTr1stPres, oTr1stPres, 0 MENU_OPTION tTr2ndPres, oTr2ndPres, 0 MENU_DYNAMIC do_toggle_max_pres_diff_label,do_toggle_max_pres_diff MENU_CALL tBack, do_return_settings MENU_END do_settings_menu_TR_BailPres: ; menu with oTrBailPres MENU_BEGIN tTrSettings, .5 MENU_OPTION tTrMode, oTrMode, 0 MENU_OPTION tTr1stPres, oTr1stPres, 0 MENU_OPTION tTr2ndPres, oTr2ndPres, 0 MENU_OPTION tTrBailPres, oTrBailPres, 0 MENU_CALL tBack, do_return_settings MENU_END do_settings_menu_TR_both: ; menu with oTrBailPres and oTrMaxDeltaPres MENU_BEGIN tTrSettings, .6 MENU_OPTION tTrMode, oTrMode, 0 MENU_OPTION tTr1stPres, oTr1stPres, 0 MENU_OPTION tTr2ndPres, oTr2ndPres, 0 MENU_OPTION tTrBailPres, oTrBailPres, 0 MENU_DYNAMIC do_toggle_max_pres_diff_label,do_toggle_max_pres_diff MENU_CALL tBack, do_return_settings MENU_END do_toggle_max_pres_diff: ; add 5 bar, with hard-coded max. movff char_I_max_pres_diff,lo ; get current value movlw .5 ; load increment addwf lo,F ; add increment movlw max_pres_diff_max ; load maximum value cpfsgt lo ; above maximum value? bra do_toggle_max_pres_diff_1 ; NO - store new value movlw max_pres_diff_min ; YES - load minimum value movwf lo ; - into lo do_toggle_max_pres_diff_1: movff lo,char_I_max_pres_diff ; write back new value return ; done ENDIF do_return_settings_more_deeper: ; entry point for returns from reset sub-menu call menu_processor_pop ; drop one more stack entry do_return_settings_more: call menu_processor_double_pop ; drop exit line and back to last line do_settings_menu_more: btfsc battery_gauge_available ; piezo buttons available bra do_settings_menu_more_piezo btfsc ble_available ; ble available bra do_settings_menu_more_ostc3p ; All MENU_CALLs that are MENU_BEGIN tSystSets, .6 ; in all of this 3 menus MENU_CALL tCompassMenu, do_compass_menu ; need to stay together MENU_CALL tLogOffset, do_log_offset_menu ; on this menu level in MENU_OPTION tAltMode, oAltMode, 0 ; oder to not mess up the MENU_OPTION tDvSalinity, oDiveSalinity, 0 ; menu stack on doing the MENU_CALL tResetMenu, do_reset_menu ; do_return_settings ! MENU_CALL tBack, do_return_settings MENU_END do_return_settings_menu_more_pz: call TFT_ClearScreen call piezo_config ; configure buttons call menu_processor_double_pop ; drop exit line and back to last line do_settings_menu_more_piezo: MENU_BEGIN tSystSets, .7 MENU_CALL tCompassMenu, do_compass_menu ; see above MENU_CALL tLogOffset, do_log_offset_menu ; MENU_OPTION tAltMode, oAltMode, 0 MENU_OPTION tDvSalinity, oDiveSalinity, 0 MENU_CALL tResetMenu, do_reset_menu ; MENU_CALL tMore, do_settings_piezo_menu ; MENU_CALL tBack, do_return_settings MENU_END do_settings_menu_more_ostc3p: ; menu with BLE feature MENU_BEGIN tSystSets, .6 MENU_CALL tCompassMenu, do_compass_menu ; see above MENU_CALL tLogOffset, do_log_offset_menu ; MENU_OPTION tAltMode, oAltMode, 0 MENU_OPTION tDvSalinity, oDiveSalinity, 0 MENU_CALL tResetMenu, do_reset_menu ; MENU_CALL tBack, do_return_settings MENU_END do_settings_piezo_menu: ; Menu with features only available in piezo button hardware MENU_BEGIN tSystSets, .3 MENU_OPTION tButtonleft, ocR_button_left, 0 ; left button sensitivity MENU_OPTION tButtonright, ocR_button_right, 0 ; right button sensitivity MENU_CALL tBack, do_return_settings_menu_more_pz MENU_END do_compass_menu: MENU_BEGIN tSystSets, .5 MENU_CALL tCompassMenu, compass_calibration_loop ; exits to surfloop ; MENU_OPTION tCompassGain, oCompassGain, 0 MENU_DYNAMIC menu_cal_x, 0 MENU_DYNAMIC menu_cal_y, 0 MENU_DYNAMIC menu_cal_z, 0 MENU_CALL tBack, do_return_settings_more MENU_END ;============================================================================= ; Reset and confirmation menu do_reset_menu: MENU_BEGIN tResetMenu, .6 MENU_CALL tBack, do_return_settings_more MENU_CALL tReboot, do_reset_menu2 ; confirm MENU_CALL tResetDeco, do_reset_menu3 ; confirm MENU_CALL tResetSettings, do_reset_menu4 ; confirm MENU_CALL tResetLogbook, do_reset_menu5 ; confirm MENU_CALL tResetBattery, do_new_battery_menu ; confirm MENU_END do_reset_menu2: MENU_BEGIN tResetMenu2, .2 MENU_CALL tAbort, do_return_settings_more_deeper MENU_CALL tReboot, do_reboot ; reboot MENU_END do_reset_menu3: MENU_BEGIN tResetMenu2, .2 MENU_CALL tAbort, do_return_settings_more_deeper MENU_CALL tResetDeco, do_reset_deco ; reset deco MENU_END do_reset_menu4: MENU_BEGIN tResetMenu2, .2 MENU_CALL tAbort, do_return_settings_more_deeper MENU_CALL tResetSettings, do_reset_settings ; reset all settings MENU_END do_reset_menu5: MENU_BEGIN tResetMenu2, .2 MENU_CALL tAbort, do_return_settings_more_deeper MENU_CALL tResetLogbook, do_reset_logbook ; reset logbook MENU_END do_reset_logbook: clrf EEADRH ; make sure to select EEPROM bank 0 clrf EEDATA read_int_eeprom .2 write_int_eeprom .16 read_int_eeprom .3 write_int_eeprom .17 ; copy number of dives clrf EEDATA write_int_eeprom .2 write_int_eeprom .3 ; clear total dives write_int_eeprom .4 write_int_eeprom .5 write_int_eeprom .6 ; reset logbook pointers call ext_flash_erase_logbook ; and complete logbook bra do_return_settings_more_deeper do_reset_deco: SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_respiration ; copy surface pressure to deco routine SAFE_2BYTE_COPY last_surfpressure_30min,int_I_pres_surface ; copy surface pressure to deco routine call deco_clear_tissue ; set all tissues to Pamb * N2_ratio (C-Code) call deco_calc_dive_interval_1min; calculate deco in surface mode call deco_calc_desaturation_time ; calculate desaturation and no-fly time banksel common bra do_return_settings_more_deeper do_reset_settings: call TFT_ClearScreen ; clear screen call option_reset_all ; reset all options to factory default goto restart ; restart into surfacemode do_reboot: call ext_flash_enable_protection ; enables write protection reset do_date_time_menu: MENU_BEGIN tSetTimeDate, .4 MENU_CALL tSetTime, do_time_menu MENU_CALL tSetDate, do_date_menu MENU_OPTION tDateFormat,oDateFormat, 0 MENU_CALL tBack, do_return_settings MENU_END do_date_menu: bsf settime_setdate MENU_BEGIN tSetDate, .4 MENU_OPTION tSetDay, oSetDay, 0 MENU_OPTION tSetMonth, oSetMonth, 0 MENU_OPTION tSetYear, oSetYear, 0 MENU_CALL tBack, do_return_settings_deeper MENU_END do_reset_seconds: clrf secs call rtc_set_rtc ; writes mins, sec, hours, day, month and year to RTC module call menu_processor_pop ; clear the MENU_CALL for do_reset_seconds from the stack ;bra do_time_menu ; direct jump-back into the menu do_time_menu: bsf settime_setdate MENU_BEGIN tSetTime, .4 MENU_OPTION tSetHours, oSetHours, 0 MENU_OPTION tSetMinutes, oSetMinutes, 0 MENU_CALL tSetSeconds, do_reset_seconds MENU_CALL tBack, do_return_settings_deeper MENU_END do_toggle_ppo2_max: ; add 0.1 bar, with hard-coded max. movff char_I_ppO2_max,lo ; banksafe movlw .10 addwf lo,F movlw ppo2_warning_high_highest cpfsgt lo bra do_toggle_ppo2_max2 movlw ppo2_warning_high_lowest movwf lo do_toggle_ppo2_max2: movff lo,char_I_ppO2_max return do_toggle_ppo2_max_deco: ; add 0.1 bar, with hard-coded max. movff char_I_ppO2_max_deco,lo ; banksafe movlw .10 addwf lo,F movlw ppo2_warning_deco_highest cpfsgt lo bra do_toggle_ppo2_max_deco2 movlw ppo2_warning_deco_lowest movwf lo do_toggle_ppo2_max_deco2: movff lo,char_I_ppO2_max_deco return do_toggle_ppo2_min: ; sub 0.1 bar, with hard-coded min. movff char_I_ppO2_min,lo ; banksafe incf lo,F movlw ppo2_warning_low_highest cpfsgt lo bra do_toggle_ppo2_min2 movlw ppo2_warning_low_lowest movwf lo do_toggle_ppo2_min2: movff lo,char_I_ppO2_min return do_toggle_ppo2_min_cc: ; sub 0.1 bar, with hard-coded min. movff char_I_ppO2_min_loop,lo ; banksafe incf lo,F movlw ppo2_warning_loop_highest cpfsgt lo bra do_toggle_ppo2_min_cc2 movlw ppo2_warning_loop_lowest movwf lo do_toggle_ppo2_min_cc2: movff lo,char_I_ppO2_min_loop return ; Logbook offset sub-menu do_log_offset_menu: MENU_BEGIN tLogOffset, .6 MENU_DYNAMIC TFT_LogOffset_Logtitle, 0 MENU_CALL tLogOffsetp1, do_logoffset_plus1 MENU_CALL tLogOffsetp10, do_logoffset_plus10 MENU_CALL tLogOffsetm1, do_logoffset_minus1 MENU_CALL tLogOffsetm10, do_logoffset_minus10 MENU_CALL tBack, do_return_settings_more MENU_END do_logoffset_minus1: call do_logoffset_common_read ; read into lo:hi movlw .1 subwf lo movlw .0 subwfb hi btfss hi,7 ; < 0 ? bra do_logoffset_exit ; store and return clrf lo clrf hi bra do_logoffset_exit ; store and return do_logoffset_minus10: call do_logoffset_common_read ; read into lo:hi movlw .10 subwf lo movlw .0 subwfb hi btfss hi,7 ; < 0 ? bra do_logoffset_exit ; store and return clrf lo clrf hi bra do_logoffset_exit ; store and return do_logoffset_plus1: call do_logoffset_common_read ; read into lo:hi infsnz lo,F incf hi,F bra do_logoffset_exit ; store and return do_logoffset_plus10: call do_logoffset_common_read ; read into lo:hi movlw .10 addwf lo movlw .0 addwfc hi do_logoffset_exit: goto do_logoffset_common_write ; store and return do_return_dispsets_menu: bcf in_color_menu call menu_processor_double_pop ; drop exit line and back to last line do_dispsets_menu: IF _language_2!=none MENU_BEGIN tDispSets, .7 MENU_OPTION tBright, oBrightness, 0 MENU_OPTION tLanguage, oLanguage, 0 MENU_OPTION tUnits, oUnits, 0 MENU_CALL tColorScheme, do_color_scheme MENU_OPTION tFlip, oFlipScreen, 0 MENU_CALL tMore, do_dispsets_menu_more MENU_CALL tBack, do_return_settings MENU_END ELSE MENU_BEGIN tDispSets, .6 MENU_OPTION tBright, oBrightness, 0 MENU_OPTION tUnits, oUnits, 0 MENU_CALL tColorScheme, do_color_scheme MENU_OPTION tFlip, oFlipScreen, 0 MENU_CALL tMore, do_dispsets_menu_more MENU_CALL tBack, do_return_settings MENU_END ENDIF do_dispsets_menu_more: MENU_BEGIN tDispSets, .7 MENU_OPTION tMODwarning, oMODwarning, 0 MENU_OPTION tIBCDwarning, oEnable_IBCD, 0 MENU_OPTION tVSItext2, oVSItextv2, 0 MENU_OPTION tVSIgraph, oVSIgraph, 0 MENU_OPTION tTimeoutDive, oDiveTimeout, 0 MENU_OPTION t2ndDepth, o2ndDepthDisp, 0 MENU_CALL tBack, do_return_dispsets_menu MENU_END do_color_scheme: bsf in_color_menu MENU_BEGIN tColorScheme, .2 MENU_OPTION tColorSetDive, oColorSetDive, 0 MENU_CALL tBack, do_return_dispsets_menu MENU_END ;============================================================================= do_new_battery_menu: MENU_BEGIN tNewBattTitle, .2 MENU_CALL tAbort, do_return_settings_more_deeper MENU_CALL tYes, do_new_battery_select MENU_END global do_new_battery_select do_new_battery_select: IFDEF _screendump bsf enable_screen_dumps ; to prevent exiting into COMM mode immediately ELSE bsf disable_comm_mode ; to prevent exiting into COMM mode immediately ENDIF call TFT_boot ; initialize TFT (includes clear screen) call TFT_Display_FadeIn ; show splash movlw .100 movwf batt_percent ; make sure to reset batt_percent ; Default (in cases of timeout or USB): use old battery clrf EEADRH read_int_eeprom 0x07 movff EEDATA,battery_gauge+0 read_int_eeprom 0x08 movff EEDATA,battery_gauge+1 read_int_eeprom 0x09 movff EEDATA,battery_gauge+2 read_int_eeprom 0x0A movff EEDATA,battery_gauge+3 read_int_eeprom 0x0B movff EEDATA,battery_gauge+4 read_int_eeprom 0x0C movff EEDATA,battery_gauge+5 call menu_processor_reset ; restart from first item ; hardware_flag1: ; 3: 0x0A or 0x13 (2016) ; cR: 0x05 ; 2 with BLE: 0x11 ; Sport: 0x12 ; 3 with BLE: 0x1A movlw 0x0A cpfseq hardware_flag1 bra $+4 bra menu_new_battery_AA movlw 0x13 cpfseq hardware_flag1 bra $+4 bra menu_new_battery_16650 movlw 0x33 cpfseq hardware_flag1 bra $+4 bra menu_new_battery_AA_16650 movlw 0x12 cpfseq hardware_flag1 bra $+4 bra menu_new_battery_AA movlw 0x1A cpfseq hardware_flag1 bra $+4 bra menu_new_battery_AA movlw 0x11 cpfseq hardware_flag1 bra $+4 bra menu_new_battery_18650 movlw 0x05 cpfseq hardware_flag1 bra $+4 bra menu_new_battery_18650 bra use_old_batteries ; any unsupported value menu_new_battery_16650: MENU_BEGIN tNewBattTitle, .1 MENU_CALL tNew16650, use_16650_battery MENU_END menu_new_battery_AA_16650: MENU_BEGIN tNewBattTitle, .5 MENU_CALL tNewBattOld, use_old_batteries MENU_CALL tNewBattNew15, use_new_15V_batteries MENU_CALL tNewBattNew36, use_new_36V_batteries MENU_CALL tNewBattAccu, use_36V_rechargeable MENU_CALL tNew16650, use_16650_battery MENU_END menu_new_battery_AA: MENU_BEGIN tNewBattTitle, .4 MENU_CALL tNewBattOld, use_old_batteries MENU_CALL tNewBattNew15, use_new_15V_batteries MENU_CALL tNewBattNew36, use_new_36V_batteries MENU_CALL tNewBattAccu, use_36V_rechargeable MENU_END menu_new_battery_18650: MENU_BEGIN tNewBattTitle, .2 MENU_CALL tNewBattOld, use_old_batteries MENU_CALL tNew18650, use_18650_battery MENU_END global use_old_prior_209 use_old_prior_209: clrf EEADRH read_int_eeprom 0x0F ; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah incfsz EEDATA,F ; was 0xFF? return ; NO - done call lt2942_get_status ; check for gauge IC movlw .3 ; Assume a 18650 btfss battery_gauge_available ; cR/2 hardware? movlw .1 ; assume a Saft movwf EEDATA write_int_eeprom 0x0F ; store the new battery type into EEPROM return global use_old_batteries use_old_batteries: clrf EEADRH read_int_eeprom 0x07 movff EEDATA,battery_gauge+0 read_int_eeprom 0x08 movff EEDATA,battery_gauge+1 read_int_eeprom 0x09 movff EEDATA,battery_gauge+2 read_int_eeprom 0x0A movff EEDATA,battery_gauge+3 read_int_eeprom 0x0B movff EEDATA,battery_gauge+4 read_int_eeprom 0x0C movff EEDATA,battery_gauge+5 read_int_eeprom 0x0F movff EEDATA,battery_type ; =0:1.5V, =1:3,6V Saft, =2:LiIon 3,7V/0.8Ah, =3:LiIon 3,7V/3.1Ah, =4: LiIon 3,7V/2.3Ah rcall setup_new_saft ; any other value incf EEDATA,F ; 1...5 dcfsnz EEDATA,F rcall setup_new_15v ; =0 dcfsnz EEDATA,F rcall setup_new_saft ; =1 dcfsnz EEDATA,F rcall setup_new_panasonic ; =2 dcfsnz EEDATA,F rcall setup_new_18650 ; =3 dcfsnz EEDATA,F rcall setup_new_16650 ; =4 bcf use_old_batt_flag ; clear flag IFNDEF _screendump bcf disable_comm_mode ; re-enable COMM mode again ENDIF goto surfloop ; jump to surface loop setup_new_15v: bsf charge_disable bcf TRISE,2 movlw .100 movwf batt_percent ; to have 1.5V batteries right after firmware update movlw .0 movff WREG,battery_type return setup_new_saft: banksel battery_capacity movlw LOW internal_saft_capacity movwf internal_battery_capacity+0 movlw HIGH internal_saft_capacity movwf internal_battery_capacity+1 movlw LOW saft_capacity movwf battery_capacity+0 movlw HIGH saft_capacity movwf battery_capacity+1 movlw LOW saft_offset movwf battery_offset+0 movlw HIGH saft_offset movwf battery_offset+1 banksel common bsf charge_disable bcf TRISE,2 movlw .1 movff WREG,battery_type return setup_new_panasonic: banksel battery_capacity movlw LOW internal_panasonic_capacity movwf internal_battery_capacity+0 movlw HIGH internal_panasonic_capacity movwf internal_battery_capacity+1 movlw LOW panasonic_capacity movwf battery_capacity+0 movlw HIGH panasonic_capacity movwf battery_capacity+1 movlw LOW panasonic_offset movwf battery_offset+0 movlw HIGH panasonic_offset movwf battery_offset+1 banksel common bcf charge_disable bsf TRISE,2 movlw .2 movff WREG,battery_type return setup_new_18650: banksel battery_capacity clrf internal_battery_capacity+0 clrf internal_battery_capacity+1 movlw LOW ncr18650_capacity movwf battery_capacity+0 movlw HIGH ncr18650_capacity movwf battery_capacity+1 movlw LOW ncr18650_offset movwf battery_offset+0 movlw HIGH ncr18650_offset movwf battery_offset+1 banksel common bcf charge_disable bsf TRISE,2 movlw .3 movff WREG,battery_type return setup_new_16650: banksel battery_capacity clrf internal_battery_capacity+0 clrf internal_battery_capacity+1 movlw LOW ur16650_capacity movwf battery_capacity+0 movlw HIGH ur16650_capacity movwf battery_capacity+1 movlw LOW ur16650_offset movwf battery_offset+0 movlw HIGH ur16650_offset movwf battery_offset+1 banksel common bcf charge_disable bsf TRISE,2 movlw .4 movff WREG,battery_type return use_16650_battery: rcall setup_new_16650 bra use_batt_exit use_18650_battery: rcall setup_new_18650 bra use_batt_exit use_new_36V_batteries: rcall setup_new_saft bra use_batt_exit use_new_15V_batteries: rcall setup_new_15v use_batt_exit: call reset_battery_pointer ; resets battery pointer 0x07-0x0C and battery_gauge:5 use_batt_exit1: IFNDEF _screendump bcf disable_comm_mode ; re-enable COMM mode again ENDIF goto surfloop ; jump to surface loop use_36V_rechargeable: rcall setup_new_panasonic call reset_battery_internal_only bra use_batt_exit1 ; jump to surface loop END