quic/qbox
Loading...
Searching...
No Matches
legacy-char-backend.h
1/*
2 * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <systemc>
8#include <cci_configuration>
9#include <scp/report.h>
10#include <ports/biflow-socket.h>
11
12#pragma once
13
14class LegacyCharBackend : public sc_core::sc_module
15{
16protected:
17 void* m_opaque;
18 void (*m_receive)(void* opaque, const uint8_t* buf, int size);
19 int (*m_can_receive)(void* opaque);
20
22
23public:
24 SCP_LOGGER();
25 static void recieve(void* opaque, const uint8_t* buf, int size)
26 {
28 for (int i = 0; i < size; i++) {
29 t->socket.enqueue(buf[i]);
30 }
31 }
32
33 void b_transport(tlm::tlm_generic_payload& txn, sc_core::sc_time& t)
34 {
35 uint8_t* data = txn.get_data_ptr();
36 for (int i = 0; i < txn.get_streaming_width(); i++) {
37 write(data[i]);
38 }
39 }
40 LegacyCharBackend(): socket("biflow_socket")
41 {
42 SCP_DEBUG("LegacyCharBackend") << "LegacyCharBackend constructor";
43 m_opaque = this;
44 m_receive = recieve;
45 m_can_receive = can_receive;
46 socket.register_b_transport(this, &LegacyCharBackend::b_transport);
47 }
48
49 void start_of_simulation() { socket.can_receive_any(); }
50
51 virtual void write(unsigned char c) = 0;
52
53 static int can_receive(void* opaque) { return 1; }
54
55 void register_receive(void* opaque, void (*receive)(void* opaque, const uint8_t* buf, int size),
56 int (*can_receive)(void* opaque))
57 {
58 SCP_FATAL(())("Deprecated!!!!");
59 m_opaque = opaque;
60 m_receive = receive;
61 m_can_receive = can_receive;
62 }
63};
Definition legacy-char-backend.h:15
Definition target.h:160
Definition biflow-socket.h:73
void can_receive_any()
can_receive_any Allow unlimited items to arrive.
Definition biflow-socket.h:264
void register_b_transport(MODULE *mod, void(MODULE::*cb)(tlm::tlm_generic_payload &, sc_core::sc_time &))
Register b_transport to be called whenever data is received from the socket.
Definition biflow-socket.h:227