From 1080219b232f79ffa537baed9b6c70ab134b0a82 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Wed, 1 Feb 2023 23:09:50 +0200 Subject: [PATCH] gh-5 Handle unsigned & signed values updateRegisters now handles signed values correctly. Bitfields and enumerations are still interpreted as unsigned values --- enervent-ctrl-go/pingvinKL/pingvinKL.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/enervent-ctrl-go/pingvinKL/pingvinKL.go b/enervent-ctrl-go/pingvinKL/pingvinKL.go index 2aa1893..b76eca4 100644 --- a/enervent-ctrl-go/pingvinKL/pingvinKL.go +++ b/enervent-ctrl-go/pingvinKL/pingvinKL.go @@ -152,13 +152,20 @@ func (p PingvinKL) updateRegisters() { // value, so for each even byte in the reponse slice we bitshift the byte // left by 8, then add the odd byte as is to the shifted 16-bit value msb := true - value := 0 + value := int16(0) + uvalue := uint16(0) for i := 0; i < len(results); i++ { if msb { - value = int(results[i]) << 8 + value = int16(results[i]) << 8 + uvalue = uint16(results[i]) << 8 } else { - value += int(results[i]) - p.Registers[k].Value = value + value += int16(results[i]) + uvalue += uint16(results[i]) + if p.Registers[k].Signed { + p.Registers[k].Value = int(value) + } else { + p.Registers[k].Value = int(uvalue) + } k++ } msb = !msb @@ -204,6 +211,9 @@ func New() PingvinKL { registerData := readCsvLines("registers.csv") for i := 0; i < len(registerData); i++ { signed := registerData[i][2] == "int16" + if !signed { + log.Println("Unsigned register", i, registerData[i][6]) + } pingvin.Registers = append(pingvin.Registers, newRegister(registerData[i][0], registerData[i][1], signed, registerData[i][6])) }