Mercurial > public > ostc4
comparison Discovery/Src/buehlmann.c @ 257:21387d7e786f bm-3
Buehlmann: factor out gNDL and gTTS
Get rid of global gNDL and gTTS. Trivial cleanup.
Signed-off-by: Jan Mulder <jlmulder@xs4all.nl>
| author | Jan Mulder <jlmulder@xs4all.nl> |
|---|---|
| date | Fri, 12 Apr 2019 21:04:52 +0200 |
| parents | d10f53e39374 |
| children | 0087d6251f59 |
comparison
equal
deleted
inserted
replaced
| 256:d10f53e39374 | 257:21387d7e786f |
|---|---|
| 38 static float tissue_tolerance(void); | 38 static float tissue_tolerance(void); |
| 39 static void ambient_bar_to_deco_stop_depth_bar(SDiveSettings *pDiveSettings, float ceiling); | 39 static void ambient_bar_to_deco_stop_depth_bar(SDiveSettings *pDiveSettings, float ceiling); |
| 40 static int ascend_with_all_gaschanges(SDiveSettings *pDiveSettings, float pressure_decrease); | 40 static int ascend_with_all_gaschanges(SDiveSettings *pDiveSettings, float pressure_decrease); |
| 41 static float next_stop_depth_input_is_actual_stop_id(SDiveSettings *pDiveSettings, int actual_id); | 41 static float next_stop_depth_input_is_actual_stop_id(SDiveSettings *pDiveSettings, int actual_id); |
| 42 static float get_gf_at_pressure(SDiveSettings *pDiveSettings, float pressure); | 42 static float get_gf_at_pressure(SDiveSettings *pDiveSettings, float pressure); |
| 43 static void buehlmann_calc_ndl(SDiveSettings *pDiveSettings); | 43 static int buehlmann_calc_ndl(SDiveSettings *pDiveSettings); |
| 44 static _Bool dive1_check_deco(SDiveSettings *pDiveSettings); | 44 static _Bool dive1_check_deco(SDiveSettings *pDiveSettings); |
| 45 | 45 |
| 46 static SDecoinfo gDecotable; | 46 static SDecoinfo gDecotable; |
| 47 static float gSurface_pressure_bar; | 47 static float gSurface_pressure_bar; |
| 48 static float gPressure; | 48 static float gPressure; |
| 49 static int gGas_id; | 49 static int gGas_id; |
| 50 static float gTTS; | |
| 51 static float gTissue_nitrogen_bar[16]; | 50 static float gTissue_nitrogen_bar[16]; |
| 52 static float gTissue_helium_bar[16]; | 51 static float gTissue_helium_bar[16]; |
| 53 static float gGF_value; | 52 static float gGF_value; |
| 54 static float gCNS; | 53 static float gCNS; |
| 55 static int gNDL; | |
| 56 | 54 |
| 57 float gGF_low_depth_bar; | 55 float gGF_low_depth_bar; |
| 58 SStop gStop; | 56 SStop gStop; |
| 59 | 57 |
| 60 void buehlmann_init(void) | 58 void buehlmann_init(void) |
| 63 | 61 |
| 64 static void buehlmann_backup_and_restore(_Bool backup_restore_otherwise) | 62 static void buehlmann_backup_and_restore(_Bool backup_restore_otherwise) |
| 65 { | 63 { |
| 66 static float pressure; | 64 static float pressure; |
| 67 static float gas_id; | 65 static float gas_id; |
| 68 static float tts; | |
| 69 static float tissue_nitrogen_bar[16]; | 66 static float tissue_nitrogen_bar[16]; |
| 70 static float tissue_helium_bar[16]; | 67 static float tissue_helium_bar[16]; |
| 71 static float gf_value; | 68 static float gf_value; |
| 72 static int ndl; | |
| 73 static float cns; | 69 static float cns; |
| 74 | 70 |
| 75 if(backup_restore_otherwise) | 71 if(backup_restore_otherwise) |
| 76 { | 72 { |
| 77 pressure = gPressure; | 73 pressure = gPressure; |
| 78 gas_id = gGas_id; | 74 gas_id = gGas_id; |
| 79 tts = gTTS; | |
| 80 gf_value = gGF_value; | 75 gf_value = gGF_value; |
| 81 ndl = gNDL; | |
| 82 cns = gCNS; | 76 cns = gCNS; |
| 83 memcpy(tissue_nitrogen_bar, gTissue_nitrogen_bar, (4*16)); | 77 memcpy(tissue_nitrogen_bar, gTissue_nitrogen_bar, (4*16)); |
| 84 memcpy(tissue_helium_bar, gTissue_helium_bar, (4*16)); | 78 memcpy(tissue_helium_bar, gTissue_helium_bar, (4*16)); |
| 85 } | 79 } |
| 86 else | 80 else |
| 87 { | 81 { |
| 88 gPressure = pressure; | 82 gPressure = pressure; |
| 89 gGas_id = gas_id; | 83 gGas_id = gas_id; |
| 90 gTTS = tts; | |
| 91 gGF_value = gf_value; | 84 gGF_value = gf_value; |
| 92 gNDL = ndl; | |
| 93 gCNS = cns; | 85 gCNS = cns; |
| 94 memcpy(gTissue_nitrogen_bar, tissue_nitrogen_bar, (4*16)); | 86 memcpy(gTissue_nitrogen_bar, tissue_nitrogen_bar, (4*16)); |
| 95 memcpy(gTissue_helium_bar, tissue_helium_bar, (4*16)); | 87 memcpy(gTissue_helium_bar, tissue_helium_bar, (4*16)); |
| 96 } | 88 } |
| 97 | 89 |
| 138 return; | 130 return; |
| 139 | 131 |
| 140 // clean stop list | 132 // clean stop list |
| 141 for(i = 0; i < DECOINFO_STRUCT_MAX_STOPS; i++) | 133 for(i = 0; i < DECOINFO_STRUCT_MAX_STOPS; i++) |
| 142 stoplist[i] = 0; | 134 stoplist[i] = 0; |
| 143 gTTS = 0; | |
| 144 gNDL = 0; | |
| 145 | 135 |
| 146 if(pDiveSettings->internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero >= (gPressure - PRESSURE_150_CM)) | 136 if(pDiveSettings->internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero >= (gPressure - PRESSURE_150_CM)) |
| 147 { | 137 { |
| 148 deco_reached = true; | 138 deco_reached = true; |
| 149 } | 139 } |
| 150 | 140 |
| 151 gGF_value = ((float)pDiveSettings->gf_high) / 100.0f; | 141 gGF_value = ((float)pDiveSettings->gf_high) / 100.0f; |
| 152 buehlmann_backup_and_restore(true); // includes backup for gGF_value | 142 buehlmann_backup_and_restore(true); |
| 153 if(!dive1_check_deco(pDiveSettings) ) | 143 if(!dive1_check_deco(pDiveSettings) ) |
| 154 { | 144 { |
| 155 buehlmann_backup_and_restore(false); | 145 buehlmann_backup_and_restore(false); |
| 156 // no deco | 146 // no deco |
| 157 pDecoInfo->output_time_to_surface_seconds = 0; | 147 pDecoInfo->output_time_to_surface_seconds = 0; |
| 158 for(i = 0; i < DECOINFO_STRUCT_MAX_STOPS; i++) | 148 for(i = 0; i < DECOINFO_STRUCT_MAX_STOPS; i++) |
| 159 pDecoInfo->output_stop_length_seconds[i] = 0; | 149 pDecoInfo->output_stop_length_seconds[i] = 0; |
| 160 // calc NDL | 150 // calc NDL |
| 161 buehlmann_calc_ndl(pDiveSettings); | 151 pDecoInfo->output_ndl_seconds = buehlmann_calc_ndl(pDiveSettings);; |
| 162 pDecoInfo->output_ndl_seconds = gNDL; | |
| 163 return; | 152 return; |
| 164 } | 153 } |
| 165 buehlmann_backup_and_restore(false); | 154 buehlmann_backup_and_restore(false); |
| 166 pDecoInfo->output_ndl_seconds = 0; | 155 pDecoInfo->output_ndl_seconds = 0; |
| 167 | 156 |
| 531 | 520 |
| 532 return (pDiveSettings->gf_high - gfSteigung * (pressure - gSurface_pressure_bar) )/ 100.0f; | 521 return (pDiveSettings->gf_high - gfSteigung * (pressure - gSurface_pressure_bar) )/ 100.0f; |
| 533 } | 522 } |
| 534 | 523 |
| 535 | 524 |
| 536 static void buehlmann_calc_ndl(SDiveSettings *pDiveSettings) | 525 static int buehlmann_calc_ndl(SDiveSettings *pDiveSettings) |
| 537 { | 526 { |
| 538 float local_tissue_nitrogen_bar[16]; | 527 float local_tissue_nitrogen_bar[16]; |
| 539 float local_tissue_helium_bar[16]; | 528 float local_tissue_helium_bar[16]; |
| 540 int i; | 529 int i; |
| 541 | 530 int ndl = 0; |
| 542 gNDL = 0; | 531 |
| 543 //Check ndl always use gHigh | 532 //Check ndl always use gHigh |
| 544 gGF_value = ((float)pDiveSettings->gf_high) / 100.0f; | 533 gGF_value = ((float)pDiveSettings->gf_high) / 100.0f; |
| 545 //10 minutes steps | 534 //10 minutes steps |
| 546 while(gNDL < (300 * 60)) | 535 while(ndl < (300 * 60)) |
| 547 { | 536 { |
| 548 memcpy(local_tissue_nitrogen_bar, gTissue_nitrogen_bar, (4*16)); | 537 memcpy(local_tissue_nitrogen_bar, gTissue_nitrogen_bar, (4*16)); |
| 549 memcpy(local_tissue_helium_bar, gTissue_helium_bar, (4*16)); | 538 memcpy(local_tissue_helium_bar, gTissue_helium_bar, (4*16)); |
| 550 // | 539 // |
| 551 gNDL += 600; | 540 ndl += 600; |
| 552 decom_tissues_exposure2(600, &pDiveSettings->decogaslist[gGas_id], gPressure,gTissue_nitrogen_bar,gTissue_helium_bar); | 541 decom_tissues_exposure2(600, &pDiveSettings->decogaslist[gGas_id], gPressure,gTissue_nitrogen_bar,gTissue_helium_bar); |
| 553 decom_oxygen_calculate_cns_exposure(600,&pDiveSettings->decogaslist[gGas_id],gPressure,&gCNS); | 542 decom_oxygen_calculate_cns_exposure(600,&pDiveSettings->decogaslist[gGas_id],gPressure,&gCNS); |
| 554 //tissues_exposure_at_gPressure_seconds(600); | |
| 555 buehlmann_backup_and_restore(true); | 543 buehlmann_backup_and_restore(true); |
| 556 if(dive1_check_deco(pDiveSettings)) | 544 if(dive1_check_deco(pDiveSettings)) |
| 557 { | 545 { |
| 558 buehlmann_backup_and_restore(false); | 546 buehlmann_backup_and_restore(false); |
| 559 break; | 547 break; |
| 560 } | 548 } |
| 561 buehlmann_backup_and_restore(false); | 549 buehlmann_backup_and_restore(false); |
| 562 } | 550 } |
| 563 | 551 |
| 564 if(gNDL < (300 * 60)) | 552 if(ndl < (300 * 60)) |
| 565 gNDL -= 600; | 553 ndl -= 600; |
| 566 | 554 |
| 567 if(gNDL > (150 * 60)) | 555 if(ndl > (150 * 60)) |
| 568 return; | 556 return ndl; |
| 569 | 557 |
| 570 // refine | 558 // refine |
| 571 memcpy(gTissue_nitrogen_bar, local_tissue_nitrogen_bar, (4*16)); | 559 memcpy(gTissue_nitrogen_bar, local_tissue_nitrogen_bar, (4*16)); |
| 572 memcpy(gTissue_helium_bar, local_tissue_helium_bar, (4*16)); | 560 memcpy(gTissue_helium_bar, local_tissue_helium_bar, (4*16)); |
| 573 | 561 |
| 574 //One minutes step | 562 //One minutes step |
| 575 for(i = 0; i < 10; i++) | 563 for(i = 0; i < 10; i++) |
| 576 { | 564 { |
| 577 gNDL += 60; | 565 ndl += 60; |
| 578 //tissues_exposure_at_gPressure_seconds(60); | 566 //tissues_exposure_at_gPressure_seconds(60); |
| 579 decom_tissues_exposure2(60, &pDiveSettings->decogaslist[gGas_id], gPressure,gTissue_nitrogen_bar,gTissue_helium_bar); | 567 decom_tissues_exposure2(60, &pDiveSettings->decogaslist[gGas_id], gPressure,gTissue_nitrogen_bar,gTissue_helium_bar); |
| 580 decom_oxygen_calculate_cns_exposure(60,&pDiveSettings->decogaslist[gGas_id],gPressure,&gCNS); | 568 decom_oxygen_calculate_cns_exposure(60,&pDiveSettings->decogaslist[gGas_id],gPressure,&gCNS); |
| 581 buehlmann_backup_and_restore(true); | 569 buehlmann_backup_and_restore(true); |
| 582 if(dive1_check_deco(pDiveSettings)) | 570 if(dive1_check_deco(pDiveSettings)) |
| 583 break; | 571 break; |
| 584 buehlmann_backup_and_restore(false); | 572 buehlmann_backup_and_restore(false); |
| 585 } | 573 } |
| 574 return ndl; | |
| 586 } | 575 } |
| 587 | 576 |
| 588 | 577 |
| 589 // =============================================================================== | 578 // =============================================================================== |
| 590 // dive1_check_deco | 579 // dive1_check_deco |
