Skip to content

Commit 1fd5141

Browse files
committed
Fining up work with 32-bit long integers/unsigned values
1 parent 1791e4f commit 1fd5141

5 files changed

Lines changed: 145 additions & 2 deletions

File tree

omodsim/datasimulator.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void DataSimulator::startSimulation(DataDisplayMode mode, QModbusDataUnit::Regis
3838
break;
3939

4040
case SimulationMode::Decrement:
41-
value = params.IncrementParams.Range.to();
41+
value = params.DecrementParams.Range.to();
4242
emit dataSimulated(mode, type, addr, value);
4343
break;
4444

@@ -206,6 +206,16 @@ void DataSimulator::randomSimulation(DataDisplayMode mode, QModbusDataUnit::Regi
206206
value = generateRandom<quint16>(params.Range.from(), params.Range.to() + 1);
207207
break;
208208

209+
case DataDisplayMode::LongInteger:
210+
case DataDisplayMode::SwappedLI:
211+
value = generateRandom<qint32>(params.Range);
212+
break;
213+
214+
case DataDisplayMode::UnsignedLongInteger:
215+
case DataDisplayMode::SwappedUnsignedLI:
216+
value = generateRandom<quint32>(params.Range);
217+
break;
218+
209219
case DataDisplayMode::FloatingPt:
210220
case DataDisplayMode::SwappedFP:
211221
value = generateRandom<float>(params.Range);
@@ -255,6 +265,16 @@ void DataSimulator::incrementSimulation(DataDisplayMode mode, QModbusDataUnit::R
255265
value = incrementValue<quint16>(value.toUInt(), params.Step, params.Range);
256266
break;
257267

268+
case DataDisplayMode::LongInteger:
269+
case DataDisplayMode::SwappedLI:
270+
value = incrementValue<qint32>(value.toInt(), params.Step, params.Range);
271+
break;
272+
273+
case DataDisplayMode::UnsignedLongInteger:
274+
case DataDisplayMode::SwappedUnsignedLI:
275+
value = incrementValue<quint32>(value.toUInt(), params.Step, params.Range);
276+
break;
277+
258278
case DataDisplayMode::FloatingPt:
259279
case DataDisplayMode::SwappedFP:
260280
value = incrementValue<float>(value.toFloat(), params.Step, params.Range);
@@ -299,6 +319,16 @@ void DataSimulator::decrementSimailation(DataDisplayMode mode, QModbusDataUnit::
299319
value = decrementValue<quint16>(value.toUInt(), params.Step, params.Range);
300320
break;
301321

322+
case DataDisplayMode::LongInteger:
323+
case DataDisplayMode::SwappedLI:
324+
value = decrementValue<qint32>(value.toInt(), params.Step, params.Range);
325+
break;
326+
327+
case DataDisplayMode::UnsignedLongInteger:
328+
case DataDisplayMode::SwappedUnsignedLI:
329+
value = decrementValue<quint32>(value.toUInt(), params.Step, params.Range);
330+
break;
331+
302332
case DataDisplayMode::FloatingPt:
303333
case DataDisplayMode::SwappedFP:
304334
value = decrementValue<float>(value.toFloat(), params.Step, params.Range);

omodsim/dialogs/dialogautosimulation.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,23 @@ DialogAutoSimulation::DialogAutoSimulation(DataDisplayMode mode, ModbusSimulatio
4343
ui->lineEditHighLimit->setInputRange(SHRT_MIN, SHRT_MAX);
4444
break;
4545

46+
case DataDisplayMode::LongInteger:
47+
case DataDisplayMode::SwappedLI:
48+
ui->lineEditStepValue->setInputRange(1, INT_MAX - 1);
49+
ui->lineEditLowLimit->setInputRange(INT_MIN, INT_MAX);
50+
ui->lineEditHighLimit->setInputRange(INT_MIN, INT_MAX);
51+
break;
52+
53+
case DataDisplayMode::UnsignedLongInteger:
54+
case DataDisplayMode::SwappedUnsignedLI:
55+
ui->lineEditStepValue->setInputRange(1U, UINT_MAX - 1);
56+
ui->lineEditStepValue->setInputMode(NumericLineEdit::UnsignedMode);
57+
ui->lineEditLowLimit->setInputRange(0U, UINT_MAX);
58+
ui->lineEditLowLimit->setInputMode(NumericLineEdit::UnsignedMode);
59+
ui->lineEditHighLimit->setInputRange(0U, UINT_MAX);
60+
ui->lineEditHighLimit->setInputMode(NumericLineEdit::UnsignedMode);
61+
break;
62+
4663
case DataDisplayMode::Hex:
4764
ui->lineEditStepValue->setInputRange(1, USHRT_MAX - 1);
4865
ui->lineEditLowLimit->setInputRange(0, USHRT_MAX);

omodsim/dialogs/dialogforcemultipleregisters.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,38 @@ void DialogForceMultipleRegisters::accept()
6565
}
6666
break;
6767

68+
case DataDisplayMode::LongInteger:
69+
if(!(idx % 2) && (idx + 1 < _data.size()))
70+
{
71+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
72+
breakLong(numEdit->value<qint32>(), _data[idx], _data[idx + 1], _writeParams.Order);
73+
}
74+
break;
75+
76+
case DataDisplayMode::SwappedLI:
77+
if(!(idx % 2) && (idx + 1 < _data.size()))
78+
{
79+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
80+
breakLong(numEdit->value<qint32>(), _data[idx + 1], _data[idx], _writeParams.Order);
81+
}
82+
break;
83+
84+
case DataDisplayMode::UnsignedLongInteger:
85+
if(!(idx % 2) && (idx + 1 < _data.size()))
86+
{
87+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
88+
breakULong(numEdit->value<quint32>(), _data[idx], _data[idx + 1], _writeParams.Order);
89+
}
90+
break;
91+
92+
case DataDisplayMode::SwappedUnsignedLI:
93+
if(!(idx % 2) && (idx + 1 < _data.size()))
94+
{
95+
auto numEdit = (NumericLineEdit*)ui->tableWidget->cellWidget(i, j);
96+
breakULong(numEdit->value<quint32>(), _data[idx + 1], _data[idx], _writeParams.Order);
97+
}
98+
break;
99+
68100
case DataDisplayMode::FloatingPt:
69101
if(!(idx % 2) && (idx + 1 < _data.size()))
70102
{
@@ -136,6 +168,26 @@ void DialogForceMultipleRegisters::on_pushButtonRandom_clicked()
136168
_data[i] = QRandomGenerator::global()->bounded(SHRT_MIN, SHRT_MAX);
137169
break;
138170

171+
case DataDisplayMode::LongInteger:
172+
if(!(i % 2) && (i + 1 < _data.size()))
173+
breakLong(QRandomGenerator::global()->bounded(INT_MIN, INT_MAX), _data[i], _data[i + 1], _writeParams.Order);
174+
break;
175+
176+
case DataDisplayMode::SwappedLI:
177+
if(!(i % 2) && (i + 1 < _data.size()))
178+
breakLong(QRandomGenerator::global()->bounded(INT_MIN, INT_MAX), _data[i + 1], _data[i], _writeParams.Order);
179+
break;
180+
181+
case DataDisplayMode::UnsignedLongInteger:
182+
if(!(i % 2) && (i + 1 < _data.size()))
183+
breakULong(QRandomGenerator::global()->bounded(0U, UINT_MAX), _data[i], _data[i + 1], _writeParams.Order);
184+
break;
185+
186+
case DataDisplayMode::SwappedUnsignedLI:
187+
if(!(i % 2) && (i + 1 < _data.size()))
188+
breakULong(QRandomGenerator::global()->bounded(0U, UINT_MAX), _data[i + 1], _data[i], _writeParams.Order);
189+
break;
190+
139191
case DataDisplayMode::FloatingPt:
140192
if(!(i % 2) && (i + 1 < _data.size()))
141193
breakFloat(QRandomGenerator::global()->bounded(100.), _data[i], _data[i + 1], _writeParams.Order);
@@ -191,6 +243,38 @@ NumericLineEdit* DialogForceMultipleRegisters::createNumEdit(int idx)
191243
numEdit->setValue((qint16)toByteOrderValue(_data[idx], _writeParams.Order));
192244
break;
193245

246+
case DataDisplayMode::LongInteger:
247+
if(!(idx % 2) && (idx + 1 < _data.size()))
248+
{
249+
numEdit = new NumericLineEdit(NumericLineEdit::DecMode, ui->tableWidget);
250+
numEdit->setValue(makeLong(_data[idx], _data[idx + 1], _writeParams.Order));
251+
}
252+
break;
253+
254+
case DataDisplayMode::SwappedLI:
255+
if(!(idx % 2) && (idx + 1 < _data.size()))
256+
{
257+
numEdit = new NumericLineEdit(NumericLineEdit::DecMode, ui->tableWidget);
258+
numEdit->setValue(makeLong(_data[idx + 1], _data[idx], _writeParams.Order));
259+
}
260+
break;
261+
262+
case DataDisplayMode::UnsignedLongInteger:
263+
if(!(idx % 2) && (idx + 1 < _data.size()))
264+
{
265+
numEdit = new NumericLineEdit(NumericLineEdit::UnsignedMode, ui->tableWidget);
266+
numEdit->setValue(makeULong(_data[idx], _data[idx + 1], _writeParams.Order));
267+
}
268+
break;
269+
270+
case DataDisplayMode::SwappedUnsignedLI:
271+
if(!(idx % 2) && (idx + 1 < _data.size()))
272+
{
273+
numEdit = new NumericLineEdit(NumericLineEdit::UnsignedMode, ui->tableWidget);
274+
numEdit->setValue(makeULong(_data[idx + 1], _data[idx], _writeParams.Order));
275+
}
276+
break;
277+
194278
case DataDisplayMode::FloatingPt:
195279
if(!(idx % 2) && (idx + 1 < _data.size()))
196280
{

omodsim/floatutils.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ inline void breakLong(qint32 value, quint16& lo, quint16& hi, ByteOrder order)
4343
hi = toByteOrderValue(v.asUint16[1], order);
4444
}
4545

46+
///
47+
/// \brief breakULong
48+
/// \param value
49+
/// \param lo
50+
/// \param hi
51+
/// \param order
52+
///
53+
inline void breakULong(quint32 value, quint16& lo, quint16& hi, ByteOrder order)
54+
{
55+
breakLong((qint32)value, lo, hi, order);
56+
}
57+
4658
///
4759
/// \brief breakDouble
4860
/// \param value

omodsim/omodsim.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ CONFIG += c++17
44
CONFIG -= debug_and_release
55
CONFIG -= debug_and_release_target
66

7-
VERSION = 1.3.0
7+
VERSION = 1.3.1
88

99
QMAKE_TARGET_PRODUCT = "Open ModSim"
1010
QMAKE_TARGET_DESCRIPTION = "An Open Source Modbus Slave (Server) Utility"

0 commit comments

Comments
 (0)