#ifndef ARM_TRC_FRAME_DEFORMATTER_H_INCLUDED
#define ARM_TRC_FRAME_DEFORMATTER_H_INCLUDED
#include "opencsd/ocsd_if_types.h"
#include "interfaces/trc_data_raw_in_i.h"
#include "comp_attach_pt_t.h"
class ITrcRawFrameIn;
class ITrcDataMixIDIn;
class ITrcSrcIndexCreator;
class ITraceErrorLog;
class TraceFmtDcdImpl;
class TraceFormatterFrameDecoder : public ITrcDataIn
{
public:
TraceFormatterFrameDecoder();
TraceFormatterFrameDecoder(int instNum);
virtual ~TraceFormatterFrameDecoder();
virtual ocsd_datapath_resp_t TraceDataIn( const ocsd_datapath_op_t op,
const ocsd_trc_index_t index,
const uint32_t dataBlockSize,
const uint8_t *pDataBlock,
uint32_t *numBytesProcessed);
componentAttachPt<ITrcDataIn> *getIDStreamAttachPt(uint8_t ID);
componentAttachPt<ITrcRawFrameIn> *getTrcRawFrameAttachPt();
componentAttachPt<ITrcSrcIndexCreator> *getTrcSrcIndexAttachPt();
componentAttachPt<ITraceErrorLog> *getErrLogAttachPt();
ocsd_err_t Init();
ocsd_err_t Configure(uint32_t cfg_flags);
const uint32_t getConfigFlags() const;
ocsd_err_t OutputFilterIDs(std::vector<uint8_t> &id_list, bool bEnable);
ocsd_err_t OutputFilterAllIDs(bool bEnable);
ocsd_datapath_resp_t Reset();
ocsd_datapath_resp_t Flush();
void SetDemuxStatsBlock(ocsd_demux_stats_t *pStatsBlock);
private:
TraceFmtDcdImpl *m_pDecoder;
int m_instNum;
};
#endif