36#ifndef ARM_TRC_PKT_PROC_BASE_H_INCLUDED
37#define ARM_TRC_PKT_PROC_BASE_H_INCLUDED
68 TrcPktProcI(
const char *component_name,
int instIDNum);
75 const uint32_t dataBlockSize,
76 const uint8_t *pDataBlock,
77 uint32_t *numBytesProcessed) = 0;
85 const uint32_t dataBlockSize,
86 const uint8_t *pDataBlock,
87 uint32_t *numBytesProcessed) = 0;
122template <
class P,
class Pt,
class Pc>
137 const uint32_t dataBlockSize,
138 const uint8_t *pDataBlock,
139 uint32_t *numBytesProcessed);
166 const uint8_t *p_data);
221 const uint32_t dataBlockSize,
222 const uint8_t *pDataBlock,
223 uint32_t *numBytesProcessed)
230 if((dataBlockSize == 0) || (pDataBlock == 0) || (numBytesProcessed == 0))
232 if(numBytesProcessed)
233 *numBytesProcessed = 0;
238 resp = processData(index,dataBlockSize,pDataBlock,numBytesProcessed);
267 if(m_pkt_out_i.hasAttachedAndEnabled())
268 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_RESET,index,0);
275 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
276 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_RESET,index,0,0,0);
287 if(m_pkt_out_i.hasAttachedAndEnabled())
292 resplocal = onFlush();
294 return (resplocal > resp) ? resplocal : resp;
303 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_EOT,0,0);
306 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
307 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_EOT,0,0,0,0);
321 if(m_pkt_out_i.hasAttachedAndEnabled())
322 resp = m_pkt_out_i.first()->PacketDataIn(
OCSD_OP_DATA,index,pkt);
330 const uint8_t *p_data)
341 if(m_pkt_raw_mon_i.hasAttachedAndEnabled())
342 m_pkt_raw_mon_i.first()->RawPacketDataMon(
OCSD_OP_DATA,index_sop,pkt,size,p_data);
347 return m_pkt_raw_mon_i.hasAttachedAndEnabled();
353 if(m_pkt_indexer_i.hasAttachedAndEnabled())
354 m_pkt_indexer_i.first()->TracePktIndex(index_sop,packet_type);
359 indexPacket(index_sop,pkt_type);
360 if(pktdata.size() > 0)
361 outputRawPacketToMonitor(index_sop,pkt,(uint32_t)pktdata.size(),&pktdata[0]);
362 return outputDecodedPacket(index_sop,pkt);
367 indexPacket(index_sop,pkt_type);
368 outputRawPacketToMonitor(index_sop,pkt,pktlen,pktdata);
369 return outputDecodedPacket(index_sop,pkt);
378 m_config =
new (std::nothrow) Pc(*config);
380 err = onProtocolConfig();
400 if( (m_config != 0) &&
401 (m_pkt_out_i.hasAttached() || m_pkt_raw_mon_i.hasAttached())
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...
virtual const Pc * getProtocolConfig() const
componentAttachPt< IPktDataIn< P > > * getPacketOutAttachPt()
Attachement point for the protocol packet output.
componentAttachPt< ITrcPktIndexer< Pt > > * getTraceIDIndexerAttachPt()
Attachment point for a packet indexer.
componentAttachPt< IPktRawDataMon< P > > * getRawPacketMonAttachPt()
Attachment point for the protocol packet monitor.
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 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 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)
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)
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)
OpenCSD : Base trace decode component.