diff src/divemenu_tree.asm @ 0:11d4fc797f74

init
author heinrichsweikamp
date Wed, 24 Apr 2013 19:22:45 +0200
parents
children 2825f1d2262f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/divemenu_tree.asm	Wed Apr 24 19:22:45 2013 +0200
@@ -0,0 +1,219 @@
+;=============================================================================
+;
+;   File divemenu_tree.asm
+;
+;   OSTC3 dive mode menu
+;
+;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
+;=============================================================================
+; HISTORY
+;   2013-02-02 : [mH] Made out of menu_tree.asm
+
+#include    "ostc3.inc"                  ; Mandatory header
+#include    "menu_processor.inc"
+#include 	"shared_definitions.h"      ; Mailbox from/to p2_deco.c
+#include    "tft_outputs.inc"
+#include    "customview.inc"
+#include    "strings.inc"
+
+divegui     CODE
+;=============================================================================
+; Main Menu
+        global  do_main_divemenu
+do_main_divemenu:
+		call    menu_processor_reset    ; restart from first icon.
+
+do_continue_main_divemenu:
+        call    menu_processor_pop      ; drop exit line.
+        call    menu_processor_pop      ; drop exit line.
+
+        btfsc   FLAG_ccr_mode
+        bra     main_divemenu_ccr       ; CCR Menu
+
+        bcf     ccr_diluent_setup      ; For OC gases
+        bcf     is_bailout_menu
+        movlw   .1
+        movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tMainMenu, .4
+        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
+        MENU_CALL   tDivemenu_ResetAvr, do_divemode_resetavr
+        MENU_CALL   tDivemenu_ToggleGF, do_divemode_togglegf
+        MENU_CALL   tExit,              do_exit_divemode_menu
+    MENU_END
+
+main_divemenu_ccr:
+    bsf     ccr_diluent_setup      ; For diluents
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tMainMenu, .6
+        MENU_CALL   tDiveBailout,       do_divemode_gaslist_bail
+        MENU_CALL   tDivemenu_Setpoint, do_divemode_splist
+        MENU_CALL   tDivemenu_Gaslist,  do_divemode_gaslist
+        MENU_CALL   tDivemenu_ResetAvr, do_divemode_resetavr
+        MENU_CALL   tDivemenu_ToggleGF, do_divemode_togglegf
+        MENU_CALL   tExit,              do_exit_divemode_menu
+    MENU_END
+
+
+do_togglegf:
+    TSTOSS  opt_enable_aGF          ; =1: aGF can be selected underwater
+    bra     do_exit_divemode_menu   ; exit
+    bsf     toggle_gf               ; Set flag...
+    bra     do_exit_divemode_menu   ; ...and exit
+
+do_switch_to_sensor:
+    movlw   .1                      ; Switch to Sensor
+    movff   WREG,opt_ccr_mode       ; =0: Fixed SP, =1: Sensor
+    bra     do_switch_sp2
+
+do_divemode_resetavr:
+    bsf     reset_average_depth     ; Set Flag
+    bra     do_exit_divemode_menu   ; And exit
+
+    extern  diveloop_loop4
+    extern  timeout_divemode_menu2
+do_switch_gas:
+    bsf     divemode_gaschange      ; Set flag
+do_switch_gasX:
+    btfsc   is_bailout_menu         ; Bailout confirmed?
+    bsf     is_bailout              ; =1: Bailout
+do_exit_divemode_menu:
+    call    timeout_divemode_menu2
+    clrf    STKPTR
+    goto    diveloop_loop4
+
+do_switch_sp:
+    decf    menupos,W               ; 1-5 -> 0-4
+    lfsr    FSR1,char_I_setpoint_cbar
+    movff   PLUSW1,char_I_const_ppO2; Setup fixed Setpoint
+    bsf     setpoint_changed        ; Set flag (For profile)
+
+    clrf    WREG                    ; Switch to fixed SP
+    movff   WREG,opt_ccr_mode       ; =0: Fixed SP, =1: Sensor
+    clrf    WREG
+    movff   WREG,char_O_deco_status ; Restart decoplan computation
+
+do_switch_sp2:
+    ; Clear some flags in case we were in bailout before...
+    bcf     is_bailout              ; =1: Bailout
+    bcf     is_bailout_menu         ;
+    bcf		better_gas_available	;=1: A better gas is available and a gas change is advised in divemode
+    bcf     blinking_better_gas     ; Clear blinking flag
+    bra     do_exit_divemode_menu   ; And exit
+
+do_divemode_gaslist_bail:
+    bcf     ccr_diluent_setup       ; For OC gases
+    bsf     is_bailout_menu         ; =1: Bailout
+do_divemode_gaslist:
+    btfsc   is_bailout              ; In Bailout case?
+    bcf     ccr_diluent_setup       ; Yes, use OC gases
+    bsf     short_gas_decriptions
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tGaslist, .6
+        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
+        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
+        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
+        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
+        MENU_DYNAMIC    gaslist_strcat_gas_mod, do_switch_gas
+        MENU_CALL       tMore,                  do_divemode_gaslist_more0
+    MENU_END
+
+do_divemode_gaslist_more0:
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+do_divemode_gaslist_more:
+    MENU_BEGIN  tGaslist, .6
+        MENU_DYNAMIC    gaslist_strcat_gasx,    do_dive_nothing
+        MENU_CALL       tO2Plus,                do_dive_pO2
+        MENU_CALL       tO2Minus,               do_dive_mO2
+        MENU_CALL       tHePlus,                do_dive_pHe
+        MENU_CALL       tHeMinus,               do_dive_mHe
+        MENU_CALL       tEnter,                 do_switch_gasX
+    MENU_END
+
+do_dive_nothing:
+        bra     do_divemode_gaslist_more
+
+do_dive_pO2:
+        banksel char_I_O2_ratio
+        incf    char_I_O2_ratio,F            ; O2++
+        movf    char_I_He_ratio,W
+        addwf   char_I_O2_ratio,W
+        movwf   temp_bankx400
+        movlw   .101
+        cpfslt  temp_bankx400                ; O2+He<101?
+        decf    char_I_O2_ratio,F            ; O2-- (Unchanged)
+;        bra     do_divemode_gaslist_more_common
+do_divemode_gaslist_more_common:
+        banksel common
+        bsf     gas6_changed                ; Set flag
+        bra     do_divemode_gaslist_more
+
+do_dive_mO2:
+        banksel char_I_O2_ratio
+        decf    char_I_O2_ratio,F           ; O2--
+        movlw   gaslist_min_o2
+        cpfslt  char_I_O2_ratio
+        bra     do_divemode_gaslist_more_common
+        movlw   gaslist_min_o2
+        movwf   char_I_O2_ratio
+        bra     do_divemode_gaslist_more_common
+
+
+do_dive_pHe:
+        banksel char_I_O2_ratio
+        incf    char_I_He_ratio,F            ; He++
+        movf    char_I_He_ratio,W
+        addwf   char_I_O2_ratio,W
+        movwf   lo
+        movlw   .101
+        cpfslt  lo                           ; O2+He<101?
+        decf    char_I_He_ratio,F            ; Yes, He-- (Unchanged)
+        banksel common
+        bra     do_divemode_gaslist_more_common
+
+do_dive_mHe:
+        banksel char_I_O2_ratio
+        decf    char_I_He_ratio,F           ; He--
+        bnn     do_divemode_gaslist_more_common
+        clrf    char_I_He_ratio
+        bra     do_divemode_gaslist_more_common
+
+do_divemode_splist:
+    bsf     short_gas_decriptions
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tGaslist, .6
+        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
+        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
+        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
+        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
+        MENU_DYNAMIC    gaslist_strcat_setpoint, do_switch_sp
+        MENU_CALL   tCCRSensor,         do_divemode_sensor
+  MENU_END
+
+do_divemode_sensor:
+    ; Set customview to 1 (HUD Data)
+    clrf    menupos3                    ; customview to come-1
+    bsf     toggle_customview			; Set flag, the customview will be toggled very soon now...
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tGaslist, .2
+        MENU_CALL       tDivemenu_UseSensor,    do_switch_to_sensor
+        MENU_CALL       tExit,                  do_continue_main_divemenu
+    MENU_END
+
+do_divemode_togglegf:
+    ; Set customview to 5 (GF informations)
+    movlw   .4
+    movwf   menupos3                    ; Customview to come-1
+    bsf     toggle_customview			; Set flag, the customview will be toggled very soon now...
+    movlw   .1
+    movwf   menupos                 ; Set to first option in divemode menu
+    MENU_BEGIN  tDivemenu_ToggleGF, .2
+        MENU_CALL       tDivemenu_ToggleGF,     do_togglegf
+        MENU_CALL       tExit,                  do_continue_main_divemenu
+    MENU_END
+
+    END
\ No newline at end of file