@@ -23,6 +23,7 @@ OutputWidget::OutputWidget(QWidget *parent) :
2323 ,_displayHexAddreses(false )
2424 ,_displayMode(DisplayMode::Data)
2525 ,_dataDisplayMode(DataDisplayMode::Hex)
26+ ,_byteOrder(ByteOrder::LittleEndian)
2627{
2728 ui->setupUi (this );
2829 ui->stackedWidget ->setCurrentIndex (0 );
@@ -318,16 +319,37 @@ void OutputWidget::setDataDisplayMode(DataDisplayMode mode)
318319 updateDataWidget (_lastData);
319320}
320321
322+ // /
323+ // / \brief OutputWidget::byteOrder
324+ // / \return
325+ // /
326+ ByteOrder OutputWidget::byteOrder () const
327+ {
328+ return _byteOrder;
329+ }
330+
331+ // /
332+ // / \brief OutputWidget::setByteOrder
333+ // / \param order
334+ // /
335+ void OutputWidget::setByteOrder (ByteOrder order)
336+ {
337+ _byteOrder = order;
338+ updateDataWidget (_lastData);
339+ }
340+
321341// /
322342// / \brief formatBinaryValue
323343// / \param pointType
324344// / \param value
325345// / \param outValue
326346// / \return
327347// /
328- QString formatBinaryValue (QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
348+ QString formatBinaryValue (QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
329349{
330350 QString result;
351+ value = toByteOrderValue (value, order);
352+
331353 switch (pointType)
332354 {
333355 case QModbusDataUnit::Coils:
@@ -352,9 +374,11 @@ QString formatBinaryValue(QModbusDataUnit::RegisterType pointType, quint16 value
352374// / \param outValue
353375// / \return
354376// /
355- QString formatDecimalValue (QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
377+ QString formatDecimalValue (QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
356378{
357379 QString result;
380+ value = toByteOrderValue (value, order);
381+
358382 switch (pointType)
359383 {
360384 case QModbusDataUnit::Coils:
@@ -379,9 +403,11 @@ QString formatDecimalValue(QModbusDataUnit::RegisterType pointType, quint16 valu
379403// / \param outValue
380404// / \return
381405// /
382- QString formatIntegerValue (QModbusDataUnit::RegisterType pointType, qint16 value, QVariant& outValue)
406+ QString formatIntegerValue (QModbusDataUnit::RegisterType pointType, qint16 value ,ByteOrder order , QVariant& outValue)
383407{
384408 QString result;
409+ value = toByteOrderValue (value, order);
410+
385411 switch (pointType)
386412 {
387413 case QModbusDataUnit::Coils:
@@ -406,9 +432,11 @@ QString formatIntegerValue(QModbusDataUnit::RegisterType pointType, qint16 value
406432// / \param outValue
407433// / \return
408434// /
409- QString formatHexValue (QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
435+ QString formatHexValue (QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
410436{
411437 QString result;
438+ value = toByteOrderValue (value, order);
439+
412440 switch (pointType)
413441 {
414442 case QModbusDataUnit::Coils:
@@ -435,7 +463,7 @@ QString formatHexValue(QModbusDataUnit::RegisterType pointType, quint16 value, Q
435463// / \param outValue
436464// / \return
437465// /
438- QString formatFloatValue (QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, bool flag, QVariant& outValue)
466+ QString formatFloatValue (QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, ByteOrder order, bool flag, QVariant& outValue)
439467{
440468 QString result;
441469 switch (pointType)
@@ -450,7 +478,7 @@ QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1
450478 {
451479 if (flag) break ;
452480
453- const float value = makeFloat (value1, value2);
481+ const float value = makeFloat (value1, value2, order );
454482 outValue = value;
455483 result = QLocale ().toString (value);
456484 }
@@ -472,7 +500,7 @@ QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1
472500// / \param outValue
473501// / \return
474502// /
475- QString formatDoubleValue (QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, quint16 value3, quint16 value4, bool flag, QVariant& outValue)
503+ QString formatDoubleValue (QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, quint16 value3, quint16 value4, ByteOrder order, bool flag, QVariant& outValue)
476504{
477505 QString result;
478506 switch (pointType)
@@ -487,7 +515,7 @@ QString formatDoubleValue(QModbusDataUnit::RegisterType pointType, quint16 value
487515 {
488516 if (flag) break ;
489517
490- const double value = makeDouble (value1, value2, value3, value4);
518+ const double value = makeDouble (value1, value2, value3, value4, order );
491519 outValue = value;
492520 result = QLocale ().toString (value);
493521 }
@@ -622,38 +650,38 @@ void OutputWidget::updateDataWidget(const QModbusDataUnit& data)
622650 switch (_dataDisplayMode)
623651 {
624652 case DataDisplayMode::Binary:
625- valstr = formatBinaryValue (_displayDefinition.PointType , value, itemData.Value );
653+ valstr = formatBinaryValue (_displayDefinition.PointType , value, byteOrder (), itemData.Value );
626654 break ;
627655
628656 case DataDisplayMode::Decimal:
629- valstr = formatDecimalValue (_displayDefinition.PointType , value, itemData.Value );
657+ valstr = formatDecimalValue (_displayDefinition.PointType , value, byteOrder (), itemData.Value );
630658 break ;
631659
632660 case DataDisplayMode::Integer:
633- valstr = formatIntegerValue (_displayDefinition.PointType , value, itemData.Value );
661+ valstr = formatIntegerValue (_displayDefinition.PointType , value, byteOrder (), itemData.Value );
634662 break ;
635663
636664 case DataDisplayMode::Hex:
637- valstr = formatHexValue (_displayDefinition.PointType , value, itemData.Value );
665+ valstr = formatHexValue (_displayDefinition.PointType , value, byteOrder (), itemData.Value );
638666 break ;
639667
640668 case DataDisplayMode::FloatingPt:
641- valstr = formatFloatValue (_displayDefinition.PointType , value, data.value (i + 1 ),
669+ valstr = formatFloatValue (_displayDefinition.PointType , value, data.value (i + 1 ), byteOrder (),
642670 (i%2 ) || (i+1 >=_displayDefinition.Length ), itemData.Value );
643671 break ;
644672
645673 case DataDisplayMode::SwappedFP:
646- valstr = formatFloatValue (_displayDefinition.PointType , data.value (i + 1 ), value,
674+ valstr = formatFloatValue (_displayDefinition.PointType , data.value (i + 1 ), value, byteOrder (),
647675 (i%2 ) || (i+1 >=_displayDefinition.Length ), itemData.Value );
648676 break ;
649677
650678 case DataDisplayMode::DblFloat:
651- valstr = formatDoubleValue (_displayDefinition.PointType , value, data.value (i + 1 ), data.value (i + 2 ), data.value (i + 3 ),
679+ valstr = formatDoubleValue (_displayDefinition.PointType , value, data.value (i + 1 ), data.value (i + 2 ), data.value (i + 3 ), byteOrder (),
652680 (i%4 ) || (i+3 >=_displayDefinition.Length ), itemData.Value );
653681 break ;
654682
655683 case DataDisplayMode::SwappedDbl:
656- valstr = formatDoubleValue (_displayDefinition.PointType , data.value (i + 3 ), data.value (i + 2 ), data.value (i + 1 ), value,
684+ valstr = formatDoubleValue (_displayDefinition.PointType , data.value (i + 3 ), data.value (i + 2 ), data.value (i + 1 ), value, byteOrder (),
657685 (i%4 ) || (i+3 >=_displayDefinition.Length ), itemData.Value );
658686 break ;
659687 }
0 commit comments