HAL
netlist_relay.h
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved.
4 // Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved.
5 // Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved.
6 // Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in all
16 // copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 // SOFTWARE.
25 
26 #pragma once
27 
33 #include "gui/gui_def.h"
34 #include <QMap>
35 #include <QObject>
36 
37 namespace hal
38 {
39  class ModuleItem;
40  class ModuleColorManager;
41  class ModuleColorSerializer;
42  class Module;
43 
54  class NetlistRelay : public QObject
55  {
56  Q_OBJECT
57 
58  public:
64  explicit NetlistRelay(QObject* parent = nullptr);
65 
69  ~NetlistRelay();
70 
76 
82 
89  QColor getModuleColor(const u32 id);
90 
97 
105 
111  void changeModuleTypeDialog(const u32 id);
112 
118  void changeModuleColorDialog(const u32 id);
119 
125  void addChildModuleDialog(const u32 id);
126 
131  void addToModuleDialog(const Node& node = Node());
132 
138  void deleteModule(const u32 id);
139 
144  void reset();
145 
146  Q_SIGNALS:
147  /*=======================================
148  Netlist Event Signals
149  ========================================*/
150 
151  void signalThreadEvent(int type, int evt, void* object, u32 associated_data);
152 
160  void netlistIdChanged(Netlist* n, const u32 associated_data) const;
161 
169 
177 
185 
193  void netlistMarkedGlobalVcc(Netlist* n, const u32 associated_data) const;
194 
202  void netlistMarkedGlobalGnd(Netlist* n, const u32 associated_data) const;
203 
211  void netlistUnmarkedGlobalVcc(Netlist* n, const u32 associated_data) const;
212 
220  void netlistUnmarkedGlobalGnd(Netlist* n, const u32 associated_data) const;
221 
229  void netlistMarkedGlobalInput(Netlist* n, const u32 associated_data) const;
230 
238  void netlistMarkedGlobalOutput(Netlist* n, const u32 associated_data) const;
239 
247  void netlistUnmarkedGlobalInput(Netlist* n, const u32 associated_data) const;
248 
256  void netlistUnmarkedGlobalOutput(Netlist* n, const u32 associated_data) const;
257 
258  /*=======================================
259  Module Event Signals
260  ========================================*/
261 
268  void moduleCreated(Module* m) const;
269 
279  void moduleRemoved(Module* m) const;
280 
287  void moduleNameChanged(Module* m) const;
288 
295  void moduleParentChanged(Module* m) const;
296 
304  void moduleSubmoduleAdded(Module* m, const u32 added_module) const;
305 
313  void moduleSubmoduleRemoved(Module* m, const u32 removed_module) const;
314 
322  void moduleGateAssigned(Module* m, const u32 assigned_gate) const;
323 
331  void moduleGateRemoved(Module* m, const u32 removed_gate) const;
332 
340  void modulePortsChanged(Module* m, PinEvent pev, u32 pgid) const;
341 
348  void moduleTypeChanged(Module* m) const;
349 
357  void moduleGatesAssignBegin(Module* m, u32 number_gates) const;
358 
366  void moduleGatesAssignEnd(Module* m, u32 number_gates) const;
367 
375  void moduleGatesRemoveBegin(Module* m, u32 number_gates) const;
376 
383  void moduleGatesRemoveEnd(Module* m, u32 number_gates) const;
384 
385  /*=======================================
386  Gate Event Signals
387  ========================================*/
388 
395  void gateCreated(Gate* g) const;
396 
406  void gateRemoved(Gate* g) const;
407 
414  void gateNameChanged(Gate* g) const;
415 
423 
430  void gateLocationChanged(Gate* g) const;
431 
432  /*=======================================
433  Net Event Signals
434  ========================================*/
435 
442  void netCreated(Net* n) const;
443 
453  void netRemoved(Net* n) const;
454 
461  void netNameChanged(Net* n) const;
462 
470  void netSourceAdded(Net* n, const u32 src_gate_id) const;
471 
479  void netSourceRemoved(Net* n, const u32 src_gate_id) const;
480 
488  void netDestinationAdded(Net* n, const u32 dst_gate_id) const;
489 
497  void netDestinationRemoved(Net* n, const u32 dst_gate_id) const;
498 
499  /*=======================================
500  Grouping Event Signals
501  ========================================*/
502 
509  void groupingCreated(Grouping* grp) const;
510 
520  void groupingRemoved(Grouping* grp) const;
521 
528  void groupingNameChanged(Grouping* grp) const;
529 
536  void groupingColorChanged(Grouping* grp) const;
537 
545  void groupingGateAssigned(Grouping* grp, u32 id) const;
546 
554  void groupingGateRemoved(Grouping* grp, u32 id) const;
555 
563  void groupingNetAssigned(Grouping* grp, u32 id) const;
564 
572  void groupingNetRemoved(Grouping* grp, u32 id) const;
573 
581  void groupingModuleAssigned(Grouping* grp, u32 id) const;
582 
590  void groupingModuleRemoved(Grouping* grp, u32 id) const;
591 
592  public Q_SLOTS:
597  void debugHandleFileOpened();
598 
602  void debugHandleFileClosed();
603 
604  void handleThreadEvent(int type, int evt, void* object, u32 associated_data);
605 
606  private:
607  void relayNetlistEvent(NetlistEvent::event ev, Netlist* object, u32 associated_data);
608  void relayModuleEvent(ModuleEvent::event ev, Module* mod, u32 associated_data);
609  void relayGateEvent(GateEvent::event ev, Gate* gat, u32 associated_data);
610  void relayNetEvent(NetEvent::event ev, Net* net, u32 associated_data);
611  void relayGroupingEvent(GroupingEvent::event ev, Grouping* grp, u32 associated_data);
612  static void dumpModuleRecursion(Module* m);
613 
614  void handleNetlistModified();
615  bool mNotified;
616 
617  QMap<u32, QColor> mModuleColors;
618  ModuleColorManager* mModuleColorManager;
619  ModuleColorSerializer mColorSerializer;
620  enum ThreadEventType { TetNetlist, TetModule, TetGate, TetNet, TetGrouping };
621  };
622 } // namespace hal
Definition: gate.h:58
Definition: net.h:58
Connects the hal-core events to the gui.
Definition: netlist_relay.h:55
void addToModuleDialog(const Node &node=Node())
void netDestinationRemoved(Net *n, const u32 dst_gate_id) const
void groupingColorChanged(Grouping *grp) const
void moduleGatesAssignEnd(Module *m, u32 number_gates) const
void groupingCreated(Grouping *grp) const
void netlistUnmarkedGlobalOutput(Netlist *n, const u32 associated_data) const
void netlistDeviceNameChanged(Netlist *n) const
void addChildModuleDialog(const u32 id)
void netlistIdChanged(Netlist *n, const u32 associated_data) const
void netlistUnmarkedGlobalInput(Netlist *n, const u32 associated_data) const
void moduleGatesRemoveBegin(Module *m, u32 number_gates) const
void moduleTypeChanged(Module *m) const
void netCreated(Net *n) const
void registerNetlistCallbacks()
void netlistMarkedGlobalVcc(Netlist *n, const u32 associated_data) const
ModuleColorManager * getModuleColorManager() const
void groupingGateAssigned(Grouping *grp, u32 id) const
void deleteModule(const u32 id)
void changeModuleColorDialog(const u32 id)
void groupingModuleAssigned(Grouping *grp, u32 id) const
void netlistInputFilenameChanged(Netlist *n) const
void unregisterNetlistCallbacks()
void groupingModuleRemoved(Grouping *grp, u32 id) const
void changeElementNameDialog(ModuleItem::TreeItemType type, u32 id)
void netSourceAdded(Net *n, const u32 src_gate_id) const
void moduleGateRemoved(Module *m, const u32 removed_gate) const
void moduleGateAssigned(Module *m, const u32 assigned_gate) const
void netSourceRemoved(Net *n, const u32 src_gate_id) const
void netlistMarkedGlobalInput(Netlist *n, const u32 associated_data) const
void netRemoved(Net *n) const
void groupingRemoved(Grouping *grp) const
void netlistMarkedGlobalOutput(Netlist *n, const u32 associated_data) const
NetlistRelay(QObject *parent=nullptr)
void gateCreated(Gate *g) const
void groupingNetAssigned(Grouping *grp, u32 id) const
void netlistUnmarkedGlobalVcc(Netlist *n, const u32 associated_data) const
void netDestinationAdded(Net *n, const u32 dst_gate_id) const
void moduleSubmoduleRemoved(Module *m, const u32 removed_module) const
void groupingNameChanged(Grouping *grp) const
void moduleNameChanged(Module *m) const
void handleThreadEvent(int type, int evt, void *object, u32 associated_data)
void gateRemoved(Gate *g) const
void gateNameChanged(Gate *g) const
void moduleRemoved(Module *m) const
void moduleParentChanged(Module *m) const
void modulePortsChanged(Module *m, PinEvent pev, u32 pgid) const
void changeModuleTypeDialog(const u32 id)
void moduleSubmoduleAdded(Module *m, const u32 added_module) const
void groupingNetRemoved(Grouping *grp, u32 id) const
void moduleCreated(Module *m) const
void moduleGatesRemoveEnd(Module *m, u32 number_gates) const
void netlistDesignNameChanged(Netlist *n) const
void signalThreadEvent(int type, int evt, void *object, u32 associated_data)
void netlistMarkedGlobalGnd(Netlist *n, const u32 associated_data) const
void netlistUnmarkedGlobalGnd(Netlist *n, const u32 associated_data) const
void gateBooleanFunctionChanged(Gate *g) const
void gateLocationChanged(Gate *g) const
void groupingGateRemoved(Grouping *grp, u32 id) const
void moduleGatesAssignBegin(Module *m, u32 number_gates) const
void netNameChanged(Net *n) const
QColor getModuleColor(const u32 id)
The Node class object represents a module or a gate.
Definition: gui_def.h:61
PinEvent
Definition: pin_event.h:42
n
Definition: test.py:6
quint32 u32
PinType type
Net * net
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
QObject * parent() const const