quic/qbox
Loading...
Searching...
No Matches
qemu-target-signal-socket.h
1/*
2 * This file is part of libqbox
3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
4 * Author: GreenSocs 2021
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9#ifndef _LIBQBOX_PORTS_TARGET_SIGNAL_SOCKET_H
10#define _LIBQBOX_PORTS_TARGET_SIGNAL_SOCKET_H
11
12#include <functional>
13
14#include <libqemu-cxx/libqemu-cxx.h>
15
16#include <ports/target-signal-socket.h>
17
29{
30protected:
31 qemu::Gpio m_gpio_in;
32
33 void value_changed_cb(const bool& val) { m_gpio_in.set(val); }
34
35 void init_with_gpio(qemu::Gpio gpio)
36 {
37 using namespace std::placeholders;
38
39 m_gpio_in = gpio;
40
41 auto cb = std::bind(&QemuTargetSignalSocket::value_changed_cb, this, _1);
42 register_value_changed_cb(cb);
43 }
44
45public:
46 QemuTargetSignalSocket(const char* name): TargetSignalSocket(name) {}
47
48 ~QemuTargetSignalSocket() { register_value_changed_cb(nullptr); }
49
61 {
62 qemu::Gpio gpio(dev.get_gpio_in(gpio_idx));
63 init_with_gpio(gpio);
64 }
65
79 {
80 qemu::Gpio gpio(dev.get_gpio_in_named(gpio_name, gpio_idx));
81 init_with_gpio(gpio);
82 }
83
89 qemu::Gpio get_gpio() { return m_gpio_in; }
90
94 void notify() { m_proxy.notify(); }
95};
96
97#endif
A QEMU input GPIO exposed as a TargetSignalSocket<bool>
Definition qemu-target-signal-socket.h:29
void init_named(qemu::Device dev, const char *gpio_name, int gpio_idx)
Initialize this socket with a device, a GPIO namespace, and a GPIO index.
Definition qemu-target-signal-socket.h:78
void notify()
Force a notification on the default event.
Definition qemu-target-signal-socket.h:94
void init(qemu::Device dev, int gpio_idx)
Initialize this socket with a device and a GPIO index.
Definition qemu-target-signal-socket.h:60
qemu::Gpio get_gpio()
Returns the GPIO wrapped by this socket.
Definition qemu-target-signal-socket.h:89
Definition target.h:160
Definition target-signal-socket.h:163
Definition libqemu-cxx.h:616
Definition libqemu-cxx.h:273