Preliminary main mbed library for nexpaq development

Revision:
0:6c56fb4bc5f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/tests/mbed/spi_ADXL345/main.cpp	Fri Nov 04 20:27:58 2016 +0000
@@ -0,0 +1,62 @@
+#include "test_env.h"
+#include "ADXL345.h"
+
+#if defined(TARGET_LPC812)
+ADXL345 accelerometer(D10, D11, D12, D13);
+
+#else
+ADXL345 accelerometer(p5, p6, p7, p8);
+#endif
+
+// Assume test configuration on a plane (small x and y, z ~ g)
+#define MAX_X_Y     (50)
+#define MIN_Z       (200)
+#define MAX_Z       (300)
+
+void check_X_Y(int v) {
+    int16_t a = (int16_t)v;
+    if (abs(a) > MAX_X_Y) {
+        printf("X/Y acceleration is too big: %d\n", a);
+        notify_completion(false);
+    }
+}
+
+
+int main() {
+    int readings[3] = {0, 0, 0};
+
+    printf("Starting ADXL345 test...\n");
+    printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
+
+    //Go into standby mode to configure the device.
+    accelerometer.setPowerControl(0x00);
+
+    //Full resolution, +/-16g, 4mg/LSB.
+    accelerometer.setDataFormatControl(0x0B);
+
+    //3.2kHz data rate.
+    accelerometer.setDataRate(ADXL345_3200HZ);
+
+    //Measurement mode.
+    accelerometer.setPowerControl(0x08);
+
+    for (int i=0; i<3; i++) {
+        wait(0.1);
+
+        //13-bit, sign extended values.
+        accelerometer.getOutput(readings);
+
+        // X and Y
+        check_X_Y(readings[0]);
+        check_X_Y(readings[1]);
+
+        // Z
+        int16_t z = (int16_t)readings[2];
+        if ((z < MIN_Z) || (z > MAX_Z)) {
+            printf("Z acceleration not within expected range\n", z);
+            notify_completion(false);
+        }
+    }
+
+    notify_completion(true);
+}