remove dependency on legacy softdevice_handler

add ble and soc task hanlder to main.c
This commit is contained in:
hathach
2018-04-03 23:53:38 +07:00
parent bf787c7364
commit b8bf0c9eae
11 changed files with 92 additions and 1125 deletions

View File

@ -40,6 +40,7 @@
#include "nrf.h"
#include "nrf_soc.h"
#include "nrf_nvic.h"
#include "app_error.h"
#include "nrf_gpio.h"
#include "ble.h"
@ -50,12 +51,6 @@
#include "nrf_error.h"
#include "boards.h"
#include "softdevice_handler_appsh.h"
//#include "nrf_sdh.h"
//#include "nrf_sdh_ble.h"
//#include "nrf_sdh_soc.h"
#include "pstorage_platform.h"
#include "nrf_mbr.h"
//#include "nrf_log.h"
@ -222,19 +217,10 @@ void blinky_ota_disconneted(void)
isOTAConnected = false;
}
/**@brief Function for dispatching a BLE stack event to all modules with a BLE stack event handler.
*
* @details This function is called from the scheduler in the main loop after a BLE stack
* event has been received.
*
* @param[in] p_ble_evt Bluetooth stack event.
*/
static void sys_evt_dispatch(uint32_t event)
static void nrf_error_cb(uint32_t id, uint32_t pc, uint32_t info)
{
pstorage_sys_event_handler(event);
}
}
/**@brief Function for initializing the BLE stack.
*
@ -247,7 +233,18 @@ static void sys_evt_dispatch(uint32_t event)
static uint32_t ble_stack_init(bool init_softdevice)
{
uint32_t err_code;
nrf_clock_lf_cfg_t clock_lf_cfg =
if (init_softdevice)
{
sd_mbr_command_t com = { .command = SD_MBR_COMMAND_INIT_SD };
err_code = sd_mbr_command(&com);
APP_ERROR_CHECK(err_code);
}
err_code = sd_softdevice_vector_table_base_set(BOOTLOADER_REGION_START);
APP_ERROR_CHECK(err_code);
// Enable Softdevice
nrf_clock_lf_cfg_t clock_cfg =
{
#if 0
.source = NRF_CLOCK_LF_SRC_RC,
@ -262,18 +259,9 @@ static uint32_t ble_stack_init(bool init_softdevice)
#endif
};
if (init_softdevice)
{
sd_mbr_command_t com = { .command = SD_MBR_COMMAND_INIT_SD };
err_code = sd_mbr_command(&com);
APP_ERROR_CHECK(err_code);
}
err_code = sd_softdevice_vector_table_base_set(BOOTLOADER_REGION_START);
APP_ERROR_CHECK(err_code);
// equivalent to nrf_sdh_enable_request()
SOFTDEVICE_HANDLER_APPSH_INIT(&clock_lf_cfg, true);
APP_ERROR_CHECK( sd_softdevice_enable(&clock_cfg, nrf_error_cb) );
sd_nvic_EnableIRQ(SD_EVT_IRQn);
/*------------- Configure BLE params -------------*/
extern uint32_t __data_start__[]; // defined in linker
@ -313,9 +301,6 @@ static uint32_t ble_stack_init(bool init_softdevice)
err_code = sd_ble_enable(&ram_start);
VERIFY_SUCCESS(err_code);
err_code = softdevice_sys_evt_handler_set(sys_evt_dispatch);
VERIFY_SUCCESS(err_code);
return err_code;
}
@ -411,6 +396,8 @@ int main(void)
// DFU + FRESET are pressed --> OTA
_ota_update = _ota_update || ( button_pressed(BOOTLOADER_BUTTON) && button_pressed(FRESET_BUTTON) ) ;
_ota_update = 1;
#ifdef BOARD_METRO52
led_pin_init(LED_BLUE);
@ -560,3 +547,72 @@ uint32_t tusb_hal_millis(void)
{
return ( ( ((uint64_t)app_timer_cnt_get())*1000*(APP_TIMER_CONFIG_RTC_FREQUENCY+1)) / APP_TIMER_CLOCK_FREQ );
}
/*------------------------------------------------------------------*/
/* SoftDevice Event handler
*------------------------------------------------------------------*/
void ada_ble_task(void* evt_data, uint16_t evt_size);
void ada_soc_task(void* evt_data, uint16_t evt_size);
void SD_EVT_IRQHandler(void)
{
// Use App Scheduler to defer handling code in non-isr context
app_sched_event_put(NULL, 0, ada_ble_task);
app_sched_event_put(NULL, 0, ada_soc_task);
}
void ada_ble_hanlder(ble_evt_t* evt)
{
// from dfu_transport_ble
extern void ble_evt_dispatch(ble_evt_t * p_ble_evt);
ble_evt_dispatch(evt);
}
void ada_ble_task(void* evt_data, uint16_t evt_size)
{
(void) evt_data;
(void) evt_size;
// TODO Should check alignment 4
__ALIGN(4) uint8_t ev_buf[ BLE_EVT_LEN_MAX(BLEGATT_ATT_MTU_MAX) ];
uint32_t err = NRF_SUCCESS;
// Until no pending events
while( NRF_ERROR_NOT_FOUND != err )
{
uint16_t ev_len = BLE_EVT_LEN_MAX(BLEGATT_ATT_MTU_MAX);
// Get BLE Event
err = sd_ble_evt_get(ev_buf, &ev_len);
// Handle valid event, ignore error
if( NRF_SUCCESS == err)
{
ada_ble_hanlder( (ble_evt_t*) ev_buf );
}
}
}
void ada_soc_task(void* evt_data, uint16_t evt_size)
{
(void) evt_data;
(void) evt_size;
uint32_t soc_evt;
uint32_t err = NRF_SUCCESS;
// until no more pending events
while ( NRF_ERROR_NOT_FOUND != err )
{
err = sd_evt_get(&soc_evt);
if (NRF_SUCCESS == err)
{
// Flash is the only soc event
pstorage_sys_event_handler(soc_evt);
}
}
}

View File

@ -114,9 +114,6 @@ C_SOURCE_FILES += $(SDK_PATH)/ble/ble_services/ble_dis/ble_dis.c
C_SOURCE_FILES += $(SDK_PATH)/drivers_nrf/pstorage/pstorage_raw.c
C_SOURCE_FILES += $(SDK_PATH)/toolchain/system_nrf52840.c
C_SOURCE_FILES += $(SD_PATH)/common/softdevice_handler/softdevice_handler.c
C_SOURCE_FILES += $(SD_PATH)/common/softdevice_handler/softdevice_handler_appsh.c
#C_SOURCE_FILES += $(SRC_PATH)/tusb_descriptors.c
#C_SOURCE_FILES += $(TUSB_PATH)/portable/nordic/nrf5x/dcd_nrf5x.c
@ -157,7 +154,6 @@ INC_PATHS += -I$(SDK_PATH)/drivers_nrf/power
INC_PATHS += -I$(SDK_PATH)/drivers_nrf/usbd
INC_PATHS += -I$(SD_PATH)/common
INC_PATHS += -I$(SD_PATH)/common/softdevice_handler/
INC_PATHS += -I$(SD_PATH)/$(SD_NAME)/headers
INC_PATHS += -I$(SD_PATH)/$(SD_NAME)/headers/nrf52

View File

@ -19,7 +19,7 @@
arm_target_device_name="nRF52840_xxAA"
arm_target_interface_type="SWD"
c_preprocessor_definitions="NRF52840_XXAA;__nRF_FAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;NO_VTOR_CONFIG;BOARD_FEATHER52840;BOOTLOADER_VERSION=0x06000001;S140;CONFIG_GPIO_AS_PINRESET;BLE_STACK_SUPPORT_REQD;SWI_DISABLE0;SOFTDEVICE_PRESENT;FLOAT_ABI_HARD;DFU_APP_DATA_RESERVED=7*4096"
c_user_include_directories="$(TusbDir)/hw/cmsis/Include;$(TusbDir)/hw;$(TusbDir)/tinyusb;$(SdkDir);$(SdkDir)/device;$(SdkDir)/toolchain;$(SdkDir)/drivers_nrf/hal;$(SdkDir)/drivers_nrf/systick;$(SdkDir)/drivers_nrf/uart;$(SdkDir)/drivers_nrf/usbd;$(SdkDir)/drivers_nrf/common;$(SdkDir)/drivers_nrf/delay;$(SdkDir)/drivers_nrf/power;$(SdkDir)/drivers_nrf/clock;$(SdkDir)/drivers_nrf/pstorage;$(SdkDir)/external/fprintf;$(SdkDir)/libraries/util;$(SdkDir)/libraries/strerror;$(SdkDir)/libraries/atomic;$(SdkDir)/libraries/balloc;$(SdkDir)/libraries/experimental_log/src;$(SdkDir)/libraries/experimental_log;$(SdkDir)/libraries/experimental_section_vars;$(SdkDir)/libraries/experimental_memobj;$(SdkDir)/libraries/timer;$(SdkDir)/libraries/scheduler;$(SdkDir)/libraries/crc16;$(SdkDir)/libraries/util;$(SdkDir)/libraries/hci/config;$(SdkDir)/libraries/uart;$(SdkDir)/libraries/hci;$(SdkDir)/libraries/bootloader_dfu;$(SdkDir)/libraries/bootloader_dfu/hci_transport;$(SdkDir)/ble/common/;$(SdkDir)/ble/ble_services/ble_dfu;$(SdkDir)/ble/ble_services/ble_dis;$(SdDir)/s140/headers;$(SdDir)/s140/headers/nrf52;$(SdDir)/common/softdevice_handler;../"
c_user_include_directories="$(TusbDir)/hw/cmsis/Include;$(TusbDir)/hw;$(TusbDir)/tinyusb;$(SdkDir);$(SdkDir)/device;$(SdkDir)/toolchain;$(SdkDir)/drivers_nrf/hal;$(SdkDir)/drivers_nrf/systick;$(SdkDir)/drivers_nrf/uart;$(SdkDir)/drivers_nrf/usbd;$(SdkDir)/drivers_nrf/common;$(SdkDir)/drivers_nrf/delay;$(SdkDir)/drivers_nrf/power;$(SdkDir)/drivers_nrf/clock;$(SdkDir)/drivers_nrf/pstorage;$(SdkDir)/external/fprintf;$(SdkDir)/libraries/util;$(SdkDir)/libraries/strerror;$(SdkDir)/libraries/atomic;$(SdkDir)/libraries/balloc;$(SdkDir)/libraries/experimental_log/src;$(SdkDir)/libraries/experimental_log;$(SdkDir)/libraries/experimental_section_vars;$(SdkDir)/libraries/experimental_memobj;$(SdkDir)/libraries/timer;$(SdkDir)/libraries/scheduler;$(SdkDir)/libraries/crc16;$(SdkDir)/libraries/util;$(SdkDir)/libraries/hci/config;$(SdkDir)/libraries/uart;$(SdkDir)/libraries/hci;$(SdkDir)/libraries/bootloader_dfu;$(SdkDir)/libraries/bootloader_dfu/hci_transport;$(SdkDir)/ble/common/;$(SdkDir)/ble/ble_services/ble_dfu;$(SdkDir)/ble/ble_services/ble_dis;$(SdDir)/s140/headers;$(SdDir)/s140/headers/nrf52;../"
debug_register_definition_file="$(ProjectDir)/nrf52840_Registers.xml"
debug_target_connection="J-Link"
gcc_entry_point="Reset_Handler"
@ -283,17 +283,7 @@
linker_section_placement_file="flash_placement.xml" />
<folder Name="softdevice">
<folder Name="6.0.0">
<folder Name="common">
<folder Name="softdevice_handler">
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/ant_stack_handler_types.h" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/app_ram_base.h" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/ble_stack_handler_types.h" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/softdevice_handler.c" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/softdevice_handler.h" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.c" />
<file file_name="../../softdevice/6.0.0/common/softdevice_handler/softdevice_handler_appsh.h" />
</folder>
</folder>
<folder Name="common" />
<folder Name="mbr">
<folder Name="nrf52840">
<folder Name="headers">