Reapply "Modbus: fix int to float conversion for int setter"

This reverts commit f9538edded.
This commit is contained in:
andig 2024-02-28 22:07:22 +01:00
parent 9001258ea7
commit 965799f48a

View file

@ -1,6 +1,7 @@
package modbus
import (
"encoding/binary"
"errors"
"fmt"
"math"
@ -137,11 +138,18 @@ func (r Register) Operation() (RegisterOperation, error) {
}
} else {
switch strings.ToLower(r.encoding()) {
case "int32s", "uint32s", "float32s", "ieee754s":
case "int32s", "uint32s":
op.Encode = func(v uint64) uint64 {
return v&0xFFFF<<16 | v&0xFFFF0000>>16
}
case "float32s", "ieee754s":
op.Encode = func(v uint64) uint64 {
b := make([]byte, 4)
encoding.PutFloat32LswFirst(b, float32(v))
return uint64(binary.BigEndian.Uint32(b))
}
default:
op.Encode = func(v uint64) uint64 {
return v