Mercurial > public > hwos_code
diff src/logbook.asm @ 582:b455b31ce022
work on 2.97 stable
author | heinrichsweikamp |
---|---|
date | Mon, 26 Feb 2018 16:40:28 +0100 |
parents | 0039f057b90f |
children | 08a0162d3ca1 |
line wrap: on
line diff
--- a/src/logbook.asm Sun Feb 25 18:25:38 2018 +0100 +++ b/src/logbook.asm Mon Feb 26 16:40:28 2018 +0100 @@ -1,6 +1,6 @@ ;============================================================================= ; -; File logbook.asm REFACTORED VERSION V2.91 +; File logbook.asm REFACTORED VERSION V2.98 ; ; Logbook ; @@ -8,244 +8,277 @@ ;============================================================================= ; HISTORY ; 2011-11-12 : [mH] moving from OSTC code - +; ;============================================================================= -; Temp data, local to this module, moved to ACCES0 area. -; + + +#include "hwos.inc" ; Mandatory header +#include "tft.inc" +#include "external_flash.inc" +#include "math.inc" +#include "strings.inc" +#include "convert.inc" +#include "tft_outputs.inc" +#include "eeprom_rs232.inc" +#include "menu_processor.inc" +#include "wait.inc" +#include "start.inc" +#include "surfmode.inc" +#include "divemode.inc" +#include "ghostwriter.inc" -#include "hwos.inc" ; Mandatory header -#include "tft.inc" -#include "external_flash.inc" -#include "math.inc" -#include "strings.inc" -#include "convert.inc" -#include "tft_outputs.inc" -#include "eeprom_rs232.inc" -#include "menu_processor.inc" -#include "wait.inc" -#include "start.inc" -#include "surfmode.inc" -#include "divemode.inc" -#include "ghostwriter.inc" + extern do_main_menu2 + extern comm_mode + extern customview_show_mix + + + ;---- Private local variables ------------------------------------------------- - extern do_main_menu2,comm_mode + CBLOCK local1 ; max size is 16 byte !!! + count_temperature ; current sample count for temperature divisor + count_deco ; current sample count for deco (ceiling) divisor + logbook_cur_depth:2 ; current depth, for drawing profile. + logbook_cur_tp:2 ; current temperature, for drawing profile. + logbook_last_tp ; Y of the last item in Tp° curve. + logbook_min_tp:2 ; min temperature, for drawing profile. + logbook_max_tp:2 ; maximum temperature, for drawing profile. + logbook_ceiling ; current ceiling, for drawing profile. + logbook_flags ; flags only used in logbook.asm + logbook_page_number ; page# in logbook + logbook_divenumber ; # of dive in list during search + logbook_max_dive_counter ; counts dive# to zero + ENDC ; used: 16 byte, remaining: 0 byte => FULL - CBLOCK tmp+0x36 ; Keep space for menu processor. - count_temperature ; Current sample count for temperature divisor - count_deco ; Current sample count for deco (ceiling) divisor - logbook_cur_depth:2 ; Current depth, for drawing profile. - logbook_cur_tp:2 ; Current temperature, for drawing profile. - logbook_last_tp ; Y of the last item in Tp° curve. - logbook_min_tp:2 ; Min temperature, for drawing profile. - logbook_max_tp:2 ; Maximum temperature, for drawing profile. - logbook_ceiling ; Current ceiling, for drawing profile. - logbook_flags ; Flags only used in logbook.asm - logbook_page_number ; Page# in logbook - logbook_divenumber ; # of dive in list during search - logbook_divenumber_temp ; # of dive in list during search - logbook_menupos_temp ; Last position of cursor - profile_temp:2 ; Temp for profile display - profile_temp2:2 ; Temp for profile display - logbook_max_dive_counter ; Counts dive# to zero - logbook_max_dive_counter_temp; Counts dive# to zero - logbook_sample_counter:2; Amount of read samples - divemins_backup ; Backup of divemins+0 - y_scale:2 ; y-scale (The horizontal lines) - x_scale:2 ; x-scale (The vertical lines) - logbook_pixel_x_pos ; x2 position of current pixel in X-direction - logbook_min_temp_pos ; lowest row in the temp graph - logbook_max_temp_pos ; lowest row in the temp graph - ;+.33, reserved to tmp+0x57 - ENDC + CBLOCK local2 ; max size is 16 byte !!! + profile_temp1:2 ; temp for profile display + profile_temp2:2 ; temp for profile display + logbook_sample_counter:2 ; amount of read samples + y_scale:2 ; y-scale (The horizontal lines) + x_scale:2 ; x-scale (The vertical lines) + logbook_pixel_x_pos ; x2 position of current pixel in X-direction + logbook_min_temp_pos ; lowest row in the temp graph + logbook_max_temp_pos ; lowest row in the temp graph + logbook_menupos_temp ; last position of cursor + logbook_divenumber_temp ; used to back-up dive number + logbook_max_dive_counter_temp ; used to back-up max_dive_counter + ENDC ; used: 16 byte, remaining: 0 byte => FULL - #DEFINE return_from_profileview logbook_flags,0 - #DEFINE all_dives_shown logbook_flags,1 - #DEFINE logbook_page_not_empty logbook_flags,2 - #DEFINE end_of_profile logbook_flags,3 - #DEFINE keep_cursor_new_page logbook_flags,4 - #DEFINE log_marker_found logbook_flags,5 + CBLOCK local3 ; max size is 16 byte !!! + divenumber ; used for accessing dives + vertical_interval:2 ; holds interval of samples for vertical 10min line + backup_color1 ; used for restoring drawing color + backup_color2 ; used for restoring drawing color + backup_divedata ; used to backup depth and salinity + fill_between_rows ; used for fill between rows + logbook_temp ; used as temp + logbook_temp_backup ; used as backup for temp + divisor_temperature ; divisor used while sampling of the dive data + divisor_deco ; divisor used while sampling of the dive data + divisor_gf ; divisor used while sampling of the dive data + divisor_ppo2_sensors ; divisor used while sampling of the dive data + divisor_decoplan ; divisor used while sampling of the dive data + divisor_cns ; divisor used while sampling of the dive data + divisor_tank ; divisor used while sampling of the dive data + ENDC ; used: 16 byte, remaining: 0 byte => FULL + - + ; Remark: The variable gaslist_gas is "misused" here as a local variable, + ; because the storage space for local variables is fully used up. + + +;---- Defines ---------------------------------------------------------------- + +; Flags +#DEFINE return_from_profileview logbook_flags,0 +#DEFINE all_dives_shown logbook_flags,1 +#DEFINE logbook_page_not_empty logbook_flags,2 +#DEFINE end_of_profile logbook_flags,3 +#DEFINE keep_cursor_new_page logbook_flags,4 +#DEFINE log_marker_found logbook_flags,5 +#DEFINE log_show_gas_short logbook_flags,6 +; logbook_flags,7 ; unused + ; Logbook Coordinates - #DEFINE logbook_list_left .10 ; Column of dive# in list - #DEFINE logbook_row_offset .28 ; Distance between rows of list - #DEFINE logbook_row_number .6 ; Amount of rows in the list +#DEFINE logbook_list_left .10 ; Column of dive# in list +#DEFINE logbook_row_offset .28 ; Distance between rows of list +#DEFINE logbook_row_number .6 ; Amount of rows in the list ; Profile display - #DEFINE profile_height_pixels .157 ; Amount of pixels height for profile display - #DEFINE profile_width_pixels .156 ; Amount of pixels width for profile display - #DEFINE profile_left .1 ; Left border - #DEFINE profile_top .65 ; Top border +#DEFINE profile_height_pixels .157 ; Amount of pixels height for profile display +#DEFINE profile_width_pixels .156 ; Amount of pixels width for profile display +#DEFINE profile_left .1 ; Left border +#DEFINE profile_top .65 ; Top border ; "Bailout" - #DEFINE logbook_bailout_column .124 - #DEFINE logbook_bailout_row .207 +#DEFINE logbook_bailout_column .124 +#DEFINE logbook_bailout_row .207 ; Dive number - #DEFINE logbook_divenumer_column .1 - #DEFINE logbook_divenumer_row .1 +#DEFINE logbook_divenumer_column .1 +#DEFINE logbook_divenumer_row .1 ; Date and Time - #DEFINE logbook_date_column .100 - #DEFINE logbook_date_row .7 - #DEFINE logbook_time_column .120 - #DEFINE logbook_time_row .38 +#DEFINE logbook_date_column .100 +#DEFINE logbook_date_row .7 +#DEFINE logbook_time_column .120 +#DEFINE logbook_time_row .38 ; Max. Depth - #DEFINE log_max_value_row .38 - #DEFINE log_max_value_column .1 -; Divetime - #DEFINE log_divetime_value_row .38 - #DEFINE log_divetime_value_column .60 ; UPDATED, old value was .65 +#DEFINE log_max_value_row .38 +#DEFINE log_max_value_column .1 +; Divetime +#DEFINE log_divetime_value_row .38 +#DEFINE log_divetime_value_column .60 ; Gaslist below profile - #DEFINE log_gas_row .225 - #DEFINE log_gas_column1 .0 - #DEFINE log_gas_column2 log_gas_column1+(.1*.32) - #DEFINE log_gas_column3 log_gas_column1+(.2*.32) - #DEFINE log_gas_column4 log_gas_column1+(.3*.32) - #DEFINE log_gas_column5 log_gas_column1+(.4*.32) +#DEFINE log_gas_row .225 +#DEFINE log_gas_column1 .0 +#DEFINE log_gas_column2 log_gas_column1+(.1*.32) +#DEFINE log_gas_column3 log_gas_column1+(.2*.32) +#DEFINE log_gas_column4 log_gas_column1+(.3*.32) +#DEFINE log_gas_column5 log_gas_column1+(.4*.32) ; Logbook Page2 - ; Gaslist - #DEFINE log2_title_row1 .20 - #DEFINE log2_title_column .90 - #DEFINE log2_gas_column log2_title_column - #DEFINE log2_gas_row1 .36 - #DEFINE log2_gas_row2 1*.16+log2_gas_row1 - #DEFINE log2_gas_row3 2*.16+log2_gas_row1 - #DEFINE log2_gas_row4 3*.16+log2_gas_row1 - #DEFINE log2_gas_row5 4*.16+log2_gas_row1 +; Gaslist +#DEFINE log2_title_row1 .20 +#DEFINE log2_title_column .90 +#DEFINE log2_gas_column log2_title_column +#DEFINE log2_gas_row1 .36 +#DEFINE log2_gas_row2 1*.16+log2_gas_row1 +#DEFINE log2_gas_row3 2*.16+log2_gas_row1 +#DEFINE log2_gas_row4 3*.16+log2_gas_row1 +#DEFINE log2_gas_row5 4*.16+log2_gas_row1 - ; Setpoint List - #DEFINE log2_title_sp_row .130 - #DEFINE log2_sp_row1 .146 - #DEFINE log2_sp_row2 1*.16+log2_sp_row1 - #DEFINE log2_sp_row3 2*.16+log2_sp_row1 - #DEFINE log2_sp_row4 3*.16+log2_sp_row1 - #DEFINE log2_sp_row5 4*.16+log2_sp_row1 +; Setpoint List +#DEFINE log2_title_sp_row .130 +#DEFINE log2_sp_row1 .146 +#DEFINE log2_sp_row2 1*.16+log2_sp_row1 +#DEFINE log2_sp_row3 2*.16+log2_sp_row1 +#DEFINE log2_sp_row4 3*.16+log2_sp_row1 +#DEFINE log2_sp_row5 4*.16+log2_sp_row1 - ; Details list - #DEFINE log2_salinity_row .55 - #DEFINE log2_salinity_column .2 - #DEFINE log2_cns_row .1*.16+log2_salinity_row - #DEFINE log2_cns_column log2_salinity_column - #DEFINE log2_avr_row .2*.16+log2_salinity_row - #DEFINE log2_avr_column log2_salinity_column - #DEFINE log2_decomodel2_row .3*.16+log2_salinity_row - #DEFINE log2_decomodel2_column log2_salinity_column - #DEFINE log2_decomodel3_row .4*.16+log2_salinity_row - #DEFINE log2_decomodel3_column log2_salinity_column - #DEFINE log2_decomodel_row .5*.16+log2_salinity_row - #DEFINE log2_decomodel_column log2_salinity_column - #DEFINE log2_firmware_row .6*.16+log2_salinity_row - #DEFINE log2_firmware_column log2_salinity_column - #DEFINE log2_battery_row .7*.16+log2_salinity_row - #DEFINE log2_battery_column log2_salinity_column - #DEFINE log2_divemode_row .8*.16+log2_salinity_row - #DEFINE log2_divemode_column log2_salinity_column - #DEFINE log2_lastdeco_row .9*.16+log2_salinity_row - #DEFINE log2_lastdeco_column log2_salinity_column +; Details list +#DEFINE log2_salinity_row .55 +#DEFINE log2_salinity_column .2 +#DEFINE log2_cns_row .1*.16+log2_salinity_row +#DEFINE log2_cns_column log2_salinity_column +#DEFINE log2_avr_row .2*.16+log2_salinity_row +#DEFINE log2_avr_column log2_salinity_column +#DEFINE log2_decomodel2_row .3*.16+log2_salinity_row +#DEFINE log2_decomodel2_column log2_salinity_column +#DEFINE log2_decomodel3_row .4*.16+log2_salinity_row +#DEFINE log2_decomodel3_column log2_salinity_column +#DEFINE log2_decomodel_row .5*.16+log2_salinity_row +#DEFINE log2_decomodel_column log2_salinity_column +#DEFINE log2_firmware_row .6*.16+log2_salinity_row +#DEFINE log2_firmware_column log2_salinity_column +#DEFINE log2_battery_row .7*.16+log2_salinity_row +#DEFINE log2_battery_column log2_salinity_column +#DEFINE log2_divemode_row .8*.16+log2_salinity_row +#DEFINE log2_divemode_column log2_salinity_column +#DEFINE log2_lastdeco_row .9*.16+log2_salinity_row +#DEFINE log2_lastdeco_column log2_salinity_column ; Air pressure - #DEFINE MBAR_row .10*.16+log2_salinity_row - #DEFINE MBAR_column log2_salinity_column +#DEFINE MBAR_row .10*.16+log2_salinity_row +#DEFINE MBAR_column log2_salinity_column ; Header coordinates - #DEFINE log_profile_version .8 - #DEFINE log_date .12 - #DEFINE log_time .15 - #DEFINE log_max_depth .17 - #DEFINE log_divetime .19 - #DEFINE log_min_temp .22 - #DEFINE log_surface_press .24 - #DEFINE log_desattime .26 - #DEFINE log_gas1 .28 - #DEFINE log_gas2 .32 - #DEFINE log_gas3 .36 - #DEFINE log_gas4 .40 - #DEFINE log_gas5 .44 - #DEFINE log_firmware .48 - #DEFINE log_battery .50 - #DEFINE log_samplingrate .52 - #DEFINE log_cns_start .53 - #DEFINE log_gf_start .55 - #DEFINE log_gf_end .56 - #DEFINE log_batt_info .59 - #DEFINE log_sp1 .60 - #DEFINE log_sp2 .62 - #DEFINE log_sp3 .64 - #DEFINE log_sp4 .66 - #DEFINE log_sp5 .68 - #DEFINE log_salinity .70 - #DEFINE log_cns_end .71 - #DEFINE log_avr_depth .73 - #DEFINE log_total_seconds .75 - #DEFINE log_gf_lo .77 - #DEFINE log_sat_mult .77 - #DEFINE log_gf_hi .78 - #DEFINE log_desat_mult .78 - #DEFINE log_decomodel .79 - #DEFINE log_total_dives .80 - #DEFINE log_divemode .82 - #DEFINE log_last_stop .243 +#DEFINE log_profile_version .8 +#DEFINE log_date .12 +#DEFINE log_time .15 +#DEFINE log_max_depth .17 +#DEFINE log_divetime .19 +#DEFINE log_min_temp .22 +#DEFINE log_surface_press .24 +#DEFINE log_desattime .26 +#DEFINE log_gas1 .28 +#DEFINE log_gas2 .32 +#DEFINE log_gas3 .36 +#DEFINE log_gas4 .40 +#DEFINE log_gas5 .44 +#DEFINE log_firmware .48 +#DEFINE log_battery .50 +#DEFINE log_samplingrate .52 +#DEFINE log_cns_start .53 +#DEFINE log_gf_start .55 +#DEFINE log_gf_end .56 +#DEFINE log_batt_info .59 +#DEFINE log_sp1 .60 +#DEFINE log_sp2 .62 +#DEFINE log_sp3 .64 +#DEFINE log_sp4 .66 +#DEFINE log_sp5 .68 +#DEFINE log_salinity .70 +#DEFINE log_cns_end .71 +#DEFINE log_avr_depth .73 +#DEFINE log_total_seconds .75 +#DEFINE log_gf_lo .77 +#DEFINE log_sat_mult .77 +#DEFINE log_gf_hi .78 +#DEFINE log_desat_mult .78 +#DEFINE log_decomodel .79 +#DEFINE log_total_dives .80 +#DEFINE log_divemode .82 +#DEFINE log_last_stop .243 -LOG_POINT_TO macro address - movlw address - movwf ext_flash_address+0 - endm + +LOG_POINT_TO macro address + movlw address + movwf ext_flash_address+0 + endm + +logbook code ;============================================================================= -logbook code +TFT_logbook_cursor: +; call speed_fastest + WIN_BOX_BLACK .0, .240-.16, logbook_list_left-.8, logbook_list_left-.1 ; top, bottom, left, right -TFT_logbook_cursor: -; call speed_fastest - WIN_BOX_BLACK .0, .240-.16, logbook_list_left-.8, logbook_list_left-.1 ;top, bottom, left, right - - WIN_LEFT logbook_list_left-.8 - WIN_FONT FT_SMALL -; bcf win_invert ; Reset invert flag + WIN_LEFT logbook_list_left-.8 + WIN_FONT FT_SMALL +; bcf win_invert ; Reset invert flag call TFT_standard_color - movff menupos,temp1 - dcfsnz temp1,F + movff menupos1,lo + dcfsnz lo,F movlw d'0' - dcfsnz temp1,F + dcfsnz lo,F movlw logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .2*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .3*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .4*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .5*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .6*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .7*logbook_row_offset - dcfsnz temp1,F + dcfsnz lo,F movlw .8*logbook_row_offset movwf win_top STRCPY_PRINT "\xB7" return - global logbook + global logbook ; entry point coming from menu_tree.asm logbook: - clrf logbook_flags - clrf CCP1CON ; stop PWM - bcf PORTC,2 ; Pull PWM out to GND - call TFT_boot -; call TFT_standard_color - clrf menupos3 ; Here: used rows on current logbook-page - clrf logbook_page_number ; Here: # of current displayed page - clrf logbook_divenumber ; # of dive in list during search - clrf divemins+0 ; Here: used as temp variables - clrf divemins+1 - clrf timeout_counter2 ; For timeout - movlw logbook_row_number - movwf menupos ; Here: stores current position on display (logbook_row_number-x) - read_int_eeprom .2 ; Get low-byte of total dives - movff EEDATA,logbook_max_dive_counter + clrf logbook_flags + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM out to GND + call TFT_boot +; call TFT_standard_color + clrf menupos3 ; Here: used rows on current logbook-page + clrf logbook_page_number ; Here: # of current displayed page + clrf logbook_divenumber ; # of dive in list during search + clrf logbook_temp + clrf logbook_temp_backup + clrf timeout_counter2 ; For timeout + movlw logbook_row_number + movwf menupos1 ; Here: stores current position on display (logbook_row_number-x) + read_int_eeprom .2 ; Get low-byte of total dives + movff EEDATA,logbook_max_dive_counter ;----------------------------------------------------------------------------- ; display dive headers backwards from read_int_eeprom .2 = lo-1 @@ -256,13 +289,13 @@ ; Stop when ; a) no dive is stored (no valid header found) ; b) current dive has no valid header (Number of stored dives < 256) -; c) when 255 dives are reached divemins+0 = 255 +; c) when 255 dives are reached logbook_temp = 255 logbook2: -; call speed_fastest - incf divemins+0,F ; increase dive counter - incf divemins+0,W ; = 0x..FF ? - bz logbook_reset ; Yes: FF --> loop. +; call speed_fastest + incf logbook_temp,F ; increase dive counter + incf logbook_temp,W ; = 0x..FF ? + bz logbook_reset ; Yes: FF --> loop. ; Set ext_flash_address:3 to TOC entry of this dive ; 1st: 200000h-200FFFh -> logbook_max_dive_counter=0 @@ -270,940 +303,903 @@ ; 3rd: 202000h-202FFFh -> logbook_max_dive_counter=2 ; 256: 2FF000h-2FFFFFh -> logbook_max_dive_counter=255 (And hi>0...) - decf logbook_max_dive_counter,F ; -1 + decf logbook_max_dive_counter,F ; -1 - clrf ext_flash_address+0 - clrf ext_flash_address+1 - movlw 0x20 - movwf ext_flash_address+2 - movlw .16 - mulwf logbook_max_dive_counter; logbook_max_dive_counter*16 = offset to 0x2000 (up:hi) - movf PRODL,W - addwf ext_flash_address+1,F - movf PRODH,W - addwfc ext_flash_address+2,F + clrf ext_flash_address+0 + clrf ext_flash_address+1 + movlw 0x20 + movwf ext_flash_address+2 + movlw .16 + mulwf logbook_max_dive_counter ; logbook_max_dive_counter*16 = offset to 0x2000 (up:hi) + movf PRODL,W + addwf ext_flash_address+1,F + movf PRODH,W + addwfc ext_flash_address+2,F ; pointer at the first 0xFA of header - call ext_flash_byte_read ; Reads one byte@ext_flash_address:3 into WREG and temp1 - movwf temp1 - movlw 0xFA - cpfseq temp1 ; 0xFA found? - bra logbook3b ; No, abort + call ext_flash_byte_read ; Reads one byte@ext_flash_address:3 into WREG and ext_flash_rw + movwf ext_flash_rw + movlw 0xFA + cpfseq ext_flash_rw ; 0xFA found? + bra logbook3b ; No, abort - incf logbook_divenumber,F ; new header found, increase logbook_divenumber - bra logbook4 ; Done with searching, display the header! + incf logbook_divenumber,F ; new header found, increase logbook_divenumber + bra logbook4 ; Done with searching, display the header! logbook3b: - btfss logbook_page_not_empty ; Was there at least one dive? - bra exit_logbook ; Not a single header was found, leave logbook. - bra logbook_display_loop2 + btfss logbook_page_not_empty ; Was there at least one dive? + bra exit_logbook ; Not a single header was found, leave logbook. + bra logbook_display_loop2 logbook_reset: - tstfsz logbook_divenumber ; Was there at least one dive? - bra logbook_reset2 - bra logbook3b ; No, Nothing to do + tstfsz logbook_divenumber ; Was there at least one dive? + bra logbook_reset2 + bra logbook3b ; No, Nothing to do logbook_reset2: - bsf all_dives_shown ; Yes - bra logbook_display_loop2 ; Continue + bsf all_dives_shown ; Yes + bra logbook_display_loop2 ; Continue logbook4: - btfsc all_dives_shown ; All dives displayed? - bra logbook_display_loop2 ; Yes, but display first page again. + btfsc all_dives_shown ; All dives displayed? + bra logbook_display_loop2 ; Yes, but display first page again. - call display_listdive ; display short header for list on current list position + call display_listdive ; display short header for list on current list position - movlw logbook_row_number - cpfseq menupos ; first dive on list (top place)? - bra logbook_display_loop1 ; no, so skip saving of address + movlw logbook_row_number + cpfseq menupos1 ; first dive on list (top place)? + bra logbook_display_loop1 ; no, so skip saving of address -; store all registered required to rebuilt the current logbookpage after the detail/profile view - movff logbook_divenumber,logbook_divenumber_temp ; # of dive in list of the current page - movff divemins+0,divemins_backup ; amount of dives drawn until now - movff logbook_max_dive_counter,logbook_max_dive_counter_temp ; backup Counter + ; store all registers required to rebuilt the current logbook page after the detail/profile view + movff logbook_divenumber,logbook_divenumber_temp ; # of dive in list of the current page + movff logbook_max_dive_counter,logbook_max_dive_counter_temp ; backup Counter + movff logbook_temp,logbook_temp_backup ; amount of dives drawn until now + logbook_display_loop1: - decfsz menupos,F ; List full? - bra logbook2 ; no, search another dive for our current logbook page + decfsz menupos1,F ; List full? + bra logbook2 ; no, search another dive for our current logbook page logbook_display_loop2: - btfss logbook_page_not_empty ; Was there one dive at all? - bra logbook ; Yes, so reload the first page + btfss logbook_page_not_empty ; Was there one dive at all? + bra logbook ; Yes, so reload the first page ; TFT_mask... WIN_LEFT logbook_list_left WIN_TOP logbook_row_offset*logbook_row_number - STRCPY_TEXT_PRINT tNextLog ; "Next Page" + STRCPY_TEXT_PRINT tNextLog ; "Next Page" WIN_LEFT logbook_list_left WIN_TOP logbook_row_offset*(logbook_row_number+.1) - STRCPY_TEXT_PRINT tExit ; "Exit" + STRCPY_TEXT_PRINT tExit ; "Exit" - movlw d'1' ; Set cursor to position 1... - btfsc return_from_profileview ; .. unless we are returning from a detail/profile view - movf logbook_menupos_temp,W ; load last cursor position again - movwf menupos ; and set menupos byte - bcf return_from_profileview ; Do this only once while the page is loaded again! + movlw d'1' ; Set cursor to position 1... + btfsc return_from_profileview ; .. unless we are returning from a detail/profile view + movf logbook_menupos_temp,W ; load last cursor position again + movwf menupos1 ; and set menupos1 byte + bcf return_from_profileview ; Do this only once while the page is loaded again! - bcf logbook_page_not_empty ; Obviously the current page is NOT empty + bcf logbook_page_not_empty ; Obviously the current page is NOT empty - movlw d'7' ; Set cursor to position 7... - btfsc keep_cursor_new_page ; ... if we came from the "new Page" line - movwf menupos ; and set menupos byte - bcf keep_cursor_new_page + movlw d'7' ; Set cursor to position 7... + btfsc keep_cursor_new_page ; ... if we came from the "new Page" line + movwf menupos1 ; and set menupos1 byte + bcf keep_cursor_new_page - call TFT_logbook_cursor ; Show the cursor + call TFT_logbook_cursor ; Show the cursor - call logbook_preloop_tasks ; Clear some flags and set to Speed_eco - call menu_processor_bottom_line ; Show bottom line + call logbook_preloop_tasks ; Clear some flags and set to Speed_eco + call menu_processor_bottom_line ; Show bottom line + logbook_loop: - btfsc switch_left ; SET/MENU? - goto next_logbook3 ; adjust cursor or create new page - btfsc switch_right ; ENTER? - bra display_profile_or_exit ; view details/profile or exit logbook + btfsc switch_left ; SET/MENU? + goto next_logbook3 ; adjust cursor or create new page + btfsc switch_right ; ENTER? + bra display_profile_or_exit ; view details/profile or exit logbook - rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second - btfsc sleepmode ; Timeout? - bra exit_logbook ; Yes - - bra logbook_loop ; Wait for something to do + rcall log_screendump_and_onesecond ; Check if we need to make a screen-shot and check for new second + btfsc sleepmode ; Timeout? + bra exit_logbook ; Yes + bra logbook_loop ; Wait for something to do display_profile_or_exit: - movlw logbook_row_number+.2 ; exit? - cpfseq menupos - bra display_profile_or_exit2 ; No, check for "Next Page" + movlw logbook_row_number+.2 ; exit? + cpfseq menupos1 + bra display_profile_or_exit2 ; No, check for "Next Page" exit_logbook: -; call TFT_DisplayOff -; call TFT_boot - goto do_main_menu2 +; call TFT_DisplayOff +; call TFT_boot + goto do_main_menu2 ; jump-back to menu_tree.asm display_profile_or_exit2: - movlw logbook_row_number+.1 ; Next page? - cpfseq menupos - bra display_profile ; No, show details/profile - goto next_logbook2 ; Next page! + movlw logbook_row_number+.1 ; Next page? + cpfseq menupos1 + bra display_profile ; No, show details/profile + goto next_logbook2 ; Next page! display_profile: - bcf is_bailout - bcf gas6_changed ; Clear event flags -; call speed_fastest - movff menupos,logbook_menupos_temp; store current cursor position - bsf return_from_profileview ; tweak search routine to exit after found + bcf is_bailout + bcf gas6_changed ; Clear event flags +; call speed_fastest + movff menupos1,logbook_menupos_temp ; store current cursor position + bsf return_from_profileview ; tweak search routine to exit after found - movf logbook_page_number,W ; Number of page - mullw logbook_row_number - movf PRODL,W - addwf menupos,W ; page*logbook_row_number+menupos= - movwf divesecs ; # of dive to show + movf logbook_page_number,W ; Number of page + mullw logbook_row_number + movf PRODL,W + addwf menupos1,W ; page * logbook_row_number + menupos1 = + movwf divenumber ; # of dive to show display_profile2: -; call speed_fastest - clrf CCP1CON ; stop PWM - bcf PORTC,2 ; Pull PWM out to GND - call TFT_boot - ;call TFT_ClearScreen ; Clear screen -; Set ext_flash pointer to "#divesecs-oldest" dive -; compute read_int_eeprom .2 - divesecs +; call speed_fastest + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM out to GND + call TFT_boot +; call TFT_ClearScreen ; Clear screen +; Set ext_flash pointer to "#divenumber-oldest" dive +; compute read_int_eeprom .2 - divenumber ; Read required header data for profile display -; look in header for pointer to begin of diveprofile (Byte 2-4) +; look in header for pointer to begin of dive profile (Byte 2-4) ; Set pointer (ext_flash_log_pointer:3) to this address, start drawing - - decf divesecs,F ;-1 + + decf divenumber,F ;-1 read_int_eeprom .2 movf EEDATA,W bcf STATUS,C - subfwb divesecs,W ; max. dives (low value) - divesecs - movwf lo ; result - incf divesecs,F ;+1 + subfwb divenumber,W ; max. dives (low value) - divenumber + movwf lo ; result + incf divenumber,F ;+1 ; Set ext_flash_address:3 to TOC entry of this dive ; 1st: 200000h-200FFFh -> lo=0 ; 2nd: 201000h-201FFFh -> lo=1 ; 3rd: 202000h-202FFFh -> lo=2 ; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...) - clrf ext_flash_address+0 - clrf ext_flash_address+1 - movlw 0x20 - movwf ext_flash_address+2 - movlw .16 - mulwf lo ; lo*16 = offset to 0x2000 (up:hi) - movf PRODL,W - addwf ext_flash_address+1,F - movf PRODH,W - addwfc ext_flash_address+2,F + clrf ext_flash_address+0 + clrf ext_flash_address+1 + movlw 0x20 + movwf ext_flash_address+2 + movlw .16 + mulwf lo ; lo*16 = offset to 0x2000 (up:hi) + movf PRODL,W + addwf ext_flash_address+1,F + movf PRODH,W + addwfc ext_flash_address+2,F ; pointer at the first 0xFA of header ; Now, show profile - LOG_POINT_TO log_samplingrate - call ext_flash_byte_read ; Read sampling rate - movff temp1,samplesecs_value ; needed later... + LOG_POINT_TO log_samplingrate + call ext_flash_byte_read ; Read sampling rate + movff ext_flash_rw,samplesecs_value ; needed later... - LOG_POINT_TO .2 - call ext_flash_byte_read_plus ; Read start address of profile - movff temp1,ext_flash_log_pointer+0 - call ext_flash_byte_read_plus ; Read start address of profile - movff temp1,ext_flash_log_pointer+1 - call ext_flash_byte_read_plus ; Read start address of profile - movff temp1,ext_flash_log_pointer+2 - + LOG_POINT_TO .2 + call ext_flash_byte_read_plus ; Read start address of profile + movff ext_flash_rw,ext_flash_log_pointer+0 + call ext_flash_byte_read_plus ; Read start address of profile + movff ext_flash_rw,ext_flash_log_pointer+1 + call ext_flash_byte_read_plus ; Read start address of profile + movff ext_flash_rw,ext_flash_log_pointer+2 - clrf logbook_sample_counter+0 - clrf logbook_sample_counter+1 ; holds amount of read samples + clrf logbook_sample_counter+0 + clrf logbook_sample_counter+1 ; holds amount of read samples - call TFT_standard_color - call logbook_show_divenumber ; Show the dive number in medium font + call TFT_standard_color + call logbook_show_divenumber ; Show the dive number in medium font - WIN_SMALL logbook_date_column, logbook_date_row - LOG_POINT_TO log_date - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+2 ; Year - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+0 ; Month - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+1 ; Day - call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 - STRCAT_PRINT "" + WIN_SMALL logbook_date_column, logbook_date_row + LOG_POINT_TO log_date + call ext_flash_byte_read_plus + movff ext_flash_rw,up ; year + call ext_flash_byte_read_plus + movff ext_flash_rw,hi ; month + call ext_flash_byte_read_plus + movff ext_flash_rw,lo ; day + call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 + STRCAT_PRINT "" + + WIN_SMALL log_divetime_value_column,logbook_date_row ; align with surrounding data + LOG_POINT_TO log_divemode + call ext_flash_byte_read_plus ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into ext_flash_rw + movff ext_flash_rw,lo + call TFT_display_decotype_surface1 ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE) -; NEW code block ## logbook look and feel - WIN_SMALL log_divetime_value_column,logbook_date_row ; align with surrounding data - LOG_POINT_TO log_divemode - call ext_flash_byte_read_plus ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1 - movff temp1,lo - call TFT_display_decotype_surface1 ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE) - - WIN_SMALL logbook_time_column, logbook_time_row - LOG_POINT_TO log_time - call ext_flash_byte_read_plus ; hour - movff temp1,lo - call ext_flash_byte_read_plus ; Minutes - movff temp1,hi - output_99x ; hour - PUTC ':' - movff hi,lo - output_99x ; minute - STRCAT_PRINT "" ; Display 1st row of details + WIN_SMALL logbook_time_column, logbook_time_row + LOG_POINT_TO log_time + call ext_flash_byte_read_plus ; hour + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; minutes + movff ext_flash_rw,hi + output_99x ; hour + PUTC ':' + movff hi,lo + output_99x ; minute + STRCAT_PRINT "" ; Display 1st row of details - LOG_POINT_TO log_profile_version - call ext_flash_byte_read_plus ; Profile version - movlw 0x24 - cpfslt temp1 ; <0x24? - bra log_skip_extra_icon ; Yes, skip - - WIN_SMALL logbook_time_column-.8, logbook_time_row - STRCPY_PRINT 0x94 ; "End of dive" icon + LOG_POINT_TO log_profile_version + call ext_flash_byte_read_plus ; Profile version + movlw 0x24 + cpfslt ext_flash_rw ; <0x24? + bra log_skip_extra_icon ; Yes, skip + + WIN_SMALL logbook_time_column-.8, logbook_time_row + STRCPY_PRINT 0x94 ; "End of dive" icon log_skip_extra_icon: - LOG_POINT_TO log_max_depth - call ext_flash_byte_read_plus ; read max depth - movff temp1,lo - call ext_flash_byte_read_plus ; read max depth - movff temp1,hi - movff lo,xA+0 ; calculate y-scale for profile display - movff hi,xA+1 - movlw profile_height_pixels ; pixel height available for profile - movwf xB+0 - clrf xB+1 - call div16x16 ; does xA/xB=xC - movff xC+0,y_scale+0 ; holds LOW byte of y-scale (mbar/pixel!) - movff xC+1,y_scale+1 ; holds HIGH byte of y-scale (mbar/pixel!) - infsnz y_scale+0,F ; increase one, because there may be a remainder - incf y_scale+1,F - - movlw LOW ((profile_height_pixels+1)*.1000) - movwf xC+0 - movlw HIGH (((profile_height_pixels+1)*.1000) & h'FFFF') - movwf xC+1 - movlw UPPER ((profile_height_pixels+1)*.1000) - movwf xC+2 - clrf xC+3 + LOG_POINT_TO log_max_depth + call ext_flash_byte_read_plus ; read max depth + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read max depth + movff ext_flash_rw,hi + movff lo,xA+0 ; calculate y-scale for profile display + movff hi,xA+1 + movlw profile_height_pixels ; pixel height available for profile + movwf xB+0 + clrf xB+1 + call div16x16 ; does xA/xB=xC + movff xC+0,y_scale+0 ; holds LOW byte of y-scale (mbar/pixel!) + movff xC+1,y_scale+1 ; holds HIGH byte of y-scale (mbar/pixel!) + infsnz y_scale+0,F ; increase one, because there may be a remainder + incf y_scale+1,F - movff lo,xB+0 ; Max. Depth in mbar - movff hi,xB+1 ; Max. Depth in mbar - call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder + movlw LOW ((profile_height_pixels+1)*.1000) + movwf xC+0 + movlw HIGH (((profile_height_pixels+1)*.1000) & h'FFFF') + movwf xC+1 + movlw UPPER ((profile_height_pixels+1)*.1000) + movwf xC+2 + clrf xC+3 - movff xC+0,x_scale+0 ; - movff xC+1,x_scale+1 ; = Pixels/10m (For scale, draw any xx rows a scale-line) + movff lo,xB+0 ; Max. Depth in mbar + movff hi,xB+1 ; Max. Depth in mbar + call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder - movf x_scale+0,W - iorwf x_scale+1,W ; x_scale:2 = Null? - bnz display_profile_offset4 ; No, continue - incf x_scale+1,F ; Yes, make x_scale+1>1 to make "display_profile2e" working + movff xC+0,x_scale+0 + movff xC+1,x_scale+1 ; = Pixels/10m (For scale, draw any xx rows a scale-line) + + movf x_scale+0,W + iorwf x_scale+1,W ; x_scale:2 = Null? + bnz display_profile_offset4 ; No, continue + incf x_scale+1,F ; Yes, make x_scale+1>1 to make "display_profile2e" working display_profile_offset4: - WIN_SMALL log_max_value_column,log_max_value_row + WIN_SMALL log_max_value_column,log_max_value_row - TSTOSS opt_units ; 0=Meters, 1=Feets - bra display_profile_offset4_metric -;display_profile_offset4_imperial: - call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet + TSTOSS opt_units ; 0=Meters, 1=Feets + bra display_profile_offset4_metric + ; display_profile_offset4_imperial: + call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet PUTC ' ' - bcf leftbind - output_16_3 ; limit to 999 and display only (0-999) - STRCAT_TEXT_PRINT tFeets - bra display_profile_offset4_common + bcf leftbind + output_16_3 ; limit to 999 and display only (0-999) + STRCAT_TEXT_PRINT tFeets + bra display_profile_offset4_common display_profile_offset4_metric: - bsf leftbind - output_16dp d'3' ; max. depth - STRCAT_TEXT_PRINT tMeters + bsf leftbind + output_16dp d'3' ; max. depth + STRCAT_TEXT_PRINT tMeters -display_profile_offset4_common: - call ext_flash_byte_read_plus ; divetime in minutes - movff temp1,lo - call ext_flash_byte_read_plus - movff temp1,hi ; divetime in minutes +display_profile_offset4_common: + call ext_flash_byte_read_plus ; divetime in minutes + movff ext_flash_rw,lo + call ext_flash_byte_read_plus + movff ext_flash_rw,hi ; divetime in minutes - movff lo,xA+0 ; calculate x-scale for profile display - movff hi,xA+1 ; calculate total diveseconds first - movlw d'60' ; 60seconds are one minute... - movwf xB+0 - clrf xB+1 - call mult16x16 ; result is in xC:2 ! + movff lo,xA+0 ; calculate x-scale for profile display + movff hi,xA+1 ; calculate total diveseconds first + movlw d'60' ; 60seconds are one minute... + movwf xB+0 + clrf xB+1 + call mult16x16 ; result is in xC:2 ! - WIN_SMALL log_divetime_value_column,log_divetime_value_row - bsf leftbind - output_16 ; divetime minutes - movlw LOW d'600' - movwf xA+0 - movlw HIGH d'600' - movwf xA+1 ; A vertical line every 600 seconds - movff samplesecs_value,xB+0 ; Copy sampling rate - clrf xB+1 - call div16x16 ; xA/xB=xC with xA as remainder - movff xC+0,average_depth_hold_total+0 - movff xC+1,average_depth_hold_total+1 - ;average_depth_hold_total:2 holds interval of samples for vertical 10min line + WIN_SMALL log_divetime_value_column,log_divetime_value_row + bsf leftbind + output_16 ; divetime minutes + movlw LOW d'600' + movwf xA+0 + movlw HIGH d'600' + movwf xA+1 ; a vertical line every 600 seconds + movff samplesecs_value,xB+0 ; Copy sampling rate + clrf xB+1 + call div16x16 ; xA/xB=xC with xA as remainder + movff xC+0,vertical_interval+0 + movff xC+1,vertical_interval+1 + ; vertical_interval:2 holds interval of samples for vertical 10min line -; Restore divetime in minutes: -; get real sample time - LOG_POINT_TO log_total_seconds - call ext_flash_byte_read_plus ; Total sample time in seconds - movff temp1,xC+0 - call ext_flash_byte_read_plus ; Total sample time in seconds - movff temp1,xC+1 + ; Restore divetime in minutes: + ; get real sample time + LOG_POINT_TO log_total_seconds + call ext_flash_byte_read_plus ; Total sample time in seconds + movff ext_flash_rw,xC+0 + call ext_flash_byte_read_plus ; Total sample time in seconds + movff ext_flash_rw,xC+1 - PUTC ':' - LOG_POINT_TO log_divetime+.2 - call ext_flash_byte_read_plus ; read divetime seconds - movff temp1,lo - movff xC+0,xA+0 ; now calculate x-scale value - movff xC+1,xA+1 - movlw profile_width_pixels ; pix width available - movwf xB+0 - clrf xB+1 - call div16x16 ; xA/xB=xC - movff xC+0,xA+0 - movff xC+1,xA+1 - movf samplesecs_value,W ; devide through sample interval! - movwf xB+0 - clrf xB+1 - call div16x16 ; xA/xB=xC - movff xC+0,profile_temp+0 ; store value (use any #xC sample, skip xC-1) into temp registers - movff xC+1,profile_temp+1 ; store value (use any #xC sample, skip xC-1) into temp registers - infsnz profile_temp+0,F ; Increase by one, there might be a remainder - incf profile_temp+1,F + PUTC ':' + LOG_POINT_TO log_divetime+.2 + call ext_flash_byte_read_plus ; read divetime seconds + movff ext_flash_rw,lo + movff xC+0,xA+0 ; now calculate x-scale value + movff xC+1,xA+1 + movlw profile_width_pixels ; pix width available + movwf xB+0 + clrf xB+1 + call div16x16 ; xA/xB=xC + movff xC+0,xA+0 + movff xC+1,xA+1 + movf samplesecs_value,W ; divide through sample interval! + movwf xB+0 + clrf xB+1 + call div16x16 ; xA/xB=xC + movff xC+0,profile_temp1+0 ; store value (use any #xC sample, skip xC-1) into temp registers + movff xC+1,profile_temp1+1 ; store value (use any #xC sample, skip xC-1) into temp registers + infsnz profile_temp1+0,F ; Increase by one, there might be a remainder + incf profile_temp1+1,F - bsf leftbind - output_99x ; divetime seconds + bsf leftbind + output_99x ; divetime seconds call TFT_standard_color - STRCAT_PRINT "" + STRCAT_PRINT "" - call ext_flash_byte_read_plus ; Read min. Temperature - movff temp1,logbook_min_tp+0 - call ext_flash_byte_read_plus ; Read min. Temperature - movff temp1,logbook_min_tp+1 + call ext_flash_byte_read_plus ; Read min. Temperature + movff ext_flash_rw,logbook_min_tp+0 + call ext_flash_byte_read_plus ; Read min. Temperature + movff ext_flash_rw,logbook_min_tp+1 - ; Set pointer to Gas 1 Type. - LOG_POINT_TO log_gas1+.3 - call ext_flash_byte_read_plus ; read Gas Type - decfsz temp1,W ; =1 (="First")? - bra logbook_find_first_gas2 ; No. - movlw .1 - movwf temp1 - bra logbook_find_first_gas_done + ; Set pointer to Gas 1 Type. + LOG_POINT_TO log_gas1+.3 + call ext_flash_byte_read_plus ; read Gas Type + decfsz ext_flash_rw,W ; =1 (="First")? + bra logbook_find_first_gas2 ; No. + movlw .1 + movwf ext_flash_rw + bra logbook_find_first_gas_done logbook_find_first_gas2: - ; Set pointer to Gas 2 Type. - LOG_POINT_TO log_gas2+.3 - call ext_flash_byte_read_plus ; read Gas Type - decfsz temp1,W ; =1 (="First")? - bra logbook_find_first_gas3 ; No. - movlw .2 - movwf temp1 - bra logbook_find_first_gas_done + ; Set pointer to Gas 2 Type. + LOG_POINT_TO log_gas2+.3 + call ext_flash_byte_read_plus ; read Gas Type + decfsz ext_flash_rw,W ; =1 (="First")? + bra logbook_find_first_gas3 ; No. + movlw .2 + movwf ext_flash_rw + bra logbook_find_first_gas_done logbook_find_first_gas3: - ; Set pointer to Gas 3 Type. - LOG_POINT_TO log_gas3+.3 - call ext_flash_byte_read_plus ; read Gas Type - decfsz temp1,W ; =1 (="First")? - bra logbook_find_first_gas4 ; No. - movlw .3 - movwf temp1 - bra logbook_find_first_gas_done + ; Set pointer to Gas 3 Type. + LOG_POINT_TO log_gas3+.3 + call ext_flash_byte_read_plus ; read Gas Type + decfsz ext_flash_rw,W ; =1 (="First")? + bra logbook_find_first_gas4 ; No. + movlw .3 + movwf ext_flash_rw + bra logbook_find_first_gas_done logbook_find_first_gas4: - ; Set pointer to Gas 4 Type. - LOG_POINT_TO log_gas4+.3 - call ext_flash_byte_read_plus ; read Gas Type - decfsz temp1,W ; =1 (="First")? - bra logbook_find_first_gas5 ; No. - movlw .4 - movwf temp1 - bra logbook_find_first_gas_done + ; Set pointer to Gas 4 Type. + LOG_POINT_TO log_gas4+.3 + call ext_flash_byte_read_plus ; read Gas Type + decfsz ext_flash_rw,W ; =1 (="First")? + bra logbook_find_first_gas5 ; No. + movlw .4 + movwf ext_flash_rw + bra logbook_find_first_gas_done logbook_find_first_gas5: - movlw .5 ; Must be Gas5 - movwf temp1 + movlw .5 ; Must be Gas5 + movwf ext_flash_rw logbook_find_first_gas_done: - movff temp1,average_depth_hold_total+3; keep copy to restore color - rcall profile_display_color ; Back to normal profile color. - ; Pointer is now trashed! + movff ext_flash_rw,backup_color1 ; keep copy to restore color + movff ext_flash_rw,WREG ; copy gas number to WREG for color coding + call TFT_color_code_gas ; Back to normal profile color. + ; Pointer is now trashed! -; Point to profile portion of this dive - movff ext_flash_log_pointer+0,ext_flash_address+0 - movff ext_flash_log_pointer+1,ext_flash_address+1 - movff ext_flash_log_pointer+2,ext_flash_address+2 + ; Point to profile portion of this dive + movff ext_flash_log_pointer+0,ext_flash_address+0 + movff ext_flash_log_pointer+1,ext_flash_address+1 + movff ext_flash_log_pointer+2,ext_flash_address+2 - incf_ext_flash_address_0x20 d'2' ; Skip 0xFA 0xFA - call ext_flash_byte_read_plus_0x20 ; Read low byte of total dives into temp1 (at the time the dive was made) + incf_ext_flash_address_0x20 d'2' ; Skip 0xFA 0xFA + call ext_flash_byte_read_plus_0x20 ; Read low byte of total dives into ext_flash_rw (at the time the dive was made) ; Load total number of dives (low byte only) read_int_eeprom .2 - incf EEDATA,W ; +1 - bsf STATUS,C ; Set borrow - subfwb divesecs,W ; total dives - dive# to show - 1 = low byte of total dives (at the time the dive was made) - cpfseq temp1 ; # of dive in logbook (Must be equal with low byte in short header) - bra display_profile_no_profile ; Not equal, no profile for this dive available! + incf EEDATA,W ; +1 + bsf STATUS,C ; Set borrow + subfwb divenumber,W ; total dives - dive# to show - 1 = low byte of total dives (at the time the dive was made) + cpfseq ext_flash_rw ; # of dive in logbook (Must be equal with low byte in short header) + bra display_profile_no_profile ; Not equal, no profile for this dive available! ; Skip rest of short header: 3 Bytes ; Skip length of profile data: 3 Bytes - ; Skip sampling rate in profile section: 1Byte - ; Skip number of divisors: 1Byte - incf_ext_flash_address_0x20 d'8' + ; Skip sampling rate in profile section: 1Byte + ; Skip number of divisors: 1Byte + incf_ext_flash_address_0x20 d'8' ; Divisor temp - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movf temp1,W - movwf divisor_temperature ; Store divisor - movwf count_temperature ; Store to tp° counter too. + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movf ext_flash_rw,W + movwf divisor_temperature ; Store divisor + movwf count_temperature ; Store to tp° counter too. ; Divisor Deco - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movf temp1,W - movwf divisor_deco ; Store divisor - movwf count_deco ; Store as temp, too + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movf ext_flash_rw,W + movwf divisor_deco ; Store divisor + movwf count_deco ; Store as temp, too ; Divisor GF - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movff temp1,divisor_gf ; Store divisor + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movff ext_flash_rw,divisor_gf ; Store divisor ; Divisor ppO2 Sensors - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movff temp1,divisor_ppo2_sensors ; Store divisor + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movff ext_flash_rw,divisor_ppo2_sensors ; Store divisor ; Divisor decoplan - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movff temp1,divisor_decoplan ; Store divisor + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movff ext_flash_rw,divisor_decoplan ; Store divisor ; Divisor CNS - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movff temp1,divisor_cns ; Store divisor + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movff ext_flash_rw,divisor_cns ; Store divisor ; Divisor Tank data - incf_ext_flash_address_0x20 d'2' -; call ext_flash_byte_read_plus_0x20 ; Read information type -; call ext_flash_byte_read_plus_0x20 ; Read information Length - call ext_flash_byte_read_plus_0x20 ; Read information Divisor - movff temp1,divisor_tank ; Store divisor + incf_ext_flash_address_0x20 d'2' +; call ext_flash_byte_read_plus_0x20 ; Read information type +; call ext_flash_byte_read_plus_0x20 ; Read information Length + call ext_flash_byte_read_plus_0x20 ; Read information Divisor + movff ext_flash_rw,divisor_tank ; Store divisor ; Start Profile display - movlw color_deepblue - call TFT_set_color ; Make this configurable? - ; Draw a frame around profile area - WIN_FRAME_COLOR16 profile_top-1,profile_top+profile_height_pixels+1,profile_left-1,profile_left+profile_width_pixels+1 + movlw color_deepblue + call TFT_set_color ; Make this configurable? + ; Draw a frame around profile area + WIN_FRAME_COLOR16 profile_top-1,profile_top+profile_height_pixels+1,profile_left-1,profile_left+profile_width_pixels+1 - movlw profile_top - movwf win_top - movlw profile_left - movwf win_leftx2 ; Left border (0-159) - movlw d'1' - movwf win_height - movlw profile_width_pixels+.1 - movwf win_width+0 ; Right border (0-159) - clrf win_width+1 - bra display_profile2f ; No 0m line + movlw profile_top + movwf win_top + movlw profile_left + movwf win_leftx2 ; Left border (0-159) + movlw d'1' + movwf win_height + movlw profile_width_pixels+.1 + movwf win_width+0 ; Right border (0-159) + clrf win_width+1 + bra display_profile2f ; No 0m line display_profile2e: - call TFT_box ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 + call TFT_box ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 display_profile2f: - movf win_top,W ; Get row - addwf x_scale+0,W ; Add line interval distance to win_top - tstfsz x_scale+1 ; >255? - movlw d'255' ; Yes, make win_top>239 -> Abort here - btfsc STATUS,C ; A Cary from the addwf above? - movlw d'255' ; Yes, make win_top>239 -> Abort here - movwf win_top ; Result in win_top again - movlw profile_top+profile_height_pixels+.1 ; Limit - cpfsgt win_top ; >239? - bra display_profile2e ; No, draw another line + movf win_top,W ; Get row + addwf x_scale+0,W ; Add line interval distance to win_top + tstfsz x_scale+1 ; >255? + movlw d'255' ; Yes, make win_top>239 -> Abort here + btfsc STATUS,C ; A Cary from the addwf above? + movlw d'255' ; Yes, make win_top>239 -> Abort here + movwf win_top ; Result in win_top again + movlw profile_top+profile_height_pixels+.1 ; Limit + cpfsgt win_top ; >239? + bra display_profile2e ; No, draw another line - clrf timeout_counter2 ; here: used as counter for depth readings - movlw profile_width_pixels+profile_left-.1 - movwf ignore_digits ; here: used as counter for x-pixels - bcf end_of_profile ; clear flag + clrf gaslist_gas ; here: used as counter for depth readings + movlw profile_width_pixels+profile_left-.1 + movwf ignore_digits ; here: used as counter for x-pixels + bcf end_of_profile ; clear flag - movlw profile_left+.1 - movwf logbook_pixel_x_pos ; here: used as colum x2 (Start at Colum 5) + movlw profile_left+.1 + movwf logbook_pixel_x_pos ; here: used as colum x2 (Start at Colum 5) - movlw profile_top+.1 ; Zero-m row - movwf apnoe_mins ; here: used for fill between rows - movwf logbook_last_tp ; Initialise for Tp° curve too. + movlw profile_top+.1 ; Zero-m row + movwf fill_between_rows + movwf logbook_last_tp ; Initialize for Tp° curve too. + + movlw LOW(-.100) ; Initialize max tp° to -10.0 °C. + movwf logbook_max_tp+0 + movlw HIGH 0xFFFF & (-.100) + movwf logbook_max_tp+1 - movlw LOW(-.100) ; Initialize max tp° to -10.0 °C. - movwf logbook_max_tp+0 - movlw HIGH 0xFFFF & (-.100) - movwf logbook_max_tp+1 - - setf logbook_cur_tp+0 ; Initialize Tp°, before the first recorded point. - setf logbook_cur_tp+1 - clrf logbook_last_tp ; Also reset previous Y for Tp° - clrf logbook_ceiling ; Ceiling = 0, correct value for no ceiling. - movlw profile_top+.1 - movwf logbook_min_temp_pos ; Initialize for displaying the lowest temperature - movlw profile_top+profile_height_pixels - movwf logbook_max_temp_pos ; Initialize for displaying the highest temperature + setf logbook_cur_tp+0 ; Initialize Tp°, before the first recorded point. + setf logbook_cur_tp+1 + clrf logbook_last_tp ; Also reset previous Y for Tp° + clrf logbook_ceiling ; Ceiling = 0, correct value for no ceiling. + movlw profile_top+.1 + movwf logbook_min_temp_pos ; Initialize for displaying the lowest temperature + movlw profile_top+profile_height_pixels + movwf logbook_max_temp_pos ; Initialize for displaying the highest temperature - movlw profile_left - movwf win_leftx2 - movlw profile_top - movwf win_top - movlw profile_height_pixels - movwf win_height - movlw LOW (profile_width_pixels*.2) - movwf win_width+0 - movlw HIGH (profile_width_pixels*.2) - movwf win_width+1 - call TFT_box_write ; open box for d1 + movlw profile_left + movwf win_leftx2 + movlw profile_top + movwf win_top + movlw profile_height_pixels + movwf win_height + movlw LOW (profile_width_pixels*.2) + movwf win_width+0 + movlw HIGH (profile_width_pixels*.2) + movwf win_width+1 + call TFT_box_write ; open box for d1 -; INIT_PIXEL_WRITE logbook_pixel_x_pos ; pixel x2 (Also sets standard Color!) +; INIT_PIXEL_WRITE logbook_pixel_x_pos ; pixel x2 (also sets standard color!) profile_display_loop: ; Init pixel write - movf logbook_pixel_x_pos,W - mullw 2 - call pixel_write_col320 - - movff profile_temp+0,profile_temp2+0 - movff profile_temp+1,profile_temp2+1 ; 16Bit x-scaler - incf profile_temp2+1,F - tstfsz profile_temp2+0 ; Must not be Zero - bra profile_display_loop2 ; Not Zero! - incf profile_temp2+0,F ; Zero, Increase! + movf logbook_pixel_x_pos,W + mullw 2 + call pixel_write_col320 + + movff profile_temp1+0,profile_temp2+0 + movff profile_temp1+1,profile_temp2+1 ; 16Bit x-scaler + incf profile_temp2+1,F + tstfsz profile_temp2+0 ; Must not be Zero + bra profile_display_loop2 ; Not Zero! + incf profile_temp2+0,F ; Zero, Increase! profile_display_loop2: - rcall profile_view_get_depth ; reads depth, temp and profile data + rcall profile_view_get_depth ; reads depth, temp and profile data - btfsc end_of_profile ; end-of profile reached? - bra profile_display_loop_done ; Yes, skip all remaining pixels + btfsc end_of_profile ; end-of profile reached? + bra profile_display_loop_done ; Yes, skip all remaining pixels - ;---- Draw Ceiling curve, if any --------------------------------------------- - movf divisor_deco,W - bz profile_display_skip_deco + ;---- Draw Ceiling curve, if any --------------------------------------------- + movf divisor_deco,W + bz profile_display_skip_deco - movf logbook_ceiling,W ; Any deco ceiling ? - bz profile_display_skip_deco + movf logbook_ceiling,W ; Any deco ceiling ? + bz profile_display_skip_deco - mullw .100 ; Yes: convert to mbar - movff PRODL,sub_a+0 - movff PRODH,sub_a+1 - movff logbook_cur_depth+0,sub_b+0 ; Compare with UNSIGNED current depth (16bits) - movff logbook_cur_depth+1,sub_b+1 - call subU16 ; set (or not) neg_flag + mullw .100 ; Yes: convert to mbar + movff PRODL,sub_a+0 + movff PRODH,sub_a+1 + movff logbook_cur_depth+0,sub_b+0 ; Compare with UNSIGNED current depth (16bits) + movff logbook_cur_depth+1,sub_b+1 + call subU16 ; set (or not) neg_flag - movlw color_dark_green ; Dark green if Ok, - btfss neg_flag - movlw color_dark_red ; Or dark red if ceiling overflown. - call TFT_set_color - - movff PRODL,xA+0 - movff PRODH,xA+1 - movff y_scale+0,xB+0 ; devide pressure in mbar/quant for row offsett - movff y_scale+1,xB+1 - call div16x16 ; xA/xB=xC + movlw color_dark_green ; Dark green if Ok, + btfss neg_flag + movlw color_dark_red ; Or dark red if ceiling overflown. + call TFT_set_color - movlw profile_top+.1 ; Starts right after the top line. - movwf win_top - movff logbook_pixel_x_pos,win_leftx2 ; Left border (0-159) - movff xC+0,win_height - call half_vertical_line ; Inputs: win_top, win_leftx2, win_height, win_color1, win_color2 + movff PRODL,xA+0 + movff PRODH,xA+1 + movff y_scale+0,xB+0 ; divide pressure in mbar/quant for row offset + movff y_scale+1,xB+1 + call div16x16 ; xA/xB=xC + + movlw profile_top+.1 ; Starts right after the top line. + movwf win_top + movff logbook_pixel_x_pos,win_leftx2 ; Left border (0-159) + movff xC+0,win_height + call half_vertical_line ; Inputs: win_top, win_leftx2, win_height, win_color1, win_color2 profile_display_skip_deco: - ;---- Draw Tp° curve, if any --------------------------------------------- - movf divisor_temperature,W - bz profile_display_skip_temp + ;---- Draw Tp° curve, if any --------------------------------------------- + movf divisor_temperature,W + bz profile_display_skip_temp - movf logbook_cur_tp+0,W ; Did we had already a valid Tp°C record ? - andwf logbook_cur_tp+1,W - incf WREG - bz profile_display_skip_temp ; No: just skip drawing. + movf logbook_cur_tp+0,W ; Did we had already a valid Tp°C record ? + andwf logbook_cur_tp+1,W + incf WREG + bz profile_display_skip_temp ; No: just skip drawing. - movlw LOW(((profile_height_pixels-.10)*.256)/.370) ; fixed tp° scale: (-2 .. +35°C * scale256 )/153pix - movwf xB+0 - movlw HIGH(((profile_height_pixels-.10)*.256)/.370) - movwf xB+1 + movlw LOW (((profile_height_pixels-.10)*.256)/.370) ; fixed tp° scale: (-2 .. +35°C * scale256 )/153pix + movwf xB+0 + movlw HIGH (((profile_height_pixels-.10)*.256)/.370) + movwf xB+1 - movf logbook_cur_tp+0,W ; Current Tp° - (-2.0°C) == Tp° + 20. - addlw LOW(.20) ; Low byte. - movwf xA+0 - movf logbook_cur_tp+1,W - btfsc STATUS,C ; Propagate carry, if any - incf WREG - movwf xA+1 - call mult16x16 ; xA*xB=xC + movf logbook_cur_tp+0,W ; Current Tp° - (-2.0°C) == Tp° + 20. + addlw LOW(.20) ; Low byte. + movwf xA+0 + movf logbook_cur_tp+1,W + btfsc STATUS,C ; Propagate carry, if any + incf WREG + movwf xA+1 + call mult16x16 ; xA*xB=xC - ; scale: divide by 256, ie. take just high byte. - movf xC+1,W - sublw profile_top+profile_height_pixels-.10 ; Upside-down: Y = .75 + (.153 - result) - movwf xC+0 + ; scale: divide by 256, ie. take just high byte. + movf xC+1,W + sublw profile_top+profile_height_pixels-.10 ; Upside-down: Y = .75 + (.153 - result) + movwf xC+0 ; Check limits - movlw profile_top+.1 - movwf xC+1 - cpfsgt xC+0 - movff xC+1,xC+0 + movlw profile_top+.1 + movwf xC+1 + cpfsgt xC+0 + movff xC+1,xC+0 - movlw color_orange - call TFT_set_color + movlw color_orange + call TFT_set_color - movf logbook_last_tp,W ; do we have a valid previous value ? - bz profile_display_temp_1 ; No: skip the vertical line. - movwf xC+1 - call profile_display_fill ; In this column between this row (xC+0) and the last row (xC+1) + movf logbook_last_tp,W ; do we have a valid previous value ? + bz profile_display_temp_1 ; No: skip the vertical line. + movwf xC+1 + call profile_display_fill ; In this column between this row (xC+0) and the last row (xC+1) profile_display_temp_1: - movf xC+0,W ; current row - cpfsgt logbook_min_temp_pos ; check limit - movwf logbook_min_temp_pos ; lowest row in the temp graph - cpfslt logbook_max_temp_pos ; check limit - movwf logbook_max_temp_pos ; lowest row in the temp graph + movf xC+0,W ; current row + cpfsgt logbook_min_temp_pos ; check limit + movwf logbook_min_temp_pos ; lowest row in the temp graph + cpfslt logbook_max_temp_pos ; check limit + movwf logbook_max_temp_pos ; highest row in the temp graph - movff xC+0,logbook_last_tp - PIXEL_WRITE logbook_pixel_x_pos,xC+0 ; Set col(0..159) x row (0..239), put a current color pixel. + movff xC+0,logbook_last_tp + PIXEL_WRITE logbook_pixel_x_pos,xC+0 ; Set col(0..159) x row (0..239), put a current color pixel. profile_display_skip_temp: - ;---- Draw depth curve --------------------------------------------------- - movff y_scale+0,xB+0 ; devide pressure in mbar/quant for row offsett - movff y_scale+1,xB+1 - movff logbook_cur_depth+0,xA+0 - movff logbook_cur_depth+1,xA+1 - call div16x16 ; xA/xB=xC - movlw profile_top+.1 - addwf xC+0,F ; add 75 pixel offset to result - - btfsc STATUS,C ; Ignore potential profile errors - movff apnoe_mins,xC+0 + ;---- Draw depth curve --------------------------------------------------- + movff y_scale+0,xB+0 ; divide pressure in mbar/quant for row offset + movff y_scale+1,xB+1 + movff logbook_cur_depth+0,xA+0 + movff logbook_cur_depth+1,xA+1 + call div16x16 ; xA/xB=xC + movlw profile_top+.1 + addwf xC+0,F ; add 75 pixel offset to result + + btfsc STATUS,C ; Ignore potential profile errors + movff fill_between_rows,xC+0 - rcall profile_display_color ; Back to normal profile color. + movff backup_color1,WREG ; copy gas number to WREG for color-coding + call TFT_color_code_gas ; Back to normal profile color. - movff apnoe_mins,xC+1 - call profile_display_fill ; In this column between this row (xC+0) and the last row (xC+1) - movff xC+0,apnoe_mins ; Store last row for fill routine + movff fill_between_rows,xC+1 + call profile_display_fill ; In this column between this row (xC+0) and the last row (xC+1) + movff xC+0,fill_between_rows ; Store last row for fill routine - PIXEL_WRITE logbook_pixel_x_pos,xC+0 ; Set col(0..159) x row (0..239), put a std color pixel. - incf logbook_pixel_x_pos,F ; Next column + PIXEL_WRITE logbook_pixel_x_pos,xC+0 ; Set col(0..159) x row (0..239), put a std color pixel. + incf logbook_pixel_x_pos,F ; Next column - ;---- Draw Marker square , if any ---------------------------------------- - btfss log_marker_found ; Any marker to draw? - bra profile_display_skip_marker ; No + ;---- Draw Marker square , if any ---------------------------------------- + btfss log_marker_found ; Any marker to draw? + bra profile_display_skip_marker ; No - ; tiny "m" - incf apnoe_mins,W ; increase row (Y) - movwf win_top - ; limit win_top to 220 - movlw .220 - cpfslt win_top - movwf win_top - decf logbook_pixel_x_pos,W ; decrease column (X) - movwf win_leftx2 - ; limit win_leftx2 to 151 - movlw .151 - cpfslt win_leftx2 - movwf win_leftx2 + ; tiny "m" + incf fill_between_rows,W ; increase row (Y) + movwf win_top + ; limit win_top to 220 + movlw .220 + cpfslt win_top + movwf win_top + decf logbook_pixel_x_pos,W ; decrease column (X) + movwf win_leftx2 + ; limit win_leftx2 to 151 + movlw .151 + cpfslt win_leftx2 + movwf win_leftx2 - movlw color_orange - call TFT_set_color - WIN_FONT FT_TINY - lfsr FSR2,buffer - STRCPY_PRINT "m" - bcf log_marker_found ; Clear flag - - movlw profile_left - movwf win_leftx2 - movlw profile_top - movwf win_top - movlw profile_height_pixels - movwf win_height - movlw LOW (profile_width_pixels*.2) - movwf win_width+0 - movlw HIGH (profile_width_pixels*.2) - movwf win_width+1 - call TFT_box_write ; re-open box for d1 + movlw color_orange + call TFT_set_color + WIN_FONT FT_TINY + lfsr FSR2,buffer + STRCPY_PRINT "m" + bcf log_marker_found ; Clear flag + + movlw profile_left + movwf win_leftx2 + movlw profile_top + movwf win_top + movlw profile_height_pixels + movwf win_height + movlw LOW (profile_width_pixels*.2) + movwf win_width+0 + movlw HIGH (profile_width_pixels*.2) + movwf win_width+1 + call TFT_box_write ; re-open box for d1 profile_display_skip_marker: - ;---- Draw CNS curve, if any --------------------------------------------- - movf divisor_cns,W - bz profile_display_skip_cns - ; - ; TODO HERE - ; + ;---- Draw CNS curve, if any --------------------------------------------- + movf divisor_cns,W + bz profile_display_skip_cns + ; + ; TODO HERE + ; profile_display_skip_cns: - ;---- Draw GF curve, if any ---------------------------------------------- - movf divisor_gf,W - bz profile_display_skip_gf - ; - ; TODO HERE - ; + ;---- Draw GF curve, if any ---------------------------------------------- + movf divisor_gf,W + bz profile_display_skip_gf + ; + ; TODO HERE + ; profile_display_skip_gf: - ;---- All curves done. - -profile_display_skip_loop1: ; skips readings! - dcfsnz profile_temp2+0,F - bra profile_display_loop3 ; check 16bit.... + ;---- All curves done. + +profile_display_skip_loop1: ; skips readings! + dcfsnz profile_temp2+0,F + bra profile_display_loop3 ; check 16bit.... - rcall profile_view_get_depth ; reads depth, temp and profile data + rcall profile_view_get_depth ; reads depth, temp and profile data - btfsc end_of_profile ; end-of profile reached? - bra profile_display_loop_done ; Yes, skip all remaining pixels + btfsc end_of_profile ; end-of profile reached? + bra profile_display_loop_done ; Yes, skip all remaining pixels - bra profile_display_skip_loop1 + bra profile_display_skip_loop1 profile_display_loop3: - decfsz profile_temp2+1,F ; 16 bit x-scaler test - bra profile_display_skip_loop1 ; skips readings! + decfsz profile_temp2+1,F ; 16 bit x-scaler test + bra profile_display_skip_loop1 ; skips readings! - decfsz ignore_digits,F ; counts drawn x-pixels to zero - bra profile_display_loop ; Not ready yet -; Done. + decfsz ignore_digits,F ; counts drawn x-pixels to zero + bra profile_display_loop ; Not ready yet + ; Done. -display_profile_no_profile: ; No profile available for this dive! +display_profile_no_profile: ; No profile available for this dive! profile_display_loop_done: - btfss is_bailout ; Bailout during the dive? - bra profile_display_loop_done_nobail ; No - ; Yes, show "Bailout" - movlw color_pink - call TFT_set_color - WIN_TINY logbook_bailout_column,logbook_bailout_row - STRCPY_TEXT_PRINT tDiveBailout ; Bailout + btfss is_bailout ; Bailout during the dive? + bra profile_display_loop_done_nobail ; No + ; Yes, show "Bailout" + movlw color_pink + call TFT_set_color + WIN_TINY logbook_bailout_column,logbook_bailout_row + STRCPY_TEXT_PRINT tDiveBailout ; Bailout profile_display_loop_done_nobail: - btfss gas6_changed ; Gas6 - bra profile_display_loop_done_nogas6 ; No - ; Yes, show "Gas 6!" - movlw color_pink - call TFT_set_color - WIN_TINY logbook_bailout_column,logbook_bailout_row-.15 - STRCPY_TEXT tGas ; Gas - STRCAT_PRINT " 6!" + btfss gas6_changed ; Gas6 + bra profile_display_loop_done_nogas6 ; No + ; Yes, show "Gas 6!" + movlw color_pink + call TFT_set_color + WIN_TINY logbook_bailout_column,logbook_bailout_row-.15 + STRCPY_TEXT tGas ; Gas + STRCAT_PRINT " 6!" profile_display_loop_done_nogas6: - decf divesecs,F ;-1 + decf divenumber,F ;-1 read_int_eeprom .2 - movf EEDATA,W - bcf STATUS,C - subfwb divesecs,W ; max. dives (low value) - divesecs - movwf lo ; result - incf divesecs,F ;+1 + movf EEDATA,W + bcf STATUS,C + subfwb divenumber,W ; max. dives (low value) - divenumber + movwf lo ; result + incf divenumber,F ;+1 ; Set ext_flash_address:3 to TOC entry of this dive ; 1st: 200000h-200FFFh -> lo=0 ; 2nd: 201000h-201FFFh -> lo=1 ; 3rd: 202000h-202FFFh -> lo=2 ; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...) - clrf ext_flash_address+0 - clrf ext_flash_address+1 - movlw 0x20 - movwf ext_flash_address+2 - movlw .16 - mulwf lo ; lo*16 = offset to 0x2000 (up:hi) - movf PRODL,W - addwf ext_flash_address+1,F - movf PRODH,W - addwfc ext_flash_address+2,F + clrf ext_flash_address+0 + clrf ext_flash_address+1 + movlw 0x20 + movwf ext_flash_address+2 + movlw .16 + mulwf lo ; lo*16 = offset to 0x2000 (up:hi) + movf PRODL,W + addwf ext_flash_address+1,F + movf PRODH,W + addwfc ext_flash_address+2,F ; pointer at the first 0xFA of header - movff logbook_min_temp_pos,win_top ; Y position at lowest temperature - movff logbook_pixel_x_pos,win_leftx2 - movlw .130 - cpfslt win_leftx2 ; limit left border to 130 - movwf win_leftx2 - WIN_FONT FT_TINY - movlw color_orange ; Use same color as tp° curve - call TFT_set_color + movff logbook_min_temp_pos,win_top ; Y position at lowest temperature + movff logbook_pixel_x_pos,win_leftx2 + movlw .130 + cpfslt win_leftx2 ; limit left border to 130 + movwf win_leftx2 + WIN_FONT FT_TINY + movlw color_orange ; Use same color as tp° curve + call TFT_set_color - movff logbook_min_tp+0,lo - movff logbook_min_tp+1,hi - lfsr FSR2,buffer + movff logbook_min_tp+0,lo + movff logbook_min_tp+1,hi + lfsr FSR2,buffer - TSTOSS opt_units ; 0=°C, 1=°F + TSTOSS opt_units ; 0=°C, 1=°F bra logbook_show_temp_metric ;logbook_show_temp_imperial: - call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required - call convert_celsius_to_fahrenheit ; convert value in lo:hi from celsius to fahrenheit - lfsr FSR2,buffer ; Overwrite "-" - bsf ignore_digit5 ; Full degrees only + call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required + call convert_celsius_to_fahrenheit ; convert value in lo:hi from Celsius to Fahrenheit + lfsr FSR2,buffer ; Overwrite "-" + bsf ignore_digit5 ; Full degrees only output_16 - STRCAT_TEXT_PRINT tLogTunitF - ; Now, the max. temperature - movlw .15 - subwf logbook_max_temp_pos,W - movff WREG,win_top ; Y position at max temperature - movff logbook_max_tp+0,lo - movff logbook_max_tp+1,hi - lfsr FSR2,buffer - call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required - call convert_celsius_to_fahrenheit ; convert value in lo:hi from celsius to fahrenheit + STRCAT_TEXT_PRINT tLogTunitF + ; Now, the max. temperature + movlw .15 + subwf logbook_max_temp_pos,W + movff WREG,win_top ; Y position at max temperature + movff logbook_max_tp+0,lo + movff logbook_max_tp+1,hi + lfsr FSR2,buffer + call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required + call convert_celsius_to_fahrenheit ; convert value in lo:hi from Celsius to Fahrenheit output_16 bcf ignore_digit5 - STRCAT_TEXT_PRINT tLogTunitF + STRCAT_TEXT_PRINT tLogTunitF bra logbook_show_temp_common logbook_show_temp_metric: - call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required + call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind - output_16dp d'2' ; temperature - STRCAT_TEXT_PRINT tLogTunitC - ; Now, the max. temperature - movlw .15 - subwf logbook_max_temp_pos,W - movwf win_top ; Y position at max temperature - movff logbook_max_tp+0,lo - movff logbook_max_tp+1,hi - lfsr FSR2,buffer - call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required + output_16dp d'2' ; temperature + STRCAT_TEXT_PRINT tLogTunitC + ; Now, the max. temperature + movlw .15 + subwf logbook_max_temp_pos,W + movwf win_top ; Y position at max temperature + movff logbook_max_tp+0,lo + movff logbook_max_tp+1,hi + lfsr FSR2,buffer + call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required movlw d'3' movwf ignore_digits bsf leftbind - output_16dp d'2' ; temperature - STRCAT_TEXT_PRINT tLogTunitC + output_16dp d'2' ; temperature + STRCAT_TEXT_PRINT tLogTunitC logbook_show_temp_common: bcf leftbind - call TFT_standard_color + call TFT_standard_color ; Get pointer to Gaslist - LOG_POINT_TO log_gas1 - - movlw color_white ; Color for Gas 1 - call TFT_set_color ; Set Color... - bsf leftbind - WIN_TINY log_gas_column1, log_gas_row - rcall log_show_gas_common + LOG_POINT_TO log_gas1 + bsf log_show_gas_short ; do the short version of log_show_gas + bsf leftbind - movlw color_green ; Color for Gas 2 - call TFT_set_color ; Set Color... - WIN_TINY log_gas_column2, log_gas_row - rcall log_show_gas_common + WIN_TINY log_gas_column1, log_gas_row + movlw .1 ; Color for Gas 1 + call log_show_gas - movlw color_red ; Color for Gas 3 - call TFT_set_color ; Set Color... - WIN_TINY log_gas_column3, log_gas_row - rcall log_show_gas_common - - movlw color_yellow ; Color for Gas 4 - call TFT_set_color ; Set Color... - WIN_TINY log_gas_column4, log_gas_row - rcall log_show_gas_common + WIN_TINY log_gas_column2, log_gas_row + movlw .2 ; Color for Gas 2 + call log_show_gas - movlw color_cyan ; Color for Gas 5 - call TFT_set_color ; Set Color... - WIN_TINY log_gas_column5, log_gas_row - rcall log_show_gas_common + WIN_TINY log_gas_column3, log_gas_row + movlw .3 ; Color for Gas 3 + call log_show_gas - rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco -display_profile_loop: - ; REPLACE ## logbook look and feel - ; btfsc switch_left ; SET/MENU? - ; BY - btfsc switch_right - bra logbook_page2 ; Show more information - ; REPLACE ## logbook look and feel - ; btfsc switch_right ; ENTER? - ; BY - btfsc switch_left - bra exit_profileview ; back to list + WIN_TINY log_gas_column4, log_gas_row + movlw .4 ; Color for Gas 4 + call log_show_gas - rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second - btfsc sleepmode ; Timeout? - bra exit_profileview ; back to list - bra display_profile_loop ; wait for something to do + WIN_TINY log_gas_column5, log_gas_row + movlw .5 ; Color for Gas 5 + call log_show_gas + + bcf leftbind - global log_screendump_and_onesecond -log_screendump_and_onesecond: ; Check if we need to make a screenshot and check for new second - btfsc onesecupdate - call timeout_surfmode ; Timeout - btfsc onesecupdate - call set_dive_modes ; Check, if divemode must be entered - bcf onesecupdate ; one second update - btfsc divemode - goto restart ; Enter Divemode if required + rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco +display_profile_loop: + btfsc switch_right + bra logbook_page2 ; Show more information + btfsc switch_left + bra exit_profileview ; back to list - btfsc enable_screen_dumps ; =1: Ignore vin_usb, wait for "l" command (Screen dump) - bra log_screendump_and_onesecond2 - btfsc vusb_in ; USB plugged in? - call comm_mode ; Start COMM mode - return -log_screendump_and_onesecond2: - btfss vusb_in ; USB (still) plugged in? - bcf enable_screen_dumps ; No, clear flag - call rs232_get_byte - btfsc rs232_recieve_overflow - return - movlw "l" - cpfseq RCREG1 - return - goto TFT_dump_screen ; Dump the screen contents and return + rcall log_screendump_and_onesecond ; Check if we need to make a screen-shot and check for new second + btfsc sleepmode ; Timeout? + bra exit_profileview ; back to list + bra display_profile_loop ; wait for something to do -log_show_gas_common: - extern customview_show_mix - lfsr FSR2,buffer - call ext_flash_byte_read_plus ; Gas2 current O2 - movff temp1,lo - call ext_flash_byte_read_plus ; Gas2 current He - movff temp1,hi - call customview_show_mix ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 - STRCAT_PRINT "" - call ext_flash_byte_read_plus ; Gas2 change depth - goto ext_flash_byte_read_plus ; Gas2 Type and return + global log_screendump_and_onesecond +log_screendump_and_onesecond: ; Check if we need to make a screen-shot and check for new second + btfsc onesecupdate + call timeout_surfmode ; Timeout + btfsc onesecupdate + call set_dive_modes ; Check, if divemode must be entered + bcf onesecupdate ; one second update + btfsc divemode + goto restart ; Enter divemode if required -;============================================================================= -profile_display_color: - movff average_depth_hold_total+3,active_gas ; Restore gas color. - movlw color_white ; Default color - dcfsnz active_gas,F - movlw color_white ; Color for Gas 1 - dcfsnz active_gas,F - movlw color_green ; Color for Gas 2 - dcfsnz active_gas,F - movlw color_red ; Color for Gas 3 - dcfsnz active_gas,F - movlw color_yellow ; Color for Gas 4 - dcfsnz active_gas,F - movlw color_cyan ; Color for Gas 5 - dcfsnz active_gas,F - movlw color_pink ; Color for Gas 6 - goto TFT_set_color ; Set Color... + btfsc enable_screen_dumps ; =1: Ignore vin_usb, wait for "l" command (Screen dump) + bra log_screendump_and_onesecond2 + btfsc vusb_in ; USB plugged in? + call comm_mode ; Start COMM mode + return +log_screendump_and_onesecond2: + btfss vusb_in ; USB (still) plugged in? + bcf enable_screen_dumps ; No, clear flag + call rs232_get_byte + btfsc rs232_receive_overflow + return + movlw "l" + cpfseq RCREG1 + return + goto TFT_dump_screen ; Dump the screen contents and return ;============================================================================= ; Draw a vertical line between xC+1 and xC+0, at current X position. @@ -1212,874 +1208,852 @@ ; Note: ascending or descending ! ; profile_display_fill: - ; First, check if xC+0>apnoe_mins or xC+0<aponoe_mins + ; First, check if xC+0 > fill_between_rows or xC+0 < aponoe_mins movf xC+0,W - cpfseq xC+1 ; xC+0 = apone_mins? - bra profile_display_fill2 ; No! + cpfseq xC+1 ; xC+0 = apone_mins? + bra profile_display_fill2 ; No! return profile_display_fill2: - ; Make sure to init X position. - movf logbook_pixel_x_pos,W - mullw 2 - decf PRODL,F - movlw 0 - subwfb PRODH,F - call pixel_write_col320 + ; Make sure to init X position. + movf logbook_pixel_x_pos,W + mullw 2 + decf PRODL,F + movlw 0 + subwfb PRODH,F + call pixel_write_col320 movf xC+0,W - cpfsgt xC+1 ; apnoe_mins>xC+0? - bra profile_display_fill_up ; Yes! + cpfsgt xC+1 ; fill_between_rows > xC+0? + bra profile_display_fill_up ; Yes! -profile_display_fill_down2: ; Loop +profile_display_fill_down2: ; Loop decf xC+1,F - HALF_PIXEL_WRITE xC+1 ; Updates just row (0..239) + HALF_PIXEL_WRITE xC+1 ; Updates just row (0..239) movf xC+0,W - cpfseq xC+1 ; Loop until xC+1=xC+0 + cpfseq xC+1 ; Loop until xC+1 = xC+0 bra profile_display_fill_down2 - return ; apnoe_mins and xC+0 are untouched + return ; fill_between_rows and xC+0 are untouched -profile_display_fill_up: ; Fill upwards from xC+0 to apone_mins! +profile_display_fill_up: ; Fill upwards from xC+0 to apone_mins! incf xC+1,F - HALF_PIXEL_WRITE xC+1 ; Updates just row (0..239) + HALF_PIXEL_WRITE xC+1 ; Updates just row (0..239) movf xC+0,W - cpfseq xC+1 ; Loop until xC+1=apnoe_mins + cpfseq xC+1 ; Loop until xC+1 = fill_between_rows bra profile_display_fill_up - return ; apnoe_mins and xC+0 are untouched + return ; fill_between_rows and xC+0 are untouched ;============================================================================= profile_view_get_depth: - infsnz logbook_sample_counter+0,F - incf logbook_sample_counter+1,F ; Count read pixels + infsnz logbook_sample_counter+0,F + incf logbook_sample_counter+1,F ; Count read pixels - movf logbook_sample_counter+0,W - cpfseq average_depth_hold_total+0 - bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue - movf logbook_sample_counter+1,W - cpfseq average_depth_hold_total+1 - bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue + movf logbook_sample_counter+0,W + cpfseq vertical_interval+0 + bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue + movf logbook_sample_counter+1,W + cpfseq vertical_interval+1 + bra profile_view_get_depth_no_line ; no need to draw a 10min line, continue ; draw a new 10min line here... - clrf logbook_sample_counter+0 - clrf logbook_sample_counter+1 ; clear counting registers for next line + clrf logbook_sample_counter+0 + clrf logbook_sample_counter+1 ; clear counting registers for next line ; Vertical lines... - movlw color_deepblue - call TFT_set_color ; Make this configurable? - movlw profile_top+.1 - movwf win_top - incf logbook_pixel_x_pos,W ; draw one line to right to make sure it's the background of the profile - movwf win_leftx2 ; Left border (0-159) - movlw profile_height_pixels - movwf win_height - movlw profile_height_pixels - movwf win_width ; "Window" height - call half_horizontal_line ; Inputs: win_top, win_leftx2, win_width, win_color1, win_color2 + movlw color_deepblue + call TFT_set_color ; Make this configurable? + movlw profile_top+.1 + movwf win_top + incf logbook_pixel_x_pos,W ; draw one line to right to make sure it's the background of the profile + movwf win_leftx2 ; Left border (0-159) + movlw profile_height_pixels + movwf win_height + movlw profile_height_pixels + movwf win_width ; "Window" height + call half_horizontal_line ; Inputs: win_top, win_leftx2, win_width, win_color1, win_color2 profile_view_get_depth_no_line: - call ext_flash_byte_read_plus_0x20 ; read depth first - movff temp1,logbook_cur_depth+0 ; low value - call ext_flash_byte_read_plus_0x20 ; read depth first - movff temp1,logbook_cur_depth+1 ; high value - call ext_flash_byte_read_plus_0x20 ; read Profile Flag Byte - movff temp1,timeout_counter2 ; store Profile Flag Byte + call ext_flash_byte_read_plus_0x20 ; read depth first + movff ext_flash_rw,logbook_cur_depth+0 ; low value + call ext_flash_byte_read_plus_0x20 ; read depth first + movff ext_flash_rw,logbook_cur_depth+1 ; high value + call ext_flash_byte_read_plus_0x20 ; read Profile Flag Byte + movff ext_flash_rw,gaslist_gas ; store Profile Flag Byte - bcf event_occured ; clear flag - btfsc timeout_counter2,7 - bsf event_occured ; We also have an Event byte! - bcf timeout_counter2,7 ; Clear Event Byte Flag (If any) - ; timeout_counter2 now holds the number of additional bytes to ignore (0-127) - movlw 0xFD ; end of profile bytes? - cpfseq logbook_cur_depth+0 - bra profile_view_get_depth_new1 ; no 1st. 0xFD - cpfseq logbook_cur_depth+1 - bra profile_view_get_depth_new1 ; no 2nd. 0xFD - bsf end_of_profile ; End found! Set Flag! Skip remaining pixels! + bcf event_occured ; clear flag + btfsc gaslist_gas,7 + bsf event_occured ; We also have an Event byte! + bcf gaslist_gas,7 ; Clear Event Byte Flag (If any) + ; gaslist_gas now holds the number of additional bytes to ignore (0-127) + movlw 0xFD ; end of profile bytes? + cpfseq logbook_cur_depth+0 + bra profile_view_get_depth_new1 ; no 1st. 0xFD + cpfseq logbook_cur_depth+1 + bra profile_view_get_depth_new1 ; no 2nd. 0xFD + bsf end_of_profile ; End found! Set Flag! Skip remaining pixels! return profile_view_get_depth_new1: - btfsc event_occured ; Was there an event attached to this sample? - rcall profile_view_get_depth_events ; Yes, get information about this event(s) - - ;---- Read Tp°, if any AND divisor reached AND bytes available ----------- - movf divisor_temperature,W ; Is Tp° divisor null ? - bz profile_view_get_depth_no_tp ; Yes: no Tp° curve. - decf count_temperature,F ; Decrement tp° counter - bnz profile_view_get_depth_no_tp ; No temperature this time - - call ext_flash_byte_read_plus_0x20 ; Tp° low - decf timeout_counter2,F - movff temp1,logbook_cur_tp+0 - call ext_flash_byte_read_plus_0x20 ; Tp° high - decf timeout_counter2,F - movff temp1,logbook_cur_tp+1 - movff divisor_temperature,count_temperature ; Restart counter. - - ; Compute Tp° max on the fly... - movff logbook_cur_tp+0,sub_a+0 ; Compare cur_tp > max_tp ? - movff logbook_cur_tp+1,sub_a+1 - movff logbook_max_tp+0,sub_b+0 - movff logbook_max_tp+1,sub_b+1 - call sub16 ; SIGNED sub_a - sub_b - btfsc neg_flag - bra profile_view_get_depth_no_tp + btfsc event_occured ; Was there an event attached to this sample? + rcall profile_view_get_depth_events ; Yes, get information about this event(s) + + ;---- Read Tp°, if any AND divisor reached AND bytes available ----------- + movf divisor_temperature,W ; Is Tp° divisor null ? + bz profile_view_get_depth_no_tp ; Yes: no Tp° curve. + decf count_temperature,F ; Decrement tp° counter + bnz profile_view_get_depth_no_tp ; No temperature this time - ; store max. temp only below start_dive_threshold (1,0m) - tstfsz logbook_cur_depth+1 ; > 2,56m? - bra profile_view_compute_max_temp ; Yes, include in max. temp measurement - movlw start_dive_threshold ; 1,0m - cpfsgt logbook_cur_depth+0 ; low value - bra profile_view_get_depth_no_tp ; above 1,0m, ignore temp + call ext_flash_byte_read_plus_0x20 ; Tp° low + decf gaslist_gas,F + movff ext_flash_rw,logbook_cur_tp+0 + call ext_flash_byte_read_plus_0x20 ; Tp° high + decf gaslist_gas,F + movff ext_flash_rw,logbook_cur_tp+1 + movff divisor_temperature,count_temperature ; Restart counter. + + ; Compute Tp° max on the fly... + movff logbook_cur_tp+0,sub_a+0 ; Compare cur_tp > max_tp ? + movff logbook_cur_tp+1,sub_a+1 + movff logbook_max_tp+0,sub_b+0 + movff logbook_max_tp+1,sub_b+1 + call sub16 ; SIGNED sub_a - sub_b + btfsc neg_flag + bra profile_view_get_depth_no_tp + + ; store max. temp only below start_dive_threshold (1,0m) + tstfsz logbook_cur_depth+1 ; > 2,56m? + bra profile_view_compute_max_temp ; Yes, include in max. temp measurement + movlw start_dive_threshold ; 1,0m + cpfsgt logbook_cur_depth+0 ; low value + bra profile_view_get_depth_no_tp ; above 1,0m, ignore temp profile_view_compute_max_temp: - movff logbook_cur_tp+0,logbook_max_tp+0 - movff logbook_cur_tp+1,logbook_max_tp+1 - - ;---- Read deco, if any AND divisor=0 AND bytes available ---------------- + movff logbook_cur_tp+0,logbook_max_tp+0 + movff logbook_cur_tp+1,logbook_max_tp+1 + + ;---- Read deco, if any AND divisor=0 AND bytes available ---------------- profile_view_get_depth_no_tp: - movf divisor_deco,W - bz profile_view_get_depth_no_deco - decf count_deco,F - bnz profile_view_get_depth_no_deco - - call ext_flash_byte_read_plus_0x20 - decf timeout_counter2,F - movff temp1,logbook_ceiling - movff divisor_deco,count_deco ; Restart counter. - call ext_flash_byte_read_plus_0x20 ; Skip stop length - decf timeout_counter2,F + movf divisor_deco,W + bz profile_view_get_depth_no_deco + decf count_deco,F + bnz profile_view_get_depth_no_deco - ;---- Read GF, if any AND divisor=0 AND bytes available ------------------ + call ext_flash_byte_read_plus_0x20 + decf gaslist_gas,F + movff ext_flash_rw,logbook_ceiling + movff divisor_deco,count_deco ; Restart counter. + call ext_flash_byte_read_plus_0x20 ; Skip stop length + decf gaslist_gas,F + + ;---- Read GF, if any AND divisor=0 AND bytes available ------------------ profile_view_get_depth_no_deco: - ; Then skip remaining bytes... - movf timeout_counter2,W ; number of additional bytes to ignore (0-127) - tstfsz timeout_counter2 ; Anything to skip? - call incf_ext_flash_address0_0x20 ; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching + ; Then skip remaining bytes... + movf gaslist_gas,W ; number of additional bytes to ignore (0-127) + tstfsz gaslist_gas ; Anything to skip? + call incf_ext_flash_address0_0x20 ; Yes, increases bytes in ext_flash_address:3 with 0x200000 bank switching return profile_view_get_depth_events: - clrf EventByte2 ; Clear EventByte2 - call ext_flash_byte_read_plus_0x20 ; Read Event byte - movff temp1,EventByte ; store EventByte - decf timeout_counter2,F ; reduce counter + clrf EventByte2 ; Clear EventByte2 + call ext_flash_byte_read_plus_0x20 ; Read Event byte + movff ext_flash_rw,EventByte1 ; store EventByte1 + decf gaslist_gas,F ; reduce counter - btfss EventByte,7 ; Another Event byte? - bra profile_no_second_eventbyte ; No - call ext_flash_byte_read_plus_0x20 ; Read Event byte2 - movff temp1,EventByte2 ; store EventByte2 - decf timeout_counter2,F ; reduce counter - bcf EventByte,7 ; Clear flag + btfss EventByte1,7 ; Another Event byte? + bra profile_no_second_eventbyte ; No + call ext_flash_byte_read_plus_0x20 ; Read Event byte2 + movff ext_flash_rw,EventByte2 ; store EventByte2 + decf gaslist_gas,F ; reduce counter + bcf EventByte1,7 ; Clear flag profile_no_second_eventbyte: -; Check event flags in the EventBytes - btfsc EventByte,4 ; Manual Gas Changed? - rcall logbook_event1 ; Yes! - btfsc EventByte,5 ; Stored Gas Changed? - rcall logbook_event4 ; Yes! - btfsc EventByte,6 ; Setpoint Change? - rcall logbook_event3 ; Yes! - btfsc EventByte2,0 ; Bailout? - rcall logbook_event2 ; Yes! - ; Any Alarm? - bcf EventByte,4 ; Clear bits already tested - bcf EventByte,5 - bcf EventByte,6 - movlw .6 ; manual marker? - cpfseq EventByte - return ; No, return - bsf log_marker_found ; Manual marker! Draw small yellow rectancle here - return + ; Check event flags in the EventBytes + btfsc EventByte1,4 ; Manual Gas Changed? + rcall logbook_event1 ; Yes! + btfsc EventByte1,5 ; Stored Gas Changed? + rcall logbook_event4 ; Yes! + btfsc EventByte1,6 ; Setpoint Change? + rcall logbook_event3 ; Yes! + btfsc EventByte2,0 ; Bailout? + rcall logbook_event2 ; Yes! + ; Any Alarm? + bcf EventByte1,4 ; Clear bits already tested + bcf EventByte1,5 + bcf EventByte1,6 + movlw .6 ; manual marker? + cpfseq EventByte1 + return ; No, return + bsf log_marker_found ; Manual marker! Draw small yellow rectangle here + return -logbook_event4: ; Stored Gas changed! - call ext_flash_byte_read_plus_0x20 ; Read Gas# - decf timeout_counter2,F ; reduce counter - movff temp1,average_depth_hold_total+3 - rcall profile_display_color ; Change profile color according to gas number +logbook_event4: ; Stored Gas changed! + call ext_flash_byte_read_plus_0x20 ; Read Gas# + decf gaslist_gas,F ; reduce counter + movff ext_flash_rw,backup_color1 + movff ext_flash_rw,WREG ; copy gas number to WREG for color-coding + call TFT_color_code_gas ; Change profile color according to gas number return -logbook_event1: ; Gas6 changed - bsf gas6_changed - movlw 6 ; Just color backup to 6 - movwf average_depth_hold_total+3 - rcall profile_display_color ; Back to normal profile color. - incf_ext_flash_address_0x20 .2 ; Skip two bytes - decf timeout_counter2,F ; reduce counter - decf timeout_counter2,F ; reduce counter +logbook_event1: ; Gas 6 used + bsf gas6_changed + movlw .6 ; Use Gas6 color + movwf backup_color1 + call TFT_color_code_gas ; set profile color + incf_ext_flash_address_0x20 .2 ; Skip two bytes + decf gaslist_gas,F ; reduce counter + decf gaslist_gas,F ; reduce counter return -logbook_event2: ; Bailout - bsf is_bailout ; Set flag - movff average_depth_hold_total+3,total_divetime_seconds+0 ; Backup last gas color in case we return to CCR - movlw 6 ; Use Gas6 color - movwf average_depth_hold_total+3 - rcall profile_display_color ; Back to normal profile color. - incf_ext_flash_address_0x20 .2 ; Skip two bytes - decf timeout_counter2,F ; reduce counter - decf timeout_counter2,F ; reduce counter +logbook_event2: ; Bailout + bsf is_bailout ; Set flag + movff backup_color1,backup_color2 ; Backup last gas color in case we return to CCR + movlw .6 ; Use Gas6 color + movwf backup_color1 + call TFT_color_code_gas ; Use Gas6 color + incf_ext_flash_address_0x20 .2 ; Skip two bytes + decf gaslist_gas,F ; reduce counter + decf gaslist_gas,F ; reduce counter return -logbook_event3: ; Setpoint change - incf_ext_flash_address_0x20 .1 ; Skip one byte - decf timeout_counter2,F ; reduce counter - btfss is_bailout ; Are we in bailout? - return ; No, return - ; We were in bailout before, restore profile color - movff total_divetime_seconds+0,average_depth_hold_total+3 ; Restore color - rcall profile_display_color ; Back to normal profile color. - return +logbook_event3: ; Setpoint change + incf_ext_flash_address_0x20 .1 ; Skip one byte + decf gaslist_gas,F ; reduce counter + btfss is_bailout ; Are we in bailout? + return ; No, return + ; We were in bailout before, restore profile color + movff backup_color2,backup_color1 ; Restore color + movff backup_color2,WREG ; copy gas number to WREG for color-coding + call TFT_color_code_gas ; Back to normal profile color + return exit_profileview: -; call speed_fastest - bcf sleepmode - clrf timeout_counter2 ; restore all registers to build same page again - movff divemins_backup,divemins+0 - movff logbook_divenumber_temp, logbook_divenumber - movff logbook_max_dive_counter_temp,logbook_max_dive_counter - incf logbook_max_dive_counter,F - decf logbook_divenumber,F - bcf all_dives_shown - clrf menupos3 ; here: used row on current page - movlw logbook_row_number - movwf menupos ; here: active row on current page -; call TFT_DisplayOff - call TFT_boot - clrf CCP1CON ; stop PWM - bcf PORTC,2 ; Pull PWM out to GND - call TFT_boot -; call TFT_ClearScreen ; clear details/profile - goto logbook2 ; start search +; call speed_fastest + bcf sleepmode + clrf gaslist_gas ; restore all registers to build same page again + movff logbook_divenumber_temp,logbook_divenumber + movff logbook_max_dive_counter_temp,logbook_max_dive_counter + movff logbook_temp_backup,logbook_temp + incf logbook_max_dive_counter,F + decf logbook_divenumber,F + bcf all_dives_shown + clrf menupos3 ; here: used row on current page + movlw logbook_row_number + movwf menupos1 ; here: active row on current page +; call TFT_DisplayOff + call TFT_boot + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM out to GND + call TFT_boot +; call TFT_ClearScreen ; clear details/profile + goto logbook2 ; start search next_logbook2: - btfsc all_dives_shown ; all shown - goto logbook ; all reset - clrf menupos3 - movlw logbook_row_number - movwf menupos - incf logbook_page_number,F ; start new screen - bsf keep_cursor_new_page ; Keep cursor on "next page" - clrf CCP1CON ; stop PWM - bcf PORTC,2 ; Pull PWM out to GND - call TFT_boot - ;call TFT_ClearScreen - goto logbook2 ; start search + btfsc all_dives_shown ; all shown + goto logbook ; all reset + clrf menupos3 + movlw logbook_row_number + movwf menupos1 + incf logbook_page_number,F ; start new screen + bsf keep_cursor_new_page ; Keep cursor on "next page" + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM out to GND + call TFT_boot +; call TFT_ClearScreen + goto logbook2 ; start search next_logbook3: - incf menupos,F ; +1 - movlw logbook_row_number+.2 - cpfsgt menupos ; =logbook_row_number+.3? - bra next_logbook3a ; No - movlw .1 - movwf menupos - bra next_logbook3b + incf menupos1,F ; +1 + movlw logbook_row_number+.2 + cpfsgt menupos1 ; =logbook_row_number+.3? + bra next_logbook3a ; No + movlw .1 + movwf menupos1 + bra next_logbook3b next_logbook3a: - incf menupos3,W ; last entry in current page +1 - cpfseq menupos ; same as cursor pos.? - bra next_logbook3b ; No - movlw logbook_row_number+.1 ; Yes, ... - movwf menupos ; ... jump directly to "next page" if page is not full + incf menupos3,W ; last entry in current page +1 + cpfseq menupos1 ; same as cursor pos.? + bra next_logbook3b ; No + movlw logbook_row_number+.1 ; Yes, ... + movwf menupos1 ; ... jump directly to "next page" if page is not full - movlw logbook_row_number - cpfseq menupos3 ; Last dive was row logbook_row_number? - bsf all_dives_shown ; No, set flag to load first page again (full reset) + movlw logbook_row_number + cpfseq menupos3 ; Last dive was row logbook_row_number? + bsf all_dives_shown ; No, set flag to load first page again (full reset) next_logbook3b: - clrf timeout_counter2 - call TFT_logbook_cursor - - bcf switch_left - goto logbook_loop + clrf timeout_counter2 + call TFT_logbook_cursor + bcf switch_left + goto logbook_loop display_listdive: - bsf logbook_page_not_empty ; Page not empty - incf menupos3,F + bsf logbook_page_not_empty ; Page not empty + incf menupos3,F + + bsf leftbind + WIN_FONT FT_SMALL + WIN_LEFT logbook_list_left - bsf leftbind - WIN_FONT FT_SMALL - WIN_LEFT logbook_list_left - - decf menupos3,W ; -1 into wreg - mullw logbook_row_offset - movff PRODL,win_top + decf menupos3,W ; -1 into wreg + mullw logbook_row_offset + movff PRODL,win_top - lfsr FSR2,buffer - call do_logoffset_common_read ; Read into lo:hi - tstfsz lo ; lo=0? - bra display_listdive1 ; No, adjust offset - tstfsz hi ; hi=0? - bra display_listdive1 ; No, adjust offset - bra display_listdive1b ; Display now + lfsr FSR2,buffer + call do_logoffset_common_read ; Read into lo:hi + tstfsz lo ; lo=0? + bra display_listdive1 ; No, adjust offset + tstfsz hi ; hi=0? + bra display_listdive1 ; No, adjust offset + bra display_listdive1b ; Display now display_listdive1: ; Check limit (lo:hi must be <1000) - movlw LOW d'1000' ; Compare to 1000 - subwf lo,W - movlw HIGH d'1000' - subwfb hi,W - bc display_listdive1b ; carry = no-borrow = > 1000, skip! + movlw LOW d'1000' ; Compare to 1000 + subwf lo,W + movlw HIGH d'1000' + subwfb hi,W + bc display_listdive1b ; carry = no-borrow = > 1000, skip! - infsnz lo,F - incf hi,F ; hi:lo = hi:lo + 1 - movff lo,sub_a+0 - movff hi,sub_a+1 - movff logbook_divenumber,sub_b+0 - clrf sub_b+1 - call subU16 ; sub_c = sub_a - sub_b - movff sub_c+0,lo - movff sub_c+1,hi - bra display_listdive1a + infsnz lo,F + incf hi,F ; hi:lo = hi:lo + 1 + movff lo,sub_a+0 + movff hi,sub_a+1 + movff logbook_divenumber,sub_b+0 + clrf sub_b+1 + call subU16 ; sub_c = sub_a - sub_b + movff sub_c+0,lo + movff sub_c+1,hi + bra display_listdive1a display_listdive1b: - clrf hi - movff logbook_divenumber,lo ; lo=0 and hi=0 -> show without applied offset + clrf hi + movff logbook_divenumber,lo ; lo=0 and hi=0 -> show without applied offset display_listdive1a: - output_16_3 ; displays only last three figures from a 16Bit value (0-999), # of dive - PUTC ' ' - LOG_POINT_TO log_date+1 ; Point to month - call ext_flash_byte_read_plus - movff temp1,lo ; read month - -display_listdive2: - movff lo,convert_value_temp+0 ; Month (in lo, see above) - call ext_flash_byte_read_plus ; Day - movff temp1,convert_value_temp+1 - call TFT_convert_date_short ; converts into "DD/MM" or "MM/DD" or "MM/DD" into buffer + output_16_3 ; displays only last three figures from a 16Bit value (0-999), # of dive + PUTC ' ' + ;display_listdive2: + LOG_POINT_TO log_date+1 ; Point to month + call ext_flash_byte_read_plus ; read month + movff ext_flash_rw,hi ; month + call ext_flash_byte_read_plus ; read day + movff ext_flash_rw,lo ; day + call TFT_convert_date_short ; converts into "DD/MM" or "MM/DD" or "MM/DD" into buffer PUTC ' ' - LOG_POINT_TO log_max_depth ; Point to max. depth - call ext_flash_byte_read_plus ; max. Depth - movff temp1,lo - call ext_flash_byte_read_plus - movff temp1,hi + LOG_POINT_TO log_max_depth ; Point to max. depth + call ext_flash_byte_read_plus ; max. Depth + movff ext_flash_rw,lo + call ext_flash_byte_read_plus + movff ext_flash_rw,hi - TSTOSS opt_units ; 0=Meters, 1=Feets - bra display_listdive2_metric -;display_listdive2_imperial: - call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet + TSTOSS opt_units ; 0=Meters, 1=Feets + bra display_listdive2_metric + ;display_listdive2_imperial: + call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet PUTC ' ' - bcf leftbind - output_16_3 ; limit to 999 and display only (0-999) + bcf leftbind + output_16_3 ; limit to 999 and display only (0-999) STRCAT_TEXT tFeets1 - bra display_listdive3 + bra display_listdive3 display_listdive2_metric: - bsf ignore_digit5 ; no cm... - movlw d'1' ; +1 - movff WREG,ignore_digits ; no 1000m - bcf leftbind - output_16dp .3 ; xxx.y + bsf ignore_digit5 ; no cm... + movlw d'1' ; +1 + movff WREG,ignore_digits ; no 1000m + bcf leftbind + output_16dp .3 ; xxx.y STRCAT_TEXT tMeters PUTC ' ' display_listdive3: - call ext_flash_byte_read_plus - movff temp1,lo ; read divetime minutes - call ext_flash_byte_read_plus - movff temp1,hi - output_16_3 ; Divetime minutes (0-999min) - STRCAT_TEXT tMinutes - clrf WREG - movff WREG,buffer+.21 ; limit to 21 chars - STRCAT_PRINT "" ; Display header-row in list + call ext_flash_byte_read_plus + movff ext_flash_rw,lo ; read divetime minutes + call ext_flash_byte_read_plus + movff ext_flash_rw,hi + output_16_3 ; Divetime minutes (0-999min) + STRCAT_TEXT tMinutes + clrf WREG + movff WREG,buffer+.21 ; limit to 21 chars + STRCAT_PRINT "" ; Display header-row in list return logbook_show_divenumber: - call do_logoffset_common_read ; Read into lo:hi - tstfsz lo ; lo=0? - bra logbook_show_divenumber2 ; No, adjust offset - tstfsz hi ; hi=0? - bra logbook_show_divenumber2 ; No, adjust offset - movff divesecs,lo ; lo=0 and hi=0 -> skip Offset routine - bra logbook_show_divenumber3 ; Display now + call do_logoffset_common_read ; Read into lo:hi + tstfsz lo ; lo=0? + bra logbook_show_divenumber2 ; No, adjust offset + tstfsz hi ; hi=0? + bra logbook_show_divenumber2 ; No, adjust offset + movff divenumber,lo ; lo=0 and hi=0 -> skip Offset routine + bra logbook_show_divenumber3 ; Display now logbook_show_divenumber2: - infsnz lo,F - incf hi,F ; hi:lo = hi:lo + 1 - movff lo,sub_a+0 - movff hi,sub_a+1 - movff divesecs,sub_b+0 - clrf sub_b+1 - call subU16 ; sub_c = sub_a - sub_b - movff sub_c+0,lo - movff sub_c+1,hi + infsnz lo,F + incf hi,F ; hi:lo = hi:lo + 1 + movff lo,sub_a+0 + movff hi,sub_a+1 + movff divenumber,sub_b+0 + clrf sub_b+1 + call subU16 ; sub_c = sub_a - sub_b + movff sub_c+0,lo + movff sub_c+1,hi logbook_show_divenumber3: WIN_MEDIUM logbook_divenumer_column, logbook_divenumer_row - bsf leftbind - output_16 ; # of dive in logbook - bcf leftbind + bsf leftbind + output_16 ; # of dive in logbook + bcf leftbind STRCAT_PRINT "" - return + return -logbook_page2: ; Show more info - rcall log_details_header ; Shows number, time/date and basic dive info - +logbook_page2: ; Show more info + rcall log_details_header ; Shows number, time/date and basic dive info + ; Deco model - WIN_SMALL .5,.65 - LOG_POINT_TO log_decomodel - call ext_flash_byte_read_plus ; read deco model - movff temp1,lo - decfsz temp1,F - bra logbook_decomodel1 - ; Deco model GF Version - STRCAT_PRINT "ZH-L16+GF" - LOG_POINT_TO log_gf_lo - WIN_SMALL .5,.90 - STRCPY_TEXT tGF - call ext_flash_byte_read_plus ; Read GF lo - movff temp1,lo - output_8 - STRCAT "%/" - bra logbook_decomodel_common + WIN_SMALL .5,.65 + LOG_POINT_TO log_decomodel + call ext_flash_byte_read_plus ; read deco model + movff ext_flash_rw,lo + decfsz ext_flash_rw,F + bra logbook_decomodel1 + ; Deco model GF Version + STRCAT_PRINT "ZHL-16+GF" + LOG_POINT_TO log_gf_lo + WIN_SMALL .5,.90 + STRCPY_TEXT tGF + call ext_flash_byte_read_plus ; Read GF lo + movff ext_flash_rw,lo + output_8 + STRCAT "%/" + bra logbook_decomodel_common logbook_decomodel1: - ; Deco model NON-GF Version - STRCAT_PRINT "ZH-L16" - LOG_POINT_TO log_sat_mult - WIN_SMALL .5,.90 - call ext_flash_byte_read_plus ; Read sat_mult - movff temp1,lo - output_8 - STRCAT "%/" + ; Deco model NON-GF Version + STRCAT_PRINT "ZH-L16" + LOG_POINT_TO log_sat_mult + WIN_SMALL .5,.90 + call ext_flash_byte_read_plus ; Read sat_mult + movff ext_flash_rw,lo + output_8 + STRCAT "%/" logbook_decomodel_common: - call ext_flash_byte_read_plus ; Read desat_mult or GF_hi - movff temp1,lo - output_8 - STRCAT_PRINT "%" - - ; CNS - LOG_POINT_TO log_cns_start - WIN_SMALL .5,.115 - STRCPY_TEXT tCNS2 - call ext_flash_byte_read_plus ; read cns low - movff temp1,lo - call ext_flash_byte_read_plus ; read cns high - movff temp1,hi - output_16 - LOG_POINT_TO log_cns_end - STRCAT "->" - call ext_flash_byte_read_plus ; read CNS low - movff temp1,lo - call ext_flash_byte_read_plus ; read CNS high - movff temp1,hi - output_16 - STRCAT_PRINT "%" + call ext_flash_byte_read_plus ; Read desat_mult or GF_hi + movff ext_flash_rw,lo + output_8 + STRCAT_PRINT "%" - ; Salinity - WIN_SMALL .5,.140 - LOG_POINT_TO log_salinity - STRCPY_TEXT tDvSalinity - bsf leftbind - call ext_flash_byte_read_plus ; read salinity - movff temp1,lo - movff temp1,total_divetime_seconds+1 ; backup for average depth display - output_8 - STRCAT_PRINT "%" + ; CNS + LOG_POINT_TO log_cns_start + WIN_SMALL .5,.115 + STRCPY_TEXT tCNS2 + call ext_flash_byte_read_plus ; read cns low + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read cns high + movff ext_flash_rw,hi + output_16 + LOG_POINT_TO log_cns_end + STRCAT "->" + call ext_flash_byte_read_plus ; read CNS low + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read CNS high + movff ext_flash_rw,hi + output_16 + STRCAT_PRINT "%" + + ; Salinity + WIN_SMALL .5,.140 + LOG_POINT_TO log_salinity + STRCPY_TEXT tDvSalinity + bsf leftbind + call ext_flash_byte_read_plus ; read salinity + movff ext_flash_rw,lo + movff ext_flash_rw,backup_divedata ; backup for average depth display + output_8 + STRCAT_PRINT "%" - ; Average depth - WIN_SMALL .5,.165 - STRCPY_TEXT tAVG - LOG_POINT_TO log_avr_depth - call ext_flash_byte_read_plus ; read avr low - movff temp1,lo - call ext_flash_byte_read_plus ; read avr high - movff temp1,hi - movf total_divetime_seconds+1,W ; salinity for this dive - call adjust_depth_with_salinity_log ; computes salinity setting (FROM WREG!) into lo:hi [mbar] - output_16dp .3 - STRCAT_PRINT "m" - - ; Last deco - LOG_POINT_TO log_last_stop - WIN_SMALL .5,.190 - STRCPY_TEXT tLastDecostop - call ext_flash_byte_read_plus ; Read last stop - movff temp1,lo - output_8 - STRCAT_PRINT "m" + ; Average depth + WIN_SMALL .5,.165 + STRCPY_TEXT tAVG + LOG_POINT_TO log_avr_depth + call ext_flash_byte_read_plus ; read avr low + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read avr high + movff ext_flash_rw,hi + movf backup_divedata,W ; salinity for this dive + call adjust_depth_with_salinity_log ; computes salinity setting (FROM WREG!) into lo:hi [mbar] + output_16dp .3 + STRCAT_PRINT "m" - movlw color_lightblue - call TFT_set_color - WIN_FRAME_COLOR16 .63,.220,.2,.105 ; Top, Bottom, Left, Right + ; Last deco + LOG_POINT_TO log_last_stop + WIN_SMALL .5,.190 + STRCPY_TEXT tLastDecostop + call ext_flash_byte_read_plus ; Read last stop + movff ext_flash_rw,lo + output_8 + STRCAT_PRINT "m" + + movlw color_lightblue + call TFT_set_color + WIN_FRAME_COLOR16 .63,.220,.2,.105 ; Top, Bottom, Left, Right - ; Firmware - call TFT_standard_color - WIN_SMALL .110,.65 - STRCAT "V:" - LOG_POINT_TO log_firmware - call ext_flash_byte_read_plus ; read firmware xx - movff temp1,lo - bsf neg_flag ; set flag for 2.15 or newer - movlw .1 - cpfsgt lo ; >1? - bcf neg_flag ; No, clear flag - movlw .9 - cpfslt lo ; <9? - bcf neg_flag ; No, clear flag (When unit was updgraded from hwOS Sport (10.xx)) - bsf leftbind - output_8 - PUTC "." - call ext_flash_byte_read_plus ; read firmware yy - movff temp1,lo - movlw .14 - cpfsgt lo ; >14? - bcf neg_flag ; No, clear flag - output_99x - STRCAT_PRINT "" + ; Firmware + call TFT_standard_color + WIN_SMALL .110,.65 + STRCAT "V:" + LOG_POINT_TO log_firmware + call ext_flash_byte_read_plus ; read firmware xx + movff ext_flash_rw,lo + bsf neg_flag ; set flag for 2.15 or newer + movlw .1 + cpfsgt lo ; >1? + bcf neg_flag ; No, clear flag + movlw .9 + cpfslt lo ; <9 ? + bcf neg_flag ; No, clear flag (When unit was upgraded from hwOS Sport (10.xx)) + bsf leftbind + output_8 + PUTC "." + call ext_flash_byte_read_plus ; read firmware yy + movff ext_flash_rw,lo + movlw .14 + cpfsgt lo ; >14 ? + bcf neg_flag ; No, clear flag + output_99x + STRCAT_PRINT "" - btfss neg_flag ; set flag for 2.15 or newer - bra logbook_no_batt_info - - ; Battery percent (for dives with 2.15 or newer) - WIN_SMALL .110,.140 - LOG_POINT_TO log_batt_info ; Battery percent - call ext_flash_byte_read_plus ; read battery low - movff temp1,lo - output_8 - STRCAT_PRINT "%" + btfss neg_flag ; set flag for 2.15 or newer + bra logbook_no_batt_info + + ; Battery percent (for dives with 2.15 or newer) + WIN_SMALL .110,.140 + LOG_POINT_TO log_batt_info ; Battery percent + call ext_flash_byte_read_plus ; read battery low + movff ext_flash_rw,lo + output_8 + STRCAT_PRINT "%" -logbook_no_batt_info: ; dives with firmware <2.15 +logbook_no_batt_info: ; dives with firmware <2.15 + + ; Battery voltage + WIN_SMALL .110,.90 + STRCAT_PRINT "Batt:" + WIN_SMALL .110,.115 + LOG_POINT_TO log_battery ; Battery voltage... + call ext_flash_byte_read_plus ; read battery low + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read battery high + movff ext_flash_rw,hi + output_16dp .2 + STRCAT_PRINT "V" - ; Battery voltage - WIN_SMALL .110,.90 - STRCAT_PRINT "Batt:" - WIN_SMALL .110,.115 - LOG_POINT_TO log_battery ; Battery voltage... - call ext_flash_byte_read_plus ; read battery low - movff temp1,lo - call ext_flash_byte_read_plus ; read battery high - movff temp1,hi - output_16dp .2 - STRCAT_PRINT "V" - - ; surface pressure in mbar - LOG_POINT_TO log_surface_press - call ext_flash_byte_read_plus ; read surface pressure - movff temp1,lo - call ext_flash_byte_read_plus ; read surface pressure - movff temp1,hi - WIN_SMALL .110,.165 - lfsr FSR2,buffer - bsf leftbind - output_16 ; Air pressure before dive - STRCAT_TEXT tMBAR - clrf WREG - movff WREG,buffer+7 ; limit to 7 chars - STRCAT_PRINT "" + ; surface pressure in mbar + LOG_POINT_TO log_surface_press + call ext_flash_byte_read_plus ; read surface pressure + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read surface pressure + movff ext_flash_rw,hi + WIN_SMALL .110,.165 + lfsr FSR2,buffer + bsf leftbind + output_16 ; Air pressure before dive + STRCAT_TEXT tMBAR + clrf WREG + movff WREG,buffer+7 ; limit to 7 chars + STRCAT_PRINT "" - movlw color_greenish - call TFT_set_color - WIN_FRAME_COLOR16 .63,.220,.107,.159 ; Top, Bottom, Left, Right + movlw color_greenish + call TFT_set_color + WIN_FRAME_COLOR16 .63,.220,.107,.159 ; Top, Bottom, Left, Right + + rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco +display_details_loop: + btfsc switch_right + bra logbook_page3 ; Details, 2nd page + btfsc switch_left + bra exit_profileview ; back to list + rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second + btfsc sleepmode ; Timeout? + bra exit_profileview ; back to list + bra display_details_loop ; wait for something to do - rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco -display_details_loop: - ; REPLACE ## logbook look and feel - ; btfsc switch_left ; SET/MENU? - ; BY - btfsc switch_right - bra logbook_page3 ; Details, 2nd page - ; REPLACE ## logbook look and feel - ; btfsc switch_right ; ENTER? - btfsc switch_left - bra exit_profileview ; back to list - rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second - btfsc sleepmode ; Timeout? - bra exit_profileview ; back to list - bra display_details_loop ; wait for something to do + global logbook_preloop_tasks +logbook_preloop_tasks: + movlw CCP1CON_VALUE ; See hwos.inc + movwf CCP1CON ; Power-on backlight + call TFT_standard_color + bcf sleepmode ; clear some flags + bcf switch_right + bcf switch_left + clrf timeout_counter2 + goto speed_normal ; and return + + +logbook_page3: ; Show even more info +++ + rcall log_details_header ; Shows number, time/date and basic dive info + LOG_POINT_TO log_gas1 + bcf log_show_gas_short ; do the long version of log_show_gas + bcf leftbind - global logbook_preloop_tasks -logbook_preloop_tasks: - movlw CCP1CON_VALUE ; See hwos.inc - movwf CCP1CON ; Power-on backlight - call TFT_standard_color - bcf sleepmode ; clear some flags - bcf switch_right - bcf switch_left - clrf timeout_counter2 - goto speed_normal ; and return + WIN_SMALL .5,.90 + movlw .1 ; Color for Gas 1 + rcall log_show_gas + + WIN_SMALL .5,.115 + movlw .2 ; Color for Gas 2 + rcall log_show_gas - -logbook_page3: ; Show even more info - rcall log_details_header ; Shows number, time/date and basic dive info + WIN_SMALL .5,.140 + movlw .3 ; Color for Gas 3 + rcall log_show_gas + + WIN_SMALL .5,.165 + movlw .4 ; Color for Gas 4 + rcall log_show_gas + + WIN_SMALL .5,.190 + movlw .5 ; Color for Gas 5 + rcall log_show_gas -; REPLACE ## logbook look and feel -; ; OC/CC Gas List -; LOG_POINT_TO log_divemode -; call ext_flash_byte_read_plus ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1 -; WIN_SMALL .5,.65 -; WIN_COLOR color_greenish -; STRCPY_TEXT_PRINT tGaslist ; "OC Gas List" / tGaslistCC -; BY - bcf leftbind - LOG_POINT_TO log_gas1 - movlw color_white ; Color for Gas 1 - call TFT_set_color ; Set Color... - WIN_SMALL .5,.90 - rcall log_show_gas_common2 - movlw color_green ; Color for Gas 2 - call TFT_set_color ; Set Color... - WIN_SMALL .5,.115 - rcall log_show_gas_common2 - movlw color_red ; Color for Gas 3 - call TFT_set_color ; Set Color... - WIN_SMALL .5,.140 - rcall log_show_gas_common2 - movlw color_yellow ; Color for Gas 4 - call TFT_set_color ; Set Color... - WIN_SMALL .5,.165 - rcall log_show_gas_common2 - movlw color_cyan ; Color for Gas 5 - call TFT_set_color ; Set Color... - WIN_SMALL .5,.190 - rcall log_show_gas_common2 - ; OC/CC Gas List - WIN_SMALL .5,.65 - WIN_COLOR color_greenish - LOG_POINT_TO log_divemode - call ext_flash_byte_read_plus ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into temp1 - decfsz temp1,w ; =1 (CC)? - bra logbook_page3a - STRCPY_TEXT_PRINT tGaslistCC - bra logbook_page3b + ; OC/CC Gas List + WIN_SMALL .5,.65 + WIN_COLOR color_greenish + LOG_POINT_TO log_divemode + call ext_flash_byte_read_plus ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into ext_flash_rw + decfsz ext_flash_rw,w ; =1 (CC)? + bra logbook_page3a + STRCPY_TEXT_PRINT tGaslistCC + bra logbook_page3b logbook_page3a: - STRCPY_TEXT_PRINT tGaslist + STRCPY_TEXT_PRINT tGaslist logbook_page3b: + movlw color_lightblue + call TFT_set_color + WIN_FRAME_COLOR16 .63,.220,.2,.90 ; Top, Bottom, Left, Right - movlw color_lightblue - call TFT_set_color - WIN_FRAME_COLOR16 .63,.220,.2,.90 ; Top, Bottom, Left, Right - - rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco + rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco display_details2_loop: - ; REPLACE ## logbook look and feel - ; btfsc switch_left ; SET/MENU? - ; BY - btfsc switch_right - goto logbook_page4 ; Show more info - ; REPLACE ## logbook look and feel - ; btfsc switch_right ; ENTER? - ; BY - btfsc switch_left - bra exit_profileview ; back to list - rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second - btfsc sleepmode ; Timeout? - bra exit_profileview ; back to list - bra display_details2_loop ; wait for something to do + btfsc switch_right + goto logbook_page4 ; Show more info + btfsc switch_left + bra exit_profileview ; back to list + rcall log_screendump_and_onesecond ; Check if we need to make a screen shot and check for new second + btfsc sleepmode ; Timeout? + bra exit_profileview ; back to list + bra display_details2_loop ; wait for something to do -logbook_page4: ; Show even more info in CC mode - LOG_POINT_TO log_divemode - call ext_flash_byte_read ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and temp1 - decfsz temp1,w ; =1 (CC)? - goto display_profile2 ; no +logbook_page4: ; Show even more info in CC mode + LOG_POINT_TO log_divemode + call ext_flash_byte_read ; 0=OC, 1=CC, 2=Gauge, 3=Apnea into WREG and ext_flash_rw + decfsz ext_flash_rw,w ; =1 (CC)? + goto display_profile2 ; no - rcall log_details_header ; Shows number, time/date and basic dive info - ; Setpoint list - LOG_POINT_TO log_sp1 - WIN_SMALL .5,.65 - WIN_COLOR color_greenish - STRCPY_TEXT_PRINT tFixedSetpoints - call TFT_standard_color - WIN_SMALL .5,.90 - rcall log_show_sp_common - WIN_SMALL .5,.115 - rcall log_show_sp_common - WIN_SMALL .5,.140 - rcall log_show_sp_common - WIN_SMALL .5,.165 - rcall log_show_sp_common - WIN_SMALL .5,.190 - rcall log_show_sp_common + rcall log_details_header ; Shows number, time/date and basic dive info + ; Setpoint list + LOG_POINT_TO log_sp1 + WIN_SMALL .5,.65 + WIN_COLOR color_greenish + STRCPY_TEXT_PRINT tFixedSetpoints + call TFT_standard_color + WIN_SMALL .5,.90 + rcall log_show_sp + WIN_SMALL .5,.115 + rcall log_show_sp + WIN_SMALL .5,.140 + rcall log_show_sp + WIN_SMALL .5,.165 + rcall log_show_sp + WIN_SMALL .5,.190 + rcall log_show_sp - movlw color_greenish - call TFT_set_color - WIN_FRAME_COLOR16 .63,.220,.2,.112 ; Top, Bottom, Left, Right + movlw color_greenish + call TFT_set_color + WIN_FRAME_COLOR16 .63,.220,.2,.112 ; Top, Bottom, Left, Right - rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco + rcall logbook_preloop_tasks ; Clear some flags and set to Speed_eco display_details3_loop: - ; REPLACE ## logbook look and feel - ; btfsc switch_left ; SET/MENU? - ; BY - btfsc switch_right - goto display_profile2 ; Show the profile view again - ; REPLACE ## logbook look and feel - ; btfsc switch_right ; ENTER? - ; BY - btfsc switch_left - bra exit_profileview ; back to list - rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second - btfsc sleepmode ; Timeout? - bra exit_profileview ; back to list - bra display_details3_loop ; wait for something to do - - -log_details_header: - clrf CCP1CON ; stop PWM - bcf PORTC,2 ; Pull PWM out to GND - call TFT_boot - ;call TFT_ClearScreen ; Clear screen + btfsc switch_right + goto display_profile2 ; Show the profile view again + btfsc switch_left + bra exit_profileview ; back to list + rcall log_screendump_and_onesecond ; Check if we need to make a screenshot and check for new second + btfsc sleepmode ; Timeout? + bra exit_profileview ; back to list + bra display_details3_loop ; wait for something to do -; Set ext_flash pointer to "#divesecs-oldest" dive -; compute read_int_eeprom .2 - divesecs + +log_details_header: + clrf CCP1CON ; stop PWM + bcf PORTC,2 ; Pull PWM out to GND + call TFT_boot +; call TFT_ClearScreen ; Clear screen + +; Set ext_flash pointer to "#divenumber-oldest" dive +; compute read_int_eeprom .2 - divenumber ; Read required header data for profile display ; look in header for pointer to begin of diveprofile (Byte 2-4) ; Set pointer (ext_flash_log_pointer:3) to this address, start drawing - decf divesecs,F ;-1 + decf divenumber,F ;-1 read_int_eeprom .2 movf EEDATA,W bcf STATUS,C - subfwb divesecs,W ; max. dives (low value) - divesecs - movwf lo ; result - incf divesecs,F ;+1 + subfwb divenumber,W ; max. dives (low value) - divenumber + movwf lo ; result + incf divenumber,F ;+1 ; Set ext_flash_address:3 to TOC entry of this dive ; 1st: 200000h-200FFFh -> lo=0 ; 2nd: 201000h-201FFFh -> lo=1 ; 3rd: 202000h-202FFFh -> lo=2 ; 256: 2FF000h-2FFFFFh -> lo=255 (And hi>0...) - clrf ext_flash_address+0 - clrf ext_flash_address+1 - movlw 0x20 - movwf ext_flash_address+2 - movlw .16 - mulwf lo ; lo*16 = offset to 0x2000 (up:hi) - movf PRODL,W - addwf ext_flash_address+1,F - movf PRODH,W - addwfc ext_flash_address+2,F + clrf ext_flash_address+0 + clrf ext_flash_address+1 + movlw 0x20 + movwf ext_flash_address+2 + movlw .16 + mulwf lo ; lo*16 = offset to 0x2000 (up:hi) + movf PRODL,W + addwf ext_flash_address+1,F + movf PRODH,W + addwfc ext_flash_address+2,F ; pointer at the first 0xFA of header - rcall logbook_show_divenumber ; Show the dive number in medium font + rcall logbook_show_divenumber ; show the dive number in medium font ; Show date and time in first row - WIN_SMALL .59,.10 - LOG_POINT_TO log_date - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+2 ; Year - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+0 ; Month - call ext_flash_byte_read_plus - movff temp1,convert_value_temp+1 ; Day - call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 - PUTC "-" - call ext_flash_byte_read_plus ; hour - movff temp1,lo - call ext_flash_byte_read_plus ; Minutes - movff temp1,hi - output_99x ; hour - PUTC ':' - movff hi,lo - output_99x ; minute - STRCAT_PRINT "" ; Display 1st row of details + WIN_SMALL .59,.10 + LOG_POINT_TO log_date + call ext_flash_byte_read_plus + movff ext_flash_rw,up ; year + call ext_flash_byte_read_plus + movff ext_flash_rw,hi ; month + call ext_flash_byte_read_plus + movff ext_flash_rw,lo ; day + call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 + PUTC "-" + call ext_flash_byte_read_plus ; hour + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; minutes + movff ext_flash_rw,hi + output_99x ; hour + PUTC ':' + movff hi,lo + output_99x ; minute + STRCAT_PRINT "" ; display 1st row of details ; Show max depth and dive time - WIN_SMALL .5,.35 - STRCAT "Max:" - LOG_POINT_TO log_max_depth - call ext_flash_byte_read_plus ; read max depth - movff temp1,lo - call ext_flash_byte_read_plus ; read max depth - movff temp1,hi + WIN_SMALL .5,.35 + STRCAT "Max:" + LOG_POINT_TO log_max_depth + call ext_flash_byte_read_plus ; read max depth + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read max depth + movff ext_flash_rw,hi - TSTOSS opt_units ; 0=Meters, 1=Feets + TSTOSS opt_units ; 0=Meters, 1=Feets bra logbook_page2_depth_metric ; imperial - call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet + call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet PUTC ' ' bcf leftbind output_16_3 - STRCAT_TEXT tFeets + STRCAT_TEXT tFeets bra logbook_page2_depth_common logbook_page2_depth_metric: bsf leftbind - output_16dp d'3' ; max. depth - STRCAT_TEXT tMeters + output_16dp d'3' ; max. depth + STRCAT_TEXT tMeters -logbook_page2_depth_common: - STRCAT " - " - call ext_flash_byte_read_plus ; divetime in minutes - movff temp1,lo - call ext_flash_byte_read_plus - movff temp1,hi ; divetime in minutes +logbook_page2_depth_common: + STRCAT " - " + call ext_flash_byte_read_plus ; divetime in minutes + movff ext_flash_rw,lo + call ext_flash_byte_read_plus + movff ext_flash_rw,hi ; divetime in minutes bsf leftbind - output_16 ; divetime minutes - PUTC "m" - LOG_POINT_TO log_divetime+.2 - call ext_flash_byte_read_plus ; read divetime seconds - movff temp1,lo + output_16 ; divetime minutes + PUTC "m" + LOG_POINT_TO log_divetime+.2 + call ext_flash_byte_read_plus ; read divetime seconds + movff ext_flash_rw,lo bsf leftbind - output_99x ; divetime seconds + output_99x ; divetime seconds call TFT_standard_color - STRCAT_PRINT "s" -; ; Dive mode -; LOG_POINT_TO log_divemode -; call ext_flash_byte_read_plus ; Read divemode -; movff temp1,lo -; call TFT_display_decotype_surface1 ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE) + STRCAT_PRINT "s" +; ; Dive mode +; LOG_POINT_TO log_divemode +; call ext_flash_byte_read_plus ; Read divemode +; movff ext_flash_rw,lo +; call TFT_display_decotype_surface1 ; "strcat_print"s divemode (OC, CC, APNEA or GAUGE) return - - -log_show_sp_common: - lfsr FSR2,buffer - call ext_flash_byte_read_plus ; Read setpoint - movff temp1,lo - clrf hi - bsf leftbind - output_16dp d'3' - bcf leftbind - STRCAT_TEXT tbar - PUTC " " - call ext_flash_byte_read_plus ; change depth - movff temp1,lo + + +log_show_sp: + lfsr FSR2,buffer + call ext_flash_byte_read_plus ; Read setpoint + movff ext_flash_rw,lo + clrf hi + bsf leftbind + output_16dp d'3' + bcf leftbind + STRCAT_TEXT tbar + PUTC " " + call ext_flash_byte_read_plus ; change depth + movff ext_flash_rw,lo - TSTOSS opt_units ; 0=Meters, 1=Feets - bra log_show_sp_common_metric - movf lo,W - mullw .100 ; convert meters to mbar - movff PRODL,lo - movff PRODH,hi - call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet - output_16 - STRCAT_TEXT tFeets ; "ft" - bra log_show_sp_common_common -log_show_sp_common_metric: - output_8 - STRCAT_TEXT tMeters ; "m" -log_show_sp_common_common: - STRCAT_PRINT "" - return + TSTOSS opt_units ; 0=Meter, 1=Feet + bra log_show_sp_metric + movf lo,W + mullw .100 ; convert meters to mbar + movff PRODL,lo + movff PRODH,hi + call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet + output_16 + STRCAT_TEXT tFeets ; "ft" + bra log_show_sp_common +log_show_sp_metric: + output_8 + STRCAT_TEXT tMeters ; "m" +log_show_sp_common: + STRCAT_PRINT "" + return + -log_show_gas_common2: ; as log_show_gas_common but with change depth - lfsr FSR2,buffer - call ext_flash_byte_read_plus ; current O2 - movff temp1,lo - call ext_flash_byte_read_plus ; current He - movff temp1,hi - call customview_show_mix ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 - call ext_flash_byte_read_plus ; change depth - movff temp1,lo +log_show_gas: ; show gas data + call TFT_color_code_gas ; color the output (gas number is in WREG) + lfsr FSR2,buffer + call ext_flash_byte_read_plus ; read gas O2 fraction + movff ext_flash_rw,lo + call ext_flash_byte_read_plus ; read gas He fraction + movff ext_flash_rw,hi + call customview_show_mix ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 + call ext_flash_byte_read_plus ; read change depth - TSTOSS opt_units ; 0=Meters, 1=Feets - bra log_show_gas_common2_metric - movf lo,W - mullw .100 ; convert meters to mbar - movff PRODL,lo - movff PRODH,hi - call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet - output_16 - STRCAT_TEXT tFeets ; "ft" - bra log_show_gas_common2_common -log_show_gas_common2_metric: - output_8 - STRCAT_TEXT tMeters ; "m" -log_show_gas_common2_common: - bcf leftbind - call ext_flash_byte_read_plus ; Gas Type - STRCAT_PRINT "" - return + btfsc log_show_gas_short ; shall we do the short version? + bra log_show_gas_common ; YES + ; long version + movff ext_flash_rw,lo ; process change depth + TSTOSS opt_units ; 0=Meter, 1=Feet + bra log_show_gas_metric + movf lo,W + mullw .100 ; convert meters to mbar + movff PRODL,lo + movff PRODH,hi + call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet + output_16 + STRCAT_TEXT tFeets ; "ft" + bra log_show_gas_common +log_show_gas_metric: + output_8 + STRCAT_TEXT tMeters ; "m" +log_show_gas_common: + call ext_flash_byte_read_plus ; read gas type - just to increment the pointer + STRCAT_PRINT "" + return END \ No newline at end of file