2 * \file ocsd_c_api_obj.h
3 * \brief OpenCSD : C API callback objects.
5 * \copyright Copyright (c) 2015, ARM Limited. All Rights Reserved.
8 #ifndef ARM_OCSD_C_API_OBJ_H_INCLUDED
9 #define ARM_OCSD_C_API_OBJ_H_INCLUDED
11 #include "opencsd/c_api/ocsd_c_api_types.h"
12 #include "interfaces/trc_gen_elem_in_i.h"
13 #include "common/ocsd_msg_logger.h"
19 virtual ~TraceElemCBBase() {};
22 class GenTraceElemCBObj : public ITrcGenElemIn, public TraceElemCBBase
25 GenTraceElemCBObj(FnTraceElemIn pCBFn, const void *p_context);
26 virtual ~GenTraceElemCBObj() {};
28 virtual ocsd_datapath_resp_t TraceElemIn(const ocsd_trc_index_t index_sop,
29 const uint8_t trc_chan_id,
30 const OcsdTraceElement &elem);
33 FnTraceElemIn m_c_api_cb_fn;
34 const void *m_p_cb_context;
39 template<class TrcPkt>
40 class PktCBObj : public IPktDataIn<TrcPkt>
43 PktCBObj( FnDefPktDataIn pCBFunc, const void *p_context)
45 m_c_api_cb_fn = pCBFunc;
46 m_p_context = p_context;
49 virtual ~PktCBObj() {};
51 virtual ocsd_datapath_resp_t PacketDataIn( const ocsd_datapath_op_t op,
52 const ocsd_trc_index_t index_sop,
53 const TrcPkt *p_packet_in)
55 const void *c_pkt_struct = 0;
56 if(op == OCSD_OP_DATA)
57 c_pkt_struct = p_packet_in->c_pkt(); // always output the c struct packet
58 return m_c_api_cb_fn(m_p_context,op,index_sop,c_pkt_struct);
62 FnDefPktDataIn m_c_api_cb_fn;
63 const void *m_p_context;
66 // void specialisation for custom decoders that pass packets as const void * pointers
68 class PktCBObj<void> : public IPktDataIn<void>
71 PktCBObj(FnDefPktDataIn pCBFunc, const void *p_context)
73 m_c_api_cb_fn = pCBFunc;
74 m_p_context = p_context;
77 virtual ~PktCBObj() {};
79 virtual ocsd_datapath_resp_t PacketDataIn(const ocsd_datapath_op_t op,
80 const ocsd_trc_index_t index_sop,
81 const void *p_packet_in)
83 return m_c_api_cb_fn(m_p_context, op, index_sop, p_packet_in);
87 FnDefPktDataIn m_c_api_cb_fn;
88 const void *m_p_context;
92 template<class TrcPkt>
93 class PktMonCBObj : public IPktRawDataMon<TrcPkt>
96 PktMonCBObj( FnDefPktDataMon pCBFunc, const void *p_context)
98 m_c_api_cb_fn = pCBFunc;
99 m_p_context = p_context;
102 virtual ~PktMonCBObj() {};
104 virtual void RawPacketDataMon( const ocsd_datapath_op_t op,
105 const ocsd_trc_index_t index_sop,
106 const TrcPkt *p_packet_in,
108 const uint8_t *p_data)
110 const void *c_pkt_struct = 0;
111 if(op == OCSD_OP_DATA)
112 c_pkt_struct = p_packet_in->c_pkt(); // always output the c struct packet
113 m_c_api_cb_fn(m_p_context,op,index_sop,c_pkt_struct,size,p_data);
117 FnDefPktDataMon m_c_api_cb_fn;
118 const void *m_p_context;
121 // void specialisation for custom decoders that pass packets as const void * pointers
123 class PktMonCBObj<void> : public IPktRawDataMon<void>
126 PktMonCBObj(FnDefPktDataMon pCBFunc, const void *p_context)
128 m_c_api_cb_fn = pCBFunc;
129 m_p_context = p_context;
132 virtual ~PktMonCBObj() {};
133 virtual void RawPacketDataMon(const ocsd_datapath_op_t op,
134 const ocsd_trc_index_t index_sop,
135 const void *p_packet_in,
137 const uint8_t *p_data)
139 m_c_api_cb_fn(m_p_context, op, index_sop, p_packet_in, size, p_data);
143 FnDefPktDataMon m_c_api_cb_fn;
144 const void *m_p_context;
147 /* handler for default string print CB object */
148 class DefLogStrCBObj : public ocsdMsgLogStrOutI
157 virtual ~DefLogStrCBObj()
163 void setCBFn(const void *p_context, FnDefLoggerPrintStrCB pCBFn)
165 m_c_api_cb_fn = pCBFn;
166 m_p_context = p_context;
169 virtual void printOutStr(const std::string &outStr)
172 m_c_api_cb_fn(m_p_context, outStr.c_str(), outStr.length());
176 FnDefLoggerPrintStrCB m_c_api_cb_fn;
177 const void *m_p_context;
180 #endif // ARM_OCSD_C_API_OBJ_H_INCLUDED
182 /* End of File ocsd_c_api_obj.h */