Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822
Diff: main.cpp
- Revision:
- 0:3bbe1a2f1b66
- Child:
- 1:2e7bb567b396
- Child:
- 2:fb1f4bd366dc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Oct 05 12:45:18 2015 +0000
@@ -0,0 +1,106 @@
+/*
+ * Simple testcase that attempts to collect infos about the SoftDevice, and
+ * signal when there is an error. On success, should blink slowly (2s period).
+ * On failure, blink every 200ms.
+ *
+ * In addition, if VERBOSE is defined, show the following messages:
+ *
+ * For an S130 (1.0.0) Image:
+ * Firmware ID = 67
+ * Firmware version = s130 (guessed)
+ * S110 flag = 0
+ * (GattClient scan = success (0))
+ *
+ * For an S110 (8.0.0) Image:
+ * Firmware ID = 64
+ * Firmware version = s110 (guessed)
+ * S110 flag = 1
+ * (GattClient scan = not implemented (2))
+ *
+ * If TEST_BLE is defined, also test GattClient support. With S110, should
+ * return BLE_ERROR_NOT_IMPLEMENTED. Otherwise BLE_ERROR_NONE.
+ *
+ * A PARAM_OUT_OF_RANGE (3) error with S110 most likely means that Central
+ * features where not properly disabled.
+ * In that case, if S110 flag is 1, it means that the nRF51822 is an old version
+ * and does not recognize that flag.
+ */
+#define VERBOSE
+#define TEST_BLE
+
+#include "mbed.h"
+
+#undef LED1
+#define LED1 p18
+Serial pc(p9, p11);
+DigitalOut led1(LED1);
+
+/* introspection macros */
+#include "nrf_sdm.h"
+
+/* An S110 application is supposed to be built with one of those flags */
+#if defined(TARGET_MCU_NRF51_16K_S110) || defined(TARGET_MCU_NRF51_32K_S110)
+# define S110_MACRO 1
+#else
+# define S110_MACRO 0
+#endif
+
+#ifdef VERBOSE
+# define PRINTF printf
+#else
+# define PRINTF(...)
+#endif
+
+#ifdef TEST_BLE
+# include "ble/BLE.h"
+BLE ble;
+
+void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
+{
+}
+#endif
+
+int main(void)
+{
+ bool error = false;
+ uint32_t fwid = SD_FWID_GET(MBR_SIZE);
+ /* TODO: find details about the specific version (0x67 is S130 v1.0.0) */
+ bool is_s110 = (fwid != 0x67);
+
+ PRINTF("Firmware ID = %x\r\n", fwid);
+ PRINTF("Firmware version = %s (guessed)\r\n", (is_s110 ? "s110" : "s130"));
+ PRINTF("S110 flag = %d\r\n", S110_MACRO);
+
+#ifdef TEST_BLE
+ {
+ ble.init();
+
+ if (ble.gap().setScanParams(1000, 50) != BLE_ERROR_NONE) {
+ PRINTF("Failed to set scan parameters!\r\n");
+ return 1;
+ }
+
+ /* We expect startScan to return an error when we're using S110 */
+ int ret = ble.gap().startScan(advertisementCallback);
+ PRINTF("GattClient scan = %s (%d)\r\n",
+ (ret == BLE_ERROR_NONE ? "success" :
+ (ret == BLE_ERROR_NOT_IMPLEMENTED ? "not implemented" :
+ "unexpected error")),
+ ret);
+
+ if (is_s110 && ret != BLE_ERROR_NOT_IMPLEMENTED)
+ error = true;
+ if (!is_s110 && ret != BLE_ERROR_NONE)
+ error = true;
+ }
+#endif
+
+ if (S110_MACRO ^ is_s110) /* Check if SD and flags are in sync */
+ error = true;
+
+ while (true) {
+ /* Blink fast when there is an obvious issue */
+ wait_ms(error ? 50 : 1000);
+ led1 = !led1;
+ }
+}