/**
* \file
* \author T. Canham
* \brief Component that stores telemetry channel values
*
* \copyright
* Copyright 2009-2015, by the California Institute of Technology.
* ALL RIGHTS RESERVED. United States Government Sponsorship
* acknowledged.
*
*/
#ifndef TELEMCHANIMPL_HPP_
#define TELEMCHANIMPL_HPP_
#include
#include
#include
namespace Svc {
class TlmChan final : public TlmChanComponentBase {
friend class TlmChanTester;
public:
TlmChan(const char* compName);
virtual ~TlmChan();
protected:
// can be overridden for alternate algorithms
virtual FwChanIdType doHash(FwChanIdType id);
private:
// Port functions
void TlmRecv_handler(FwIndexType portNum, FwChanIdType id, Fw::Time& timeTag, Fw::TlmBuffer& val);
Fw::TlmValid TlmGet_handler(FwIndexType portNum, FwChanIdType id, Fw::Time& timeTag, Fw::TlmBuffer& val);
void Run_handler(FwIndexType portNum, U32 context);
//! Handler implementation for pingIn
//!
void pingIn_handler(const FwIndexType portNum, /*!< The port number*/
U32 key /*!< Value to return to pinger*/
);
typedef struct tlmEntry {
FwChanIdType id; //!< telemetry id stored in slot
bool updated; //!< set whenever a value has been written. Used to skip if writing out values for downlinking
Fw::Time lastUpdate; //!< last updated time
Fw::TlmBuffer buffer; //!< buffer to store serialized telemetry
tlmEntry* next; //!< pointer to next bucket in table
bool used; //!< if entry has been used
FwChanIdType bucketNo; //!< for testing
} TlmEntry;
struct TlmSet {
TlmEntry* slots[TLMCHAN_NUM_TLM_HASH_SLOTS]; //!< set of hash slots in hash table
TlmEntry buckets[TLMCHAN_HASH_BUCKETS]; //!< set of buckets used in hash table
FwChanIdType free; //!< next free bucket
} m_tlmEntries[2];
U32 m_activeBuffer; // !< which buffer is active for storing telemetry
};
} // namespace Svc
#endif /* TELEMCHANIMPL_HPP_ */