Midnight Sun Firmware
Loading...
Searching...
No Matches
Telemetry

telemetry Firmware More...

Classes

struct  Datagram
 Datagram storage class. More...
 
struct  SdSpiSettings
 Configuration settings for initializing an SD SPI port. More...
 
struct  TelemetryConfig
 Telemetry configuration data. More...
 
struct  TelemetryStorage
 Telemetry storage. More...
 

Macros

#define DATAGRAM_BUFFER_SIZE   64U
 Datagram buffer size.
 
#define DATAGRAM_START_FRAME   0xAAU
 Start of frame indicator.
 
#define DATAGRAM_END_FRAME   0xBBU
 End of frame indicator.
 
#define DATAGRAM_METADATA_SIZE   5U
 Datagram metadata size. More...
 

Enumerations

enum  SdSpiBaudrate {
  SD_SPI_BAUDRATE_312_5KHZ = 0 , SD_SPI_BAUDRATE_625KHZ , SD_SPI_BAUDRATE_1_25MHZ , SD_SPI_BAUDRATE_2_5MHZ ,
  SD_SPI_BAUDRATE_5MHZ , SD_SPI_BAUDRATE_10MHZ , SD_SPI_BAUDRATE_20MHZ , SD_SPI_BAUDRATE_40MHZ ,
  NUM_SD_SPI_BAUDRATES
}
 SD Card SPI baudrate options. More...
 
enum  SdSpiMode {
  SD_SPI_MODE_0 = 0 , SD_SPI_MODE_1 , SD_SPI_MODE_2 , SD_SPI_MODE_3 ,
  NUM_SD_SPI_MODES
}
 SPI modes (CPOL and CPHA settings) More...
 
enum  SdSpiPort { SD_SPI_PORT_1 = 0 , SD_SPI_PORT_2 , SD_SPI_PORT_3 , NUM_SD_SPI_PORTS }
 SD SPI port options.
 

Functions

void decode_can_message (Datagram *datagram, CanMessage *msg)
 Decode CAN message and update a datagram. More...
 
void log_decoded_message (Datagram *datagram)
 Log the decoded datagram for debug purposes. More...
 
StatusCode sd_card_link_driver (SdSpiPort spi, SdSpiSettings *settings)
 Link the SD card driver with the FATFs API and initialize it. More...
 
StatusCode sd_spi_init (SdSpiPort spi, const SdSpiSettings *settings)
 Initialize SD SPI port with given settings. More...
 
StatusCode sd_spi_tx (SdSpiPort spi, uint8_t *tx_data, size_t tx_len)
 Transmit data to SD card via SPI. More...
 
StatusCode sd_spi_rx (SdSpiPort spi, uint8_t *rx_data, size_t rx_len, uint8_t placeholder)
 Receive data from SD card via SPI. More...
 
StatusCode sd_spi_exchange (SdSpiPort spi, uint8_t *tx_data, size_t tx_len, uint8_t *rx_data, size_t rx_len)
 Exchange data over SPI. More...
 
StatusCode sd_spi_cs_set_state (SdSpiPort spi, GpioState state)
 Set the CS (chip select) GPIO state. More...
 
GpioState sd_spi_cs_get_state (SdSpiPort spi)
 Get the current state of the CS (chip select) pin. More...
 
StatusCode sd_spi_set_frequency (SdSpiPort spi, SdSpiBaudrate baudrate)
 Change the baudrate of an initialized SPI port. More...
 
StatusCode telemetry_init (TelemetryStorage *storage, TelemetryConfig *config)
 Initialize the telemetry interface. More...
 

Detailed Description

telemetry Firmware

Macro Definition Documentation

◆ DATAGRAM_METADATA_SIZE

#define DATAGRAM_METADATA_SIZE   5U

Datagram metadata size.

1 byte for start frame 2 bytes for ID 1 byte for DLC 1 byte for end frame

Enumeration Type Documentation

◆ SdSpiBaudrate

SD Card SPI baudrate options.

These prescaler values map to SPI peripheral baudrate divisors. The actual baudrate is calculated as APB_Frequency / Prescaler. On STM32, prescalers must be powers of 2.

Enumerator
SD_SPI_BAUDRATE_312_5KHZ 

312.5 kHz

SD_SPI_BAUDRATE_625KHZ 

625 kHz

SD_SPI_BAUDRATE_1_25MHZ 

1.25 MHz

SD_SPI_BAUDRATE_2_5MHZ 

2.5 MHz

SD_SPI_BAUDRATE_5MHZ 

5 MHz

SD_SPI_BAUDRATE_10MHZ 

10 MHz

SD_SPI_BAUDRATE_20MHZ 

20 MHz

SD_SPI_BAUDRATE_40MHZ 

40 MHz

NUM_SD_SPI_BAUDRATES 

Number of baudrate options

◆ SdSpiMode

enum SdSpiMode

SPI modes (CPOL and CPHA settings)

Enumerator
SD_SPI_MODE_0 

CPOL: 0, CPHA: 0 — idle low, sample rising edge

SD_SPI_MODE_1 

CPOL: 0, CPHA: 1 — idle low, sample falling edge

SD_SPI_MODE_2 

CPOL: 1, CPHA: 0 — idle high, sample falling edge

SD_SPI_MODE_3 

CPOL: 1, CPHA: 1 — idle high, sample rising edge

NUM_SD_SPI_MODES 

Number of SPI modes

Function Documentation

◆ decode_can_message()

void decode_can_message ( Datagram datagram,
CanMessage msg 
)

Decode CAN message and update a datagram.

Parameters
datagramPointer to the datagram to be updated
msgPointer to the new CAN data

◆ log_decoded_message()

void log_decoded_message ( Datagram datagram)

Log the decoded datagram for debug purposes.

Parameters
datagramPointer to the datagram to be debugged

◆ sd_card_link_driver()

StatusCode sd_card_link_driver ( SdSpiPort  spi,
SdSpiSettings settings 
)

Link the SD card driver with the FATFs API and initialize it.

Parameters
spiwhich SPI port to use for the SD card
settingspointer to your pre-configured SdSpiSettings
Returns
STATUS_CODE_OK on success, or an error code.

◆ sd_spi_cs_get_state()

GpioState sd_spi_cs_get_state ( SdSpiPort  spi)

Get the current state of the CS (chip select) pin.

Parameters
spiSPI port
Returns
GPIO_STATE_HIGH if pin is high GPIO_STATE_LOW if pin is low

◆ sd_spi_cs_set_state()

StatusCode sd_spi_cs_set_state ( SdSpiPort  spi,
GpioState  state 
)

Set the CS (chip select) GPIO state.

Parameters
spiSPI port
stateDesired CS state (GPIO_STATE_LOW to select)
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if port is invalid STATUS_CODE_UNINITIALIZED if SPI not initialized

◆ sd_spi_exchange()

StatusCode sd_spi_exchange ( SdSpiPort  spi,
uint8_t *  tx_data,
size_t  tx_len,
uint8_t *  rx_data,
size_t  rx_len 
)

Exchange data over SPI.

Simultaneously transmit and receive data. Lengths may differ. Transmits 0xFF if no TX data

Parameters
spiSPI port to use
tx_dataPointer to data to transmit (can be NULL)
tx_lenNumber of bytes to transmit
rx_dataPointer to buffer for received data (can be NULL)
rx_lenNumber of bytes to receive
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if parameters are invalid STATUS_CODE_UNINITIALIZED if SPI not initialized STATUS_CODE_INTERNAL_ERROR if SPI transfer fails

◆ sd_spi_init()

StatusCode sd_spi_init ( SdSpiPort  spi,
const SdSpiSettings settings 
)

Initialize SD SPI port with given settings.

Note that STM32 SPI baudrate prescalers are powers of 2, so the resulting baudrate may not match the requested value exactly. Check resulting timing if critical

Parameters
spiSPI port to initialize
settingsPointer to configuration settings
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if parameters are invalid STATUS_CODE_RESOURCE_EXHAUSTED if already initialized STATUS_CODE_INTERNAL_ERROR if HAL initialization fails

◆ sd_spi_rx()

StatusCode sd_spi_rx ( SdSpiPort  spi,
uint8_t *  rx_data,
size_t  rx_len,
uint8_t  placeholder 
)

Receive data from SD card via SPI.

Reads |rx_len| bytes into |rx_data|. Sends the specified |placeholder| byte while receiving (commonly 0xFF)

Parameters
spiSPI port to use
rx_dataPointer to buffer to receive data
rx_lenNumber of bytes to receive
placeholderByte to transmit during receive
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if inputs are invalid STATUS_CODE_UNINITIALIZED if SPI is not initialized STATUS_CODE_INTERNAL_ERROR if HAL receive fails

◆ sd_spi_set_frequency()

StatusCode sd_spi_set_frequency ( SdSpiPort  spi,
SdSpiBaudrate  baudrate 
)

Change the baudrate of an initialized SPI port.

Reconfigures the SPI peripheral to operate at a different baudrate

Parameters
spiSPI port
baudrateDesired new baudrate
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if arguments are invalid STATUS_CODE_UNINITIALIZED if SPI not initialized

◆ sd_spi_tx()

StatusCode sd_spi_tx ( SdSpiPort  spi,
uint8_t *  tx_data,
size_t  tx_len 
)

Transmit data to SD card via SPI.

Sends |tx_len| bytes from |tx_data| over SPI without changing the CS line. Received bytes are discarded

Parameters
spiSPI port to use
tx_dataPointer to data to transmit
tx_lenNumber of bytes to transmit
Returns
STATUS_CODE_OK on success STATUS_CODE_INVALID_ARGS if inputs are invalid STATUS_CODE_UNINITIALIZED if SPI is not initialized STATUS_CODE_INTERNAL_ERROR if HAL transmit fails

◆ telemetry_init()

StatusCode telemetry_init ( TelemetryStorage storage,
TelemetryConfig config 
)

Initialize the telemetry interface.

Parameters
storagePointer to the telemetry storage
configPointer to the telemetry config
Returns
STATUS_CODE_OK if telemetry initialization succeeded STATUS_CODE_INVALID_ARGS if one of the parameters are incorrect