Sample code on how to pass an optional function pointer to a library and set a single pin to either InterruptIn or DigitalOut.

Dependencies:   mbed

This code can be used as a template to create a library where a single pin can be set to either InterruptIn or DigitalOut.
There are 3 ways to instantiate the library (example using the KL25Z board):

// 2 parameters : Only SDA and SCL are declared.
DemoClass sensor(PTE0, PTE1);

// 3 parameters : SDA, SCL and a DigitalOut are declared.
DemoClass sensor(PTE0, PTE1, PTD7);               // SDA, SCL

// 4 parameters : SDA, SCL, InterruptIn and a user function pointer are declared.
DemoClass sensor(PTE0, PTE1, PTD7, &sensor_irq);       // ISR mode

Notice that the 3rd pin declaration switches from DigitalOut to InterruptIn when the user function pointer is added.

Revision:
0:0a6e921b085b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 03 16:15:38 2014 +0000
@@ -0,0 +1,23 @@
+#include "mbed.h"
+#include "DemoClass.h"
+
+bool Overflow = 0;
+
+// Forward declaration of the user-ISR
+void sensor_irq(void);
+
+// 3 possible constructor calls (current example uses KL25Z pins)
+//DemoClass sensor(PTE0, PTE1);                          // Free running mode
+//DemoClass sensor(PTE0, PTE1, PTD7);                    // Sync mode
+DemoClass sensor(PTE0, PTE1, PTD7, &sensor_irq);       // ISR mode
+
+void sensor_irq(void)
+{
+    Overflow = 1;
+}
+
+int main()
+{
+    while(1)
+        if(Overflow) Overflow = 0;
+}