rogue
Loading...
Searching...
No Matches
Variable.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_INTERFACES_MEMORY_VARIABLE_H__
18#define __ROGUE_INTERFACES_MEMORY_VARIABLE_H__
19#include "rogue/Directives.h"
20
21#include <inttypes.h>
22#include <stdint.h>
23
24#include <memory>
25#include <string>
26#include <thread>
27#include <vector>
28
30
31#ifndef NO_PYTHON
32 #include <boost/python.hpp>
33#endif
34
35namespace rogue {
36namespace interfaces {
37namespace memory {
38
39class Block;
40class Variable;
41
43typedef std::shared_ptr<rogue::interfaces::memory::Variable> VariablePtr;
44
62class Variable {
63 friend class Block;
64
65 protected:
66 // Associated block
68
69 // Name
70 std::string name_;
71
72 // Path
73 std::string path_;
74
75 // Model
76 uint32_t modelId_;
77
78 // Byte reverse flag
80
81 // Bit reverse flag
83
84 // Total number of used bits for this value, used for standard non list variables
85 uint32_t bitTotal_;
86
87 // Fast copy base array
88 uint32_t* fastByte_;
89
90 // Total bytes (rounded up) for this value, based upon bitTotal_
91 uint32_t byteSize_;
92
93 // Variable coverage bytes, regardless of if bits are used
94 uint32_t varBytes_;
95
96 // Variable offset, in bytes
97 uint64_t offset_;
98
99 // Array of bit offsets
100 std::vector<uint32_t> bitOffset_;
101
102 // Array of bit sizes
103 std::vector<uint32_t> bitSize_;
104
105 // Min value for range checking
106 double minValue_;
107
108 // Max value for range checking
109 double maxValue_;
110
111 // Bulk Enable Flag
113
114 // Enable update calls
116
117 // Variable mode
118 std::string mode_;
119
120 // Overlap Enable Flag
122
123 // Verify flag
125
126 // Low byte value
127 uint32_t* lowTranByte_;
128
129 // High byte value
130 uint32_t* highTranByte_;
131
132 // Poiner to custom data
134
135 // Bin Point
136 uint32_t binPoint_;
137
138 // Stale flag
139 bool stale_;
140
141 // Stale start address
143
144 // Stale stop address
146
147 // Number of values
148 uint32_t numValues_;
149
150 // Bits per value
151 uint32_t valueBits_;
152
153 // Bytes per value
154 uint32_t valueBytes_;
155
156 // Stride per value
157 uint32_t valueStride_;
158
159 // Retry count
160 uint32_t retryCount_;
161
162#ifndef NO_PYTHON
164 // Python
166
167 // Set pointer function
168 void (rogue::interfaces::memory::Block::*setFuncPy_)(boost::python::object&,
169 rogue::interfaces::memory::Variable*,
170 int32_t index);
171
172 // Get pointer function
173 boost::python::object (rogue::interfaces::memory::Block::*getFuncPy_)(rogue::interfaces::memory::Variable*,
174 int32_t index);
175#endif
176
178 // C++ Byte Array
180
182 rogue::interfaces::memory::Variable*,
183 int32_t index);
184
186 rogue::interfaces::memory::Variable*,
187 int32_t index);
188
190 // C++ Uint
192
194 rogue::interfaces::memory::Variable*,
195 int32_t index);
196
197 uint64_t (rogue::interfaces::memory::Block::*getUInt_)(rogue::interfaces::memory::Variable*, int32_t index);
198
200 // C++ int
202
204 rogue::interfaces::memory::Variable*,
205 int32_t index);
206
207 int64_t (rogue::interfaces::memory::Block::*getInt_)(rogue::interfaces::memory::Variable*, int32_t index);
208
210 // C++ bool
212
214 rogue::interfaces::memory::Variable*,
215 int32_t index);
216
217 bool (rogue::interfaces::memory::Block::*getBool_)(rogue::interfaces::memory::Variable*, int32_t index);
218
220 // C++ String
222
223 void (rogue::interfaces::memory::Block::*setString_)(const std::string&,
224 rogue::interfaces::memory::Variable*,
225 int32_t index);
226
227 std::string (rogue::interfaces::memory::Block::*getString_)(rogue::interfaces::memory::Variable*, int32_t index);
228
230 // C++ Float
232
234 rogue::interfaces::memory::Variable*,
235 int32_t index);
236
237 float (rogue::interfaces::memory::Block::*getFloat_)(rogue::interfaces::memory::Variable*, int32_t index);
238
240 // C++ double
242
244 rogue::interfaces::memory::Variable*,
245 int32_t index);
246
247 double (rogue::interfaces::memory::Block::*getDouble_)(rogue::interfaces::memory::Variable*, int32_t index);
248
250 // C++ filed point
252
254 rogue::interfaces::memory::Variable*,
255 int32_t index);
256
257 double (rogue::interfaces::memory::Block::*getFixed_)(rogue::interfaces::memory::Variable*, int32_t index);
258
259 public:
291 std::string mode,
292 double minimum,
293 double maximum,
294 uint64_t offset,
295 std::vector<uint32_t> bitOffset,
296 std::vector<uint32_t> bitSize,
297 bool overlapEn,
298 bool verify,
299 bool bulkOpEn,
300 bool updateNotify,
301 uint32_t modelId,
302 bool byteReverse,
303 bool bitReverse,
304 uint32_t binPoint,
305 uint32_t numValues,
306 uint32_t valueBits,
307 uint32_t valueStride,
308 uint32_t retryCount);
309
311 static void setup_python();
312
341 Variable(std::string name,
342 std::string mode,
343 double minimum,
344 double maximum,
345 uint64_t offset,
346 std::vector<uint32_t> bitOffset,
347 std::vector<uint32_t> bitSize,
348 bool overlapEn,
349 bool verify,
350 bool bulkOpEn,
351 bool updateNotify,
352 uint32_t modelId,
353 bool byteReverse,
354 bool bitReverse,
355 uint32_t binPoint,
356 uint32_t numValues,
357 uint32_t valueBits,
358 uint32_t valueStride,
359 uint32_t retryCount);
360
362 virtual ~Variable();
363
376 void shiftOffsetDown(uint32_t shift, uint32_t minSize);
377
387 void updatePath(std::string path);
388
399 uint32_t modelId() const {
400 return modelId_;
401 }
402
404 uint32_t bitTotal() const {
405 return bitTotal_;
406 }
407
409 uint32_t byteSize() const {
410 return byteSize_;
411 }
412
414 const std::string& name() const {
415 return name_;
416 }
417
427 const std::string& mode() const {
428 return mode_;
429 }
430
432 const std::string& path() const {
433 return path_;
434 }
435
437 double minimum();
438
440 double maximum();
441
443 uint32_t varBytes();
444
446 uint64_t offset();
447
449 bool verifyEn();
450
452 bool overlapEn();
453
455 bool bulkOpEn();
456
458 uint32_t numValues() {
459 return numValues_;
460 }
461
463 uint32_t valueBits() {
464 return valueBits_;
465 }
466
468 uint32_t valueBytes() {
469 return valueBytes_;
470 }
471
473 uint32_t valueStride() {
474 return valueStride_;
475 }
476
478 uint32_t retryCount() {
479 return retryCount_;
480 }
481
483 virtual void queueUpdate();
484
492 void rateTest();
493
495 void setLogLevel(uint32_t level);
496
498 std::string getDumpValue(bool read);
499
507 void read();
508
510 // C++ Byte Array
512
523 void setByteArray(uint8_t* value, int32_t index = -1);
524
535 void getByteArray(uint8_t* value, int32_t index = -1);
536
538 // C++ Uint
540
551 void setUInt(uint64_t& value, int32_t index = -1);
552
559 void setValue(uint64_t value, int32_t index = -1) {
560 setUInt(value, index);
561 }
562
573 uint64_t getUInt(int32_t index = -1);
574
581 void getValue(uint64_t& valueRet, int32_t index = -1) {
582 valueRet = getUInt(index);
583 }
584
586 // C++ int
588
599 void setInt(int64_t& value, int32_t index = -1);
600
607 void setValue(int64_t value, int32_t index = -1) {
608 setInt(value, index);
609 }
610
621 int64_t getInt(int32_t index = -1);
622
629 void getValue(int64_t& valueRet, int32_t index = -1) {
630 valueRet = getInt(index);
631 }
632
634 // C++ bool
636
647 void setBool(bool& value, int32_t index = -1);
648
655 void setValue(bool value, int32_t index = -1) {
656 setBool(value, index);
657 }
658
669 bool getBool(int32_t index = -1);
670
677 void getValue(bool& valueRet, int32_t index = -1) {
678 valueRet = getBool(index);
679 }
680
682 // C++ String
684
695 void setString(const std::string& value, int32_t index = -1);
696
703 void setValue(const std::string& value, int32_t index = -1) {
704 setString(value, index);
705 }
706
717 std::string getString(int32_t index = -1);
718
725 void getString(std::string& retString, int32_t index = -1) {
726 getValue(retString, index);
727 }
728
735 void getValue(std::string& valueRet, int32_t index = -1);
736
738 // C++ Float
740
751 void setFloat(float& value, int32_t index = -1);
752
759 void setValue(float value, int32_t index = -1) {
760 setFloat(value, index);
761 }
762
773 float getFloat(int32_t index = -1);
774
781 void getValue(float& valueRet, int32_t index = -1) {
782 valueRet = getFloat(index);
783 }
784
786 // C++ double
788
799 void setDouble(double& value, int32_t index = -1);
800
807 void setValue(double value, int32_t index = -1) {
808 setDouble(value, index);
809 }
810
821 double getDouble(int32_t index = -1);
822
829 void getValue(double& valueRet, int32_t index = -1) {
830 valueRet = getDouble(index);
831 }
832
834 // C++ fixed point
836
848 void setFixed(double& value, int32_t index = -1);
849
860 double getFixed(int32_t index = -1);
861};
862
863#ifndef NO_PYTHON
864
874 public boost::python::wrapper<rogue::interfaces::memory::Variable> {
875 boost::python::object model_;
876
877 public:
895 VariableWrap(std::string name,
896 std::string mode,
897 boost::python::object minimum,
898 boost::python::object maximum,
899 uint64_t offset,
900 boost::python::object bitOffset,
901 boost::python::object bitSize,
902 bool overlapEn,
903 bool verify,
904 bool bulkOpEn,
905 bool updateNotify,
906 boost::python::object model,
907 boost::python::object listData,
908 uint32_t retryCount);
909
914 void updateOffset(boost::python::object& bitOffset);
915
927 void set(boost::python::object& value, int32_t index);
928
940 boost::python::object get(int32_t index);
941
947 boost::python::object toBytes(boost::python::object& value);
948
954 boost::python::object fromBytes(boost::python::object& value);
955
962 void defQueueUpdate();
963
970 void queueUpdate();
971
976 boost::python::object bitOffset();
977
982 boost::python::object bitSize();
983};
984
985typedef std::shared_ptr<rogue::interfaces::memory::VariableWrap> VariableWrapPtr;
986
987#endif
988
989} // namespace memory
990} // namespace interfaces
991} // namespace rogue
992
993#endif
Memory interface block device.
Definition Block.h:96
Internal Boost.Python wrapper for rogue::interfaces::memory::Variable. Enables Python subclasses to o...
Definition Variable.h:874
boost::python::object get(int32_t index)
Gets value from RemoteVariable.
Definition Variable.cpp:596
boost::python::object fromBytes(boost::python::object &value)
Converts a byte representation to a Python value object.
Definition Variable.cpp:610
void defQueueUpdate()
Calls the base-class queueUpdate() implementation.
Definition Variable.cpp:614
void queueUpdate()
Dispatches queue update callback.
Definition Variable.cpp:619
boost::python::object bitOffset()
Returns bit-offset configuration.
Definition Variable.cpp:632
boost::python::object bitSize()
Returns bit-size configuration.
Definition Variable.cpp:636
void updateOffset(boost::python::object &bitOffset)
Updates bit-offset definition from Python.
void set(boost::python::object &value, int32_t index)
Sets value from RemoteVariable.
Definition Variable.cpp:590
boost::python::object toBytes(boost::python::object &value)
Converts a Python value object to a byte representation.
Definition Variable.cpp:605
Memory variable descriptor and typed accessor facade.
Definition Variable.h:62
void(rogue::interfaces::memory::Block::* setByteArray_)(const uint8_t *, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:181
virtual ~Variable()
Destroys the variable instance.
Definition Variable.cpp:444
void getValue(bool &valueRet, int32_t index=-1)
Gets boolean value into output reference.
Definition Variable.h:677
boost::python::object(rogue::interfaces::memory::Block::* getFuncPy_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:173
void setLogLevel(uint32_t level)
Sets logging level for variable's block.
Definition Variable.cpp:681
void(rogue::interfaces::memory::Block::* getByteArray_)(uint8_t *, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:185
static rogue::interfaces::memory::VariablePtr create(std::string name, std::string mode, double minimum, double maximum, uint64_t offset, std::vector< uint32_t > bitOffset, std::vector< uint32_t > bitSize, bool overlapEn, bool verify, bool bulkOpEn, bool updateNotify, uint32_t modelId, bool byteReverse, bool bitReverse, uint32_t binPoint, uint32_t numValues, uint32_t valueBits, uint32_t valueStride, uint32_t retryCount)
Creates a memory variable descriptor.
Definition Variable.cpp:47
int64_t(rogue::interfaces::memory::Block::* getInt_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:207
double getDouble(int32_t index=-1)
Gets double value.
Definition Variable.cpp:913
void setValue(float value, int32_t index=-1)
Convenience alias for setFloat.
Definition Variable.h:759
uint32_t retryCount()
Returns retry count.
Definition Variable.h:478
uint64_t offset()
Returns variable byte offset.
Definition Variable.cpp:531
void setValue(int64_t value, int32_t index=-1)
Convenience alias for setInt.
Definition Variable.h:607
void getValue(float &valueRet, int32_t index=-1)
Gets float value into output reference.
Definition Variable.h:781
void getValue(int64_t &valueRet, int32_t index=-1)
Gets signed integer value into output reference.
Definition Variable.h:629
uint32_t modelId() const
Returns model ID of the variable.
Definition Variable.h:399
bool getBool(int32_t index=-1)
Gets boolean value.
Definition Variable.cpp:844
float getFloat(int32_t index=-1)
Gets float value.
Definition Variable.cpp:893
void setFixed(double &value, int32_t index=-1)
Sets fixed-point value.
Definition Variable.cpp:925
double(rogue::interfaces::memory::Block::* getDouble_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:247
const std::string & mode() const
Returns variable mode string.
Definition Variable.h:427
uint32_t bitTotal() const
Returns total number of bits for this value.
Definition Variable.h:404
virtual void queueUpdate()
Executes queue update callback (unused in C++).
Definition Variable.cpp:642
void(rogue::interfaces::memory::Block::* setFuncPy_)(boost::python::object &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:168
bool verifyEn()
Returns verify-enable flag.
Definition Variable.cpp:536
uint32_t varBytes()
Returns variable range in bytes.
Definition Variable.cpp:526
void getValue(double &valueRet, int32_t index=-1)
Gets double value into output reference.
Definition Variable.h:829
bool bulkOpEn()
Returns bulk-operation enable flag.
Definition Variable.cpp:546
void(rogue::interfaces::memory::Block::* setDouble_)(const double &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:243
rogue::interfaces::memory::Block * block_
Definition Variable.h:67
void read()
Performs a read operation for this variable.
Definition Variable.cpp:685
float(rogue::interfaces::memory::Block::* getFloat_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:237
void(rogue::interfaces::memory::Block::* setUInt_)(const uint64_t &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:193
uint64_t getUInt(int32_t index=-1)
Gets unsigned integer value.
Definition Variable.cpp:804
void setFloat(float &value, int32_t index=-1)
Sets float value.
Definition Variable.cpp:885
void(rogue::interfaces::memory::Block::* setFloat_)(const float &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:233
void(rogue::interfaces::memory::Block::* setInt_)(const int64_t &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:203
double maximum()
Returns maximum value.
Definition Variable.cpp:521
int64_t getInt(int32_t index=-1)
Gets signed integer value.
Definition Variable.cpp:824
double getFixed(int32_t index=-1)
Gets fixed-point value.
Definition Variable.cpp:933
std::string(rogue::interfaces::memory::Block::* getString_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:227
double minimum()
Returns minimum value.
Definition Variable.cpp:516
bool(rogue::interfaces::memory::Block::* getBool_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:217
void setInt(int64_t &value, int32_t index=-1)
Sets signed integer value.
Definition Variable.cpp:816
bool overlapEn()
Returns overlap-enable flag.
Definition Variable.cpp:541
void setByteArray(uint8_t *value, int32_t index=-1)
Sets value from a raw byte array.
Definition Variable.cpp:776
std::vector< uint32_t > bitSize_
Definition Variable.h:103
void(rogue::interfaces::memory::Block::* setFixed_)(const double &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:253
void setDouble(double &value, int32_t index=-1)
Sets double value.
Definition Variable.cpp:905
uint32_t valueBits()
Returns number of bits per value.
Definition Variable.h:463
std::string getString(int32_t index=-1)
Gets string value.
Definition Variable.cpp:864
void(rogue::interfaces::memory::Block::* setString_)(const std::string &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:223
uint32_t byteSize() const
Returns total bytes (rounded up) for this value.
Definition Variable.h:409
void setString(const std::string &value, int32_t index=-1)
Sets string value.
Definition Variable.cpp:856
void updatePath(std::string path)
Updates the hierarchical path string for this variable.
Definition Variable.cpp:511
void setUInt(uint64_t &value, int32_t index=-1)
Sets an unsigned integer value.
Definition Variable.cpp:796
void setBool(bool &value, int32_t index=-1)
Sets boolean value.
Definition Variable.cpp:836
void setValue(const std::string &value, int32_t index=-1)
Convenience alias for setString.
Definition Variable.h:703
uint32_t numValues()
Returns number of values.
Definition Variable.h:458
std::string getDumpValue(bool read)
Returns string representation of value using default converters.
Definition Variable.cpp:690
void getString(std::string &retString, int32_t index=-1)
Gets string value into output reference.
Definition Variable.h:725
void setValue(double value, int32_t index=-1)
Convenience alias for setDouble.
Definition Variable.h:807
const std::string & path() const
Returns variable path.
Definition Variable.h:432
void getValue(uint64_t &valueRet, int32_t index=-1)
Gets unsigned integer value into output reference.
Definition Variable.h:581
void(rogue::interfaces::memory::Block::* setBool_)(const bool &, rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:213
double(rogue::interfaces::memory::Block::* getFixed_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:257
void rateTest()
Runs a local throughput benchmark for variable get/set operations.
Definition Variable.cpp:644
static void setup_python()
Registers Python bindings for this class.
Definition Variable.cpp:89
uint32_t valueStride()
Returns byte stride per value.
Definition Variable.h:473
void shiftOffsetDown(uint32_t shift, uint32_t minSize)
Shifts variable offset and packed bit fields downward.
Definition Variable.cpp:451
const std::string & name() const
Returns variable name.
Definition Variable.h:414
uint32_t valueBytes()
Returns number of bytes per value.
Definition Variable.h:468
std::vector< uint32_t > bitOffset_
Definition Variable.h:100
void setValue(bool value, int32_t index=-1)
Convenience alias for setBool.
Definition Variable.h:655
uint64_t(rogue::interfaces::memory::Block::* getUInt_)(rogue::interfaces::memory::Variable *, int32_t index)
Definition Variable.h:197
void setValue(uint64_t value, int32_t index=-1)
Convenience alias for setUInt.
Definition Variable.h:559
void getByteArray(uint8_t *value, int32_t index=-1)
Gets value into a raw byte array.
Definition Variable.cpp:784
std::shared_ptr< rogue::interfaces::memory::VariableWrap > VariableWrapPtr
Definition Variable.h:985
std::shared_ptr< rogue::interfaces::memory::Variable > VariablePtr
Definition Variable.h:43