HAL  v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
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 
341  void modulePortsChanged(Module* m, PinEvent pev, u32 pgid) const;
342 
349  void moduleTypeChanged(Module* m) const;
350 
358  void moduleGatesAssignBegin(Module* m, u32 number_gates) const;
359 
367  void moduleGatesAssignEnd(Module* m, u32 number_gates) const;
368 
376  void moduleGatesRemoveBegin(Module* m, u32 number_gates) const;
377 
384  void moduleGatesRemoveEnd(Module* m, u32 number_gates) const;
385 
386  /*=======================================
387  Gate Event Signals
388  ========================================*/
389 
396  void gateCreated(Gate* g) const;
397 
407  void gateRemoved(Gate* g) const;
408 
415  void gateNameChanged(Gate* g) const;
416 
424 
431  void gateLocationChanged(Gate* g) const;
432 
433  /*=======================================
434  Net Event Signals
435  ========================================*/
436 
443  void netCreated(Net* n) const;
444 
454  void netRemoved(Net* n) const;
455 
462  void netNameChanged(Net* n) const;
463 
471  void netSourceAdded(Net* n, const u32 src_gate_id) const;
472 
480  void netSourceRemoved(Net* n, const u32 src_gate_id) const;
481 
489  void netDestinationAdded(Net* n, const u32 dst_gate_id) const;
490 
498  void netDestinationRemoved(Net* n, const u32 dst_gate_id) const;
499 
500  /*=======================================
501  Grouping Event Signals
502  ========================================*/
503 
510  void groupingCreated(Grouping* grp) const;
511 
521  void groupingRemoved(Grouping* grp) const;
522 
529  void groupingNameChanged(Grouping* grp) const;
530 
537  void groupingColorChanged(Grouping* grp) const;
538 
546  void groupingGateAssigned(Grouping* grp, u32 id) const;
547 
555  void groupingGateRemoved(Grouping* grp, u32 id) const;
556 
564  void groupingNetAssigned(Grouping* grp, u32 id) const;
565 
573  void groupingNetRemoved(Grouping* grp, u32 id) const;
574 
582  void groupingModuleAssigned(Grouping* grp, u32 id) const;
583 
591  void groupingModuleRemoved(Grouping* grp, u32 id) const;
592 
593  public Q_SLOTS:
598  void debugHandleFileOpened();
599 
603  void debugHandleFileClosed();
604 
605  void handleThreadEvent(int type, int evt, void* object, u32 associated_data);
606 
607  private:
608  void relayNetlistEvent(NetlistEvent::event ev, Netlist* object, u32 associated_data);
609  void relayModuleEvent(ModuleEvent::event ev, Module* mod, u32 associated_data);
610  void relayGateEvent(GateEvent::event ev, Gate* gat, u32 associated_data);
611  void relayNetEvent(NetEvent::event ev, Net* net, u32 associated_data);
612  void relayGroupingEvent(GroupingEvent::event ev, Grouping* grp, u32 associated_data);
613  static void dumpModuleRecursion(Module* m);
614 
615  void handleNetlistModified();
616  bool mNotified;
617 
618  QMap<u32, QColor> mModuleColors;
619  ModuleColorManager* mModuleColorManager;
620  ModuleColorSerializer mColorSerializer;
621  enum ThreadEventType { TetNetlist, TetModule, TetGate, TetNet, TetGrouping };
622  };
623 } // 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
uint32_t u32
Definition: defines.h:41
Definition: defines.h:45
PinEvent
Definition: pin_event.h:42
PinType type
Net * net
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
QObject * parent() const const