line source
;=============================================================================
;
; File menu_tree.asm REFACTORED VERSION V2.95
;
; 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"
CBLOCK tmp+0x40 ; Keep space for menu processor
gaslist_gas ; Check ram position in gaslist.asm, too!
ENDC
gui CODE
;=============================================================================
; Main Menu
global do_main_menu,do_main_menu2
do_main_menu:
movff menupos3,customview_surfmode; save last customview
do_main_menu2:
call TFT_boot
bcf sleepmode ; for timeout
call menu_processor_reset ; restart from first icon.
do_continue_main_menu:
rcall menu_tree_double_pop ; drop exit line and back to last line
extern do_demo_divemode, restart
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_reset
MENU_CALL tDiveModeMenu, do_divemode_menu
MENU_CALL tSystSets, do_settings_menu
MENU_CALL tExit, restart
MENU_END
do_info_menu:
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 tExit, do_return_settings
MENU_END
;=============================================================================
; CCR Setup
return_ccr_menu:
rcall menu_tree_double_pop ; drop exit line and back to last line
do_ccr_menu:
bcf menu_show_sensors2 ; Clear flag
btfsc analog_o2_input
bra do_ccr_menu_cR
; COMMENT 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 tExit, do_continue_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 tExit, do_continue_main_menu
MENU_END
; COMMENT 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 tExit, do_continue_main_menu
; 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 tExit, return_ccr_menu
MENU_END
do_calibrate_menu:
call enable_ir_s8 ; Enable IR/S8-Port
bsf menu_show_sensors2 ; Set flag
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 tExit, return_ccr_menu
MENU_END
do_calibrate_mix:
extern 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
movwf customview_surfmode ; show sensor mV custom view after restart
goto restart ; Restart into surface mode
do_diluent_setup:
bsf ccr_diluent_setup ; =1: Setting up Diluents ("Gas6-10")
bcf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
call gaslist_cleanup_list ; Takes care that only one gas can be first and first has 0m change depth
MENU_BEGIN tDiluentSetup, .6
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_CALL tExit, return_ccr_menu
MENU_END
do_return_fixed_setpoints:
rcall menu_tree_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_mod and gaslist_strcat_setpoint
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 tExit, return_ccr_menu
MENU_END
do_edit_sp_menu:
call gaslist_setSP ; Save current item.
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 tExit, do_return_fixed_setpoints
MENU_END
;=============================================================================
; OC Gas Setup
return_gas_menu:
rcall menu_tree_double_pop ; drop exit line and back to last line
btfsc ccr_diluent_setup ; Return to CCR-Menu?
bra do_diluent_setup ; Yes.
do_gas_menu:
bcf ccr_diluent_setup ; =1: Setting up Diluents ("Gas6-10")
bcf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint
call gaslist_cleanup_list ; Takes care that only one gas can be first and first has 0m change depth
MENU_BEGIN tGaslist, .6
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_DYNAMIC gaslist_strcat_gas_mod, do_edit_gas_menu
MENU_CALL tExit, do_continue_main_menu
MENU_END
return_gas_depth:
rcall menu_tree_double_pop ; drop exit line and back to last line
bra do_edit_gas_menu_1
do_edit_gas_menu:
call gaslist_setgas ; Save current item.
do_edit_gas_menu_1: ; Keep current gas.
MENU_BEGIN tGasEdit, .6
MENU_DYNAMIC gaslist_gastitle, 0
MENU_DYNAMIC gaslist_MOD_END, 0
MENU_DYNAMIC gaslist_show_type, gaslist_toggle_type
MENU_CALL tSetup_mix, do_setup_mix
MENU_CALL tGasDepth, do_gas_depth_menu
MENU_CALL tExit, return_gas_menu
MENU_END
do_setup_mix:
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 tExit, return_gas_depth
MENU_END
menu_tree_double_pop:
call menu_processor_pop ; drop exit line.
goto menu_processor_pop ; back to last gas and return
global do_gas_depth_menu
do_gas_depth_menu:
movff gaslist_gas,WREG
lfsr FSR1,opt_gas_type ; Read opt_gas_type[WREG]
movff PLUSW1,lo ; Used as temp
movlw .3 ; 3=Deco
btfsc ccr_diluent_setup ; =1: Setting up Diluents ("Gas6-10")
movlw .2 ; 2=Normal
cpfseq lo
bra return_gas_depth ; Non-Deco gas or "Normal" Diluent, Return!
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 tExit, return_gas_depth
MENU_END
;=============================================================================
; Simulator menus
global do_planner_menu
do_planner_menu_reset:
extern option_save_all
call option_save_all
call restart_set_modes_and_flags ; To have correct simulator results for mode changes without prior surfacemode call
;---- Reset dive time/depth to default values
extern option_reset
lfsr FSR0,odiveInterval
call option_reset
lfsr FSR0,obottomTime
call option_reset
lfsr FSR0,obottomDepth
call option_reset
do_planner_menu:
extern do_demo_planner
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 tExit, do_continue_main_menu
MENU_END
do_planner_config:
MENU_BEGIN tPlan, .3
MENU_OPTION tSelectSetpoint,oSimSetpoint, 0
MENU_OPTION tuseAGF, oSimAGF, 0
MENU_CALL tExit, do_planner_menu
MENU_END
;=============================================================================
; Divemode menu
do_return_divemode_menu:
rcall menu_tree_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 t2ndDecoPlanMenu, do_2nd_deco_plan_menu
MENU_CALL tDecoparameters, do_decoparameters_menu
MENU_CALL tExit, do_continue_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 tExit, do_return_divemode_menu
MENU_END
do_return_decoparameters_menu:
rcall menu_tree_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_menugf ; <> 0 -> GF menu!
; NON-GF menu
MENU_BEGIN tDecoparameters, .4
MENU_OPTION tSaturationMult,osatmult, 0
MENU_OPTION tDesaturationMult,odesatmult,0
MENU_OPTION tLastDecostop,oLastDeco, 0
MENU_CALL tExit, do_return_divemode_menu
MENU_END
do_decoparameters_menugf:
; GF menu
MENU_BEGIN tDecoparameters, .7
MENU_OPTION tGF_low, oGF_low, 0
MENU_OPTION tGF_high, oGF_high, 0
MENU_CALL taGFMenu, do_aGF_menu
MENU_OPTION tSaturationMult,osatmultgf, 0
MENU_OPTION tDesaturationMult,odesatmultgf,0
MENU_OPTION tLastDecostop,oLastDeco, 0
MENU_CALL tExit, do_return_divemode_menu
MENU_END
do_return_2nd_deco_plan_menu:
rcall menu_tree_double_pop ; drop exit line and back to last line
do_2nd_deco_plan_menu
MENU_BEGIN t2ndDecoPlanMenu, .7
MENU_OPTION tFTTSMenu, oExtraTime, 0
MENU_OPTION tCalcAscGas, oCalcAscGas, 0
MENU_OPTION tSetBotUse, obottom_usage, 0
MENU_OPTION tSetDecoUse, odeco_usage, 0
MENU_CALL tTankSizes, do_tank_sizes_menu
MENU_CALL tTankFillPress, do_tank_fill_press_menu
MENU_CALL tExit, do_return_divemode_menu
MENU_END
do_tank_sizes_menu:
MENU_BEGIN tTankSizes, .6
MENU_OPTION tGas1, oTankSize1, 0
MENU_OPTION tGas2, oTankSize2, 0
MENU_OPTION tGas3, oTankSize3, 0
MENU_OPTION tGas4, oTankSize4, 0
MENU_OPTION tGas5, oTankSize5, 0
MENU_CALL tExit, do_return_2nd_deco_plan_menu
MENU_END
do_tank_fill_press_menu:
MENU_BEGIN tTankFillPress, .6
MENU_OPTION tGas1, oTankFillPres1, 0
MENU_OPTION tGas2, oTankFillPres2, 0
MENU_OPTION tGas3, oTankFillPres3, 0
MENU_OPTION tGas4, oTankFillPres4, 0
MENU_OPTION tGas5, oTankFillPres5, 0
MENU_CALL tExit, do_return_2nd_deco_plan_menu
MENU_END
do_aGF_menu:
MENU_BEGIN taGFMenu, .4
MENU_OPTION taGF_enable,oEnable_aGF, 0
MENU_OPTION taGF_low, oaGF_low, 0
MENU_OPTION taGF_high, oaGF_high, 0
MENU_CALL tExit, do_return_decoparameters_menu
MENU_END
;=============================================================================
; Setup Menu
do_return_settings:
bcf settime_setdate ; Clear flag
rcall menu_tree_double_pop ; drop exit line and back to last line
extern compass_calibration_loop
do_settings_menu:
btfsc ble_available ; ble available
bra do_settings_menu_ble ; Yes.
MENU_BEGIN tSystSets, .6
MENU_CALL tInfoMenu, do_info_menu
MENU_CALL tSetTimeDate, do_date_time_menu
MENU_CALL tDispSets, do_dispsets_menu
MENU_OPTION tLanguage, oLanguage, 0
MENU_CALL tMore, do_settings_menu_more
MENU_CALL tExit, do_continue_main_menu
MENU_END
do_settings_menu_ble:
MENU_BEGIN tSystSets, .7
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_OPTION tLanguage, oLanguage, 0
MENU_CALL tMore, do_settings_menu_more
MENU_CALL tExit, do_continue_main_menu
MENU_END
do_return_settings_more:
rcall menu_tree_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
MENU_BEGIN tSystSets, .7
MENU_CALL tCompassMenu, do_compass_menu
MENU_CALL tLogOffset, do_log_offset_menu
MENU_OPTION tUnits, oUnits, 0
MENU_OPTION tAltMode, oAltMode, 0
MENU_OPTION tDvSalinity, oDiveSalinity, 0
MENU_CALL tResetMenu, do_reset_menu
MENU_CALL tExit, do_return_settings
MENU_END
do_settings_menu_more_piezo_exit:
call TFT_ClearScreen
extern piezo_config
call piezo_config ; Configure buttons
do_settings_menu_more_piezo:
MENU_BEGIN tSystSets, .7
MENU_CALL tCompassMenu, do_compass_menu
MENU_CALL tLogOffset, do_log_offset_menu
MENU_OPTION tUnits, oUnits, 0
MENU_OPTION tAltMode, oAltMode, 0
MENU_OPTION tDvSalinity, oDiveSalinity, 0
MENU_CALL tMore, do_settings_piezo_menu
MENU_CALL tExit, do_return_settings
MENU_END
extern comm_mode0
do_settings_piezo_menu:
; Menu with features only available in piezo button hardware
MENU_BEGIN tSystSets, .4
MENU_CALL tResetMenu, do_reset_menu
MENU_OPTION tButtonleft, ocR_button_left, 0 ; left button sensitivity
MENU_OPTION tButtonright, ocR_button_right, 0 ; right button sensitivity
MENU_CALL tExit, do_settings_menu_more_piezo_exit
MENU_END
do_settings_menu_more_ostc3p: ; Menu with BLE feature
MENU_BEGIN tSystSets, .7
MENU_CALL tCompassMenu, do_compass_menu
MENU_CALL tLogOffset, do_log_offset_menu
MENU_OPTION tUnits, oUnits, 0
MENU_OPTION tAltMode, oAltMode, 0
MENU_OPTION tDvSalinity, oDiveSalinity, 0
MENU_CALL tResetMenu, do_reset_menu
MENU_CALL tExit, do_return_settings
MENU_END
do_compass_menu:
MENU_BEGIN tSystSets, .5
MENU_CALL tCompassMenu, compass_calibration_loop
; 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 tExit, do_return_settings_more
MENU_END
;=============================================================================
; Reset and confirmation menu.
do_reset_menu:
MENU_BEGIN tResetMenu, .6
MENU_CALL tExit, do_return_settings
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, new_battery_menu ; New Battery sub menu
MENU_END
do_reset_menu2:
MENU_BEGIN tResetMenu2, .2
MENU_CALL tAbort, do_continue_menu_3stack
MENU_CALL tReboot, do_reboot ; Reboot
MENU_END
do_reset_menu3:
MENU_BEGIN tResetMenu2, .2
MENU_CALL tAbort, do_continue_menu_3stack
MENU_CALL tResetDeco, do_reset_deco ; Reset Deco
MENU_END
do_reset_menu4:
MENU_BEGIN tResetMenu2, .2
MENU_CALL tAbort, do_continue_menu_3stack
MENU_CALL tResetSettings, do_reset_settings ; Reset all settings
MENU_END
do_reset_menu5:
MENU_BEGIN tResetMenu2, .2
MENU_CALL tAbort, do_continue_menu_3stack
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 (!)
goto do_continue_main_menu ; back to menu
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)
banksel common ; back to bank 1, needed after every return from C code
call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode
call deco_calc_desaturation_time ; calculate desaturation and no-fly time
banksel common
goto do_return_settings ; back to menu
do_reset_settings:
call TFT_ClearScreen ; Clear screen
banksel common
extern option_reset_all
call option_reset_all ; Reset all options to factory default.
goto restart ; Restart into surfacemode
do_continue_menu_3stack: ; Return three levels deep
call menu_processor_pop
goto do_return_settings
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 tExit, 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 tExit, do_continue_menu_3stack
MENU_END
do_reset_seconds:
clrf secs
extern rtc_set_rtc
call rtc_set_rtc ; writes mins,sec,hours,day,month and year to rtc module
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 tExit, do_continue_menu_3stack
MENU_END
do_toggle_ppo2_max: ; add 0.1bar, with hard-coded max.
movff char_I_ppO2_max,lo ; banksafe
movlw .10
addwf lo,F
movlw ppo2_highest_setting
cpfsgt lo
bra do_toggle_ppo2_max2
movlw .120
movwf lo
do_toggle_ppo2_max2:
movff lo,char_I_ppO2_max
return
do_toggle_ppo2_max_deco: ; add 0.1bar, with hard-coded max.
movff char_I_ppO2_max_deco,lo ; banksafe
movlw .10
addwf lo,F
movlw ppo2_highest_setting_deco
cpfsgt lo
bra do_toggle_ppo2_max_deco2
movlw .120
movwf lo
do_toggle_ppo2_max_deco2:
movff lo,char_I_ppO2_max_deco
return
do_toggle_ppo2_min: ; sub 0.1bar, with hard-coded min.
movff char_I_ppO2_min,lo ; banksafe
incf lo,F
movlw .21
cpfsgt lo
bra do_toggle_ppo2_min2
movlw ppo2_lowest_setting
movwf lo
do_toggle_ppo2_min2:
movff lo,char_I_ppO2_min
return
do_toggle_ppo2_min_cc: ; sub 0.1bar, with hard-coded min.
movff char_I_ppO2_min_loop,lo ; banksafe
incf lo,F
movlw ppo2_warning_low_cc_max
cpfsgt lo
bra do_toggle_ppo2_min_cc2
movlw ppo2_warning_low_cc_min
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 tExit, do_return_settings_more
MENU_END
do_logoffset_minus1:
call do_logoffset_common_read ; Read into lo:hi
movlw d'1'
subwf lo
movlw d'0'
subwfb hi
btfss hi,7 ; <0?
goto do_logoffset_common_write ; Store and return
clrf lo
clrf hi
goto do_logoffset_common_write ; Store and return
do_logoffset_minus10:
call do_logoffset_common_read ; Read into lo:hi
movlw d'10'
subwf lo
movlw d'0'
subwfb hi
btfss hi,7 ; <0?
goto do_logoffset_common_write ; Store and return
clrf lo
clrf hi
goto do_logoffset_common_write ; Store and return
do_logoffset_plus1:
call do_logoffset_common_read ; Read into lo:hi
infsnz lo,F
incf hi,F
goto do_logoffset_common_write ; Store and return
do_logoffset_plus10:
call do_logoffset_common_read ; Read into lo:hi
movlw d'10'
addwf lo
movlw d'0'
addwfc hi
goto do_logoffset_common_write ; Store and return
do_dispsets_menu_3stack:
bcf in_color_menu
call menu_tree_double_pop ; drop exit line and back to last line
do_dispsets_menu:
MENU_BEGIN tDispSets, .5
MENU_OPTION tBright, oBrightness, 0
MENU_CALL tColorScheme, do_color_scheme
MENU_OPTION tFlip, oFlipScreen, 0
MENU_CALL tMore, do_dispsets_menu_more
MENU_CALL tExit, do_return_settings
MENU_END
do_dispsets_menu_more:
MENU_BEGIN tDispSets, .6
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_CALL tExit, do_dispsets_menu_3stack
MENU_END
extern oColorSetDive
do_color_scheme:
bsf in_color_menu
MENU_BEGIN tColorScheme, .2
MENU_OPTION tColorSetDive,oColorSetDive, 0
MENU_CALL tExit, do_dispsets_menu_3stack
MENU_END
;=============================================================================
global new_battery_menu
extern surfloop
new_battery_menu:
bsf enable_screen_dumps ; To prevent exiting into COMM mode immediately
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 icon.
MENU_BEGIN tNewBattTitle, .1
MENU_CALL tEnter, new_battery_menu2
MENU_END
new_battery_menu2:
; hardware_flag:
; 3: 0x0A or 0x13 (2016)
; cR: 0x05
; 2 with BLE: 0x11
; Sport: 0x12
; 3 with BLE: 0x1A
movlw 0x0A
cpfseq hardware_flag
bra $+4
bra menu_new_battery_AA
movlw 0x13
cpfseq hardware_flag
bra $+4
bra menu_new_battery_AA_16650
movlw 0x12
cpfseq hardware_flag
bra $+4
bra menu_new_battery_AA
movlw 0x1A
cpfseq hardware_flag
bra $+4
bra menu_new_battery_AA
movlw 0x11
cpfseq hardware_flag
bra $+4
bra menu_new_battery_18650
movlw 0x05
cpfseq hardware_flag
bra $+4
bra menu_new_battery_18650
bra use_old_batteries ; any unsupported value
menu_new_battery_AA_16650:
MENU_BEGIN tNewBattTitle, .5
MENU_CALL tNewBattOld, use_old_batteries
MENU_CALL tNewBattNew36, use_new_36V_batteries
MENU_CALL tNewBattNew15, use_new_15V_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 tNewBattNew36, use_new_36V_batteries
MENU_CALL tNewBattNew15, use_new_15V_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
goto surfloop ; Jump to Surfaceloop!
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_new_36V_2
use_18650_battery:
rcall setup_new_18650
bra use_new_36V_2
use_new_36V_batteries:
rcall setup_new_saft
bra use_new_36V_2
use_new_15V_batteries:
rcall setup_new_15v
use_new_36V_2:
call reset_battery_pointer ; Resets battery pointer 0x07-0x0C and battery_gauge:5
goto surfloop ; Jump to Surface loop!
use_36V_rechargeable:
rcall setup_new_panasonic
call reset_battery_internal_only
goto surfloop ; Jump to Surface loop!
END