view code_part1/OSTC_code_c_part2/p2_main.c @ 842:454ef5c2e6aa default tip

Bugfix: Auto-SP did not show >9m for some 2C hardware versions in German language firmware Make year settings until 2040 possible (This is likely the final release for this model)
author heinrichsweikamp
date Sat, 29 Nov 2025 14:11:07 +0100
parents cb055a7d75f3
children
line wrap: on
line source

// ********************************************************************
// ** main code for simulation / tests without full simulation code  **
// ** This is NOT a part of the OSTC                                 **
// ********************************************************************

//////////////////////////////////////////////////////////////////////////////
// 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/>.
//
//////////////////////////////////////////////////////////////////////////////
// History:
// 12/25/10 v110: [jDG] split in three files (deco.c, main.c, definitions.h)
// 01/24/11     : [jDG] make it link with oled+wordprocessor display functions

#include <stdlib.h>
#include <stdio.h>

//////////////////////////////////////////////////////////////////////////////
// Compile with:
//      p2_deco.c
//      p2_environment.asm
// To have a linkable application, downloadable on the OSTC.
//////////////////////////////////////////////////////////////////////////////

#define TEST_MAIN 1
#include "p2_definitions.h"
#include "../OSTC_code_c_part2/shared_definitions.h"

//////////////////////////////////////////////////////////////////////////////
//

static void print_stops(void)
{
    //TODO: print decompression stops using aa_wordprocessor...
    PLED_ClearScreen();
    win_top = 0;
    win_leftx2 = 0;
    win_font = 0;
    win_invert = 0;
    PLED_standard_color();

    sprintf(letter, "TTS: %d", char_O_ascenttime);
    aa_wordprocessor();
    
    //TODO: Wait click (to continue)
}

//////////////////////////////////////////////////////////////////////////////
#pragma code main = 0x9000
void main(void)
{
    static unsigned int i;
    static unsigned int debug_temp;

    char_I_deco_model = 0;
    deco_clear_CNS_fraction();

    char_I_N2_ratio = 79; //38;
    char_I_He_ratio = 0; //50;
    char_I_deco_distance = 10; // 10 = 1 meter
    char_I_depth_last_deco = 3;	// values below 3 (meter) are ignored
    
    char_I_const_ppO2 = 0;
    char_I_deco_ppO2_change = 0; // [dm] 10 = 1 meter
    char_I_deco_ppO2 = 0;
    
    char_I_deco_gas_change1 = 20; // [m] 1 = 1 meter
    char_I_deco_N2_ratio1 = 50;
    char_I_deco_He_ratio1 = 0;
    
    char_I_deco_gas_change2 = 6; // [m] 1 = 1 meter
    char_I_deco_N2_ratio2 = 0;
    char_I_deco_He_ratio2 = 0;
    
    char_I_deco_gas_change3 = 0; // [m] 1 = 1 meter
    char_I_deco_gas_change4 = 0; // [m] 1 = 1 meter
    char_I_deco_gas_change5 = 0; // [m] 1 = 1 meter

    //char_I_actual_ppO2;					// 0x507
    char_I_GF_High_percentage = 100;			// 0x514	new in v.102
    char_I_GF_Low_percentage  = 100;			// 0x515	new in v.102
    
    char_I_saturation_multiplier = 110;
    char_I_desaturation_multiplier = 90;
    
    //---- Starts at zero meter ----------------------------------------------
    int_I_pres_respiration = 1000;//980;
    int_I_pres_surface = 1000;//980;
    deco_clear_tissue();

    //---- Calculate 29min at 45m --------------------------------------------
    char_I_step_is_1min = 1;
    int_I_pres_respiration = 4500 + int_I_pres_surface;
    
    for (i=0;i<29;i++)
        deco_calc_hauptroutine();

    // Wait for one full computation
    char_I_step_is_1min = 0;
    char_O_deco_status = 255;
    while (char_O_deco_status)
    	deco_calc_hauptroutine();
    print_stops();

    // And a second one
    while (char_O_deco_status)
    	deco_calc_hauptroutine();
    print_stops();

    //---- 3000 seconds at 90m -----------------------------------------------
    int_I_pres_respiration = 10000;
    for (i=0;i<1500;i++)
        deco_calc_hauptroutine();

    while(char_O_deco_status != 0)
        deco_calc_hauptroutine();
    print_stops();

    //---- 300 seconds at 29m ------------------------------------------------
    int_I_pres_respiration = 3000;
    for (i=0;i<150;i++)
    	deco_calc_hauptroutine();

    while(char_O_deco_status != 0)
        deco_calc_hauptroutine();
    print_stops();
}