From 8991c21d3069d76a99a52dc318ade40360042b38 Mon Sep 17 00:00:00 2001
From: Kees Bakker <kees@sodaq.com>
Date: Sun, 6 Jan 2019 19:43:40 +0100
Subject: [PATCH] drivers/pulse_counter: refactor the prototypes of read funcs

This change makes it more clear that the dev is modified in some of the
read functions. Only pulse_counter_read_without_reset gets a const
pointer argument.

Also, use pulse_counter_t pointers instead of void pointers where
possible.
---
 drivers/include/pulse_counter.h            | 10 +++++-----
 drivers/pulse_counter/pulse_counter.c      | 12 ++++++------
 drivers/pulse_counter/pulse_counter_saul.c |  8 ++++++--
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/drivers/include/pulse_counter.h b/drivers/include/pulse_counter.h
index 70c0b9cc24..1707b18fff 100644
--- a/drivers/include/pulse_counter.h
+++ b/drivers/include/pulse_counter.h
@@ -61,11 +61,11 @@ int pulse_counter_init(pulse_counter_t *dev, const pulse_counter_params_t *param
 /**
  * @brief   Read and reset pulse counter value
  *
- * @param[in]  dev          device descriptor of sensor
+ * @param[out] dev          device descriptor of sensor
  *
  * @return                  Accumulated pulse counts
  */
-int16_t pulse_counter_read_with_reset(const void *dev);
+int16_t pulse_counter_read_with_reset(pulse_counter_t *dev);
 
 /**
  * @brief   Read pulse counter value
@@ -74,14 +74,14 @@ int16_t pulse_counter_read_with_reset(const void *dev);
  *
  * @return                  Accumulated pulse counts
  */
-int16_t pulse_counter_read_without_reset(const void *dev);
+int16_t pulse_counter_read_without_reset(const pulse_counter_t *dev);
 
 /**
  * @brief   Reset pulse counter value
  *
- * @param[in]  dev          device descriptor of sensor
+ * @param[out] dev         device descriptor of sensor
  */
-void pulse_counter_reset(const void *dev);
+void pulse_counter_reset(pulse_counter_t *dev);
 
 #ifdef __cplusplus
 }
diff --git a/drivers/pulse_counter/pulse_counter.c b/drivers/pulse_counter/pulse_counter.c
index 0a8fc10d61..b83091173b 100644
--- a/drivers/pulse_counter/pulse_counter.c
+++ b/drivers/pulse_counter/pulse_counter.c
@@ -55,24 +55,24 @@ int pulse_counter_init(pulse_counter_t *dev, const pulse_counter_params_t *param
 }
 
 /* Return the accumulated pulse counts and reset the count to zero */
-int16_t pulse_counter_read_with_reset(const void *dev)
+int16_t pulse_counter_read_with_reset(pulse_counter_t *dev)
 {
     int16_t pulse_count_output = 0;
     int16_t reset_value = 0;
 
     /* Use atomic operations to avoid messing with IRQ flags */
-    __atomic_exchange(&(((pulse_counter_t *)dev)->pulse_count), &reset_value, &pulse_count_output, __ATOMIC_SEQ_CST);
+    __atomic_exchange(&(dev->pulse_count), &reset_value, &pulse_count_output, __ATOMIC_SEQ_CST);
     return pulse_count_output;
 }
 
 /* Return the accumulated pulse counts */
-int16_t pulse_counter_read_without_reset(const void *dev)
+int16_t pulse_counter_read_without_reset(const pulse_counter_t *dev)
 {
-    return ((pulse_counter_t *)dev)->pulse_count;
+    return dev->pulse_count;
 }
 
 /* Reset the pulse count value to zero */
-void pulse_counter_reset(const void *dev)
+void pulse_counter_reset(pulse_counter_t *dev)
 {
-    ((pulse_counter_t *)dev)->pulse_count = 0;
+    dev->pulse_count = 0;
 }
diff --git a/drivers/pulse_counter/pulse_counter_saul.c b/drivers/pulse_counter/pulse_counter_saul.c
index 9b04b3a7ba..fe7c736f09 100644
--- a/drivers/pulse_counter/pulse_counter_saul.c
+++ b/drivers/pulse_counter/pulse_counter_saul.c
@@ -25,7 +25,9 @@
 
 static int read_pulse_counter(const void *dev, phydat_t *res)
 {
-    res->val[0] = pulse_counter_read_with_reset(dev);
+    /* Using non-const dev !! */
+    pulse_counter_t *mydev = (pulse_counter_t *)dev;
+    res->val[0] = pulse_counter_read_with_reset(mydev);
     res->unit  = UNIT_NONE;
     res->scale = 0;
     return 1;
@@ -33,7 +35,9 @@ static int read_pulse_counter(const void *dev, phydat_t *res)
 
 static int write_pulse_counter(const void *dev, phydat_t *data)
 {
-    pulse_counter_reset(dev);
+    /* Using non-const dev !! */
+    pulse_counter_t *mydev = (pulse_counter_t *)dev;
+    pulse_counter_reset(mydev);
     (void) data;
     return 1;
 }
-- 
GitLab