From e714412990cfe234f89131c1b98a8dac966881a8 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Sat, 31 Aug 2019 10:26:51 +0200
Subject: [PATCH] refactor(bme680): Create a Python wrapper module

Signed-off-by: Rahix <rahix@rahix.de>
---
 pycardium/modules/py/bme680.py   | 38 ++++++++++++++++++++++++++++++++
 pycardium/modules/py/meson.build |  1 +
 pycardium/modules/qstrdefs.h     |  2 +-
 pycardium/modules/sys_bme680.c   |  4 ++--
 4 files changed, 42 insertions(+), 3 deletions(-)
 create mode 100644 pycardium/modules/py/bme680.py

diff --git a/pycardium/modules/py/bme680.py b/pycardium/modules/py/bme680.py
new file mode 100644
index 00000000..d6f32f49
--- /dev/null
+++ b/pycardium/modules/py/bme680.py
@@ -0,0 +1,38 @@
+import sys_bme680
+import ucollections
+
+# Import old module for compatibility
+from sys_bme680 import *  # noqa
+
+Bme680Data = ucollections.namedtuple(
+    "Bme680Data", ["temperature", "humidity", "pressure", "gas_resistance"]
+)
+
+
+class Bme680:
+    def __init__(self):
+        sys_bme680.init()
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, *args):
+        self.close()
+
+    def get_data(self):
+        return Bme680Data(*sys_bme680.get_data())
+
+    def close(self):
+        sys_bme680.deinit()
+
+    def temperature(self):
+        return self.get_data().temperature
+
+    def humidity(self):
+        return self.get_data().humidity
+
+    def pressure(self):
+        return self.get_data().pressure
+
+    def gas_resistance(self):
+        return self.get_data().gas_resistance
diff --git a/pycardium/modules/py/meson.build b/pycardium/modules/py/meson.build
index 75bf937c..ade56b14 100644
--- a/pycardium/modules/py/meson.build
+++ b/pycardium/modules/py/meson.build
@@ -1,5 +1,6 @@
 python_modules = files(
   'bhi160.py',
+  'bme680.py',
   'color.py',
   'htmlcolor.py',
   'display.py',
diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h
index 1c480370..0ff0a8ca 100644
--- a/pycardium/modules/qstrdefs.h
+++ b/pycardium/modules/qstrdefs.h
@@ -104,7 +104,7 @@ Q(stop)
 Q(read)
 
 /* bme680 */
-Q(bme680)
+Q(sys_bme680)
 Q(init)
 Q(deinit)
 Q(get_data)
diff --git a/pycardium/modules/sys_bme680.c b/pycardium/modules/sys_bme680.c
index ca4aca6d..f6899c77 100644
--- a/pycardium/modules/sys_bme680.c
+++ b/pycardium/modules/sys_bme680.c
@@ -46,7 +46,7 @@ static mp_obj_t mp_bme680_get_data()
 static MP_DEFINE_CONST_FUN_OBJ_0(bme680_get_data_obj, mp_bme680_get_data);
 
 static const mp_rom_map_elem_t bme680_module_globals_table[] = {
-	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bme680) },
+	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sys_bme680) },
 	{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&bme680_init_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&bme680_deinit_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_get_data), MP_ROM_PTR(&bme680_get_data_obj) },
@@ -59,4 +59,4 @@ const mp_obj_module_t bme680_module = {
 };
 
 /* Register the module to make it available in Python */
-MP_REGISTER_MODULE(MP_QSTR_bme680, bme680_module, MODULE_BME680_ENABLED);
+MP_REGISTER_MODULE(MP_QSTR_sys_bme680, bme680_module, MODULE_BME680_ENABLED);
-- 
GitLab