CTS-SAT-1-OBC-Firmware
Loading...
Searching...
No Matches
telecommand_executor.h File Reference
#include <stdint.h>
#include "telecommand_exec/telecommand_types.h"
Include dependency graph for telecommand_executor.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define TCMD_AGENDA_SIZE   750
#define TCMD_TIMESTAMP_RECORD_SIZE   750
 Max number of tssent timestamp values that can be stored at a time (for unique telecommand tssent validation).

Enumerations

enum  TCMD_agenda_entry_state_enum_t { TCMD_AGENDA_ENTRY_INVALID = 0 , TCMD_AGENDA_ENTRY_VALID_AND_PENDING = 1 , TCMD_AGENDA_ENTRY_EXECUTING = 2 }

Functions

uint8_t TCMD_add_tcmd_to_agenda (const TCMD_parsed_tcmd_to_execute_t *parsed_tcmd)
 Adds a telecommand to the agenda (schedule/queue) of telecommands to execute.
uint16_t TCMD_get_agenda_used_slots_count ()
 Gets the number of used slots in the agenda (how many valid and pending telecommands).
int16_t TCMD_get_next_tcmd_agenda_slot_to_execute ()
 Finds the index into TCMD_agenda (slot_num) of the next telecommand to execute.
uint8_t TCMD_execute_telecommand_in_agenda (const uint16_t tcmd_agenda_slot_num, char *response_output_buf, uint16_t response_output_buf_size)
 Executes a telecommand from the agenda immediately.
uint8_t TCMD_log_pending_agenda_entries ()
 Fetches the active agendas and logs each as a JSONL entry.

Variables

TCMD_parsed_tcmd_to_execute_t TCMD_agenda [TCMD_AGENDA_SIZE]
 The agenda (schedule queue) of telecommands to execute.
uint8_t TCMD_agenda_is_valid [TCMD_AGENDA_SIZE]
 A flag indicating whether a given index in TCMD_agenda is valid (i.e., filled with a not-yet-executed command).
uint16_t TCMD_agenda_last_used_slot
 Index into TCMD_agenda and TCMD_agenda_is_valid of the last used slot.
uint32_t TCMD_total_tcmd_queued_count
uint64_t TCMD_latest_received_tcmd_timestamp_sent

Macro Definition Documentation

◆ TCMD_AGENDA_SIZE

#define TCMD_AGENDA_SIZE   750

◆ TCMD_TIMESTAMP_RECORD_SIZE

#define TCMD_TIMESTAMP_RECORD_SIZE   750

Max number of tssent timestamp values that can be stored at a time (for unique telecommand tssent validation).

Enumeration Type Documentation

◆ TCMD_agenda_entry_state_enum_t

Enumerator
TCMD_AGENDA_ENTRY_INVALID 
TCMD_AGENDA_ENTRY_VALID_AND_PENDING 
TCMD_AGENDA_ENTRY_EXECUTING 

Function Documentation

◆ TCMD_add_tcmd_to_agenda()

uint8_t TCMD_add_tcmd_to_agenda ( const TCMD_parsed_tcmd_to_execute_t * parsed_tcmd)

Adds a telecommand to the agenda (schedule/queue) of telecommands to execute.

Parameters
parsed_tcmdThe parsed telecommand to add to the agenda.
Returns
0 on success, 1 if the agenda is full.
Note
Performs a deep copy of the parsed_tcmd arg into the agenda.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TCMD_execute_telecommand_in_agenda()

uint8_t TCMD_execute_telecommand_in_agenda ( const uint16_t tcmd_agenda_slot_num,
char * response_output_buf,
uint16_t response_output_buf_size )

Executes a telecommand from the agenda immediately.

Parameters
tcmd_agenda_slot_numThe index into TCMD_agenda for the telecommand to execute.
response_output_bufA buffer to store the response from the telecommand.
response_output_buf_sizeThe size of the response_output_buf.
Returns
0 on success, 253/254 if an error occurs in the callers, otherwise the error code from the telecommand function.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TCMD_get_agenda_used_slots_count()

uint16_t TCMD_get_agenda_used_slots_count ( )

Gets the number of used slots in the agenda (how many valid and pending telecommands).

Returns
The number of currently-filled slots in the agenda.
Note
This function is mostly intended for "system stats" telecommands and logging.
Here is the caller graph for this function:

◆ TCMD_get_next_tcmd_agenda_slot_to_execute()

int16_t TCMD_get_next_tcmd_agenda_slot_to_execute ( )

Finds the index into TCMD_agenda (slot_num) of the next telecommand to execute.

Returns
The index into TCMD_agenda of the next telecommand to execute, or -1 if none are available/ready.
Note
This function will return the slot_num which has the lowest timestamp_to_execute value. If multiple slots have the same timestamp_to_execute, the lowest slot_num will be returned. Thus, based on the insertion order, during tsexec ties, telecommands will be executed in the order they were added to the agenda (received). Edge case: When wrapping around the circular buffer (at 750 telecommands), it is not perfectly guaranteed that tsexec ties will run in the order they were inserted.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TCMD_log_pending_agenda_entries()

uint8_t TCMD_log_pending_agenda_entries ( )

Fetches the active agendas and logs each as a JSONL entry.

Returns
0 on success, 1 if there are no active agendas.
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ TCMD_agenda

The agenda (schedule queue) of telecommands to execute.

◆ TCMD_agenda_is_valid

uint8_t TCMD_agenda_is_valid[TCMD_AGENDA_SIZE]
extern

A flag indicating whether a given index in TCMD_agenda is valid (i.e., filled with a not-yet-executed command).

Note
The values in here are tri-state via TCMD_agenda_entry_state_enum_t.

◆ TCMD_agenda_last_used_slot

uint16_t TCMD_agenda_last_used_slot
extern

Index into TCMD_agenda and TCMD_agenda_is_valid of the last used slot.

The next telecommand to entered into the agenda will fill this slot, or will go into the first free slot after this one.

◆ TCMD_latest_received_tcmd_timestamp_sent

uint64_t TCMD_latest_received_tcmd_timestamp_sent
extern

◆ TCMD_total_tcmd_queued_count

uint32_t TCMD_total_tcmd_queued_count
extern