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
main.cpp
- Committer:
- jbru
- Date:
- 2015-10-05
- Revision:
- 0:3bbe1a2f1b66
- Child:
- 1:2e7bb567b396
- Child:
- 2:fb1f4bd366dc
File content as of revision 0:3bbe1a2f1b66:
/*
* 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;
}
}