HAL  v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
wave_item.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 
28 #include <QLine>
29 #include <QHash>
30 #include <QMutex>
31 #include <QTextStream>
34 
35 class QScrollBar;
36 class QThread;
37 
38 namespace hal {
39 
40  class WaveItemHash;
41 
46  {
47  public:
49  private:
50  IndexType mType;
51  u32 mIndex;
52  u32 mParentId;
53  public:
54  WaveItemIndex(u32 inx = 0, IndexType tp = Invalid, u32 pid = 0)
55  : mType(tp), mIndex(inx), mParentId(pid) {;}
56  bool isValid() const { return mType != Invalid; }
57  bool isGroup() const { return mType == Group; }
58  bool isWire() const { return mType == Wire; }
59  u32 intType() const { return mType; }
60  u32 index() const { return mIndex; }
61  u32 parentId() const { return mParentId; }
62  bool operator== (const WaveItemIndex& other) const;
63  };
64 
65  uint qHash(const WaveItemIndex &wii);
66 
70  class WaveItem : public QObject
71  {
72  Q_OBJECT
73  public:
76  private:
77  WaveData* mData;
78  QThread* mLoader;
79  int mLoadProgress;
80  State mState;
81 
82  public:
87  bool mLoop;
88 
90 
91  private:
92  int mYposition;
93  int mRequest;
94  float mMinTime;
95  float mMaxTime;
96  float mMaxTransition;
97  bool mVisibile;
98  bool mSelected;
99 
100  public Q_SLOTS:
102 
103  Q_SIGNALS:
104  void doneLoading();
106 
107  public:
108  WaveItem(WaveData* dat, QObject* parent = nullptr);
109  ~WaveItem();
110 
111  bool isNull() const { return mState==Null; }
112  bool isLoading() const { return mState==Loading; }
113  bool isPainted() const { return mState==Painted; }
114  bool isFinished() const { return mState==Finished; }
115  bool isAborted() const { return mState==Aborted; }
116  bool isSelected() const { return mSelected; }
117  bool isThreadBusy() const { return isFinished() || isAborted(); }
118  void deletePainted();
119  void startGeneratePainted(const QString& workdir, const WaveTransform* trans, const WaveScrollbar* sbar, const WaveDataTimeframe& tframe);
120  void startLoader(const QString& workdir, const WaveTransform* trans, const WaveScrollbar* sbar, const WaveDataTimeframe& tframe);
121  void abortLoader();
122  void setState(State stat);
123  void dump(QTextStream& xout) const;
124  bool hasLoader() const { return mLoader != nullptr; }
125  void loadSaleae();
126  State state() const { return mState; }
127 
128  // int waveIndex() const { return mWaveIndex; }
129  const WaveData* wavedata() const { return mData; }
130  int yPosition() const { return mYposition; }
131  bool isVisibile() const { return mVisibile; }
132  void setYposition(int pos);
133  void setWaveData(WaveData* wd);
134  void setWaveVisible(bool vis);
135  void setWaveSelected(bool sel);
136  bool setTimeframe();
137  bool hasRequest(Request rq) const;
138  void setRequest(Request rq);
139  void clearRequest(Request rq);
140  bool isDeleted() const;
141  int loadeProgress() const { return mLoadProgress; }
142  void incrementLoadProgress();
143  static const char* sBackgroundColor;
144  bool isGroup() const { return mData->netType() == WaveData::NetGroup; }
145  bool isBoolean() const { return mData->netType() == WaveData::BooleanNet; }
146  bool isTrigger() const { return mData->netType() == WaveData::TriggerTime; }
147  int cursorValue(double tCursor, int xpos);
148  };
149 
153  class WaveItemHash : public QHash<WaveItemIndex,WaveItem*>
154  {
155  int mVisibleEntries;
156  QList<WaveItem*> mTrashCan;
157  WaveItem* mFirstSelected;
158  public:
159  WaveItemHash() : mFirstSelected(nullptr) {;}
160  int visibleEntries() const { return mVisibleEntries; }
161  int importedWires() const;
162  void setVisibleEntries(int ve) { mVisibleEntries = ve; }
163  WaveItem* addOrReplace(WaveData*wd, WaveItemIndex::IndexType tp, int iwave, int parentId);
164  void dump(const char* stub);
165  void dispose(WaveItem* wi);
166  WaveItem* firstSelected() const { return mFirstSelected; }
167  void setSelected(WaveItem* wi=nullptr) { mFirstSelected = wi; }
168  void emptyTrash();
169  };
170 }
NetType netType() const
Definition: wave_data.h:105
void setSelected(WaveItem *wi=nullptr)
Definition: wave_item.h:167
int visibleEntries() const
Definition: wave_item.h:160
int importedWires() const
Definition: wave_item.cpp:295
void setVisibleEntries(int ve)
Definition: wave_item.h:162
void dump(const char *stub)
Definition: wave_item.cpp:353
WaveItem * firstSelected() const
Definition: wave_item.h:166
void dispose(WaveItem *wi)
Definition: wave_item.cpp:320
WaveItem * addOrReplace(WaveData *wd, WaveItemIndex::IndexType tp, int iwave, int parentId)
Definition: wave_item.cpp:305
const WaveData * wavedata() const
Definition: wave_item.h:129
void handleWaveLoaderFinished()
Definition: wave_item.cpp:229
bool isVisibile() const
Definition: wave_item.h:131
int yPosition() const
Definition: wave_item.h:130
void doneLoading()
bool hasLoader() const
Definition: wave_item.h:124
bool hasRequest(Request rq) const
Definition: wave_item.cpp:260
bool setTimeframe()
Definition: wave_item.cpp:60
bool isNull() const
Definition: wave_item.h:111
void abortLoader()
Definition: wave_item.cpp:223
void setState(State stat)
Definition: wave_item.cpp:136
void setWaveData(WaveData *wd)
Definition: wave_item.cpp:40
bool isAborted() const
Definition: wave_item.h:115
int cursorValue(double tCursor, int xpos)
Definition: wave_item.cpp:166
bool isBoolean() const
Definition: wave_item.h:145
void startLoader(const QString &workdir, const WaveTransform *trans, const WaveScrollbar *sbar, const WaveDataTimeframe &tframe)
Definition: wave_item.cpp:123
State state() const
Definition: wave_item.h:126
@ DeleteAcknowledged
Definition: wave_item.h:74
@ SelectionChanged
Definition: wave_item.h:74
int loadeProgress() const
Definition: wave_item.h:141
bool isTrigger() const
Definition: wave_item.h:146
void setWaveVisible(bool vis)
Definition: wave_item.cpp:46
bool isFinished() const
Definition: wave_item.h:114
bool isDeleted() const
Definition: wave_item.cpp:278
void setRequest(Request rq)
Definition: wave_item.cpp:266
bool isSelected() const
Definition: wave_item.h:116
bool isLoading() const
Definition: wave_item.h:112
WaveItem(WaveData *dat, QObject *parent=nullptr)
Definition: wave_item.cpp:18
void startGeneratePainted(const QString &workdir, const WaveTransform *trans, const WaveScrollbar *sbar, const WaveDataTimeframe &tframe)
Definition: wave_item.cpp:88
void dump(QTextStream &xout) const
Definition: wave_item.cpp:157
bool mVisibleRange
Definition: wave_item.h:86
WaveFormPainted mPainted
Definition: wave_item.h:83
bool isThreadBusy() const
Definition: wave_item.h:117
QMutex mMutex
Definition: wave_item.h:85
void setYposition(int pos)
Definition: wave_item.cpp:33
bool isPainted() const
Definition: wave_item.h:113
WaveZoomShift mLoadValidity
Definition: wave_item.h:84
void incrementLoadProgress()
Definition: wave_item.cpp:150
bool isGroup() const
Definition: wave_item.h:144
void loadSaleae()
Definition: wave_item.cpp:254
void deletePainted()
Definition: wave_item.cpp:82
void gotCursorValue()
static const char * sBackgroundColor
Definition: wave_item.h:143
void clearRequest(Request rq)
Definition: wave_item.cpp:272
void setWaveSelected(bool sel)
Definition: wave_item.cpp:53
u32 parentId() const
Definition: wave_item.h:61
u32 index() const
Definition: wave_item.h:60
bool isValid() const
Definition: wave_item.h:56
u32 intType() const
Definition: wave_item.h:59
bool operator==(const WaveItemIndex &other) const
Definition: wave_item.cpp:284
bool isGroup() const
Definition: wave_item.h:57
WaveItemIndex(u32 inx=0, IndexType tp=Invalid, u32 pid=0)
Definition: wave_item.h:54
bool isWire() const
Definition: wave_item.h:58
uint32_t u32
Definition: defines.h:41
Definition: defines.h:45
uint qHash(const LaneIndex &ri)
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
QObject * parent() const const