-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mlx90393 sensor driver #4
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich habe mal ein erstes mal darüber geschaut. Um die Zahl der Anmerkungen überschaubar zu halten, erst einmal bis hierher. Es gibt natürlich weitere Anmerkungen.
Bitte zunächst auch make static-test
in riot/riotbuild ausführen und die Fehler fixen. Das spart weitere zahlreiche Kommentare.
#define MLX90393_CONSTANTS_H | ||
|
||
#ifdef __cplusplus | ||
extern "C" //{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extern "C" //{ | |
extern "C" { |
#define MLX90393_T_CONV_END 120 /**< Time to end analog active mode in us **/ | ||
|
||
#ifdef __cplusplus | ||
//} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
//} | |
} |
Sie sollten am besten |
Hatten Sie jetzt bereits |
Um diese Fehler müssen Sie sich nicht kümmern. |
Bei liefern die statischen Tests noch Fehler: riotbuild@324e3a6e1e43:~$ make static-test
./dist/tools/ci/static_tests.sh
Running "./dist/tools/whitespacecheck/check.sh master" x
Command output:
drivers/mlx90393/include/mlx90393_constants.h:83: trailing whitespace.
+ *
drivers/mlx90393/mlx90393.c:627: new blank line at EOF.
drivers/mlx90393/include/mlx90393_constants.h:83: trailing whitespace.
+ *
drivers/mlx90393/mlx90393.c:627: new blank line at EOF.
ERROR: This change introduces new whitespace errors
Running "./dist/tools/licenses/check.sh" ✓
Running "./dist/tools/licenses/check.sh" ✓
Running "./dist/tools/doccheck/check.sh" x
Command output:
ERROR: Doxygen generates the following warnings:
drivers/include/mlx90393.h:144: warning: end of comment block while expecting command </center>
drivers/include/mlx90393.h:144: warning: end of comment block while expecting command </center>
Running "./dist/tools/externc/check.sh" ✓
Running "./dist/tools/vera++/check.sh" ✓
Command output:
drivers/mlx90393/include/mlx90393_constants.h:83: warning: trailing whitespace
drivers/mlx90393/mlx90393.c:54: warning: too many consecutive empty lines
drivers/mlx90393/mlx90393.c:226: warning: keyword 'if' not followed by a single space
drivers/mlx90393/mlx90393.c:284: warning: keyword 'if' not followed by a single space
drivers/mlx90393/mlx90393.c:627: warning: trailing empty line(s)
Running "./dist/tools/coccinelle/check.sh" ✓
Running "./dist/tools/flake8/check.sh" ✓
Running "./dist/tools/headerguards/check.sh" ✓
Running "./dist/tools/buildsystem_sanity_check/check.sh"
Running "./dist/tools/codespell/check.sh" x
Command output:
There are typos in the following files:
drivers/include/mlx90393.h:31: tresholds ==> thresholds
drivers/include/mlx90393.h:77: Absolut ==> Absolute
drivers/include/mlx90393.h:270: Tresholds ==> Thresholds
drivers/include/mlx90393.h:273: Treshold ==> Threshold
drivers/include/mlx90393.h:297: treshold ==> threshold
drivers/include/mlx90393.h:297: Treshold ==> Threshold
drivers/mlx90393/include/mlx90393_params.h:138: treshold ==> threshold
drivers/mlx90393/include/mlx90393_params.h:173: treshold ==> threshold
drivers/mlx90393/mlx90393.c:105: avaiable ==> available
drivers/mlx90393/mlx90393.c:200: tresholds ==> thresholds
drivers/mlx90393/mlx90393.c:202: treshold ==> threshold
drivers/mlx90393/mlx90393.c:204: treshold ==> threshold
drivers/mlx90393/mlx90393.c:206: treshold ==> threshold
If those are false positives, add them to dist/tools/codespell/ignored_words.txt
Running "./dist/tools/uncrustify/uncrustify.sh --check" ✓
Command output:
All files are uncrustified!
Running "./dist/tools/shellcheck/check.sh" ✓ |
Ich habe make static-test im RIOT root Verzeichnis ausgeführt. Ein riotbuild Ordner habe ich nicht in meinem repository. Kann das der Grund für die unterschiedlichen ausgaben sein? |
Sie müssen
|
Jetzt müssten alle Fehler weg sein. |
drivers/include/mlx90393.h
Outdated
*/ | ||
|
||
/** | ||
* @defgroup drivers_mlx90393 MLX90393 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* @defgroup drivers_mlx90393 MLX90393 | |
* @defgroup drivers_mlx90393 MLX90393 3-axis magnetometer |
drivers/include/mlx90393.h
Outdated
* - OSR_0 and DIG_FILT_0 | ||
* - OSR_0 and DIG_FILT_1 | ||
* - OSR_1 and DIG_FILT_0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
?
* - OSR_0 and DIG_FILT_0 | |
* - OSR_0 and DIG_FILT_1 | |
* - OSR_1 and DIG_FILT_0 | |
* - #MLX90393_OSR_0 and #MLX90393_DIG_FILT_0 | |
* - #MLX90393_OSR_0 and #MLX90393_DIG_FILT_1 | |
* - #MLX90393_OSR_1 and #MLX90393_DIG_FILT_0``` |
tests/drivers/mlx90393/main.c
Outdated
|
||
int main(void) | ||
{ | ||
puts("MAG3110 magnetometer driver test application\n\r"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
puts("MAG3110 magnetometer driver test application\n\r"); | |
puts("MLX90393 magnetometer driver test application\n\r"); |
tests/drivers/mlx90393/main.c
Outdated
mlx90393_t dev; | ||
int error = 0; | ||
if ((error = mlx90393_init(&dev, &mlx90393_params[0])) != 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mlx90393_t dev; | |
int error = 0; | |
if ((error = mlx90393_init(&dev, &mlx90393_params[0])) != 0) { | |
mlx90393_t dev; | |
int error = 0; | |
if ((error = mlx90393_init(&dev, &mlx90393_params[0])) != 0) { |
tests/drivers/mlx90393/main.c
Outdated
unsigned count = 0; | ||
|
||
mlx90393_data_t data; | ||
puts("Starting read data from the device"); | ||
while (1) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
unsigned count = 0; | |
mlx90393_data_t data; | |
puts("Starting read data from the device"); | |
while (1) { | |
unsigned count = 0; | |
mlx90393_data_t data; | |
puts("Starting read data from the device"); | |
while (1) { |
#define MLX90393_TEMP_RESOLUTION 452 /**< Temperature sensor resolution | ||
* (45.2 * 10 for avoiding float values) */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich denke, so wäre es besser als die misaligned Variante
#define MLX90393_TEMP_RESOLUTION 452 /**< Temperature sensor resolution | |
* (45.2 * 10 for avoiding float values) */ | |
#define MLX90393_TEMP_RESOLUTION 452 /**< Temperature sensor resolution | |
(45.2 * 10 for avoiding float values) */ |
{ | ||
/* Maximum value that can be achieved is +- 106480 uT according to Table 17 | ||
and 21 from Datasheet. To fit in signed 16 bit only the 16 MSB are passed. */ | ||
mlx90393_data_t data; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mlx90393_data_t data; | |
mlx90393_data_t data; | |
drivers/mlx90393/mlx90393_saul.c
Outdated
res->val[0] = (int16_t) data.x_axis >> 2; | ||
res->val[1] = (int16_t) data.y_axis >> 2; | ||
res->val[2] = (int16_t) data.z_axis >> 2; | ||
res->unit = UNIT_T; | ||
res->scale = -6; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Laut documentation liefert mlx90393_read
die Daten in uTesla. Wenn Sie die aber durch 4 Teilen, kommt etwas komisches heraus, aber nicht uTesla.
Zudem würde in Ihrem Fall erst der Type Cast (Narrowing Conversion) und dann die Division erfolgen.
Wenn Sie ein Problem mit dem Wertebereich haben, wäre eine mögliche Lösung um möglichst wenig Genauigkeit zu verlieren aus meiner Sicht:
res->val[0] = (int16_t) data.x_axis >> 2; | |
res->val[1] = (int16_t) data.y_axis >> 2; | |
res->val[2] = (int16_t) data.z_axis >> 2; | |
res->unit = UNIT_T; | |
res->scale = -6; | |
res->val[0] = (int16_t)(data.x_axis / 10); | |
res->val[1] = (int16_t)(data.y_axis / 10); | |
res->val[2] = (int16_t)(data.z_axis / 10); | |
res->unit = UNIT_T; | |
res->scale = -5; |
Oder alternativ gleich in mTesla:
res->val[0] = (int16_t) data.x_axis >> 2; | |
res->val[1] = (int16_t) data.y_axis >> 2; | |
res->val[2] = (int16_t) data.z_axis >> 2; | |
res->unit = UNIT_T; | |
res->scale = -6; | |
res->val[0] = (int16_t) data.x_axis / 1000; | |
res->val[1] = (int16_t) data.y_axis / 1000; | |
res->val[2] = (int16_t) data.z_axis / 1000; | |
res->unit = UNIT_T; | |
res->scale = -3; |
Dazu fehlt mir aber das Gefühl in welchem Wertebreich sich die Werte bewegen und wie genau das Ergebnis sein muss.
drivers/include/mlx90393.h
Outdated
* | ||
* The MLX90393 sensor can be shutdown into idle mode when no continuous measurements are | ||
* required using the function #mlx90393_stop_cont. The power consumption is then reduced to | ||
* max. 5 uA. To restart the MLX90393 in previous continuous measurement mode, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* max. 5 uA. To restart the MLX90393 in previous continuous measurement mode, | |
* a maxiumum of 5 uA. To restart the MLX90393 in previous continuous measurement mode, |
} | ||
} | ||
/* wake up on change mode */ | ||
else if (DEV_MODE == MLX90393_MODE_WOC_ABSOLUTE || DEV_MODE == MLX90393_MODE_WOC_RELATIVE) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich überlege noch, ob man den Code weiter optimieren könnte, wenn man ein Pseudomodule mlx90393_int
einführt, mit dem die Interrupt-Nutzung aktiviert wird.
Erstens würde das den kompletten else
-Zweig heraus optimieren, wenn das Module nicht genutzt wird
else if (DEV_MODE == MLX90393_MODE_WOC_ABSOLUTE || DEV_MODE == MLX90393_MODE_WOC_RELATIVE) { | |
else if (IS_USED(MODULE_MLX90393_INT) && | |
(DEV_MODE == MLX90393_MODE_WOC_ABSOLUTE || DEV_MODE == MLX90393_MODE_WOC_RELATIVE)) { |
was nicht passiert, wenn nur auf dev->mode
getestet wird, weil zur Compile-Zeit nicht klar ist, welchen Wert dev->mode
hat.
Zweitens könnte man den Member mlx90393_params_t::int_pin
sparen, wenn es nicht benutzt wird bzw. den Member mlx90393_t::conversion_time
sowie den gesamten Code mit Berechnung und Nutzung von _calculate_conv_time
heraus optimieren, wenn mlx90393_irq
benutzt wird.
Wenn mlx90393_int
enabled ist, reicht ein einfaches assert(gpio_is_valid(params->int_pin))
um sicherzustellen, dass das Interrupt Pin für die Interrupt-Nutzung definiert ist, was wiederum Code spart.
drivers/mlx90393/mlx90393.c
Outdated
return error; | ||
} | ||
} | ||
if (DEV_MODE == MLX90393_MODE_SINGLE_MEASUREMENT && !gpio_is_valid(DEV_INT_PIN)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Siehe Anmerkung zu Pseudomodule mlx90393_int
:
if (DEV_MODE == MLX90393_MODE_SINGLE_MEASUREMENT && !gpio_is_valid(DEV_INT_PIN)) { | |
if (!ISUSED(MODULE_MLX90393) && (DEV_MODE == MLX90393_MODE_SINGLE_MEASUREMENT)) { |
Ich hätte da noch eine Frage. Soll es bei der Verwendung des Pseudo Moduls mlx90393_woc trotzdem möglich sein den Single Measurement und Burst Mode zu nutzen oder werden diese dann wegoptimiert? |
Die Frage ist, wie wäre der Use Case? Aus meiner Sicht wäre es so, dass eine Anwendung WOC nutzt, um getriggert zu werden, wenn ein Grenzwert überschritten wird, würde dann aber auch die Werte wissen wollen. Hier zunächst die Frage: Sind die Messwerte im Sensor nach einem WOC Interrupt gültig, d.h könnte man die Messwerte ohne erneute Messung auslesen oder müsste man auf den nächsten Messewert warten. Im ersteren Fall müssten wir nochmal über den Ansatz mit Bei Nutzung von |
Die Messwerte sind nach neinem WOC Interrupt gültig. Man wartet mit mlx90393_read darauf, dass der Interrupt auslöst und liest direkt die Messung aus, welche den Grenzwert überschritten hat. |
Hm, da tut sich vielleicht noch ein Design-Problem auf, wenn man die Use Cases betrachtet, dass wir so bisher vielleicht nicht richtig betrachtet haben.
In Use Case 1 würde der laufende Thread eine Messung triggern, wenn er den Messwert braucht und "kurz" auf das Ergebnis warten (Single Measurement Mode) bzw. periodisch Messwerte auslesen (Burst Mode). In Use Case 2 soll jedoch auf ein Ereignis reagiert werden, welches selten oder auch nie eintritt. In diesem Fall würde der Thread dauerhaft blockieren, was dazu führt, dass man einen eigenen Thread nur für das potentielle Eintreten eines solchen Ereignisses bräuchte. Ein Thread ist teuer im Sinne des verfügbaren RAMs. Insofern wäre es vielleicht besser, die API doch noch wie folgt etwas zu ändern
Ein übliche Nutzung wäre aber in der Callback-Function einfach ein Flag des App-Threads zu setzen, welches in der Abarbeitung im App-Thread dann ausgewertet wird und dann im Falle eines gesetzten Flags die App im Thread-Context die Sensor-Werte bei Bedarf mit Mit
Eine Frage noch zum Verständnis, wenn eine Single Measurement in |
Okay und heißt das jetzt, dass bei der Verwendung des mlx90393_woc Pseudomodules die Single Measurement und Burst Modes nicht mehr unterstützt werden?
Ja das wäre wohl möglich. Ist das realistisch bei einer minimalen Dauer einer Messung im Single Measurement Mode von 1772 us? |
Die Nutzung eines Pseudomodules ist in diesem Fall als Freischalten zusätzlicher Features zu verstehen. Es ist ja nicht auszuschließen, dass eine Anwendung beispielsweise für eine bestimmte Zeit regelmäßig weiter messen will, sobald ein WOC eingetreten ist, bevor sie wieder in den WOC Mode wechselt. Die Funktionalität des Single Measurement Mode und des Burst Mode im Polling würde ich als Standardfunktionalität betrachten, WOC und Interrupt als zusätzliche Funktionalität. Natürlich könnte man auch
Nun ja, ich weiß nicht, wie lange ein ATmega 328p mit 8 MHz Takt dafür braucht ein GPIO und ein Mutex zu initialisieren und zu locken. |
5db7b6c
to
4844ad3
Compare
.gain = MLX90393_PARAM_GAIN, \ | ||
.resolution = MLX90393_PARAM_RES, \ | ||
.odr = MLX90393_PARAM_ODR, \ | ||
.oversampling = MLX90393_PARAM_OSR, \ | ||
.dig_filt = MLX90393_PARAM_DIG_FILT, \ | ||
.threshold = MLX90393_PARAM_THRESHOLD \ | ||
MLX90393_PARAM_INT_PIN \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MLX90393_PARAM_INT_PIN \ | |
MLX90393_PARAM_INT \ |
.gain = MLX90393_PARAM_GAIN, \ | ||
.resolution = MLX90393_PARAM_RES, \ | ||
.odr = MLX90393_PARAM_ODR, \ | ||
.oversampling = MLX90393_PARAM_OSR, \ | ||
.dig_filt = MLX90393_PARAM_DIG_FILT, \ | ||
.threshold = MLX90393_PARAM_THRESHOLD \ | ||
MLX90393_PARAM_INT_PIN \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MLX90393_PARAM_INT_PIN \ | |
MLX90393_PARAM_INT \ |
@@ -0,0 +1,15 @@ | |||
# Copyright (c) 2023 mi6527ri |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Copyright (c) 2023 mi6527ri | |
# Copyright (C) 2023 Michael Ristau |
@@ -0,0 +1,118 @@ | |||
/* | |||
* Copyright (C) 2023 mi6527ri |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2023 mi6527ri | |
* Copyright (C) 2023 Michael Ristau |
# Copyright (c) 2023 mi6527ri | ||
# | ||
# This file is subject to the terms and conditions of the GNU Lesser | ||
# General Public License v2.1. See the file LICENSE in the top level | ||
# directory for more details. | ||
|
||
config MODULE_MLX90393 | ||
bool "drivers_mlx90393" | ||
depends on TEST_KCONFIG | ||
depends on HAS_PERIPH_GPIO | ||
depends on HAS_PERIPH_GPIO_IRQ | ||
depends on HAS_PERIPH_I2C | ||
select MODULE_PERIPH_GPIO | ||
select MODULE_PERIPH_GPIO_IRQ | ||
select MODULE_PERIPH_I2C |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Copyright (c) 2023 mi6527ri | |
# | |
# This file is subject to the terms and conditions of the GNU Lesser | |
# General Public License v2.1. See the file LICENSE in the top level | |
# directory for more details. | |
config MODULE_MLX90393 | |
bool "drivers_mlx90393" | |
depends on TEST_KCONFIG | |
depends on HAS_PERIPH_GPIO | |
depends on HAS_PERIPH_GPIO_IRQ | |
depends on HAS_PERIPH_I2C | |
select MODULE_PERIPH_GPIO | |
select MODULE_PERIPH_GPIO_IRQ | |
select MODULE_PERIPH_I2C |
Im aktuellen Master erfolgt die Dependency-Modellierung nicht mehr über Kconfig. Das File kann komplett entfallen.
Allerdings wäre es hilfreich, wenn einige der Parameter per Kconfig einstellbar wären, wie beispielsweise die Thresholds im WOC mode. Das würde alle Sensor-Parameter betreffen, die nicht hardware-mäßig vorgegeben sind, also alles ab .mode
mit Ausnahme des Interrupt Pins.
#if IS_USED(MODULE_MLX90393_INT) || DOXYGEN | ||
#ifndef MLX90393_PARAM_INT_PIN | ||
/** | ||
* @brief Default interrupt pin | ||
*/ | ||
#define MLX90393_PARAM_INT_PIN .int_pin = (GPIO_PIN(PORT_C, 8)), | ||
#endif | ||
#else | ||
#define MLX90393_PARAM_INT_PIN | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So kann man das leider nicht realisieren, kein Mensch wird an der make
-Kommandozeile ein solches Konstrukt angeben können/wollen, um den Default-Wert zu überschreiben.
#if IS_USED(MODULE_MLX90393_INT) || DOXYGEN | |
#ifndef MLX90393_PARAM_INT_PIN | |
/** | |
* @brief Default interrupt pin | |
*/ | |
#define MLX90393_PARAM_INT_PIN .int_pin = (GPIO_PIN(PORT_C, 8)), | |
#endif | |
#else | |
#define MLX90393_PARAM_INT_PIN | |
#endif | |
/** | |
* @brief Default interrupt pin | |
*/ | |
#ifndef MLX90393_PARAM_INT_PIN | |
#define MLX90393_PARAM_INT_PIN (GPIO_PIN(PORT_C, 8)) | |
#endif | |
#if IS_USED(MODULE_MLX90393_INT) || DOXYGEN | |
#define MLX90393_PARAM_INT .int_pin = MLX90393_PARAM_INT_PIN, | |
#else | |
#define MLX90393_PARAM_INT | |
#endif |
In der Definition von MLX90393_PARAM_SPI
bzw. MLX90393_PARAM_I2C
wird dann einfach grundsätzlich MLX90393_PARAM_INT
hinzugefügt, was entweder leer ist oder ebent die Deklaration des int_pin
Members enthält, siehe unten.
#if IS_USED(MODULE_MLX90393_WOC) || DOXYGEN | ||
#ifndef MLX90393_PARAM_THRESHOLD | ||
/** | ||
* @brief Default thresholds for Wake-up On Change mode | ||
*/ | ||
#define MLX90393_PARAM_THRESHOLD \ | ||
.threshold = \ | ||
{ \ | ||
.xy = 0xFFFF, \ | ||
.z = 1000, \ | ||
.temp = 0xFFFF \ | ||
}, | ||
#endif | ||
#else | ||
#define MLX90393_PARAM_THRESHOLD | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das Gleiche wie bei der Definition des Interrupt-Pin, sowas kann man nicht überschreiben, zumindest nicht an der Make-Kommandozeile. Daher wie folgt:
#if IS_USED(MODULE_MLX90393_WOC) || DOXYGEN | |
#ifndef MLX90393_PARAM_THRESHOLD | |
/** | |
* @brief Default thresholds for Wake-up On Change mode | |
*/ | |
#define MLX90393_PARAM_THRESHOLD \ | |
.threshold = \ | |
{ \ | |
.xy = 0xFFFF, \ | |
.z = 1000, \ | |
.temp = 0xFFFF \ | |
}, | |
#endif | |
#else | |
#define MLX90393_PARAM_THRESHOLD | |
#endif | |
#ifndef MLX90393_PARAM_THRESHOLD_XY | |
#define MLX90393_PARAM_THRESHOLD_XY 0xFFFF | |
#endif | |
#ifndef MLX90393_PARAM_THRESHOLD_Z | |
#define MLX90393_PARAM_THRESHOLD_Z 1000 | |
#endif | |
#ifndef MLX90393_PARAM_THRESHOLD_TEMP | |
#define MLX90393_PARAM_THRESHOLD_TEMP 0xFFFF | |
#endif | |
#if IS_USED(MODULE_MLX90393_WOC) || DOXYGEN | |
#ifndef MLX90393_PARAM_THRESHOLD | |
/** | |
* @brief Default thresholds for Wake-up On Change mode | |
*/ | |
#define MLX90393_PARAM_THRESHOLD \ | |
.threshold = { \ | |
.xy = MLX90393_PARAM_THRESHOLD_XY, \ | |
.z = MLX90393_PARAM_THRESHOLD_Z, \ | |
.temp = MLX90393_PARAM_THRESHOLD_TEMP, \ | |
}, | |
#endif | |
#else | |
#define MLX90393_PARAM_THRESHOLD | |
#endif |
#ifndef MLX90393_PARAM_OSR | ||
/** | ||
* @brief Default oversampling ratio | ||
*/ | ||
#define MLX90393_PARAM_OSR \ | ||
{ \ | ||
.mag = MLX90393_OSR_1, \ | ||
.temp = MLX90393_OSR_1 \ | ||
} | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das Gleiche wie bei der Definition des Interrupt-Pin, sowas kann man nicht überschreiben, zumindest nicht an der Make-Kommandozeile. Daher wie folgt:
#ifndef MLX90393_PARAM_OSR | |
/** | |
* @brief Default oversampling ratio | |
*/ | |
#define MLX90393_PARAM_OSR \ | |
{ \ | |
.mag = MLX90393_OSR_1, \ | |
.temp = MLX90393_OSR_1 \ | |
} | |
#endif | |
#ifndef MLX90393_PARAM_OSR_MAG | |
#define MLX90393_PARAM_OSR_MAG MLX90393_OSR_1 | |
#endif | |
#ifndef MLX90393_PARAM_OSR_TEMP | |
#define MLX90393_PARAM_OSR_TEMP MLX90393_OSR_1 | |
#endif | |
/** | |
* @brief Default oversampling ratio | |
*/ | |
#define MLX90393_PARAM_OSR { \ | |
.mag = MLX90393_PARAM_OSR_MAG, \ | |
.temp = MLX90393_PARAM_OSR_TEMP, \ | |
} |
Contribution description
Testing procedure
Issues/PRs references