@@ -57,34 +57,94 @@ namespace Modbus {
5757 class Data {
5858 public:
5959 enum Type {
60- Byte,
61- Word,
62- LongWord,
63- LongLongWord,
64- Float,
65- Double
60+ Byte, // 2 Bytes (nothing is smaller than the word on MODBUS)
61+ Word, // 2 Bytes - 1 MODBUS register
62+ LongWord, // 4 Bytes - 2 MODBUS registers
63+ LongLongWord, // 8 Bytes - 4 MODBUS registers
64+ Float, // 4 Bytes - 2 MODBUS registers
65+ Double, // 8 Bytes - 4 MODBUS registers
66+ Void = -1
6667 };
6768
68- enum Endian {
69- EndianBigBig = 0x00 , // bytes in big endian order, word in big endian order
70- EndianBig = EndianBigBig,
71- EndianBigLittle = 0x01 ,
72- EndianLittleBig = 0x02 ,
73- EndianLittleLittle = 0x03 ,
74- EndianLittle = EndianLittleLittle
69+ enum Endian { // network number ABCD
70+ EndianBigBig = 0x00 , // bytes in big endian order, word in big endian order : ABCD
71+ EndianBig = EndianBigBig, // big endian order : ABCD
72+ EndianBigLittle = 0x01 , // bytes in big endian order, word in little endian order : CDAB
73+ EndianLittleBig = 0x02 , // bytes in little endian order, word in big endian order : BADC
74+ EndianLittleLittle = 0x03 , // bytes in little endian order, word in little endian order : DCBA
75+ EndianLittle = EndianLittleLittle // little endian order : DCBA
7576 };
7677
77- Data (Endian bigEndian = EndianBig);
78- Data (char i, Endian bigEndian = EndianBig);
79- Data (int i, Endian bigEndian = EndianBig);
80- Data (long i, Endian bigEndian = EndianBig);
81- Data (long long i, Endian bigEndian = EndianBig);
82- Data (uint8_t i, Endian bigEndian = EndianBig);
83- Data (uint16_t i, Endian bigEndian = EndianBig);
84- Data (uint32_t i, Endian bigEndian = EndianBig);
85- Data (uint64_t i, Endian bigEndian = EndianBig);
78+ Data (Type type = Void, Endian endian = EndianBig); // default constructor
79+ Data (const Data & other);
80+ virtual ~Data ();
81+
82+ Data (uint8_t v, Endian endian = EndianBig);
83+ Data (uint16_t v, Endian endian = EndianBig);
84+ Data (uint32_t v, Endian endian = EndianBig);
85+ Data (uint64_t v, Endian endian = EndianBig);
86+ Data (char v, Endian endian = EndianBig);
87+ Data (int v, Endian endian = EndianBig);
88+ Data (long v, Endian endian = EndianBig);
89+ Data (long long v, Endian endian = EndianBig);
90+ Data (float v, Endian endian = EndianBig);
91+ Data (double v, Endian endian = EndianBig);
92+
93+ void swap (Data &other);
94+ Data& operator = (const Data &other);
95+
96+ void set (uint8_t v);
97+ void set (uint16_t v);
98+ void set (uint32_t v);
99+ void set (uint64_t v);
100+
101+ void set (char v);
102+ void set (int v);
103+ void set (long v);
104+ void set (long long v);
105+ void set (float v);
106+ void set (double v);
107+
108+ void get (uint8_t & v) const ;
109+ void get (uint16_t & v) const ;
110+ void get (uint32_t & v) const ;
111+ void get (uint64_t & v) const ;
112+
113+ void get (char & v) const ;
114+ void get (int & v) const ;
115+ void get (long & v) const ;
116+ void get (long long & v) const ;
117+ void get (float & v) const ;
118+ void get (double & v) const ;
119+
120+ Endian endianness () const ;
86121 Type type () const ;
122+ void setType (Type t);
87123 size_t size () const ;
124+ uint16_t * ptr ();
125+ const uint16_t * ptr () const ;
126+
127+ // debug purpose
128+ void print () const ;
129+ static void print (const uint8_t * p, const size_t s);
130+ static void print (const uint8_t & v);
131+ static void print (const uint16_t & v);
132+ static void print (const uint32_t & v);
133+ static void print (const uint64_t & v);
134+ static void print (const char & v);
135+ static void print (const int & v);
136+ static void print (const long & v);
137+ static void print (const long long & v);
138+ static void print (const float & v);
139+ static void print (const double & v);
140+
141+ protected:
142+ class Private ;
143+ Data (Private &dd);
144+ std::unique_ptr<Private> d_ptr;
145+
146+ private:
147+ PIMP_DECLARE_PRIVATE (Data)
88148 };
89149
90150 /* *
@@ -160,7 +220,7 @@ namespace Modbus {
160220 * @brief MODBUS Master (Client)
161221 */
162222 class Master : public Device {
163-
223+
164224 public:
165225 /* *
166226 * @brief Constructor
@@ -209,13 +269,13 @@ namespace Modbus {
209269 int readRegistrers (int addr, uint16_t * dest, int nb = 1 );
210270 /* *
211271 * @brief write a single bit
212- *
213- * This function shall write the status of value at the address addr of
272+ *
273+ * This function shall write the status of value at the address addr of
214274 * the remote device. \n
215275 * The function uses the Modbus function code 0x05 (force single coil).
216276 * @param addr
217277 * @param value
218- * @return
278+ * @return
219279 */
220280 int writeCoil (int addr, bool value);
221281 /* *
0 commit comments