Mercurial > public > ostc4
view Small_CPU/Src/uartProtocol_GNSS.c @ 902:d4622533271d Evo_2_23
VPM table mode:
Because of the model maths, usage of float data type and so on it may happen that the TTS decreases during ascent and continues calculation of the vpm. To keep the values stable the vpm table mode has been introduces. Instead of continously calculation of the stops the stop time is decreased if the diver is close to a deco stop. If the table is violated (e.g. by not doing gas change) the table will be updated to the new, longer runtime. The table will not be switch back to a shorter version in case e.g. the missed gas change is performed
author | Ideenmodellierer |
---|---|
date | Wed, 02 Oct 2024 22:18:19 +0200 |
parents | 2225c467f1e9 |
children | c0553dd70608 |
line wrap: on
line source
/** ****************************************************************************** * @file uartProtocol_GNSS.c * @author heinrichs weikamp gmbh * @version V0.0.1 * @date 30-Sep-2024 * @brief Interface functionality operation of GNSS devices * @verbatim @endverbatim ****************************************************************************** * @attention * * <h2><center>© COPYRIGHT(c) 2024 heinrichs weikamp</center></h2> * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include <string.h> #include "scheduler.h" #include <uartProtocol_GNSS.h> #include "uart.h" #include "GNSS.h" #ifdef ENABLE_GNSS static uartGnssStatus_t gnssOpState = UART_GNSS_INIT; static receiveStateGnss_t rxState = GNSSRX_READY; void ConvertByteToHexString(uint8_t byte, char* str) { uint8_t worker = 0; uint8_t digit = 0; uint8_t digitCnt = 1; worker = byte; while((worker!=0) && (digitCnt != 255)) { digit = worker % 16; if( digit < 10) { digit += '0'; } else { digit += 'A' - 10; } str[digitCnt--]= digit; worker = worker / 16; } } void uartGnss_Control(void) { static uint32_t delayStartTick = 0; uint32_t tick = HAL_GetTick(); switch (gnssOpState) { case UART_GNSS_INIT: delayStartTick = tick; gnssOpState = UART_GNSS_LOAD; break; case UART_GNSS_LOAD: if(time_elapsed_ms(delayStartTick,HAL_GetTick()) > 1000) { GNSS_LoadConfig(&GNSS_Handle); gnssOpState = UART_GNSS_GET_ID; delayStartTick = tick; } break; case UART_GNSS_GET_ID: if(time_elapsed_ms(delayStartTick,HAL_GetTick()) > 250) { GNSS_GetUniqID(&GNSS_Handle); gnssOpState = UART_GNSS_IDLE; rxState = GNSSRX_RECEIVING; delayStartTick = tick; } break; case UART_GNSS_IDLE: if(time_elapsed_ms(delayStartTick,HAL_GetTick()) > 1000) { GNSS_GetPVTData(&GNSS_Handle); gnssOpState = UART_GNSS_OPERATING; rxState = GNSSRX_RECEIVING; delayStartTick = tick; } break; case UART_GNSS_OPERATING: if(time_elapsed_ms(delayStartTick,HAL_GetTick()) > 1000) { gnssOpState = UART_GNSS_IDLE; /* simple error handling => start next request */ rxState = GNSSRX_READY; } break; default: break; } } void uartGnss_ProcessData(void) { if(rxState == GNSSRX_RECEIVING) { if(GNSS_ParseBuffer(&GNSS_Handle)) { gnssOpState = UART_GNSS_IDLE; } } } #endif