view src/customview.asm @ 654:75e90cd0c2c3

hwOS sport 10.77 release
author heinrichsweikamp
date Thu, 14 Mar 2024 16:56:46 +0100
parents 4050675965ea
children
line wrap: on
line source

;=============================================================================
;
;   File customview.asm                     * combined next generation V3.09.5
;
;   Custom Views in Surface and Dive Mode
;
;   Copyright (c) 2011, JD Gascuel, heinrichs weikamp gmbh, all right reserved.
;=============================================================================
; HISTORY
;  2011-08-10 : [mH] moving from OSTC code

;=============================================================================

#include "hwos.inc"						; mandatory header
#include "tft_outputs.inc"
#include "strings.inc"
#include "tft.inc"
#include "wait.inc"
#include "surfmode.inc"
#include "convert.inc"
#include "divemode.inc"
#include "i2c.inc"
#include "start.inc"
#include "colorschemes.inc"


	extern	gaslist_strcat_gas_PRODL
	extern	char_I_model

 IFDEF _compass
	extern	TFT_surface_compass_mask
	extern	TFT_dive_compass_mask
 ENDIF


#DEFINE num_premenu_items	.12			; overall number of pre-menu items
#DEFINE num_surface_cv		.11			; overall number of surface custom views


;=============================================================================
custview1	CODE
;=============================================================================

;-----------------------------------------------------------------------------
; Jump Table for the every-second Tasks for the Custom View Area (Dive Mode)
;
; Attention: the ordering must be in line with the init jump table and the
;            index numbers defined in hwos.inc!
;
	global	dive_customview_second
dive_customview_second:
	movf	active_customview,W			; get current view
	dcfsnz	WREG,F						;
	goto	TFT_avr_stopwatch			;  1: average depth and stopwatch
	dcfsnz	WREG,F						;
 IFDEF _compass
	return								;  2: compass - will be updated separately (faster) in dive mode
 ELSE
	return								;  2: not available without compass
 ENDIF
	dcfsnz	WREG,F						;
 IFDEF _external_sensor
	goto	TFT_ppo2_sensors			;  3: ppO2 sensors
 ELSE
	return								;  3: not available without external sensors
 ENDIF
	dcfsnz	WREG,F						;
 IFDEF _ccr_pscr
	goto	TFT_sensor_check			;  4: sensor check
 ELSE
	return								;  4: not available without CCR / pSCR mode
 ENDIF
	dcfsnz	WREG,F						;
 IFDEF _ccr_pscr
	goto	TFT_pscr_info				;  5: pSCR data
 ELSE
	return								;  5: not available without CCR / pSCR mode
 ENDIF
	dcfsnz	WREG,F						;
 IFDEF _rx_functions
	goto	TFT_pressures_SAC			;  6: tank pressure and SAC rate
 ELSE
	return								;  6: not available without RX functions
 ENDIF
	dcfsnz	WREG,F						;
	goto	TFT_gas_needs				;  7: gas needs for ascent / cave return
	dcfsnz	WREG,F						;
 IFDEF _cave_mode
	goto	TFT_cave_tts				;  8: cave mode TTS
 ELSE
	return								;  8: not available without cave mode functions
 ENDIF
	dcfsnz	WREG,F						;
	goto	TFT_decoplan				;  9: deco plan
	dcfsnz	WREG,F						;
	goto	TFT_ceiling_GF_tissue		; 10: ceiling, current GF and tissues
	dcfsnz	WREG,F						;
	goto	TFT_CNS						; 11: CNS values
	dcfsnz	WREG,F						;
	goto	TFT_ppo2_ead_end_cns		; 12: ppO2, END/EAD and CNS / gas density
	dcfsnz	WREG,F						;
	goto	TFT_clock_batt_surfpress	; 13: clock, battery and surface pressure
	dcfsnz	WREG,F						;
	return								; 14: GF factors - static only
	dcfsnz	WREG,F						;
 IFDEF _cave_mode
	goto	TFT_cave_waypoints			; 15: cave waypoints
 ELSE
	return								; 15: not available without cave mode functions
 ENDIF
	return								;  0: do nothing


;=============================================================================
custview2	CODE
;=============================================================================


;-----------------------------------------------------------------------------
; Show next Surface Custom View
;
	global	surf_customview_toggle
surf_customview_toggle:
	bcf		switch_right				; clear button event
	incf	active_customview,F			; set number of the next custom view to show

 IFDEF _compass
	movlw	.6							; load index of surface custom view compass
	cpfseq	active_customview			; will the compass be shown in custom view?
	call	I2C_sleep_compass			; NO - can stop the compass to save on energy
 ENDIF

	movlw	num_surface_cv				; load number of custom views available
	cpfsgt	active_customview			; beyond last view?
	bra		surf_customview_mask		; NO  - show view
	movlw	.1							; YES - wrap around to 1st view
	movwf	active_customview			;     - ...
	;bra	surf_customview_mask		;     - show view


;-----------------------------------------------------------------------------
; Show Surface Custom View
;
	global	surf_customview_mask
surf_customview_mask:

	; prepare output of custom view title
	WIN_BOX_BLACK .50,surf_warning1_row-1, .0, surf_decotype_column-.1	; top, bottom, left, right
	WIN_TINY   surf_customview_title_column,surf_customview_title_row	; set title position
	FONT_COLOR color_greenish											; set title color

	; jump table
	movf	active_customview,W			; get custom view to show
	movff	WREG,customview_surfmode	; save number for later recall
	dcfsnz	WREG,F						; 1:
	bra		surf_customview_init_view1	; OC gas list
	dcfsnz	WREG,F						; 2:
	bra		surf_customview_init_view2	; CC dil list
	dcfsnz	WREG,F						; 3:
	bra		surf_customview_init_view3	; CC SP list
	dcfsnz	WREG,F						; 4:
	bra		surf_customview_init_view4	; custom text
	dcfsnz	WREG,F						; 5:
	bra		surf_customview_init_view5	; tissue diagram
	dcfsnz	WREG,F						; 6:
	bra		surf_customview_init_view6	; compass
	dcfsnz	WREG,F						; 7:
	bra		surf_customview_init_view7	; deco settings
	dcfsnz	WREG,F						; 8:
	bra		surf_customview_init_view8	; last dive info
	dcfsnz	WREG,F						; 9:
	bra		surf_customview_init_view9	; sensor mV readings
	dcfsnz	WREG,F						; 10:
	bra		surf_customview_init_view10	; tank data
	dcfsnz	WREG,F						; 11:
	bra		surf_customview_init_view11	; Desat, noFly, CNS screen
	bra		surf_customview_init_view4	; 0: default view after restart and loading of new firmware

surf_cv_toggle_exit:
	bcf		request_next_custview		; clear request flag
	return								; done

	; ---- view 1: OC Gas list ----
	;
surf_customview_init_view1:
	btfsc	FLAG_gauge_mode				; in gauge mode?
	bra		surf_customview_toggle		; YES - not available in gauge mode, goto next view
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		surf_customview_toggle		; YES - not available in apnoe mode, goto next view
 IFDEF _ccr_pscr
	btfss	FLAG_oc_mode				; in OC mode?
	bra		surf_customview_init_view1a	; NO  - (1)
 ENDIF
	STRCPY_TEXT_PRINT tGaslist			; YES - title of custom view / OC mode
 IFDEF _ccr_pscr
	bra		surf_customview_init_view1b	;     - continue with common part
surf_customview_init_view1a:
	STRCPY_TEXT_PRINT tDiveBailout		; (1) - title of custom view / CCR & pSCR mode
 ENDIF
surf_customview_init_view1b:
	call	TFT_surf_cv_list_gas		; show gas list
	bra		surf_cv_toggle_exit			; done


	; ---- view 2: CCR / pSCR diluent list ----
	;
surf_customview_init_view2:
 IFDEF _ccr_pscr
	btfsc	FLAG_ccr_mode				; in CCR mode?
	bra		surf_customview_init_view2a	; YES - (1)
	btfsc	FLAG_pscr_mode				; in pSCR mode?
	bra		surf_customview_init_view2a	; YES - (1)
	bra		surf_customview_toggle		; NO  - not available if not in CCR or pSCR mode, goto next view
surf_customview_init_view2a:
	STRCPY_TEXT_PRINT tGaslistCC		; (1) - title of custom view
	call	TFT_surf_cv_list_dil		;     - show diluent list
	bra		surf_cv_toggle_exit			;     - done
 ELSE
	bra		surf_customview_toggle		; not available without CCR/pSCR mode compiled in, goto next view
 ENDIF


	; ---- view 3: CC SP list ----
	;
surf_customview_init_view3:
 IFDEF _ccr_pscr
	btfss	FLAG_ccr_mode				; in CCR mode?
	bra		surf_customview_toggle		; NO  - not available if not in CCR mode, goto next view
	STRCPY_TEXT_PRINT tFixedSetpoints	; YES - title of custom view
	call	TFT_surf_cv_list_sp			;     - show setpoint list
	bra		surf_cv_toggle_exit			;     - done
 ELSE
	bra		surf_customview_toggle		; not available without CCR/pSCR mode compiled in, goto next view
 ENDIF


	; ---- view 4: custom text
	;
surf_customview_init_view4:
	call	TFT_surf_cv_text			; show the custom text
	bra		surf_cv_toggle_exit			; done


	; ---- view 5: tissue diagram
	;
surf_customview_init_view5:
	btfsc	FLAG_gauge_mode				; in gauge mode?
	bra		surf_customview_toggle		; YES - not available in gauge mode, goto next view
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		surf_customview_toggle		; YES - not available in apnoe mode, goto next view
	call	TFT_surf_cv_tissues			; show tissue diagram
	bra		surf_cv_toggle_exit			; done


	; ---- view 6: compass
	;
surf_customview_init_view6:
 IFDEF _compass
	call	I2C_init_compass			; start compass
	call	TFT_surface_compass_mask	; show compass mask
	bra		surf_cv_toggle_exit			; done
 ELSE
	bra		surf_customview_toggle		; not available without compass compiled in, goto next view
 ENDIF


	; ---- view 7: deco settings ----
	;
surf_customview_init_view7:
	btfsc	FLAG_gauge_mode				; in gauge mode?
	bra		surf_customview_toggle		; YES - not available in gauge mode, goto next view
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		surf_customview_toggle		; YES - not available in apnoe mode, goto next view
	call	TFT_surf_cv_settings		; show all deco settings
	bra		surf_cv_toggle_exit			; done


	; ---- view 8: last dive info ----
	;
surf_customview_init_view8:
	call	TFT_surf_cv_lastdive		; show last dive info
	bra		surf_cv_toggle_exit			; done


	; ---- view 9: sensor mV at the surface ----
	;
surf_customview_init_view9:
 IFDEF _external_sensor
	btfsc	FLAG_ccr_mode				; in CCR mode?
	bra		surf_customview_init_view9a	; YES - show view
	btfsc	FLAG_pscr_mode				; NO  - in pSCR mode?
	bra		surf_customview_init_view9a	;       YES - show view
	bra		surf_customview_toggle		;       NO  - not available if not in CCR or pSCR mode, goto next view

surf_customview_init_view9a:
	movff	opt_ccr_mode,WREG			; get SP mode (0: fixed SP, 1: Sensor, 2: auto SP)
	decfsz	WREG,W						; opt_ccr_mode = 1 (sensor)?
	bra		surf_customview_toggle		; NO  - goto next view
	STRCPY_TEXT_PRINT tSensorMilliVolt	; YES - title of custom view
	call	TFT_imprint_surf_mV			;     - write sensor mV readings to screen 
	bra		surf_cv_toggle_exit			;     - done
 ELSE
	bra		surf_customview_toggle		; not available without CCR/pSCR mode compiled in, goto next view
 ENDIF


	; ---- view 10: transmitter data / debug ----
	;
surf_customview_init_view10:
 IFDEF _rx_functions
	btfss	tr_functions_activated		; TR functions activated?
	bra		surf_customview_toggle		; NO  - show next view in list
	STRCAT_PRINT "ID     bar  Volt"		; YES - title of custom view (none language-dependent)
	call	TFT_surf_cv_tankdata		;     - show received data
	bra		surf_cv_toggle_exit			;     - done
 ELSE
	bra		surf_customview_toggle		; not available without RX functions compiled in, goto next view
 ENDIF

	; ---- view 11: Desat, NoFly, CNS ----
	;
surf_customview_init_view11: 
    	btfsc	FLAG_gauge_mode				; in gauge mode?
	bra		surf_customview_toggle		; YES - not available in gauge mode, goto next view
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		surf_customview_toggle		; YES - not available in apnoe mode, goto next view
	call	TFT_surf_desat_nofly_cns		; Desat, NoFly, CNS
	bra		surf_cv_toggle_exit			; done

;=============================================================================
custview3	CODE
;=============================================================================


;-----------------------------------------------------------------------------
; Show next Pre-Menu Item / Clear the Pre-Menu
;
	global	menuview_toggle
menuview_toggle:
	bcf		switch_left					; clear button event
	movlw	divemode_timeout_premenu	; get timeout for dive mode pre-menu
	call	restart_timeout_time		; restart the timeout
	bsf		dive_pre_menu				; flag that the pre-menu is shown
menuview_next_item:
	incf	active_premenu,F			; increment     pre-menu item number
	movlw	num_premenu_items			; get number of pre-menu items
	cpfsgt	active_premenu				; beyond last item?
	bra		menuview_mask				; NO  - show item
	;bra	menuview_toggle_reset		; YES - reset to first item

	global	menuview_toggle_reset
menuview_toggle_reset:
	clrf	active_premenu				; reset pre-menu item number
	bcf		dive_pre_menu				; flag that the pre-menu is not shown anymore
	;bra	menuview_mask				; clear last item from display

menuview_mask:
	WIN_BOX_BLACK dm_premenu_row, dm_premenu_bot, dm_premenu_col, dm_premenu_rgt ; top, bottom, left, right
	btfsc	dive_pre_menu				; shall show pre-menu?
	bra		menuview_show_item			; YES - show menu item
	;bra	menuview_exit				; NO  - done with pre-menu

menuview_exit:
	bcf		win_invert					; clear inverse printing
	btfss	dive_pre_menu				; showing pre-menu?
	goto	TFT_show_temp_divemode		; NO  - restore temperature display and return
	return								; YES - done

menuview_show_item:
	WIN_SMALL dm_premenu_col,dm_premenu_row
	FONT_COLOR_ATTENTION				; set color
	bsf		win_invert					; set inverse printing
	movf	active_premenu,W			; get active pre-menu item
	dcfsnz	WREG,F
	bra		menuview_view_gaschange		;  1: gas change	(skipped if no better gas/dil cued)
	dcfsnz	WREG,F
	bra		menuview_view_ackn			;  2: "Ackn?"		(skipped if no active advice/attention/warning sign)
	dcfsnz	WREG,F
	bra		menuview_view_divemenu		;  3: "Menu?"		(skipped in gauge and apnoe modes)
	dcfsnz	WREG,F
 IFDEF _cave_mode
	bra		menuview_view_cavemenu		;  4: "Cave?"		(skipped if not in cave mode)
 ELSE
	bra		menuview_next_item			;  4: cave mode not implemented, goto next item
 ENDIF
	dcfsnz	WREG,F
	bra		menuview_view_sim_quit		;  5: "Quit?"		(in simulation mode only)
	dcfsnz	WREG,F
	bra		menuview_view_sim_down		;  6: "Sim down"	(in simulation mode only)
	dcfsnz	WREG,F
	bra		menuview_view_sim_up		;  7: "Sim up"		(in simulation mode only)
	dcfsnz	WREG,F
	bra		menuview_view_sim_time		;  8: "Sim+5'"		(in simulation mode only)
	dcfsnz	WREG,F
	bra		menuview_view_apnoe_quit	;  9: "Quit?"		(in apnoe mode only)
	dcfsnz	WREG,F
	bra		menuview_view_gauge_reset	; 10: "Reset Avr"	(in gauge mode only)
	dcfsnz	WREG,F
 IFDEF _compass
	bra		menuview_view_course		; 11: "Course"		(only when compass is shown)
 ELSE
	bra		menuview_next_item			; 11: compass not implemented, goto next item
 ENDIF
	dcfsnz	WREG,F
	bra		menuview_view_layout		; 12: "Layout"		(offer alternative layout, aka blind mode)
	bra		menuview_exit				; catch illegal item number
	; when adding or removing items, adjust the value num_premenu_items in the #DEFINE !


	; --- item 1: gas change advice ---
	;
menuview_view_gaschange:
	btfsc	request_gas_change			; last gas change request already executed?
	bra		menuview_next_item			; YES - goto next option
 IFDEF _ccr_pscr
	btfsc	FLAG_oc_mode				; in OC mode?
	bra		menuview_view_gaschange_OC	; YES
	btfsc	bailout_mode				; in bailout?
	bra		menuview_view_gaschange_OC	; YES
menuview_view_gaschange_DIL:
	btfss	better_dil_available		; is the better diluent still available?
	bra		menuview_next_item			; NO - goto next item
	movff	best_dil_number,PRODL		; number (1-5) of the "best diluent"
	bsf		is_diluent_menu				; setting up diluents
	bra		menuview_view_gaschange_com	; continue with common part
 ENDIF	; _ccr_pscr
menuview_view_gaschange_OC:
	btfss	better_gas_available		; is the better gas still available?
	bra		menuview_next_item			; NO  - goto next item
	movff	best_gas_number,PRODL		; YES - number (1-5) of the "best gas"
	bcf		is_diluent_menu				;     - setting up OC gases
menuview_view_gaschange_com:
	decf	PRODL,F						; (1-5) -> (0-4)
	bsf		short_gas_descriptions		; use short version of gaslist_strcat_gas_PRODL and gaslist_strcat_setpoint
	bsf		better_gas_hint				; color-code as best gas/diluent
	call	gaslist_strcat_gas_PRODL	; append gas description of gas #PRODL (0-4) to current string
	movlw	.5							; point to 6th character (5 chars are used for the gas/dil description)
	movwf	FSR2L						; ...
	PUTC_PRINT "?"						; append question and dump buffer to screen
	bra		menuview_exit				; done

	; ---- item 2: acknowledge ----
	;
menuview_view_ackn:
	btfss	sign_shown					; advice, attention or warning sign shown?
	bra		menuview_next_item			; NO  - goto next item
	STRCAT_TEXT_PRINT tDiveAckn			; YES - print "Ackn?"
	bra		menuview_exit				;     - done


	; ---- item 3: dive menu ----
	;
menuview_view_divemenu:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		menuview_next_item			; YES - goto next item
	btfsc	FLAG_gauge_mode				; NO  - in gauge mode?
	bra		menuview_next_item			;       YES - goto next item
	PUTC	"\xb7"						;       NO  - print '->' symbol
	STRCAT_TEXT_PRINT tDivePreMenu		;           - print "Menu?"
	bra		menuview_exit				;           - done


	; ---- item 4: cave menu ----
	;
 IFDEF _cave_mode
menuview_view_cavemenu:
	TSTOSS	opt_cave_mode				; cave mode switched on?
	bra		menuview_next_item			; NO  - goto next item
	PUTC	"\xb7"						; YES - print '->' symbol
	STRCAT_TEXT_PRINT tDivePreCave		;     - print "Cave?"
	bra		menuview_exit				;     - done
 ENDIF	; _cave_mode


	; ---- item 5: quit simulator ---
	;
menuview_view_sim_quit:
	btfss	simulatormode				; in simulator mode?
	bra		menuview_next_item			; NO  - goto next item
	STRCPY_TEXT_PRINT tQuitSim			; YES - print "Quit Simulation?"
	bra		menuview_exit				;     - done


	; ---- item 6: simulator - go down ----
	;
menuview_view_sim_down:
	btfss	simulatormode				; in simulator mode?
	bra		menuview_next_item			; NO - goto next item
	STRCPY_PRINT "Sim\xb8"				; print down arrow for going down
	bra		menuview_exit				; done


	; ---- item 7: simulator - go up ----
	;
menuview_view_sim_up:
	btfss	simulatormode				; in simulator mode?
	bra		menuview_next_item			; NO  - goto next item
	STRCPY_PRINT "Sim\xb9"				; YES - print up arrow for going up
	bra		menuview_exit				;     - done


	; ---- item 8: simulator - advance time ----
	;
menuview_view_sim_time:
	btfss	simulatormode				; in simulator mode?
	bra		menuview_next_item			; NO  - goto next item
	btfsc	FLAG_gauge_mode				; YES - in gauge mode?
	bra		menuview_next_item			;       YES - goto next item
	btfsc	FLAG_apnoe_mode				;       NO  - in apnoe mode?
	bra		menuview_next_item			;             YES - goto next item
	STRCPY_PRINT "Sim+5'"				;             NO  - print "Sim+5'"
	bra		menuview_exit				;                 - done


	; ---- item 9: apnoe mode - quit ----
	;
menuview_view_apnoe_quit:
	btfss	FLAG_apnoe_mode				; in apnoe mode?
	bra		menuview_next_item			; NO  - goto next option
	btfss	apnoe_at_surface			; YES - at the surface?
	bra		menuview_next_item			;       NO  - goto next item
	STRCPY_TEXT_PRINT tQuitSim			;       YES - print "Quit Apnea mode?"
	bra		menuview_exit				;           - done


	; ---- item 10: gauge mode - reset average ----
	;
menuview_view_gauge_reset:
	btfss	FLAG_gauge_mode				; in gauge mode?
	bra		menuview_next_item			; NO  - goto next item
	STRCPY_TEXT_PRINT tResetAvg			; YES - print "Reset Avg."
	bra		menuview_exit				;     - done


	; ---- item 11: set bearing ----
 IFDEF _compass
menuview_view_course:
	movlw	index_compass_dm			; index of compass view
	cpfseq	active_customview			; in compass view?
	bra		menuview_next_item			; NO  - goto next item
	STRCPY_TEXT_PRINT tSetHeading		; YES - print "Heading"
	bra		menuview_exit				;     - done
 ENDIF


	; ---- item 12: switch layout ----
	;
menuview_view_layout:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		menuview_next_item			; YES - goto next item
	STRCPY_TEXT_PRINT tDiveLayout		; NO  - print "Layout"
	bra		menuview_exit				;     - done


;=============================================================================
custview4	CODE
;=============================================================================


;-----------------------------------------------------------------------------
; Show a specific Dive Mode Custom View
;
	global	dive_customview_show
dive_customview_show:
	btfss	custom_view_locked			; custom view locked?
	bra		dive_customview_show_1		; NO  - call-up the view
	movwf	backup_customview			; YES - store requested custom view for later recall
	return								;     - done
dive_customview_show_1:
	movwf	active_customview			; set the requested custom view
	bra		dive_customview_callup		; call-up the custom view


;-----------------------------------------------------------------------------
; Show again last Dive Mode Custom View
;
	global	dive_customview_recall
dive_customview_recall:
	movff	backup_customview,active_customview	; recall the saved custom view
	bra		dive_customview_callup				; call-up the custom view


;-----------------------------------------------------------------------------
; Show next Dive Mode Custom View
;
	global	dive_customview_toggle
dive_customview_toggle:
	incf	active_customview,F			; increment number of custom view to show
	movlw	index_cv_dm_max				; get highest index in use in dive mode custom view
	cpfsgt	active_customview			; beyond last view?
	bra		dive_customview_callup		; NO  - call-up the custom view
	clrf	active_customview			; YES - reset to zero (zero = blank custom view)
	;bra	dive_customview_callup		; call-up the custom view


;-----------------------------------------------------------------------------
; Show current Dive Mode Custom View
;
	global	dive_customview_callup
dive_customview_callup:
	movlw	index_compass_dm			; get index of compass custom view
	cpfseq	active_customview			; will compass be shown?
	call	I2C_sleep_compass			; NO - stop compass to save on energy

	; clear custom view area in dive mode
	WIN_BOX_BLACK dm_customview_row, dm_customview_bot-.2, dm_customview_column, dm_customview_rgt ; top, bottom, left, right

	; jump table
	movf	active_customview,W			; get custom view to show
	dcfsnz	WREG,F						;
	bra		init_avr_stopwatch			;  1: average depth and stopwatch
	dcfsnz	WREG,F						;
	bra		init_TFT_dive_compass		;  2: compass
	dcfsnz	WREG,F						;
	bra		init_ppo2_sensors			;  3: ppO2 sensors
	dcfsnz	WREG,F						;
	bra		init_sensor_check			;  4: sensor check
	dcfsnz	WREG,F						;
	bra		init_pscr_info				;  5: pSCR data
	dcfsnz	WREG,F						;
	bra		init_pressures_SAC			;  6: tank pressure and SAC rate
	dcfsnz	WREG,F						;
	bra		init_gas_needs_ascent		;  7: gas needs for ascent / cave return
	dcfsnz	WREG,F						;
	bra		init_cave_tts				;  8: cave mode TTS
	dcfsnz	WREG,F						;
	bra		init_decoplan				;  9: deco plan (next stops)
	dcfsnz	WREG,F						;
	bra		init_ceiling_GF_tissue		; 10: ceiling, current GF and tissues
	dcfsnz	WREG,F						;
	bra		init_CNS					; 11: CNS values
	dcfsnz	WREG,F						;
	bra		init_ppo2_ead_end_cns		; 12: ppO2, END/EAD and CNS/gas density
	dcfsnz	WREG,F						;
	bra		init_clock_batt_surfpress	; 13: clock, battery and surface pressure
	dcfsnz	WREG,F						;
	bra		init_gf_factors				; 14: GF factors
	dcfsnz	WREG,F						;
	bra		init_cave_waypoints			; 15: cave waypoints
	;bra	dive_cv_toggle_exit			;  0: no view (blank screen in custom view area)

dive_cv_toggle_exit:
	bcf		request_next_custview		; clear request flag
	return								; done


	; ---- view 1: average depth and stopwatch ----
	;
init_avr_stopwatch:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		dive_customview_toggle		; YES - goto next view
	call	TFT_avr_stopwatch_mask		; NO  - mask for average depth and stopwatch
	call	TFT_avr_stopwatch			;     - data for average depth and stopwatch
	bra		dive_cv_toggle_exit			;     - done


	; ---- view 2: compass ----
	;
init_TFT_dive_compass:
 IFDEF _compass
	call	I2C_init_compass			; start compass
	call	TFT_dive_compass_mask		; mask for compass
	bra		dive_cv_toggle_exit			; done
 ELSE
	bra		dive_customview_toggle		; not available without compass compiled in, goto next view
 ENDIF


	; ---- view 3: ppO2 sensors ---
	;
init_ppo2_sensors:
 IFDEF _external_sensor
	bsf		trigger_temp_changed		; fake a change of the temperature to have the resettable dive time overwritten which was shown with the compass view
	btfsc	FLAG_ccr_mode				; in CC mode?
	bra		init_ppo2_sensors_1			; YES
	btfsc	FLAG_pscr_mode				; in pSCR mode?
	bra		init_ppo2_sensors_1			; YES
	bra		dive_customview_toggle		; NO to both, goto next view
init_ppo2_sensors_1:
	btfsc	ext_input_s8_ana			; do we have an S8/analog input?
	bra		init_ppo2_sensors_2			; YES - show this view
	btfsc	ext_input_optical			; NO  - do we have an optical input?
	bra		init_ppo2_sensors_2			;       YES - show this view
	bra		dive_customview_toggle		;       NO  - goto next view

init_ppo2_sensors_2:
	call	TFT_ppo2_sensors_mask		; mask for ppO2 sensors
	call	TFT_ppo2_sensors			; data for ppO2 sensors
	bra		dive_cv_toggle_exit			; done
 ELSE
	bra		dive_customview_toggle		; not available without external sensors, got next view
 ENDIF

	; ---- view 4: sensor check ----
	;
init_sensor_check:
 IFDEF _ccr_pscr
	btfss	FLAG_ccr_mode				; in CCR mode?
	bra		dive_customview_toggle		; NO  - goto next view
	call	TFT_sensor_check_mask		; YES - mask for sensor check
	call	TFT_sensor_check			;     - data for sensor check
	bra		dive_cv_toggle_exit			;     - done
 ELSE
	bra		dive_customview_toggle		; not available without CCR mode compiled in, goto next view
 ENDIF


	; ---- view 5: pSCR data ----
	;
init_pscr_info:
 IFDEF _ccr_pscr
	btfss	FLAG_pscr_mode				; in pSCR mode?
	bra		dive_customview_toggle		; NO  - goto next view
	call	TFT_pscr_info_mask			; YES - mask for pSCR info
	call	TFT_pscr_info				;     - data for pSCR info
	bra		dive_cv_toggle_exit			;     - done
 ELSE
	bra		dive_customview_toggle		; not available without CCR / pSCR mode, goto next view
 ENDIF


	; view 6: tank pressure and SAC rate ----
	;
init_pressures_SAC:
 IFDEF _rx_functions
	btfss	tr_functions_activated		; TR functions activated?
	bra		dive_customview_toggle		; NO  - goto next view
	call	TFT_pressures_SAC_mask		; YES - mask for pressures and SAC
	call	TFT_pressures_SAC			;     - data for pressures and SAC
	bra		dive_cv_toggle_exit			;     - done
 ELSE
	bra		dive_customview_toggle		; not available without RX functions, got next view
 ENDIF


	; ---- view 7: gas needs ----
	;
init_gas_needs_ascent:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		dive_customview_toggle		; YES - goto next view
	btfsc	FLAG_gauge_mode				; NO  - in gauge mode?
	bra		dive_customview_toggle		;       YES - goto next view
	TSTOSS	opt_calc_gasvolume			;       NO  - check if gas volume calculation is switched on
	bra		dive_customview_toggle		;             NO  - goto next view
	call	TFT_gas_needs_mask			;             YES - mask for gas needs ascent
	call	TFT_gas_needs				;                 - data for gas needs ascent
	bra		dive_cv_toggle_exit			;                 - done


	; ---- view 8: cave mode TTS ----
init_cave_tts:
 IFDEF _cave_mode
	btfss	cave_mode					; in cave mode?
	bra		dive_customview_toggle		; NO  - goto next view
	call	TFT_cave_tts_mask			; YES - show mask
	call	TFT_cave_tts				;     - show data
	bra		dive_cv_toggle_exit			;     - done
 ELSE
	bra		dive_customview_toggle		; not available without cave mode, goto next view
 ENDIF


	; ---- view 9: deco plan ----
	;
init_decoplan:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		dive_customview_toggle		; YES - goto next view
	btfsc	FLAG_gauge_mode				; NO  - in gauge mode?
	bra		dive_customview_toggle		;       YES - goto next view
	call	TFT_decoplan_mask			;       NO  - mask for deco plan
	call	TFT_decoplan				;           - data for deco plan
	bra		dive_cv_toggle_exit			;           - done


	; ---- view 10: ceiling, tissues and current GF
	;
init_ceiling_GF_tissue:
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		dive_customview_toggle		; YES - goto next view
	btfsc	FLAG_gauge_mode				; NO  - in gauge mode?
	bra		dive_customview_toggle		;       YES - call next view
	call	TFT_ceiling_GF_tissue_mask	;       NO  - mask for ceiling, current GF and tissues
	call	TFT_ceiling_GF_tissue		;           - data for ceiling, current GF and tissues
	bra		dive_cv_toggle_exit			;           - done


	; ---- view 11: CNS values ----
	;
init_CNS:								; CNS at end of dive
	btfsc	FLAG_gauge_mode				; in gauge mode?
	bra		dive_customview_toggle		; YES - call next view
	btfsc	FLAG_apnoe_mode				; NO  - in apnoe mode?
	bra		dive_customview_toggle		;       YES - call next view
	call	TFT_CNS_mask				;       NO  - mask for CNS values
	call	TFT_CNS						;           - data for CNS values
	bra		dive_cv_toggle_exit			;           - done


	; ---- view 12: ppO2, END/EAD and CNS/gas density ----
	;
init_ppo2_ead_end_cns:					; 
	btfsc	FLAG_apnoe_mode				; in apnoe mode?
	bra		dive_customview_toggle		; YES - goto next view
	btfsc	FLAG_gauge_mode				; NO  - in gauge mode?
	bra		dive_customview_toggle		;       YES - goto next view
	call	TFT_ppo2_ead_end_cns_mask	;       NO  - mask for ppO2, END/EAD and CNS
	call	TFT_ppo2_ead_end_cns		;           - data for ppO2, END/EAD and CNS
	bra		dive_cv_toggle_exit			;           - done


	; ---- view 13: clock, battery and surface pressure
	;
init_clock_batt_surfpress:
	call	TFT_clock_batt_surfpress_mask	; mask for clock, battery and surface pressure
	call	TFT_clock_batt_surfpress		; data for clock, battery and surface pressure
	bra		dive_cv_toggle_exit				; done


	; ---- view 14: GF factors
	;
init_gf_factors:
	call	TFT_gf_factors_mask			; show GF factors
	bra		dive_cv_toggle_exit			; done


	; ---- view 15: cave waypoints ----
	;
init_cave_waypoints:
 IFDEF _cave_mode
	call	TFT_cave_waypoints			; show waypoint graphics
	bra		dive_cv_toggle_exit			; done
 ELSE
	bra		dive_customview_toggle		; not available without cave mode, goto next view
 ENDIF

;-----------------------------------------------------------------------------

	END