86 lines
2.5 KiB
C++
86 lines
2.5 KiB
C++
/**
|
|
* @file gps.cpp
|
|
*
|
|
* @brief Implementation file for GPS-related functions in the ChainLube application.
|
|
*
|
|
* This file contains the implementation of functions related to GPS functionality within the ChainLube
|
|
* application. It includes the initialization of the GPS module, processing GPS data for wheel speed,
|
|
* and maintaining Diagnostic Trouble Codes (DTCs) based on GPS communication status.
|
|
*
|
|
* @author Marcel Peterkau
|
|
* @date 09.01.2024
|
|
*/
|
|
|
|
#include "gps.h"
|
|
|
|
TinyGPSPlus gps;
|
|
|
|
/**
|
|
* @brief Initializes the GPS module with the specified baud rate.
|
|
*
|
|
* This function initializes the GPS module with the baud rate configured in the application settings.
|
|
* It also prints a debug message indicating the initialization status.
|
|
*/
|
|
void Init_GPS()
|
|
{
|
|
uint32_t baudrate;
|
|
switch (LubeConfig.GPSBaudRate)
|
|
{
|
|
case BAUD_9600:
|
|
baudrate = 9600;
|
|
break;
|
|
case BAUD_115200:
|
|
baudrate = 115200;
|
|
break;
|
|
default:
|
|
baudrate = 4800;
|
|
break;
|
|
}
|
|
|
|
Debug_pushMessage(PSTR("Init GPS with Baud %d\n"), baudrate);
|
|
Serial.begin(baudrate);
|
|
}
|
|
|
|
/**
|
|
* @brief Processes GPS data to calculate rear wheel speed and returns the distance traveled.
|
|
*
|
|
* This function processes GPS data received from the GPS module, calculates the rear wheel speed in
|
|
* kilometers per hour, and returns the distance traveled based on the speed and time elapsed since
|
|
* the last valid speed measurement.
|
|
*
|
|
* @return The distance traveled in millimeters since the last GPS speed measurement.
|
|
*/
|
|
uint32_t Process_GPS_WheelSpeed()
|
|
{
|
|
static uint32_t lastRecTimestamp;
|
|
static uint32_t lastValidSpeedTimestamp;
|
|
uint16_t RearWheelSpeed_kmh;
|
|
|
|
while (Serial.available() > 0)
|
|
{
|
|
uint8_t incoming = Serial.read();
|
|
if (gps.encode(incoming))
|
|
{
|
|
RearWheelSpeed_kmh = gps.speed.isValid() ? gps.speed.kmph() : 0;
|
|
|
|
if (RearWheelSpeed_kmh > 0)
|
|
{
|
|
uint32_t RWP_millimeter_per_second = ((uint32_t)RearWheelSpeed_kmh * 1000000) / 3600;
|
|
|
|
uint32_t timesincelast = millis() - lastValidSpeedTimestamp;
|
|
lastValidSpeedTimestamp = millis();
|
|
|
|
uint32_t milimeters_to_add = (RWP_millimeter_per_second * timesincelast) / 1000;
|
|
|
|
return milimeters_to_add;
|
|
}
|
|
lastRecTimestamp = millis();
|
|
}
|
|
}
|
|
|
|
// Maintain DTC for no GPS data received within a certain time frame
|
|
MaintainDTC(DTC_NO_GPS_SERIAL, (millis() > lastRecTimestamp + 10000));
|
|
|
|
return 0;
|
|
}
|