remove dependency on legacy softdevice_handler
add ble and soc task hanlder to main.c
This commit is contained in:
120
src/main.c
120
src/main.c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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">
|
||||
|
Reference in New Issue
Block a user