Mercurial > public > mk2
diff code_part1/OSTC_code_asm_part1/menu_reset.asm @ 0:96a35aeda5f2
Initial setup
author | heinrichsweikamp |
---|---|
date | Tue, 12 Jan 2010 15:05:59 +0100 |
parents | |
children | 3cf8af30b36e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/code_part1/OSTC_code_asm_part1/menu_reset.asm Tue Jan 12 15:05:59 2010 +0100 @@ -0,0 +1,519 @@ + +; OSTC - diving computer code +; Copyright (C) 2008 HeinrichsWeikamp GbR + +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. + +; You should have received a copy of the GNU General Public License +; along with this program. If not, see <http://www.gnu.org/licenses/>. + + +; Menu "Reset all" +; written by: Matthias Heinrichs, info@heinrichsweikamp.com +; written: 10/30/05 +; last updated: 08/08/31 +; known bugs: +; ToDo: + +; routines to reset external EEPROM (currently inactvated!) +; routines to reset custom function, gases and decompression values +; does not reset clock + +menu_reset: + movlw d'1' + movwf menupos + + call PLED_ClearScreen + call PLED_reset_menu_mask + +menu_reset2: + clrf timeout_counter2 + bcf sleepmode + bcf menubit2 + bcf menubit3 + bsf menubit + bsf cursor + call PLED_reset_menu_mask + call PLED_menu_cursor + bcf switch_left + bcf switch_right +menu_reset_loop: + call check_switches_menu + btfsc menubit2 + bra do_menu_reset ; call submenu + btfss menubit + bra menu ; exit setup menu and return to main menu + btfsc onesecupdate + call timeout_surfmode + btfsc onesecupdate + call set_dive_modes + btfsc onesecupdate + call test_charger ; check if charger IC is active + btfsc onesecupdate + call get_battery_voltage ; get battery voltage + bcf onesecupdate ; End of one second tasks + btfsc sleepmode + goto menu + btfsc divemode + goto restart ; exit menu, restart and enter divemode + bra menu_reset_loop +do_menu_reset: ; calls submenu + dcfsnz menupos,F + bra do_menu_reset_exit ; Cancel, exit + dcfsnz menupos,F + bra do_menu_reset_all ; Reset all settings + dcfsnz menupos,F + bra do_menu_reset_logbook ; Reset Logbook Memory! + dcfsnz menupos,F + bra do_menu_reset_reboot ; Reboot OSTC + dcfsnz menupos,F + bra do_menu_reset_decodata ; Reset Decodata +do_menu_reset_exit: + movlw d'3' + movwf menupos + bra menu2 ; exit... + + +do_menu_reset_reboot: + call PLED_confirmbox ; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK! + movwf menupos ; Used as temp + tstfsz menupos + bra do_menu_reset_reboot2 ; Delete now! + bra do_menu_reset_exit ; Cancel! + +do_menu_reset_reboot2: + call PLED_DisplayOff ; Power-down OLED + movlw b'00000000' ; Bit6: PPL Disable + movwf OSCTUNE + movlw b'01111110' ; 8MHz + movwf OSCCON + reset + goto 0x00000 ; restart to 0x00000 + +do_menu_reset_logbook: + call PLED_confirmbox ; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK! + movwf menupos ; Used as temp + tstfsz menupos + bra do_menu_reset_logbook2 ; Delete Logbook now! + bra do_menu_reset_exit ; Cancel! + +do_menu_reset_logbook2: + call PLED_ClearScreen + DISPLAYTEXT .25 ; "Reset..." + call reset_external_eeprom ; delete profile memory + bra do_menu_reset_exit + +do_menu_reset_decodata: + call PLED_confirmbox ; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK! + movwf menupos ; Used as temp + tstfsz menupos + bra do_menu_reset_decodata2 ; Reset Deco Data now! + bra do_menu_reset_exit ; Cancel! + +do_menu_reset_decodata2: +; reset deco data + call PLED_ClearScreen + DISPLAYTEXT .25 ; "Reset..." + movff amb_pressure+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine + movff amb_pressure+1,int_I_pres_respiration+1 + call deco_main_clear_tissue ; + movlb b'00000001' ; RAM Bank1 selected + goto restart ; done. quit to surfmode + +do_menu_reset_all: + call PLED_confirmbox ; Returns WREG=0 for Cancel (Or Timeout) and WREG=1 for OK! + movwf menupos ; Used as temp + tstfsz menupos + bra do_menu_reset_all2 ; Reset all now! + bra do_menu_reset_exit ; Cancel! + +do_menu_reset_all2: + call PLED_ClearScreen + DISPLAYTEXT .25 ; "Reset..." + +reset_start: +; reset deco data + movff amb_pressure+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine + movff amb_pressure+1,int_I_pres_respiration+1 + call deco_main_clear_tissue ; + movlb b'00000001' ; RAM Bank1 selected + +; reset gases + clrf EEADRH ; EEPROM BANK 0 ! + + movlw d'3' ; address of first gas-1 + movwf EEADR + clrf hi ; He part (default for all gases: 0%) + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #1 + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #2 + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #3 + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #4 + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #5 + movlw d'21' ; O2 part (21%) + rcall reset_customfunction ; saves default and current value for gas #6 + +reset_all_cf: +; resets all customfunctions to the following default values + movlw d'1' + movwf EEDATA + write_int_eeprom d'33' ; reset start gas + clrf EEDATA + write_int_eeprom d'34' ; reset deco model to ZH-L16 + clrf EEDATA + write_int_eeprom d'35' ; Do not use O2 Sensor in CC Modes + + movlw d'0' + clrf EEDATA + write_int_eeprom d'39' ; Disable Debugbode + clrf EEDATA + write_int_eeprom d'90' ; Disable Brightness offset? (Dim=1, Normal = 0) + clrf EEDATA + write_int_eeprom d'91' ; Reset Date format to MM/DD/YY + + movlw d'100' + write_int_eeprom d'26' ; Salinity default: 1.00 kg/l + + movlw b'00011111' + movwf EEDATA + write_int_eeprom d'27' ; reset active gas flags + + clrf EEDATA + write_int_eeprom d'28' ; reset change depth gas #1 + clrf EEDATA + write_int_eeprom d'29' ; reset change depth gas #2 + clrf EEDATA + write_int_eeprom d'30' ; reset change depth gas #3 + clrf EEDATA + write_int_eeprom d'31' ; reset change depth gas #4 + clrf EEDATA + write_int_eeprom d'32' ; reset change depth gas #5 + + movlw d'100' + movwf EEDATA + write_int_eeprom d'36' ; reset mix1 to ppO2=1.00Bar + write_int_eeprom d'37' ; reset mix2 to ppO2=1.00Bar + write_int_eeprom d'38' ; reset mix3 to ppO2=1.00Bar + + movlw d'1' + movwf nofly_time+0 ; Clear nofly time + clrf nofly_time+1 ; Clear nofly time + +#DEFINE dive_threshold d'100' ; 8BIT 100cm +#DEFINE surf_threshold d'30' ; 8BIT 30cm +#DEFINE diveloop_timeout d'240' ; 8BIT 240s +#DEFINE surfloop_timeout d'120' ; 8BIT 120s +#DEFINE premenu_timeout d'5' ; 8BIT 5s + +#DEFINE minimum_velocity d'7' ; 8BIT 7min/min +#DEFINE pressure_offset_divemode d'1160' ; 15BIT 1160mBar +#DEFINE max_surfpressure d'1100' ; 15BIT 1100mBar +#DEFINE min_gradient_factor d'20' ; 8Bit 20% +#DEFINE oxygen_threshold d'20' ; 8Bit 20% + +#DEFINE dive_menu_timeout d'30' ; 8BIT 30s +#DEFINE saturation_multiplier d'110' ; 8BIT x1.1 +#DEFINE desaturation_multiplier d'90' ; 8BIT x0.9 +#DEFINE nofly_time_ratio d'60' ; 8BIT 60% +#DEFINE gradient_factor_alarm1 d'100' ; 8Bit 100% + +#DEFINE gradient_factor_alarm2 d'120' ; 8Bit 120% +#DEFINE deco_distance_for_sim d'10' ; 8Bit 1m +#DEFINE ppo2_warning_low d'019' ; 8Bit 0.19 Bar +#DEFINE ppo2_warning_high d'160' ; 8Bit 1.60 Bar +#DEFINE ppo2_display_high d'150' ; 8Bit 1.50 Bar + +#DEFINE sampling_rate d'10' ; 8Bit 10s +#DEFINE sampling_divisor_temp d'6' ; 8Bit /6 +#DEFINE sampling_divisor_deco d'6' ; 8Bit /6 +#DEFINE sampling_divisor_tank d'0' ; 8Bit never +#DEFINE sampling_divisor_ppo2 d'0' ; 8Bit never + +#DEFINE sampling_divisor_deco2 d'12' ; 8Bit /12 +#DEFINE sampling_divisor_nyu2 d'0' ; 8Bit never +#DEFINE cns_display_high d'20' ; 8Bit 20% +#DEFINE logbook_offset d'0' ; 15Bit No Offset, but 15Bit value +#DEFINE last_deco_depth d'3' ; 8Bit 3m +#DEFINE timeout_apnoe_mode d'10' ; 8Bit 10min +#DEFINE show_voltage_value d'0' ; 1Bit =1 Show value instead of symbol, =0 Show Symbol + +#DEFINE GF_low_default d'30' ; 8Bit 30% +#DEFINE GF_high_default d'90' ; 8Bit 90% +#DEFINE color_battery_surface d'223' ; 8Bit Color Battery sign Surfacemode +#DEFINE SP_high_HUD_default d'140' ; 8Bit 1.40Bar +#DEFINE SP_nom_HUD_default d'120' ; 8Bit 1.20Bar +#DEFINE HUD_style d'0' ; 8Bit OSTC Style + +#DEFINE show_seconds_divemode d'0' ; 1Bit =1 Show the seconds in Divemode +#DEFINE flip_display_default d'0' ; 1Bit =1 Flip Display +#DEFINE use_ppo2_screen_default d'0' ; 1Bit =1 Use alternative outputs for ppO2 sensor +#DEFINE replace_temp_with_avr_depth d'0' ; 1Bit =1 Show (resetable) average Depth instead of temperature + + movlw d'127' ; address of low byte of first custom function + movwf EEADR + clrf hi ; only required once + movlw LOW dive_threshold ; 8Bit value + rcall reset_customfunction ; saves default and current value + + movlw LOW surf_threshold + rcall reset_customfunction ; saves default and current value + + movlw LOW diveloop_timeout + rcall reset_customfunction ; saves default and current value + + movlw LOW surfloop_timeout + rcall reset_customfunction ; saves default and current value + + movlw LOW premenu_timeout + rcall reset_customfunction ; saves default and current value + + movlw LOW minimum_velocity + rcall reset_customfunction ; saves default and current value + + movlw HIGH pressure_offset_divemode + movwf hi + bsf hi,7 ; 15Bit value + movlw LOW pressure_offset_divemode + rcall reset_customfunction ; saves default and current value + + movlw HIGH max_surfpressure + movwf hi + bsf hi,7 ; 15Bit value + movlw LOW max_surfpressure + rcall reset_customfunction ; saves default and current value + + movlw LOW min_gradient_factor + rcall reset_customfunction ; saves default and current value + + movlw LOW oxygen_threshold + rcall reset_customfunction ; saves default and current value + + movlw LOW dive_menu_timeout + rcall reset_customfunction ; saves default and current value + + movlw LOW saturation_multiplier + rcall reset_customfunction ; saves default and current value + + movlw LOW desaturation_multiplier + rcall reset_customfunction ; saves default and current value + + movlw LOW nofly_time_ratio + rcall reset_customfunction ; saves default and current value + + movlw LOW gradient_factor_alarm1 + rcall reset_customfunction ; saves default and current value + + movlw LOW gradient_factor_alarm2 + rcall reset_customfunction ; saves default and current value + + movlw LOW deco_distance_for_sim + rcall reset_customfunction ; saves default and current value + + movlw LOW ppo2_warning_low + rcall reset_customfunction ; saves default and current value + + movlw LOW ppo2_warning_high + rcall reset_customfunction ; saves default and current value + + movlw LOW ppo2_display_high + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_rate + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_temp + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_deco + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_tank + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_ppo2 + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_deco2 + rcall reset_customfunction ; saves default and current value + + movlw LOW sampling_divisor_nyu2 + rcall reset_customfunction ; saves default and current value + + movlw LOW cns_display_high + rcall reset_customfunction ; saves default and current value + + clrf hi + bsf hi,7 ; 15Bit value + movlw LOW logbook_offset + rcall reset_customfunction ; saves default and current value + + movlw LOW last_deco_depth + rcall reset_customfunction ; saves default and current value + + movlw LOW timeout_apnoe_mode + rcall reset_customfunction ; saves default and current value + + movlw LOW show_voltage_value + rcall reset_customfunction ; saves default and current value + +reset_all_cf_bank1: + movlw d'1' + movwf EEADRH ; EEPROM BANK 1 !! + movlw d'127' ; address of low byte of first custom function + movwf EEADR + clrf hi ; only required once/bank + + movlw LOW GF_low_default + rcall reset_customfunction ; saves default and current value + + movlw LOW GF_high_default + rcall reset_customfunction ; saves default and current value + + movlw color_battery_surface + rcall reset_customfunction ; saves default and current value + + movlw SP_high_HUD_default + rcall reset_customfunction ; saves default and current value + + movlw SP_nom_HUD_default + rcall reset_customfunction ; saves default and current value + + movlw HUD_style + rcall reset_customfunction ; saves default and current value + + movlw show_seconds_divemode + rcall reset_customfunction ; saves default and current value + + movlw flip_display_default + rcall reset_customfunction ; saves default and current value + + movlw use_ppo2_screen_default + rcall reset_customfunction ; saves default and current value + + movlw replace_temp_with_avr_depth + rcall reset_customfunction ; saves default and current value + + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + movlw d'0' + rcall reset_customfunction ; saves default and current value + + clrf EEADRH ; EEPROM BANK 0 ! + + +;call reset_external_eeprom ; delete profile memory + goto restart ; all reset, quit to surfmode + +reset_customfunction: + movwf lo + incf EEADR,F + movff lo, EEDATA ; Lowbyte Defaul value + call write_eeprom + incf EEADR,F + movff hi, EEDATA ; Highbyte default value + call write_eeprom + incf EEADR,F + movff lo, EEDATA ; Lowbyte current value + call write_eeprom + incf EEADR,F + bcf hi,7 ; This bit will only be written for the default value + movff hi, EEDATA ; Highbyte current value + call write_eeprom + clrf hi + return + + +reset_external_eeprom: ; deletes complete external eeprom! + clrf eeprom_address+0 + clrf eeprom_address+1 + + movlw d'2' + movwf temp3 +reset_eeprom02: + clrf temp4 +reset_eeprom01: + movlw d'64' + movwf temp2 + bcf eeprom_blockwrite ; Blockwrite start +reset_eeprom1: + setf ext_ee_temp1 ; byte for Blockwrite.... + movf ext_ee_temp1,W ; So, 1st. Byte of block is fine, too + call write_external_eeprom_block + decfsz temp2,F ; 64 Byte done + bra reset_eeprom1 + bsf SSPCON2,PEN ; Stop condition + call WaitMSSP + WAITMS d'7' + decfsz temp4,F + bra reset_eeprom01 ; do this 256 times + decfsz temp3,F + bra reset_eeprom02 ; and this all 2 times -> 512 *64Bytes = 32KB + + bcf eeprom_blockwrite ; clear blockwrite flag + + clrf eeprom_address+0 + clrf eeprom_address+1 + + movlw 0xFD ; With these three bytes the OSTC will find the free area in the EEPROM faster + call write_external_eeprom + movlw 0xFD + call write_external_eeprom + movlw 0xFE + call write_external_eeprom + + clrf eeprom_address+0 + clrf eeprom_address+1 + return +