summaryrefslogtreecommitdiff
path: root/ports/nrf
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2018-06-18 16:29:41 -0700
committerGitHub <noreply@github.com>2018-06-18 16:29:41 -0700
commit4e7eee3553665116e625891d01f9ea89c527a24a (patch)
tree8401f7604b23d5d386cda8d8a75a6a80d6ff4dbe /ports/nrf
parentf5fab358aab883ef21b30fce10ac0b34dc2f6210 (diff)
parentfeee808955b8a370c8e18235fe14b4caa56ba3bd (diff)
Merge pull request #946 from arturo182/nrf_sd6
nrf: Use the production version of s140 6.0.0
Diffstat (limited to 'ports/nrf')
-rw-r--r--ports/nrf/boards/feather52840/mpconfigboard_s140.mk2
-rw-r--r--ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld (renamed from ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0-6.alpha.ld)8
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard.mk2
-rw-r--r--ports/nrf/boards/pca10056/mpconfigboard_s140.mk2
-rw-r--r--ports/nrf/drivers/bluetooth/ble_drv.c86
-rw-r--r--ports/nrf/drivers/bluetooth/bluetooth_common.mk9
-rwxr-xr-xports/nrf/drivers/bluetooth/download_ble_stack.sh20
7 files changed, 68 insertions, 61 deletions
diff --git a/ports/nrf/boards/feather52840/mpconfigboard_s140.mk b/ports/nrf/boards/feather52840/mpconfigboard_s140.mk
index cc64b2c3c..cf2b7e140 100644
--- a/ports/nrf/boards/feather52840/mpconfigboard_s140.mk
+++ b/ports/nrf/boards/feather52840/mpconfigboard_s140.mk
@@ -1,7 +1,7 @@
MCU_SERIES = m4
MCU_VARIANT = nrf52
MCU_SUB_VARIANT = nrf52840
-SOFTDEV_VERSION ?= 6.0.0-6.alpha
+SOFTDEV_VERSION ?= 6.0.0
LD_FILE = boards/feather52840/bluefruit_nrf52840_s140_6.0.0.ld
BOOTLOADER_FILENAME = boards/feather52840/bootloader/feather52840_bootloader_6.0.0_s140_single
diff --git a/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0-6.alpha.ld b/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld
index be2a9a75a..90d6c402d 100644
--- a/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0-6.alpha.ld
+++ b/ports/nrf/boards/nrf52840_1M_256k_s140_6.0.0.ld
@@ -1,13 +1,13 @@
/*
- GNU linker script for NRF52840 w/ s140 6.0.0-6.alpha SoftDevice
+ GNU linker script for NRF52840 w/ s140 6.0.0 SoftDevice
*/
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x100000 /* entire flash, 1 MiB */
- FLASH_ISR (rx) : ORIGIN = 0x00025000, LENGTH = 0x001000 /* sector 0, 4 KiB */
- FLASH_TEXT (rx) : ORIGIN = 0x00026000, LENGTH = 0x09A000 /* 616 KiB */
+ FLASH_ISR (rx) : ORIGIN = 0x00026000, LENGTH = 0x001000 /* sector 0, 4 KiB */
+ FLASH_TEXT (rx) : ORIGIN = 0x00027000, LENGTH = 0x099000 /* 612 KiB */
FLASH_FATFS (r) : ORIGIN = 0x000C0000, LENGTH = 0x040000 /* File system 256 KiB */
RAM (xrw) : ORIGIN = 0x20004000, LENGTH = 0x03C000 /* 240 KiB */
}
@@ -15,7 +15,7 @@ MEMORY
/* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 40K;
_minimum_heap_size = 0;
-
+
/* top end of the stack */
/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/
diff --git a/ports/nrf/boards/pca10056/mpconfigboard.mk b/ports/nrf/boards/pca10056/mpconfigboard.mk
index 49df644b2..857805727 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard.mk
+++ b/ports/nrf/boards/pca10056/mpconfigboard.mk
@@ -1,7 +1,7 @@
MCU_SERIES = m4
MCU_VARIANT = nrf52
MCU_SUB_VARIANT = nrf52840
-SOFTDEV_VERSION ?= 6.0.0-6.alpha
+SOFTDEV_VERSION ?= 6.0.0
LD_FILE = boards/nrf52840_1M_256k.ld
diff --git a/ports/nrf/boards/pca10056/mpconfigboard_s140.mk b/ports/nrf/boards/pca10056/mpconfigboard_s140.mk
index fbff1f6d8..a9d0c0ae8 100644
--- a/ports/nrf/boards/pca10056/mpconfigboard_s140.mk
+++ b/ports/nrf/boards/pca10056/mpconfigboard_s140.mk
@@ -1,7 +1,7 @@
MCU_SERIES = m4
MCU_VARIANT = nrf52
MCU_SUB_VARIANT = nrf52840
-SOFTDEV_VERSION ?= 6.0.0-6.alpha
+SOFTDEV_VERSION ?= 6.0.0
LD_FILE = boards/nrf52840_1M_256k_s140_$(SOFTDEV_VERSION).ld
diff --git a/ports/nrf/drivers/bluetooth/ble_drv.c b/ports/nrf/drivers/bluetooth/ble_drv.c
index e0a7950a0..a7708fc87 100644
--- a/ports/nrf/drivers/bluetooth/ble_drv.c
+++ b/ports/nrf/drivers/bluetooth/ble_drv.c
@@ -60,6 +60,10 @@
#define BLE_SLAVE_LATENCY 0
#define BLE_CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS)
+#ifndef BLE_GAP_ADV_MAX_SIZE
+#define BLE_GAP_ADV_MAX_SIZE 31
+#endif
+
#define SD_TEST_OR_ENABLE() \
if (ble_drv_stack_enabled() == 0) { \
(void)ble_drv_stack_enable(); \
@@ -90,6 +94,17 @@ static mp_obj_t mp_gattc_disc_service_observer;
static mp_obj_t mp_gattc_disc_char_observer;
static mp_obj_t mp_gattc_char_data_observer;
+#if (BLUETOOTH_SD == 140)
+static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
+static uint8_t m_scan_buffer_data[BLE_GAP_SCAN_BUFFER_MIN];
+
+static ble_data_t m_scan_buffer =
+{
+ m_scan_buffer_data,
+ BLE_GAP_SCAN_BUFFER_MIN
+};
+#endif
+
#include "nrf_nvic.h"
nrf_nvic_state_t nrf_nvic_state = {0};
@@ -133,7 +148,7 @@ uint32_t ble_drv_stack_enable(void) {
err_code = sd_nvic_EnableIRQ(SWI2_EGU2_IRQn);
BLE_DRIVER_LOG("IRQ enable status: " UINT_FMT "\n", (uint16_t)err_code);
-
+
// Enable BLE stack.
#if (BLE_API_VERSION == 2)
ble_enable_params_t ble_enable_params;
@@ -359,12 +374,7 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
SD_TEST_OR_ENABLE();
uint8_t byte_pos = 0;
-
-#if (BLUETOOTH_SD == 140)
- uint8_t adv_data[BLE_GAP_ADV_SR_MAX_LEN_DEFAULT];
-#else
uint8_t adv_data[BLE_GAP_ADV_MAX_SIZE];
-#endif
if (p_adv_params->device_name_len > 0) {
ble_gap_conn_sec_mode_t sec_mode;
@@ -518,11 +528,7 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
}
if ((p_adv_params->data_len > 0) && (p_adv_params->p_data != NULL)) {
-#if (BLUETOOTH_SD == 140)
- if (p_adv_params->data_len + byte_pos > BLE_GAP_ADV_SR_MAX_LEN_DEFAULT) {
-#else
if (p_adv_params->data_len + byte_pos > BLE_GAP_ADV_MAX_SIZE) {
-#endif
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
"Can not fit data into the advertisment packet."));
}
@@ -533,20 +539,14 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
// scan response data not set
uint32_t err_code;
-#if (BLUETOOTH_SD == 140)
- const ble_data_t ble_adv_data = {
- .p_data = adv_data,
- .len = byte_pos
- };
-
- if ((err_code = sd_ble_gap_adv_data_set(BLE_GAP_ADV_SET_HANDLE_DEFAULT, &ble_adv_data, NULL)) != 0) {
-#else
+#if (BLUETOOTH_SD == 132)
if ((err_code = sd_ble_gap_adv_data_set(adv_data, byte_pos, NULL, 0)) != 0) {
-#endif
+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
"Can not apply advertisment data. status: 0x" HEX2_FMT, (uint16_t)err_code));
}
BLE_DRIVER_LOG("Set Adv data size: " UINT_FMT "\n", byte_pos);
+#endif
static ble_gap_adv_params_t m_adv_params;
@@ -554,34 +554,44 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
memset(&m_adv_params, 0, sizeof(m_adv_params));
if (p_adv_params->connectable) {
#if (BLUETOOTH_SD == 140)
- m_adv_params.properties.connectable = 1;
- m_adv_params.properties.scannable = 1;
+ m_adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED;
#else
m_adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;
#endif
} else {
#if (BLUETOOTH_SD == 140)
- m_adv_params.properties.connectable = 0;
+ m_adv_params.properties.type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED;
#else
m_adv_params.type = BLE_GAP_ADV_TYPE_ADV_NONCONN_IND;
#endif
}
m_adv_params.p_peer_addr = NULL; // undirected advertisement
- m_adv_params.fp = BLE_GAP_ADV_FP_ANY;
m_adv_params.interval = MSEC_TO_UNITS(100, UNIT_0_625_MS); // approx 8 ms
#if (BLUETOOTH_SD == 140)
- m_adv_params.duration = 0; // infinite advertisment
- m_adv_params.properties.legacy_pdu = 1;
+ m_adv_params.duration = BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED;
+ m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY;
m_adv_params.primary_phy = BLE_GAP_PHY_1MBPS;
#else
+ m_adv_params.fp = BLE_GAP_ADV_FP_ANY;
m_adv_params.timeout = 0; // infinite advertisment
#endif
ble_drv_advertise_stop();
#if (BLUETOOTH_SD == 140)
- err_code = sd_ble_gap_adv_start(BLE_GAP_ADV_SET_HANDLE_DEFAULT, &m_adv_params, BLE_CONN_CFG_TAG_DEFAULT);
+ const ble_gap_adv_data_t ble_gap_adv_data = {
+ .adv_data = {
+ .p_data = adv_data,
+ .len = byte_pos
+ }
+ };
+
+ if ((err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &ble_gap_adv_data, &m_adv_params)) != 0) {
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
+ "Can not apply advertisment data. status: 0x" HEX2_FMT, (uint16_t)err_code));
+ }
+ err_code = sd_ble_gap_adv_start(m_adv_handle, BLE_CONN_CFG_TAG_DEFAULT);
#elif (BLUETOOTH_SD == 132 && BLE_API_VERSION == 4)
err_code = sd_ble_gap_adv_start(&m_adv_params, BLE_CONN_CFG_TAG_DEFAULT);
#else
@@ -601,7 +611,7 @@ void ble_drv_advertise_stop(void) {
if (m_adv_in_progress == true) {
uint32_t err_code;
#if (BLUETOOTH_SD == 140)
- if ((err_code = sd_ble_gap_adv_stop(BLE_GAP_ADV_SET_HANDLE_DEFAULT)) != 0) {
+ if ((err_code = sd_ble_gap_adv_stop(m_adv_handle)) != 0) {
#else
if ((err_code = sd_ble_gap_adv_stop()) != 0) {
#endif
@@ -738,7 +748,6 @@ void ble_drv_attr_c_write(uint16_t conn_handle, uint16_t handle, uint16_t len, u
;
}
}
-
void ble_drv_scan_start(void) {
SD_TEST_OR_ENABLE();
@@ -749,16 +758,16 @@ void ble_drv_scan_start(void) {
scan_params.interval = MSEC_TO_UNITS(100, UNIT_0_625_MS);
scan_params.window = MSEC_TO_UNITS(100, UNIT_0_625_MS);
#if (BLUETOOTH_SD == 140)
- scan_params.filter_policy = BLE_GAP_SCAN_FP_ACCEPT_ALL;
- scan_params.filter_duplicates = BLE_GAP_SCAN_DUPLICATES_SUPPRESS;
- scan_params.scan_phy = BLE_GAP_PHY_1MBPS;
- scan_params.duration = 0; // Infinite
-#else
- scan_params.timeout = 0; // Infinite
+ scan_params.scan_phys = BLE_GAP_PHY_1MBPS;
#endif
+ scan_params.timeout = 0; // Infinite
uint32_t err_code;
+#if (BLUETOOTH_SD == 140)
+ if ((err_code = sd_ble_gap_scan_start(&scan_params, &m_scan_buffer)) != 0) {
+#else
if ((err_code = sd_ble_gap_scan_start(&scan_params)) != 0) {
+#endif
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
"Can not start scanning. status: 0x" HEX2_FMT, (uint16_t)err_code));
}
@@ -775,11 +784,7 @@ void ble_drv_connect(uint8_t * p_addr, uint8_t addr_type) {
scan_params.active = 1;
scan_params.interval = MSEC_TO_UNITS(100, UNIT_0_625_MS);
scan_params.window = MSEC_TO_UNITS(100, UNIT_0_625_MS);
-#if (BLUETOOTH_SD == 140)
- scan_params.duration = 0; // Infinite
-#else
scan_params.timeout = 0; // Infinite
-#endif
ble_gap_addr_t addr;
memset(&addr, 0, sizeof(addr));
@@ -962,8 +967,13 @@ static void ble_evt_handler(ble_evt_t * p_ble_evt) {
.is_scan_resp = p_ble_evt->evt.gap_evt.params.adv_report.scan_rsp,
#endif
.rssi = p_ble_evt->evt.gap_evt.params.adv_report.rssi,
+#if (BLUETOOTH_SD == 140)
+ .data_len = p_ble_evt->evt.gap_evt.params.adv_report.data.len,
+ .p_data = p_ble_evt->evt.gap_evt.params.adv_report.data.p_data,
+#else
.data_len = p_ble_evt->evt.gap_evt.params.adv_report.dlen,
.p_data = p_ble_evt->evt.gap_evt.params.adv_report.data,
+#endif
#if (BLUETOOTH_SD == 132)
.adv_type = p_ble_evt->evt.gap_evt.params.adv_report.type
#endif
diff --git a/ports/nrf/drivers/bluetooth/bluetooth_common.mk b/ports/nrf/drivers/bluetooth/bluetooth_common.mk
index d52aaccfd..81e50e333 100644
--- a/ports/nrf/drivers/bluetooth/bluetooth_common.mk
+++ b/ports/nrf/drivers/bluetooth/bluetooth_common.mk
@@ -1,5 +1,4 @@
ifeq ($(SD), s132)
- SOFTDEV_VERSION_LONG = $(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)
CFLAGS += -DBLUETOOTH_SD=132
ifeq ($(SOFTDEV_VERSION), 2.0.1)
@@ -8,8 +7,6 @@ else ifeq ($(SOFTDEV_VERSION), 5.0.0)
CFLAGS += -DBLE_API_VERSION=4
endif
else ifeq ($(SD), s140)
- SOFTDEV_VERSION_LONG = $(SD)_$(MCU_SUB_VARIANT)_$(SOFTDEV_VERSION)
-
CFLAGS += -DBLUETOOTH_SD=140
CFLAGS += -DBLE_API_VERSION=4
else
@@ -18,10 +15,10 @@ endif
CFLAGS += -DBLUETOOTH_SD_DEBUG=1
-INC += -Idrivers/bluetooth/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)/$(SOFTDEV_VERSION_LONG)_API/include
-INC += -Idrivers/bluetooth/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)/$(SOFTDEV_VERSION_LONG)_API/include/$(MCU_VARIANT)
+INC += -Idrivers/bluetooth/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)_API/include
+INC += -Idrivers/bluetooth/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)_API/include/$(MCU_VARIANT)
-SOFTDEV_HEX_NAME = $(SOFTDEV_VERSION_LONG)_softdevice.hex
+SOFTDEV_HEX_NAME = $(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)_softdevice.hex
SOFTDEV_HEX_PATH = drivers/bluetooth/$(SD)_$(MCU_VARIANT)_$(SOFTDEV_VERSION)
SOFTDEV_HEX = $(SOFTDEV_HEX_PATH)/$(SOFTDEV_HEX_NAME)
diff --git a/ports/nrf/drivers/bluetooth/download_ble_stack.sh b/ports/nrf/drivers/bluetooth/download_ble_stack.sh
index 87f54318c..52bd4b22d 100755
--- a/ports/nrf/drivers/bluetooth/download_ble_stack.sh
+++ b/ports/nrf/drivers/bluetooth/download_ble_stack.sh
@@ -35,18 +35,18 @@ function download_s132_nrf52_5_0_0
cd -
}
-function download_s140_nrf52_6_0_0_6_alpha
+function download_s140_nrf52_6_0_0
{
echo ""
- echo "############################################"
- echo "### Downloading s140_nrf52_6.0.0-6.alpha ###"
- echo "############################################"
+ echo "####################################"
+ echo "### Downloading s140_nrf52_6.0.0 ###"
+ echo "####################################"
echo ""
- mkdir -p "${1}/s140_nrf52_6.0.0-6.alpha"
- cd "${1}/s140_nrf52_6.0.0-6.alpha"
+ mkdir -p "${1}/s140_nrf52_6.0.0"
+ cd "${1}/s140_nrf52_6.0.0"
- wget http://www.nordicsemi.com/eng/nordic/download_resource/60624/18/61756799/116072
+ wget https://www.nordicsemi.com/eng/nordic/download_resource/60624/20/49271410/116072
mv 116072 temp.zip
unzip -u temp.zip
rm temp.zip
@@ -59,15 +59,15 @@ if [ $# -eq 0 ]; then
echo "No Bluetooth LE stack defined, downloading all."
download_s132_nrf52_2_0_1 "${SCRIPT_DIR}"
download_s132_nrf52_5_0_0 "${SCRIPT_DIR}"
- download_s140_nrf52_6_0_0_6_alpha "${SCRIPT_DIR}"
+ download_s140_nrf52_6_0_0 "${SCRIPT_DIR}"
else
case $1 in
"s132_nrf52_2_0_1" )
download_s132_nrf52_2_0_1 "${SCRIPT_DIR}" ;;
"s132_nrf52_5_0_0" )
download_s132_nrf52_5_0_0 "${SCRIPT_DIR}" ;;
- "s140_nrf52_6_0_0_6_alpha" )
- download_s140_nrf52_6_0_0_6_alpha "${SCRIPT_DIR}" ;;
+ "s140_nrf52_6_0_0" )
+ download_s140_nrf52_6_0_0 "${SCRIPT_DIR}" ;;
esac
fi