From 30441f310daabdd4f9f3f6141954e9e2731897af Mon Sep 17 00:00:00 2001
From: Andreas Gattringer <andreas.gattringer@univie.ac.at>
Date: Thu, 28 Mar 2024 14:22:01 +0100
Subject: [PATCH] lsp28dfw: repair (use big endian data for temperature)

---
 umnp/microcontroller/sensors/lps28dfw/__init__.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/umnp/microcontroller/sensors/lps28dfw/__init__.py b/umnp/microcontroller/sensors/lps28dfw/__init__.py
index 26cd511..2c25063 100644
--- a/umnp/microcontroller/sensors/lps28dfw/__init__.py
+++ b/umnp/microcontroller/sensors/lps28dfw/__init__.py
@@ -139,12 +139,12 @@ class LPS28DFW:
         mask = 1 << bit
         return value & mask
 
-    def read_address_to_int(self, address, n_bytes):
+    def read_address_to_int(self, address, n_bytes, signed: bool = False):
         data = self.read_address(address, n_bytes)
         if n_bytes == 1:
             return int.from_bytes(data, "little")
         elif n_bytes == 2:
-            return struct.unpack("<h", data)[0]
+            return int.from_bytes(data, "big", signed=signed)
         elif n_bytes == 3:
             value = struct.unpack("<I", data + "\0")[0]
             if value & 0x800000:
@@ -205,6 +205,6 @@ class LPS28DFW:
                 break
             await asyncio.sleep(0.01)
 
-        temperature = self.read_address_to_int(LPS28DFW_TEMP_OUT_L, 2)
+        temperature = self.read_address_to_int(LPS28DFW_TEMP_OUT_L, 2, True)
         temperature = temperature / 100
         return temperature
-- 
GitLab