24#ifndef __YASIMAVR_WIRE_H__
25#define __YASIMAVR_WIRE_H__
69 State_Floating = 0x00,
71 State_PullDown = 0x01,
86 inline state_t() : m_value(State_Floating), m_level(0.5) {}
87 constexpr state_t(
StateEnum s,
double v = 0.0) : m_value(s), m_level(normalised_level(s, v)) {}
90 inline bool is_digital()
const {
return m_value & 0x01; }
91 inline bool is_driven()
const {
return m_value & 0x04; }
93 inline bool digital_value()
const {
return (m_value & 0x01) ? (m_value & 0x02) : (m_level > 0.5); }
95 std::string to_string()
const;
101 return (s.m_value == m_value) && ((m_value != State_Analog) || (s.m_level == m_level));
106 inline double level()
const {
return m_level; }
115 constexpr static double normalised_level(
StateEnum s,
double v)
118 if (s == State_Analog) {
119 if (v < 0.0)
return 0.0;
120 if (v > 1.0)
return 1.0;
126 return (s & 0x02) ? 1.0 : 0.0;
147 static StateEnum char2state(
char c);
159 Signal_StateChange = 0,
183 const state_t& state()
const;
184 bool digital_state()
const;
185 double voltage()
const;
187 void set_state(
const state_t& state);
188 void set_state(StateEnum state,
double v = 0.0);
189 void set_state(
char state,
double v = 0.0);
191 void attach(
Wire& other);
193 bool attached(
const Wire& other)
const;
194 bool attached()
const;
195 std::vector<Wire*> siblings()
const;
200 static state_t resolve_two_states(
const state_t& a,
const state_t& b);
204 void auto_resolve_state();
206 virtual void notify_digital_state(
bool state);
207 virtual state_t state_for_resolution()
const;
212 state_t m_resolved_state;
214 std::vector<Wire*> m_secondaries;
217 void resolve_state();
218 void set_resolved_state(
const state_t& s);
219 void notify_resolved_state();
228 return m_resolved_state;
236 return m_resolved_state.
level();
Definition sim_signal.h:137
bool operator!=(const state_t &s) const
Definition sim_wire.h:103
bool operator!=(StateEnum s) const
Definition sim_wire.h:98
double level() const
Definition sim_wire.h:106
bool is_driven() const
Definition sim_wire.h:91
bool digital_value() const
Definition sim_wire.h:93
state_t & operator=(const state_t &other)=default
bool operator==(StateEnum s) const
Definition sim_wire.h:97
constexpr state_t(StateEnum s, double v=0.0)
Definition sim_wire.h:87
state_t(const state_t &other)=default
StateEnum value() const
Definition sim_wire.h:105
bool is_digital() const
Definition sim_wire.h:90
bool operator==(const state_t &s) const
Definition sim_wire.h:99
state_t()
Definition sim_wire.h:86
General Purpose wire model.
Definition sim_wire.h:55
void set_state(const state_t &state)
Definition sim_wire.cpp:254
const state_t & state() const
Definition sim_wire.h:226
static StateEnum char2state(char c)
Definition sim_wire.cpp:65
double voltage() const
Definition sim_wire.h:234
StateEnum
Definition sim_wire.h:63
SignalId
Definition sim_wire.h:154
@ Signal_VoltageChange
Definition sim_wire.h:172
@ Signal_DigitalChange
Definition sim_wire.h:165
DataSignal & signal()
Definition sim_wire.h:263
#define YASIMAVR_BEGIN_NAMESPACE
Definition sim_globals.h:58
#define AVR_CORE_PUBLIC_API
Definition sim_globals.h:46
#define YASIMAVR_END_NAMESPACE
Definition sim_globals.h:59