enhancing Multitech's library for some accelerometer

Fork of MMA845x by Multi-Hackers

Revision:
13:77a8994b3bb2
Parent:
12:92294b5ca1c1
Child:
14:683234dfe179
--- 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;