eive-obsw/test/testtasks/TestTask.cpp

116 lines
3.6 KiB
C++
Raw Normal View History

#include "TestTask.h"
2022-01-17 13:48:55 +01:00
#include <fsfw/globalfunctions/arrayprinter.h>
#include <fsfw/objectmanager/ObjectManager.h>
2020-09-16 16:32:17 +02:00
#include <fsfw/objectmanager/frameworkObjects.h>
2020-09-16 16:22:36 +02:00
#include <fsfw/serviceinterface/ServiceInterfaceStream.h>
#include <fsfw/timemanager/Stopwatch.h>
2020-09-16 16:32:17 +02:00
2020-09-16 16:22:36 +02:00
#include <array>
#include <cstring>
2022-01-17 13:48:55 +01:00
#include "OBSWConfig.h"
2020-09-16 16:22:36 +02:00
2022-01-17 13:48:55 +01:00
EiveTestTask::EiveTestTask(object_id_t objectId_) : TestTask(objectId_), testMode(testModes::A) {
IPCStore = ObjectManager::instance()->get<StorageManagerIF>(objects::IPC_STORE);
2020-09-16 16:22:36 +02:00
}
2022-01-17 13:48:55 +01:00
EiveTestTask::~EiveTestTask() {}
2020-09-16 16:22:36 +02:00
2021-11-19 13:22:20 +01:00
ReturnValue_t EiveTestTask::performOperation(uint8_t operationCode) {
2022-01-17 13:48:55 +01:00
ReturnValue_t result = RETURN_OK;
if (oneShotAction) {
/* Add code here which should only be run once */
performOneShotAction();
oneShotAction = false;
}
/* Add code here which should only be run once per performOperation */
performPeriodicAction();
/* Add code here which should only be run on alternating cycles. */
if (testMode == testModes::A) {
performActionA();
testMode = testModes::B;
} else if (testMode == testModes::B) {
performActionB();
testMode = testModes::A;
}
return result;
2020-09-16 16:22:36 +02:00
}
#include <etl/vector.h>
#include <lwgps/lwgps.h>
/**
* @brief Dummy data from GPS receiver. Will be replaced witgh hyperion data later.
*/
2022-01-17 13:48:55 +01:00
const char gps_rx_data[] =
""
"$GPRMC,183729,A,3907.356,N,12102.482,W,000.0,360.0,080301,015.5,E*6F\r\n"
"$GPRMB,A,,,,,,,,,,,,V*71\r\n"
"$GPGGA,183730,3907.356,N,12102.482,W,1,05,1.6,646.4,M,-24.1,M,,*75\r\n"
"$GPGSA,A,3,02,,,07,,09,24,26,,,,,1.6,1.6,1.0*3D\r\n"
"$GPGSV,2,1,08,02,43,088,38,04,42,145,00,05,11,291,00,07,60,043,35*71\r\n"
"$GPGSV,2,2,08,08,02,145,00,09,46,303,47,24,16,178,32,26,18,231,43*77\r\n"
"$PGRME,22.0,M,52.9,M,51.0,M*14\r\n"
"$GPGLL,3907.360,N,12102.481,W,183730,A*33\r\n"
"$PGRMZ,2062,f,3*2D\r\n"
"$PGRMM,WGS84*06\r\n"
"$GPBOD,,T,,M,,*47\r\n"
"$GPRTE,1,1,c,0*07\r\n"
"$GPRMC,183731,A,3907.482,N,12102.436,W,000.0,360.0,080301,015.5,E*67\r\n"
"$GPRMB,A,,,,,,,,,,,,V*71\r\n";
const char hyperion_gps_data[] =
""
"$GNGGA,173225.998892,4908.5596,N,00906.2765,E,1,05,2.1,215.0,M,48.2,M,,0000*74\r\n"
"$GNGLL,4908.5596,N,00906.2765,E,173225.998892,A,A*7F\r\n"
"$GPGSA,A,3,18,16,26,31,20,,,,,,,,3.2,2.1,2.4*3C\r\n"
"$GNRMC,173225.998892,A,4908.5596,N,00906.2765,E,000.0,040.7,270221,,,A*4F\r\n"
"$GNVTG,040.7,T,,M,000.0,N,000.0,K,A*10\r\n"
"$GNZDA,173225.998892,27,02,2021,00,00*75\r\n";
2021-04-01 10:37:34 +02:00
2021-11-19 13:22:20 +01:00
ReturnValue_t EiveTestTask::performOneShotAction() {
#if OBSW_ADD_TEST_CODE == 1
2022-01-17 13:48:55 +01:00
// performLwgpsTest();
#endif
2022-01-17 13:48:55 +01:00
return HasReturnvaluesIF::RETURN_OK;
2020-09-16 16:22:36 +02:00
}
2021-11-19 13:22:20 +01:00
ReturnValue_t EiveTestTask::performPeriodicAction() {
2022-01-17 13:48:55 +01:00
ReturnValue_t result = RETURN_OK;
return result;
2020-09-16 16:22:36 +02:00
}
2021-11-19 13:22:20 +01:00
ReturnValue_t EiveTestTask::performActionA() {
2022-01-17 13:48:55 +01:00
ReturnValue_t result = RETURN_OK;
/* Add periodically executed code here */
return result;
2020-09-16 16:22:36 +02:00
}
2021-11-19 13:22:20 +01:00
ReturnValue_t EiveTestTask::performActionB() {
2022-01-17 13:48:55 +01:00
ReturnValue_t result = RETURN_OK;
/* Add periodically executed code here */
return result;
2020-09-16 16:22:36 +02:00
}
2021-11-19 13:22:20 +01:00
void EiveTestTask::performLwgpsTest() {
2022-01-17 13:48:55 +01:00
/* Everything here will only be performed once. */
sif::info << "Processing sample GPS output.." << std::endl;
2022-01-17 13:48:55 +01:00
lwgps_t gpsStruct;
sif::info << "Size of GPS struct: " << sizeof(gpsStruct) << std::endl;
lwgps_init(&gpsStruct);
2022-01-17 13:48:55 +01:00
/* Process all input data */
lwgps_process(&gpsStruct, hyperion_gps_data, strlen(hyperion_gps_data));
2022-01-17 13:48:55 +01:00
/* Print messages */
printf("Valid status: %d\n", gpsStruct.is_valid);
printf("Latitude: %f degrees\n", gpsStruct.latitude);
printf("Longitude: %f degrees\n", gpsStruct.longitude);
printf("Altitude: %f meters\n", gpsStruct.altitude);
}