Mateusz Grzywacz / MMA845x

Fork of MMA845x by Multi-Hackers

Files at this revision

API Documentation at this revision

Comitter:
amateusz
Date:
Tue Jul 03 00:11:57 2018 +0000
Parent:
12:92294b5ca1c1
Child:
14:683234dfe179
Commit message:
generic interface for enabling/disabling interrupts

Changed in this revision

MMA845x.cpp Show annotated file Show diff for this revision Revisions of this file
MMA845x.h Show annotated file Show diff for this revision Revisions of this file
--- a/MMA845x.cpp	Mon Jul 02 23:55:31 2018 +0000
+++ b/MMA845x.cpp	Tue Jul 03 00:11:57 2018 +0000
@@ -150,28 +150,11 @@
     //     result = 1;
     // }
     // ↑ not true. MMA8451 is the only one supporting variable trip-angle values
-    char datain[1];
-    uint8_t dataout;
 
     MMA845x::writeRegister(PL_COUNT, debounce_steps);
     MMA845x::writeRegister(PL_CFG, 0b11000000); // enable and set debounce counter to clear out of {clear, decrement}
 
-    if (pin != INT_NONE) {
-        // enable interrupt
-        result |= MMA845x::readRegister(CTRL_REG4, 1, datain);
-        dataout = (datain[0] | INT_LNDPRT);
-        result |= MMA845x::writeRegister(CTRL_REG4, dataout);
-
-        //set pin for the interrupt
-        result |= MMA845x::readRegister(CTRL_REG5, 1, datain);
-        if (pin == 0)   dataout = (datain[0] & ~INT_LNDPRT); // clearing bit
-        else            dataout = (datain[0] | INT_LNDPRT);  // setting bit
-    } else {
-        // disable interrupt
-        result |= MMA845x::readRegister(CTRL_REG4, 1, datain);
-        dataout = (datain[0] & ~INT_LNDPRT);
-        result |= MMA845x::writeRegister(CTRL_REG4, dataout);
-    }
+    configInterrupt(INT_LNDPRT, pin);
 
     return result;
 }
@@ -200,6 +183,31 @@
     return result;
 }
 
+uint8_t MMA845x::configInterrupt(INTERRUPT_CFG_EN_SOURCE function, INTERRUPT_PIN pin) const
+{
+    uint8_t result = 0;
+    char datain[1];
+    uint8_t dataout;
+
+    if (pin != INT_NONE) {
+        // enable interrupt
+        result |= MMA845x::readRegister(CTRL_REG4, 1, datain);
+        dataout = (datain[0] | function);
+        result |= MMA845x::writeRegister(CTRL_REG4, dataout);
+
+        //set pin for the interrupt
+        result |= MMA845x::readRegister(CTRL_REG5, 1, datain);
+        if (pin == 0)   dataout = (datain[0] & ~function); // clearing bit
+        else            dataout = (datain[0] | function);  // setting bit
+    } else {
+        // disable interrupt
+        result |= MMA845x::readRegister(CTRL_REG4, 1, datain);
+        dataout = (datain[0] & ~function);
+        result |= MMA845x::writeRegister(CTRL_REG4, dataout);
+    }
+    return result;
+}
+
 uint8_t MMA845x::activeMode(void) const
 {
     uint8_t result = 0;
--- a/MMA845x.h	Mon Jul 02 23:55:31 2018 +0000
+++ b/MMA845x.h	Tue Jul 03 00:11:57 2018 +0000
@@ -369,7 +369,18 @@
          */
     uint8_t getStatus(void) const;
 
+    /** Write to a register (exposed for debugging reasons)
+     *  Note: most writes are only valid in stop mode
+     *  @param reg - The register to be written
+     *  @param data - The data to be written
+     */
+    uint8_t writeRegister(uint8_t const reg, uint8_t const data) const;
 
+    /** Read from a register (exposed for debugging reasons)
+     *  @param reg - The register to read from
+     *  @return The register contents
+     */
+    uint8_t readRegister(uint8_t const reg, uint8_t count, char* data) const;
 private:
 
     I2C         *_i2c;
@@ -382,19 +393,12 @@
 
     uint8_t init(void);
 
-    /** Write to a register (exposed for debugging reasons)
-     *  Note: most writes are only valid in stop mode
-     *  @param reg - The register to be written
-     *  @param data - The data to be written
+    /** Enable disable interrupt triggering for a given function.
+     *	@function - a internal funcion capable to trigger an interrupt
+     *	@pin - which phy pin assign to interrupt condition. If no pin is specified, interrupt is disabled
+     *	@return
      */
-    uint8_t writeRegister(uint8_t const reg, uint8_t const data) const;
-
-    /** Read from a register (exposed for debugging reasons)
-     *  @param reg - The register to read from
-     *  @return The register contents
-     */
-    uint8_t readRegister(uint8_t const reg, uint8_t count, char* data) const;
-
+    uint8_t configInterrupt(INTERRUPT_CFG_EN_SOURCE function, INTERRUPT_PIN pin) const;
 
 };