44*/
55#include " Modbus.h"
66
7- word cbDefault (TRegister* reg, word val) {
7+ uint16_t cbDefault (TRegister* reg, uint16_t val) {
88 return val;
99}
1010
@@ -13,7 +13,7 @@ Modbus::Modbus() {
1313 _regs_last = 0 ;
1414}
1515
16- TRegister* Modbus::searchRegister (word address) {
16+ TRegister* Modbus::searchRegister (uint16_t address) {
1717 TRegister *reg = _regs_head;
1818 // if there is no register configured, bail
1919 if (reg == 0 ) return (0 );
@@ -26,7 +26,7 @@ TRegister* Modbus::searchRegister(word address) {
2626 return (0 );
2727}
2828
29- void Modbus::addReg (word address, word value) {
29+ void Modbus::addReg (uint16_t address, uint16_t value) {
3030 TRegister *newreg;
3131
3232 newreg = (TRegister *) malloc (sizeof (TRegister));
@@ -47,7 +47,7 @@ void Modbus::addReg(word address, word value) {
4747 }
4848}
4949
50- bool Modbus::Reg (word address, word value) {
50+ bool Modbus::Reg (uint16_t address, uint16_t value) {
5151 TRegister *reg;
5252 // search for the register address
5353 reg = this ->searchRegister (address);
@@ -59,7 +59,7 @@ bool Modbus::Reg(word address, word value) {
5959 return false ;
6060}
6161
62- word Modbus::Reg (word address) {
62+ uint16_t Modbus::Reg (uint16_t address) {
6363 TRegister *reg;
6464 reg = this ->searchRegister (address);
6565 if (reg)
@@ -68,65 +68,65 @@ word Modbus::Reg(word address) {
6868 return (0 );
6969}
7070
71- void Modbus::addHreg (word offset, word value) {
71+ void Modbus::addHreg (uint16_t offset, uint16_t value) {
7272 this ->addReg (offset + HREG_BASE, value);
7373}
7474
75- bool Modbus::Hreg (word offset, word value) {
75+ bool Modbus::Hreg (uint16_t offset, uint16_t value) {
7676 return Reg (offset + HREG_BASE, value);
7777}
7878
79- word Modbus::Hreg (word offset) {
79+ uint16_t Modbus::Hreg (uint16_t offset) {
8080 return Reg (offset + HREG_BASE);
8181}
8282
8383#ifndef USE_HOLDING_REGISTERS_ONLY
84- void Modbus::addCoil (word offset, bool value) {
84+ void Modbus::addCoil (uint16_t offset, bool value) {
8585 this ->addReg (offset + COIL_BASE, value?0xFF00 :0x0000 );
8686 }
8787
88- void Modbus::addIsts (word offset, bool value) {
88+ void Modbus::addIsts (uint16_t offset, bool value) {
8989 this ->addReg (offset + ISTS_BASE, value?0xFF00 :0x0000 );
9090 }
9191
92- void Modbus::addIreg (word offset, word value) {
92+ void Modbus::addIreg (uint16_t offset, uint16_t value) {
9393 this ->addReg (offset + IREG_BASE, value);
9494 }
9595
96- bool Modbus::Coil (word offset, bool value) {
96+ bool Modbus::Coil (uint16_t offset, bool value) {
9797 return Reg (offset + COIL_BASE, value?0xFF00 :0x0000 );
9898 }
9999
100- bool Modbus::Ists (word offset, bool value) {
100+ bool Modbus::Ists (uint16_t offset, bool value) {
101101 return Reg (offset + ISTS_BASE, value?0xFF00 :0x0000 );
102102 }
103103
104- bool Modbus::Ireg (word offset, word value) {
104+ bool Modbus::Ireg (uint16_t offset, uint16_t value) {
105105 return Reg (offset + IREG_BASE, value);
106106 }
107107
108- bool Modbus::Coil (word offset) {
108+ bool Modbus::Coil (uint16_t offset) {
109109 if (Reg (offset + COIL_BASE) == 0xFF00 ) {
110110 return true ;
111111 } else return false ;
112112 }
113113
114- bool Modbus::Ists (word offset) {
114+ bool Modbus::Ists (uint16_t offset) {
115115 if (Reg (offset + ISTS_BASE) == 0xFF00 ) {
116116 return true ;
117117 } else return false ;
118118 }
119119
120- word Modbus::Ireg (word offset) {
120+ uint16_t Modbus::Ireg (uint16_t offset) {
121121 return Reg (offset + IREG_BASE);
122122 }
123123#endif
124124
125125
126126void Modbus::receivePDU (byte* frame) {
127127 byte fcode = frame[0 ];
128- word field1 = (word)frame[1 ] << 8 | (word)frame[2 ];
129- word field2 = (word)frame[3 ] << 8 | (word)frame[4 ];
128+ uint16_t field1 = (word)frame[1 ] << 8 | (word)frame[2 ];
129+ uint16_t field2 = (word)frame[3 ] << 8 | (word)frame[4 ];
130130
131131 switch (fcode) {
132132
@@ -188,7 +188,7 @@ void Modbus::exceptionResponse(byte fcode, byte excode) {
188188 _reply = MB_REPLY_NORMAL;
189189}
190190
191- void Modbus::readRegisters (word startreg, word numregs) {
191+ void Modbus::readRegisters (uint16_t startreg, uint16_t numregs) {
192192 // Check value (numregs)
193193 if (numregs < 0x0001 || numregs > 0x007D ) {
194194 this ->exceptionResponse (MB_FC_READ_REGS, MB_EX_ILLEGAL_VALUE);
@@ -220,8 +220,8 @@ void Modbus::readRegisters(word startreg, word numregs) {
220220 _frame[0 ] = MB_FC_READ_REGS;
221221 _frame[1 ] = _len - 2 ; // byte count
222222
223- word val;
224- word i = 0 ;
223+ uint16_t val;
224+ uint16_t i = 0 ;
225225 while (numregs--) {
226226 // retrieve the value from the register bank for the current register
227227 val = this ->Hreg (startreg + i);
@@ -235,8 +235,8 @@ void Modbus::readRegisters(word startreg, word numregs) {
235235 _reply = MB_REPLY_NORMAL;
236236}
237237
238- void Modbus::writeSingleRegister (word reg, word value) {
239- // No necessary verify illegal value (EX_ILLEGAL_VALUE) - because using word (0x0000 - 0x0FFFF)
238+ void Modbus::writeSingleRegister (uint16_t reg, uint16_t value) {
239+ // No necessary verify illegal value (EX_ILLEGAL_VALUE) - because using uint16_t (0x0000 - 0x0FFFF)
240240 // Check Address and execute (reg exists?)
241241 if (!this ->Hreg (reg, value)) {
242242 this ->exceptionResponse (MB_FC_WRITE_REG, MB_EX_ILLEGAL_ADDRESS);
@@ -252,7 +252,7 @@ void Modbus::writeSingleRegister(word reg, word value) {
252252 _reply = MB_REPLY_ECHO;
253253}
254254
255- void Modbus::writeMultipleRegisters (byte* frame,word startreg, word numoutputs, byte bytecount) {
255+ void Modbus::writeMultipleRegisters (byte* frame,uint16_t startreg, uint16_t numoutputs, byte bytecount) {
256256 // Check value
257257 if (numoutputs < 0x0001 || numoutputs > 0x007B || bytecount != 2 * numoutputs) {
258258 this ->exceptionResponse (MB_FC_WRITE_REGS, MB_EX_ILLEGAL_VALUE);
@@ -282,8 +282,8 @@ void Modbus::writeMultipleRegisters(byte* frame,word startreg, word numoutputs,
282282 _frame[3 ] = numoutputs >> 8 ;
283283 _frame[4 ] = numoutputs & 0x00FF ;
284284
285- word val;
286- word i = 0 ;
285+ uint16_t val;
286+ uint16_t i = 0 ;
287287 while (numoutputs--) {
288288 val = (word)frame[6 +i*2 ] << 8 | (word)frame[7 +i*2 ];
289289 this ->Hreg (startreg + i, val);
@@ -294,7 +294,7 @@ void Modbus::writeMultipleRegisters(byte* frame,word startreg, word numoutputs,
294294}
295295
296296#ifndef USE_HOLDING_REGISTERS_ONLY
297- void Modbus::readCoils (word startreg, word numregs) {
297+ void Modbus::readCoils (uint16_t startreg, uint16_t numregs) {
298298 // Check value (numregs)
299299 if (numregs < 0x0001 || numregs > 0x07D0 ) {
300300 this ->exceptionResponse (MB_FC_READ_COILS, MB_EX_ILLEGAL_VALUE);
@@ -330,8 +330,8 @@ void Modbus::readCoils(word startreg, word numregs) {
330330 _frame[1 ] = _len - 2 ; // byte count (_len - function code and byte count)
331331
332332 byte bitn = 0 ;
333- word totregs = numregs;
334- word i;
333+ uint16_t totregs = numregs;
334+ uint16_t i;
335335 while (numregs--) {
336336 i = (totregs - numregs) / 8 ;
337337 if (this ->Coil (startreg))
@@ -348,7 +348,7 @@ void Modbus::readCoils(word startreg, word numregs) {
348348 _reply = MB_REPLY_NORMAL;
349349}
350350
351- void Modbus::readInputStatus (word startreg, word numregs) {
351+ void Modbus::readInputStatus (uint16_t startreg, uint16_t numregs) {
352352 // Check value (numregs)
353353 if (numregs < 0x0001 || numregs > 0x07D0 ) {
354354 this ->exceptionResponse (MB_FC_READ_INPUT_STAT, MB_EX_ILLEGAL_VALUE);
@@ -381,8 +381,8 @@ void Modbus::readInputStatus(word startreg, word numregs) {
381381 _frame[1 ] = _len - 2 ;
382382
383383 byte bitn = 0 ;
384- word totregs = numregs;
385- word i;
384+ uint16_t totregs = numregs;
385+ uint16_t i;
386386 while (numregs--) {
387387 i = (totregs - numregs) / 8 ;
388388 if (this ->Ists (startreg))
@@ -399,7 +399,7 @@ void Modbus::readInputStatus(word startreg, word numregs) {
399399 _reply = MB_REPLY_NORMAL;
400400}
401401
402- void Modbus::readInputRegisters (word startreg, word numregs) {
402+ void Modbus::readInputRegisters (uint16_t startreg, uint16_t numregs) {
403403 // Check value (numregs)
404404 if (numregs < 0x0001 || numregs > 0x007D ) {
405405 this ->exceptionResponse (MB_FC_READ_INPUT_REGS, MB_EX_ILLEGAL_VALUE);
@@ -430,8 +430,8 @@ void Modbus::readInputRegisters(word startreg, word numregs) {
430430 _frame[0 ] = MB_FC_READ_INPUT_REGS;
431431 _frame[1 ] = _len - 2 ;
432432
433- word val;
434- word i = 0 ;
433+ uint16_t val;
434+ uint16_t i = 0 ;
435435 while (numregs--) {
436436 // retrieve the value from the register bank for the current register
437437 val = this ->Ireg (startreg + i);
@@ -445,7 +445,7 @@ void Modbus::readInputRegisters(word startreg, word numregs) {
445445 _reply = MB_REPLY_NORMAL;
446446}
447447
448- void Modbus::writeSingleCoil (word reg, word status) {
448+ void Modbus::writeSingleCoil (uint16_t reg, uint16_t status) {
449449 // Check value (status)
450450 if (status != 0xFF00 && status != 0x0000 ) {
451451 this ->exceptionResponse (MB_FC_WRITE_COIL, MB_EX_ILLEGAL_VALUE);
@@ -467,9 +467,9 @@ void Modbus::writeSingleCoil(word reg, word status) {
467467 _reply = MB_REPLY_ECHO;
468468}
469469
470- void Modbus::writeMultipleCoils (byte* frame,word startreg, word numoutputs, byte bytecount) {
470+ void Modbus::writeMultipleCoils (byte* frame,uint16_t startreg, uint16_t numoutputs, byte bytecount) {
471471 // Check value
472- word bytecount_calc = numoutputs / 8 ;
472+ uint16_t bytecount_calc = numoutputs / 8 ;
473473 if (numoutputs%8 ) bytecount_calc++;
474474 if (numoutputs < 0x0001 || numoutputs > 0x07B0 || bytecount != bytecount_calc) {
475475 this ->exceptionResponse (MB_FC_WRITE_COILS, MB_EX_ILLEGAL_VALUE);
@@ -500,8 +500,8 @@ void Modbus::writeMultipleCoils(byte* frame,word startreg, word numoutputs, byte
500500 _frame[4 ] = numoutputs & 0x00FF ;
501501
502502 byte bitn = 0 ;
503- word totoutputs = numoutputs;
504- word i;
503+ uint16_t totoutputs = numoutputs;
504+ uint16_t i;
505505 while (numoutputs--) {
506506 i = (totoutputs - numoutputs) / 8 ;
507507 this ->Coil (startreg, bitRead (frame[6 +i], bitn));
0 commit comments