# HG changeset patch # User heinrichsweikamp # Date 1349257190 -7200 # Node ID 2cecac64020275f336e7883fcd20101a7eb92122 # Parent 9dc52559956eb0aee0b3f9dfd31b7876100648e5 Diluent setup menu work diff -r 9dc52559956e -r 2cecac640202 code_part1/OSTC_code_asm_part1/changelog.txt --- a/code_part1/OSTC_code_asm_part1/changelog.txt Tue Oct 02 10:04:55 2012 +0200 +++ b/code_part1/OSTC_code_asm_part1/changelog.txt Wed Oct 03 11:39:50 2012 +0200 @@ -1,8 +1,9 @@ New in 2.52: BETA Version - Do NOT use for diving! -TODO: Text 61,229,110,111,230, TXT_DIL_C update +TODO: Text 61,229,110,111,230,231 TXT_DIL_C, TXT_DIL5 update NEW: Divisor Decoplan (CF25) stores entire decoplan in logbook NEW: CF29 stored in divelog header (Byte 52) +BUGFIX: Gas Setup when using "ERR" Gases (e.g. NX17) New in 2.51: BETA Version - Do NOT use for diving! diff -r 9dc52559956e -r 2cecac640202 code_part1/OSTC_code_asm_part1/english_text.asm --- a/code_part1/OSTC_code_asm_part1/english_text.asm Tue Oct 02 10:04:55 2012 +0200 +++ b/code_part1/OSTC_code_asm_part1/english_text.asm Wed Oct 03 11:39:50 2012 +0200 @@ -116,6 +116,7 @@ #DEFINE TXT_NX1 "N" ; "N" #DEFINE TXT_NX2 "x" ; "x" #DEFINE TXT_DIL_C "D" ; "D" +#DEFINE TXT_DIL5 "Dil.#" ; "Dil.#" #ENDIF ;============================================================================= @@ -364,7 +365,7 @@ TCODE .0, .0, "Total Dives: " ;228 Total Dives: TCODE .20, .35, "Diluent Setup" ;229 Diluent Setup TCODE .20, .65, "Setpoint Setup" ;230 Setpoint Setup - TCODE .0, .0, "" ;231 unused + TCODE .5, .2, "Dil. Setup - Gaslist" ;231 Dil. Setup - Gaslist TCODE .0, .0, "" ;232 unused TCODE .0, .0, "" ;233 unused TCODE .0, .0, "" ;234 unused diff -r 9dc52559956e -r 2cecac640202 code_part1/OSTC_code_asm_part1/menu_gassetup.asm --- a/code_part1/OSTC_code_asm_part1/menu_gassetup.asm Tue Oct 02 10:04:55 2012 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_gassetup.asm Wed Oct 03 11:39:50 2012 +0200 @@ -96,7 +96,7 @@ bra menu_gassetup_Nx ; NO check o2 ; YES Write TX 15/55 - call gassetup_write_Tx + STRCAT TXT_TX3 movff wait_temp, EEADR ; Gas %O2 - Set address in internal EEPROM call read_eeprom ; O2 value movff EEDATA,lo @@ -122,7 +122,7 @@ bra menu_gassetup_O2 ; NO write O2 ; YES Write NX 32 - call gassetup_write_Nx + STRCAT TXT_NX3 output_8 bra menu_gassetup_list0 @@ -135,7 +135,7 @@ ; New v1.44se menu_gassetup_Air: cpfseq lo ; o2 = 21% - call menu_gassetup_Err + bra menu_gassetup_Err STRCAT TXT_AIR4 output_8 @@ -274,7 +274,6 @@ movwf menupos bcf gas_setup_page2 ; Page 1 of gassetup bcf menubit4 - bcf sleepmode bcf first_FA ; Here: =1: -, =0: + menu_gassetup0: @@ -925,7 +924,7 @@ bra gassetup_title_bar3 ; NO check o2 ; YES Write TX 15/55 - call gassetup_write_Tx ; Write TX + STRCAT TXT_TX3 movf divemins+0,W addlw 0x06 movwf EEADR @@ -958,7 +957,7 @@ bra gassetup_title_bar4 ; NO write O2 ; YES Write NX 32 - call gassetup_write_Nx + STRCAT TXT_NX3 output_8 bra gassetup_title_bar7 @@ -981,7 +980,7 @@ gassetup_title_bar6: ; ERROR STRCAT TXT_ERR4 output_8 - bra gassetup_title_bar7 + ;bra gassetup_title_bar7 gassetup_title_bar7: STRCAT TXT_AT4 @@ -996,16 +995,6 @@ WIN_INVERT .0 ; Init new Wordprocessor return -; New v1.44se -gassetup_write_Nx: - STRCAT TXT_NX3 - return - -; New v1.44se -gassetup_write_Tx: - STRCAT TXT_TX3 - return - gassetup_show_ppO2: movf divemins+0,W addlw 0x06 diff -r 9dc52559956e -r 2cecac640202 code_part1/OSTC_code_asm_part1/menu_ppO2.asm --- a/code_part1/OSTC_code_asm_part1/menu_ppO2.asm Tue Oct 02 10:04:55 2012 +0200 +++ b/code_part1/OSTC_code_asm_part1/menu_ppO2.asm Wed Oct 03 11:39:50 2012 +0200 @@ -91,7 +91,7 @@ call menu_pre_loop_common ; Clear some menu flags, timeout and switches call PLED_topline_box WIN_INVERT .1 ; Init new Wordprocessor - DISPLAYTEXT .106 ; Gas List + DISPLAYTEXT .231 ; Dil. Setup - Gaslist WIN_INVERT .0 ; Init new Wordprocessor clrf decodata+0 ; Here: # of gas 0-4 clrf divemins+0 ; Here: # of Gas * 4 @@ -126,8 +126,10 @@ movff WREG,win_top lfsr FSR2,letter - movff wait_temp, EEADR ; Gas %He - Set address in internal EEPROM - incf EEADR,F ; Gas %He - Set address in internal EEPROM + incf wait_temp, W ; Gas %O2 + movwf EEADR ; Gas %He - Set address in internal EEPROM + movlw .1 + movwf EEADRH call read_eeprom ; Read He value from EEPROM movff EEDATA,lo ; Move EEDATA -> lo movf lo,f ; Move lo -> f @@ -136,13 +138,17 @@ bra menu_diluentsetup_Nx ; NO check o2 ; YES Write TX 15/55 - call gassetup_write_Tx + STRCAT TXT_TX3 movff wait_temp, EEADR ; Gas %O2 - Set address in internal EEPROM + movlw .1 + movwf EEADRH call read_eeprom ; O2 value movff EEDATA,lo output_8 PUTC '/' incf EEADR,F ; Gas #hi: %He - Set address in internal EEPROM + movlw .1 + movwf EEADRH call read_eeprom ; He value movff EEDATA,lo output_8 @@ -151,6 +157,8 @@ ; New v1.44se menu_diluentsetup_Nx: movff wait_temp, EEADR ; Gas %O2 - Set address in internal EEPROM + movlw .1 + movwf EEADRH call read_eeprom ; Read O2 value from EEPROM movff EEDATA,lo ; Move EEDATA -> lo movf lo,f ; Move lo -> f @@ -162,7 +170,7 @@ bra menu_diluentsetup_O2 ; NO write O2 ; YES Write NX 32 - call gassetup_write_Nx + STRCAT TXT_NX3 output_8 bra menu_diluentsetup_list0 @@ -173,7 +181,7 @@ menu_diluentsetup_Air: cpfseq lo ; o2 = 21% - call menu_gassetup_Err + bra menu_diluentsetup_Err STRCAT TXT_AIR4 output_8 @@ -237,21 +245,466 @@ dcfsnz menupos,F bra diluent_list_edit_gas1 dcfsnz menupos,F - bra diluent_list_edit_gas1 + bra diluent_list_edit_gas2 dcfsnz menupos,F - bra diluent_list_edit_gas1 + bra diluent_list_edit_gas3 dcfsnz menupos,F - bra diluent_list_edit_gas1 + bra diluent_list_edit_gas4 dcfsnz menupos,F - bra diluent_list_edit_gas1 + bra diluent_list_edit_gas5 bra menu_const_ppO2 ; Exit List diluent_list_edit_gas1: + movlw d'0' ; Diluent Number 0-4 + movwf decodata+0 + movlw d'96' ; EEPROM address of %O2 + movwf divemins+0 + bra menu_diluentgas diluent_list_edit_gas2: + movlw d'1' ; Diluent Number 0-4 + movwf decodata+0 + movlw d'98' ; EEPROM address of %O2 + movwf divemins+0 + bra menu_diluentgas diluent_list_edit_gas3: + movlw d'2' ; Diluent Number 0-4 + movwf decodata+0 + movlw d'100' ; EEPROM address of %O2 + movwf divemins+0 + bra menu_diluentgas diluent_list_edit_gas4: + movlw d'3' ; Diluent Number 0-4 + movwf decodata+0 + movlw d'102' ; EEPROM address of %O2 + movwf divemins+0 + bra menu_diluentgas diluent_list_edit_gas5: - bra menu_const_ppO2 ; Exit List + movlw d'4' ; Diluent Number 0-4 + movwf decodata+0 + movlw d'104' ; EEPROM address of %O2 + movwf divemins+0 +; bra menu_diluentgas +menu_diluentgas: + movlw d'1' + movwf menupos + bcf menubit4 + bcf first_FA ; Here: =1: -, =0: + + +menu_diluentgas0: + call PLED_ClearScreen + WIN_LEFT .20 + WIN_TOP .155 + lfsr FSR2, letter + OUTPUTTEXT .11 ; Exit + STRCAT_PRINT "" + +menu_diluentgas1: + call menu_pre_loop_common ; Clear some menu flags, timeout and switches + + call diluent_title_bar2 ; Displays the title bar with the current Gas info + + WIN_LEFT .20 + WIN_TOP .35 + STRCPY TXT_O2_4 + movff divemins+0,EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; O2 value + movff EEDATA,lo + output_8 + STRCAT_PRINT "% " + +; Show MOD in m + WIN_LEFT .90 + lfsr FSR2, letter + OUTPUTTEXTH .297 ; MOD: + + GETCUSTOM8 .18 ; ppO2 warnvalue in WREG + mullw d'10' + movff PRODL,xA+0 + movff PRODH,xA+1 ; ppO2 in [0.01bar] * 10 + movff divemins+0,EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; O2 value + movff EEDATA,xB+0 + clrf xB+1 + call div16x16 ; xA/xB=xC with xA as remainder + movlw d'10' + subwf xC+0,F ; Subtract 10m... + movff xC+0,lo + movlw d'0' + subwfb xC+1,F + movff xC+1,hi + + output_16 + STRCAT_PRINT TXT_METER3 + + WIN_LEFT .20 + WIN_TOP .65 + STRCPY TXT_HE4 + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; He value + movff EEDATA,lo + output_8 + STRCAT_PRINT "% " + +; Show END in m + lfsr FSR2, letter + WIN_LEFT .90 + OUTPUTTEXTH .298 ; END: + GETCUSTOM8 .18 ; ppO2 warnvalue in WREG + mullw d'10' + movff PRODL,xA+0 + movff PRODH,xA+1 ; ppO2 in [0.01bar] * 10 + movff divemins+0,EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; O2 value + movff EEDATA,xB+0 + clrf xB+1 + call div16x16 ; xA/xB=xC with xA as remainder + movlw d'10' + subwf xC+0,F ; Subtract 10m... + movff xC+0,lo + movlw d'0' + subwfb xC+1,F + movff xC+1,hi ; lo:hi holding MOD in meters + movlw d'10' + addwf lo,F + movlw d'0' + addwfc hi,F ; lo:hi holding MOD+10m + + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; He value in % -> EEDATA + movlw d'100' + movwf xA+0 + movf EEDATA,W ; He value in % -> EEDATA + subwf xA+0,F ; xA+0 = 100 - He Value in % + clrf xA+1 + movff lo,xB+0 + movff hi,xB+1 ; Copy MOD+10 + call mult16x16 ; xA*xB=xC + movff xC+0,xA+0 + movff xC+1,xA+1 + movlw d'100' + movwf xB+0 + clrf xB+1 + call div16x16 ; xA/xB=xC with xA as remainder + ; xC:2 = ((MOD+10) * 100 - HE Value in %) / 100 + movlw d'10' + subwf xC+0,F ; Subtract 10m... + movff xC+0,lo + movlw d'0' + subwfb xC+1,F + movff xC+1,hi + output_16 + STRCAT_PRINT TXT_METER3 + + WIN_LEFT .20 + WIN_TOP .95 + STRCPY "+/-: " + movlw '+' + btfsc first_FA + movlw '-' + movwf POSTINC2 + call word_processor + + WIN_TOP .125 + lfsr FSR2,letter + OUTPUTTEXT .89 ; Default: + movlw .21 + movwf lo ; Default always Air + output_8 + PUTC '/' + clrf lo ; Default He value + output_8 + STRCAT_PRINT " " + + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + call PLED_menu_cursor + +diluentgassetup_loop: + call check_switches_logbook + + btfsc menubit3 + bra diluentgassetup2 ; move cursor + + btfsc menubit2 + bra do_diluentgassetup ; call submenu + + btfsc onesecupdate + call menu_check_dive_and_timeout ; "Goto restart" or sets sleepmode flag + + bcf onesecupdate ; 1 sec. functions done + + btfsc sleepmode + bra exit_menu_const_ppO2 + + bra diluentgassetup_loop + +diluentgassetup2: + incf menupos,F + movlw d'6' + cpfseq menupos ; =6? + bra diluentgassetup3 ; No + movlw d'1' + movwf menupos + +diluentgassetup3: + clrf timeout_counter2 + call PLED_menu_cursor + + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + + bcf menubit3 ; clear flag + bra diluentgassetup_loop + +do_diluentgassetup: + dcfsnz menupos,F + bra adjust_o2_diluent + dcfsnz menupos,F + bra adjust_he_diluent + dcfsnz menupos,F + bra toggle_plus_minus_diluentsetup + dcfsnz menupos,F + bra restore_gas_diluent +exit_diluentgassetup: ; exit... + movff decodata+0,menupos + incf menupos,F + bra menu_diluentsetup_prelist + +toggle_plus_minus_diluentsetup: + btg first_FA + movlw d'3' + movwf menupos + bra menu_diluentgas1 ; return + +adjust_o2_diluent: + movff divemins+0,EEADR ; read current value + movlw .1 + movwf EEADRH + call read_eeprom ; Low-value + movff EEDATA,lo + + btfsc first_FA ; Minus? + bra adjust_o2_1_diluent ; yes, minus! + + incf lo,F ; increase O2 + movlw d'101' + cpfseq lo + bra adjust_o2_2_diluent + movlw d'4' ; LOWER O2 Limit + movwf lo + bra adjust_o2_2_diluent + +adjust_o2_1_diluent: + decf lo,F ; decrease O2 + movlw d'3' + cpfseq lo + bra adjust_o2_2_diluent + + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; read He value + + movlw d'100' + movwf lo + movf EEDATA,W ; He value + subwf lo,F ; lo=100% - He% + +adjust_o2_2_diluent: ; test if O2+He>100... + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; read He value + movf EEDATA,W ; He value + addwf lo,W ; add O2 value + movwf hi ; store in temp + movlw d'101' + cpfseq hi ; O2 and He > 100? + bra adjust_o2_3_diluent ; No! + + movlw d'4' ; LOWER O2 Limit + movwf lo + +adjust_o2_3_diluent: + movff divemins+0,EEADR ; save current value + movff lo,EEDATA + movlw .1 + movwf EEADRH + call write_eeprom ; Low-value + + movlw d'1' + movwf menupos + bra menu_diluentgas1 ; return + +adjust_he_diluent: + incf divemins+0,W + movwf EEADR ; read current value + movlw .1 + movwf EEADRH + call read_eeprom ; Low-value + movff EEDATA,lo + + btfsc first_FA ; Minus? + bra adjust_he_1_diluent ; yes, minus! + + incf lo,F + movlw d'92' ; He limited to (useless) 90% + cpfseq lo + bra adjust_he_2_diluent + clrf lo + bra adjust_he_2_diluent + +adjust_he_1_diluent: + decf lo,F ; decrease He + movlw d'255' + cpfseq lo + bra adjust_he_2_diluent + clrf lo + +adjust_he_2_diluent: ; test if O2+He>100... + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; read He value + movf EEDATA,W ; He value + addwf lo,W ; add O2 value + movwf hi ; store in temp + movlw d'101' + cpfseq hi ; O2 and He > 100? + bra adjust_he_3_diluent ; No! +; clrf lo ; Yes, clear He to zero + decf lo,F ; reduce He again = unchanged after operation + +adjust_he_3_diluent: + incf divemins+0,W ; save current value + movwf EEADR + movff lo,EEDATA + movlw .1 + movwf EEADRH + call write_eeprom ; Low-value + + movlw d'2' + movwf menupos + bra menu_diluentgas1 ; + +restore_gas_diluent: + movff divemins+0,EEADR ; save Default value (O2) + movlw .1 + movwf EEADRH + movlw .21 ; Always Air + movwf EEDATA + call write_eeprom + incf EEADR,F ; Point to He + clrf EEDATA + call write_eeprom + movlw d'4' + movwf menupos + bra menu_diluentgas1 + + +diluent_title_bar2: + call PLED_topline_box + WIN_INVERT .1 ; Init new Wordprocessor + WIN_TOP .2 + WIN_LEFT .30 + lfsr FSR2,letter + STRCAT TXT_DIL5 ; Dil.# + movff decodata+0,lo + incf lo,F + bsf leftbind + output_99 + STRCAT_PRINT ": " + + WIN_TOP .2 + WIN_LEFT .80 + lfsr FSR2,letter + + ;He check + incf divemins+0,W + movwf EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; He value + movff EEDATA,lo ; Move EEData -> lo + movf lo,f ; Move lo -> f + movlw d'0' ; Move 0 -> WREG + cpfsgt lo ; He > 0? + bra diluent_title_bar3 ; NO check o2 + + ; YES Write TX 15/55 + STRCAT TXT_TX3 + movff divemins+0,EEADR + movlw .1 + movwf EEADRH + call read_eeprom ; O2 value + movff EEDATA,lo + output_8 ; Write O2 + PUTC '/' + incf divemins+0,W + movwf EEADR + call read_eeprom ; He value + movff EEDATA,lo + output_8 ; Write He + bra diluent_title_bar7 + +; New v1.44se +diluent_title_bar3: ; O2 Check + movff divemins+0,EEADR + call read_eeprom ; O2 value + movff EEDATA,lo + movf lo,f ; Move lo -> f + movlw d'21' ; Move 21 -> WREG + cpfseq lo ; o2 = 21 + cpfsgt lo ; o2 > 21% + bra diluent_title_bar5 ; NO AIR + movlw d'100' ; Move 100 -> WREG + cpfslt lo ; o2 < 100% + bra diluent_title_bar4 ; NO write O2 + + ; YES Write NX 32 + STRCAT TXT_NX3 + output_8 + bra diluent_title_bar7 + +; New v1.44se +diluent_title_bar4: + STRCAT TXT_O2_3 + output_8 + bra diluent_title_bar7 + +; New v1.44se +diluent_title_bar5: + cpfseq lo ; o2 = 21% + bra diluent_title_bar6 + + STRCAT TXT_AIR4 + output_8 + bra diluent_title_bar7 + +; New v1.44se +diluent_title_bar6: ; ERROR + STRCAT TXT_ERR4 + output_8 + ;bra diluent_title_bar7 + +diluent_title_bar7: + STRCAT_PRINT "" + WIN_INVERT .0 ; Init new Wordprocessor + return + ; ***