mirror of
https://github.com/nasa/fprime.git
synced 2025-12-11 04:35:25 -06:00
* Add Os::RawTime and preliminary rule-based tests * Implement Stubs and stub tests tests + misc improvements * Update delay functions to use Fw::TimeInterval instead of Fw::Time * Replace TimerVal with Os::RawTime FPP type, SERIALIZED_SIZE fixed to 2*sizeof(U32) * Fix spelling and legacy code * Fix test import * Remove TimerVal files and misc clean up * Add Fw/Time as dependency of Os module * Fix include guards * Fix default constructors and missing getHandle stub * Add Handle and Serialization size to FpConfig, refactor interface for less vtable calls, refactor IntervalTimer * Fixes for new OS CMake API * Add RawTime FPP Model * Rename getRawTime to now(), better error handling, added docs for all functions * Correct handle size, spelling, and more robust test IntervalTimer test * Peer review changes * Move `Os.RawTime` to `Os/Types.fpp` * Fix unused variable * Fix spelling and comments * spelling extravaganza * Update metadata check-spelling run (pull_request_target) for os-interval-timer Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com> on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev> * Reference based approach to minuend and subtrahend --------- Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com> Co-authored-by: Thomas Boyer-Chammard <thomas-bc@users.noreply.github.com> Co-authored-by: M Starch <LeStarch@googlemail.com>
100 lines
3.2 KiB
C++
100 lines
3.2 KiB
C++
// ======================================================================
|
||
// \title Main.cpp
|
||
// \author mstarch
|
||
// \brief main program for reference application. Intended for CLI-based systems (Linux, macOS)
|
||
//
|
||
// \copyright
|
||
// Copyright 2009-2022, by the California Institute of Technology.
|
||
// ALL RIGHTS RESERVED. United States Government Sponsorship
|
||
// acknowledged.
|
||
// ======================================================================
|
||
// Used to access topology functions
|
||
#include <Ref/Top/RefTopology.hpp>
|
||
// Used for signal handling shutdown
|
||
#include <signal.h>
|
||
// Used for command line argument processing
|
||
#include <getopt.h>
|
||
// Used for printf functions
|
||
#include <cstdlib>
|
||
// Used to get the Os::Console
|
||
#include <Os/Os.hpp>
|
||
|
||
|
||
/**
|
||
* \brief print commandline help message
|
||
*
|
||
* This will print a command line help message including the available command line arguments.
|
||
*
|
||
* @param app: name of application
|
||
*/
|
||
void print_usage(const char* app) {
|
||
(void)printf("Usage: ./%s [options]\n-a\thostname/IP address\n-p\tport_number\n", app);
|
||
}
|
||
|
||
/**
|
||
* \brief shutdown topology cycling on signal
|
||
*
|
||
* The reference topology allows for a simulated cycling of the rate groups. This simulated cycling needs to be stopped
|
||
* in order for the program to shutdown. This is done via handling signals such that it is performed via Ctrl-C
|
||
*
|
||
* @param signum
|
||
*/
|
||
static void signalHandler(int signum) {
|
||
Ref::stopSimulatedCycle();
|
||
}
|
||
|
||
/**
|
||
* \brief execute the program
|
||
*
|
||
* This F´ program is designed to run in standard environments (e.g. Linux/macOs running on a laptop). Thus it uses
|
||
* command line inputs to specify how to connect.
|
||
*
|
||
* @param argc: argument count supplied to program
|
||
* @param argv: argument values supplied to program
|
||
* @return: 0 on success, something else on failure
|
||
*/
|
||
int main(int argc, char* argv[]) {
|
||
Os::init();
|
||
U32 port_number = 0;
|
||
I32 option = 0;
|
||
char* hostname = nullptr;
|
||
|
||
// Loop while reading the getopt supplied options
|
||
while ((option = getopt(argc, argv, "hp:a:")) != -1) {
|
||
switch (option) {
|
||
// Handle the -a argument for address/hostname
|
||
case 'a':
|
||
hostname = optarg;
|
||
break;
|
||
// Handle the -p port number argument
|
||
case 'p':
|
||
port_number = static_cast<U32>(atoi(optarg));
|
||
break;
|
||
// Cascade intended: help output
|
||
case 'h':
|
||
// Cascade intended: help output
|
||
case '?':
|
||
// Default case: output help and exit
|
||
default:
|
||
print_usage(argv[0]);
|
||
return (option == 'h') ? 0 : 1;
|
||
}
|
||
}
|
||
// Object for communicating state to the reference topology
|
||
Ref::TopologyState inputs;
|
||
inputs.hostname = hostname;
|
||
inputs.port = port_number;
|
||
|
||
// Setup program shutdown via Ctrl-C
|
||
signal(SIGINT, signalHandler);
|
||
signal(SIGTERM, signalHandler);
|
||
(void)printf("Hit Ctrl-C to quit\n");
|
||
|
||
// Setup, cycle, and teardown topology
|
||
Ref::setupTopology(inputs);
|
||
Ref::startSimulatedCycle(Fw::TimeInterval(1, 0)); // Program loop cycling rate groups at 1Hz
|
||
Ref::teardownTopology(inputs);
|
||
(void)printf("Exiting...\n");
|
||
return 0;
|
||
}
|