Module: spiceInterface

Executive Summary

The SPICE interface class gets time and planetary body information from the JPL ephemeris library

The module PDF Description contains further information on this module’s function, how to run it, as well as testing.

Message Connection Descriptions

The following table lists all the module input and output messages. The module msg connection is set by the user from python. The msg type contains a link to the message structure definition, while the description provides information on what this message is used for.

Module I/O Messages

Msg Variable Name

Msg Type

Description

spiceTimeOutMsg

SpiceTimeMsgPayload

spice time sampling output message

epochInMsg

EpochMsgPayload

(optional) input epoch message

planetStateOutMsgs

SpicePlanetStateMsgPayload

vector of planet state output messages


class SpiceInterface : public SysModel
#include <spiceInterface.h>

spice interface class

Public Functions

SpiceInterface()

This constructor initializes the variables that spice uses. Most of them are not intended to be changed, but a couple are user configurable.

~SpiceInterface()

The only needed activity in the destructor is to delete the spice I/O buffer that was allocated in the constructor

void UpdateState(uint64_t CurrentSimNanos)

This method is the interface point between the upper level simulation and the SPICE interface at runtime. It calls all of the necessary lower level methods.

Parameters

CurrentSimNanos – The current clock time for the simulation

Returns

void

int loadSpiceKernel(char *kernelName, const char *dataPath)

This method loads a requested SPICE kernel into the system memory. It is its own method because we have to load several SPICE kernels in for our application. Note that they are stored in the SPICE library and are not held locally in this object.

Parameters
  • kernelName – The name of the kernel we are loading

  • dataPath – The path to the data area on the filesystem

Returns

int Zero for success one for failure

int unloadSpiceKernel(char *kernelName, const char *dataPath)

This method unloads a requested SPICE kernel into the system memory. It is its own method because we have to load several SPICE kernels in for our application. Note that they are stored in the SPICE library and are not held locally in this object.

Parameters
  • kernelName – The name of the kernel we are unloading

  • dataPath – The path to the data area on the filesystem

Returns

int Zero for success one for failure

std::string getCurrentTimeString()

class method

void Reset(uint64_t CurrentSimNanos)

Reset the module to origina configuration values.

Returns

void

void initTimeData()

This method is used to initialize the zero-time that will be used to calculate all system time values in the Update method. It also creates the output message for time data

Returns

void

void computeGPSData()

This method computes the GPS time data for the current elapsed time. It uses the total elapsed times at both the GPS epoch time and the current time to compute the GPS time (week, seconds, rollovers)

Returns

void

void computePlanetData()

This method gets the state of each planet that has been added to the model and saves the information off into the planet array.

Returns

void

void writeOutputMessages(uint64_t CurrentClock)

This method takes the values computed in the model and outputs them. It packages up the internal variables into the output structure definitions and puts them out on the messaging system

Parameters

CurrentClock – The current simulation time (used for time stamping)

Returns

void

void clearKeeper()

class method

void addPlanetNames(std::vector<std::string> planetNames)

take a vector of planet name strings and create the vector of planet state output messages and the vector of planet state message payloads

Public Members

Message<SpiceTimeMsgPayload> spiceTimeOutMsg

spice time sampling output message

ReadFunctor<EpochMsgPayload> epochInMsg

(optional) input epoch message

std::vector<Message<SpicePlanetStateMsgPayload>*> planetStateOutMsgs

vector of planet state output messages

std::string SPICEDataPath

Path on file to SPICE data

std::string referenceBase

Base reference frame to use

std::string zeroBase

Base zero point to use for states

std::string timeOutPicture

Optional parameter used to extract time strings

bool SPICELoaded

Boolean indicating to reload spice

int charBufferSize

avert your eyes we’re getting SPICE

uint8_t *spiceBuffer

General buffer to pass down to spice

std::string UTCCalInit

UTC time string for init time

std::vector<std::string> planetFrames

Optional vector of planet frame names. Default values are IAU_ + planet name

bool timeDataInit

Flag indicating whether time has been init

double J2000ETInit

s Seconds elapsed since J2000 at init

double J2000Current

s Current J2000 elapsed time

double julianDateCurrent

s Current JulianDate

double GPSSeconds

s Current GPS seconds

uint16_t GPSWeek

Current GPS week value

uint64_t GPSRollovers

Count on the number of GPS rollovers

BSKLogger bskLogger

BSK Logging

Private Members

std::vector<std::string> planetNames

Names of planets we want to track

std::string GPSEpochTime

String for the GPS epoch

double JDGPSEpoch

s Epoch for GPS time. Saved for efficiency

std::vector<SpicePlanetStateMsgPayload> planetData