36 #ifndef ARM_TRC_PKT_PROC_BASE_H_INCLUDED
37 #define ARM_TRC_PKT_PROC_BASE_H_INCLUDED
69 TrcPktProcI(
const char *component_name,
int instIDNum);
76 const uint32_t dataBlockSize,
77 const uint8_t *pDataBlock,
78 uint32_t *numBytesProcessed) = 0;
88 const uint32_t dataBlockSize,
89 const uint8_t *pDataBlock,
90 uint32_t *numBytesProcessed) = 0;
125 template <
class P,
class Pt,
class Pc>
140 const uint32_t dataBlockSize,
141 const uint8_t *pDataBlock,
142 uint32_t *numBytesProcessed);
173 const uint8_t *p_data);
245 const uint32_t dataBlockSize,
246 const uint8_t *pDataBlock,
247 uint32_t *numBytesProcessed)
254 if((dataBlockSize == 0) || (pDataBlock == 0) || (numBytesProcessed == 0))
256 if(numBytesProcessed)
257 *numBytesProcessed = 0;
262 resp = processData(index,dataBlockSize,pDataBlock,numBytesProcessed);
291 if(m_pkt_out_i.hasAttachedAndEnabled())
292 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_RESET,index,0);
299 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
300 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_RESET,index,0,0,0);
311 if(m_pkt_out_i.hasAttachedAndEnabled())
316 resplocal = onFlush();
318 return (resplocal > resp) ? resplocal : resp;
327 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_EOT,0,0);
330 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
331 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_EOT,0,0,0,0);
345 if(m_pkt_out_i.hasAttachedAndEnabled())
346 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_DATA,index,pkt);
354 const uint8_t *p_data)
365 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
366 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_DATA,index_sop,pkt,size,p_data);
371 return m_pkt_raw_mon_i.hasAttachedAndEnabled();
377 if(m_pkt_indexer_i.hasAttachedAndEnabled())
378 m_pkt_indexer_i.first()->TracePktIndex(index_sop,packet_type);
383 indexPacket(index_sop,pkt_type);
384 if(pktdata.size() > 0)
385 outputRawPacketToMonitor(index_sop,pkt,(uint32_t)pktdata.size(),&pktdata[0]);
386 return outputDecodedPacket(index_sop,pkt);
391 indexPacket(index_sop,pkt_type);
392 outputRawPacketToMonitor(index_sop,pkt,pktlen,pktdata);
393 return outputDecodedPacket(index_sop,pkt);
402 m_config =
new (std::nothrow) Pc(*config);
404 err = onProtocolConfig();
424 if( (m_config != 0) &&
425 (m_pkt_out_i.hasAttached() || m_pkt_raw_mon_i.hasAttached())
435 *pp_stats = &m_stats;
443 m_stats.channel_total = 0;
444 m_stats.channel_unsynced = 0;
445 m_stats.bad_header_errs = 0;
446 m_stats.bad_sequence_errs = 0;
447 m_stats.demux.frame_bytes = 0;
448 m_stats.demux.no_id_bytes = 0;
449 m_stats.demux.valid_id_bytes = 0;
Interface to either trace data frame deformatter or packet processor.
Base class for all decode components in the library.
Packet Processor base class. Provides common infrastructure and interconnections for packet processor...
void statsAddBadSeqCount(const uint32_t count)
void statsAddUnsyncCount(const uint64_t count)
componentAttachPt< IPktRawDataMon< P > > * getRawPacketMonAttachPt()
Attachment point for the protocol packet monitor.
componentAttachPt< IPktDataIn< P > > * getPacketOutAttachPt()
Attachement point for the protocol packet output.
void statsAddTotalCount(const uint64_t count)
componentAttachPt< ITrcPktIndexer< Pt > > * getTraceIDIndexerAttachPt()
Attachment point for a packet indexer.
virtual const Pc * getProtocolConfig() const
void statsAddBadHdrCount(const uint32_t count)
Base Packet processing interface.
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)=0
virtual ocsd_datapath_resp_t processData(const ocsd_trc_index_t index, const uint32_t dataBlockSize, const uint8_t *pDataBlock, uint32_t *numBytesProcessed)=0
Implementation function for the OCSD_OP_DATA operation.
virtual ocsd_datapath_resp_t onFlush()=0
Implementation function for the OCSD_OP_FLUSH operation.
virtual ocsd_err_t getStatsBlock(ocsd_decode_stats_t **pp_stats)=0
virtual const bool isBadPacket() const =0
check if the current packet is an error / bad packet
virtual ocsd_err_t onProtocolConfig()=0
Called when the configuration object is passed to the decoder.
virtual void resetStats()=0
virtual ocsd_datapath_resp_t onReset()=0
Implementation function for the OCSD_OP_RESET operation.
virtual ocsd_datapath_resp_t onEOT()=0
Implementation function for the OCSD_OP_EOT operation.
Single component interface pointer attachment point.
OpenCSD : Component attachment point interface class.
#define OCSD_DATA_RESP_IS_FATAL(x)
#define OCSD_STATS_REVISION
uint32_t ocsd_trc_index_t
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
#define OCSD_DATA_RESP_IS_CONT(x)
enum _ocsd_datapath_op_t ocsd_datapath_op_t
enum _ocsd_err_t ocsd_err_t
#define OCSD_OPFLG_PKTPROC_NOMON_BAD_PKTS
#define OCSD_OPFLG_PKTPROC_NOFWD_BAD_PKTS
@ OCSD_ERR_INVALID_PARAM_VAL
@ OCSD_RESP_FATAL_INVALID_PARAM
@ OCSD_RESP_FATAL_INVALID_OP
ocsd_datapath_resp_t outputOnAllInterfaces(const ocsd_trc_index_t index_sop, const P *pkt, const Pt *pkt_type, std::vector< uint8_t > &pktdata)
void outputRawPacketToMonitor(const ocsd_trc_index_t index_sop, const P *pkt, const uint32_t size, const uint8_t *p_data)
virtual ocsd_err_t getStatsBlock(ocsd_decode_stats_t **pp_stats)
TrcPktProcI(const char *component_name)
void indexPacket(const ocsd_trc_index_t index_sop, const Pt *packet_type)
virtual ocsd_err_t setProtocolConfig(const Pc *config)
< Set the protocol specific configuration for the decoder.
const bool hasRawMon() const
virtual ~TrcPktProcBase()
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)
TrcPktProcBase(const char *component_name)
ocsd_datapath_resp_t outputOnAllInterfaces(const ocsd_trc_index_t index_sop, const P *pkt, const Pt *pkt_type, const uint8_t *pktdata, uint32_t pktlen)
TrcPktProcBase(const char *component_name, int instIDNum)
ocsd_datapath_resp_t outputDecodedPacket(const ocsd_trc_index_t index_sop, const P *pkt)
virtual void resetStats()
uint32_t bad_sequence_errs
uint64_t channel_unsynced
OpenCSD : Base trace decode component.