clean up
This commit is contained in:
parent
ab8d24f935
commit
e585ffc26c
@ -387,6 +387,16 @@ void bootloader_app_start(uint32_t app_addr)
|
|||||||
|
|
||||||
interrupts_disable();
|
interrupts_disable();
|
||||||
|
|
||||||
|
#if 0 // may need set forward irq
|
||||||
|
sd_mbr_command_t command =
|
||||||
|
{
|
||||||
|
.command = SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET,
|
||||||
|
.params.irq_forward_address_set.address = MBR_SIZE,
|
||||||
|
};
|
||||||
|
|
||||||
|
sd_mbr_command(&command);
|
||||||
|
#endif
|
||||||
|
|
||||||
APP_ERROR_CHECK( sd_softdevice_vector_table_base_set(CODE_REGION_1_START) );
|
APP_ERROR_CHECK( sd_softdevice_vector_table_base_set(CODE_REGION_1_START) );
|
||||||
|
|
||||||
bootloader_util_app_start(CODE_REGION_1_START);
|
bootloader_util_app_start(CODE_REGION_1_START);
|
||||||
|
@ -704,8 +704,7 @@ static void advertising_start(void)
|
|||||||
APP_ERROR_CHECK( sd_ble_gap_adv_set_configure(&_adv_handle, &gap_adv, &m_adv_params) );
|
APP_ERROR_CHECK( sd_ble_gap_adv_set_configure(&_adv_handle, &gap_adv, &m_adv_params) );
|
||||||
// maximum power for nrf52832, nrf52840 max power is +8
|
// maximum power for nrf52832, nrf52840 max power is +8
|
||||||
APP_ERROR_CHECK( sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, _adv_handle, 4) );
|
APP_ERROR_CHECK( sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, _adv_handle, 4) );
|
||||||
// APP_ERROR_CHECK( sd_ble_gap_adv_start(_adv_handle, BLE_CONN_CFG_HIGH_BANDWIDTH) );
|
APP_ERROR_CHECK( sd_ble_gap_adv_start(_adv_handle, BLE_CONN_CFG_HIGH_BANDWIDTH) );
|
||||||
APP_ERROR_CHECK( sd_ble_gap_adv_start(_adv_handle, BLE_CONN_CFG_TAG_DEFAULT) );
|
|
||||||
|
|
||||||
m_is_advertising = true;
|
m_is_advertising = true;
|
||||||
}
|
}
|
||||||
|
43
src/main.c
43
src/main.c
@ -33,6 +33,7 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "nrfx.h"
|
#include "nrfx.h"
|
||||||
|
#include "nrf_clock.h"
|
||||||
#include "nrfx_power.h"
|
#include "nrfx_power.h"
|
||||||
#include "nrfx_pwm.h"
|
#include "nrfx_pwm.h"
|
||||||
|
|
||||||
@ -84,19 +85,21 @@ void usb_teardown(void);
|
|||||||
* - Fatal Error : LED Status & Conn blink one after another
|
* - Fatal Error : LED Status & Conn blink one after another
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define BOOTLOADER_VERSION_REGISTER NRF_TIMER2->CC[0]
|
|
||||||
#define BOOTLOADER_STARTUP_DFU_INTERVAL 1000
|
|
||||||
|
|
||||||
/* Magic that written to NRF_POWER->GPREGRET by application when it wish to go into DFU
|
/* Magic that written to NRF_POWER->GPREGRET by application when it wish to go into DFU
|
||||||
* - BOOTLOADER_DFU_OTA_MAGIC used by BLEDfu service : SD is already init
|
* - BOOTLOADER_DFU_OTA_MAGIC used by BLEDfu service : SD is already init
|
||||||
* - BOOTLOADER_DFU_OTA_FULLRESET_MAGIC entered by soft reset : SD is not init
|
* - BOOTLOADER_DFU_OTA_FULLRESET_MAGIC entered by soft reset : SD is not init
|
||||||
* - BOOTLOADER_DFU_SERIAL_MAGIC entered by soft reset : SD is not init
|
* - BOOTLOADER_DFU_SERIAL_MAGIC entered by soft reset : SD is not init
|
||||||
*
|
*
|
||||||
* Note: for BOOTLOADER_DFU_OTA_MAGIC Softdevice should not initialized. In other case SD must be initialized
|
* Note: for DFU_MAGIC_OTA_APPJUM Softdevice must not initialized.
|
||||||
|
* since it is already in application. In all other case of OTA SD must be initialized
|
||||||
*/
|
*/
|
||||||
#define BOOTLOADER_DFU_OTA_MAGIC BOOTLOADER_DFU_START // 0xB1
|
#define DFU_MAGIC_OTA_APPJUM BOOTLOADER_DFU_START // 0xB1
|
||||||
#define BOOTLOADER_DFU_OTA_FULLRESET_MAGIC 0xA8
|
#define DFU_MAGIC_OTA_RESET 0xA8
|
||||||
#define BOOTLOADER_DFU_SERIAL_MAGIC 0x4e
|
#define DFU_MAGIC_SERIAL_ONLY_RESET 0x4e
|
||||||
|
#define DFU_MAGIC_UF2_SERIAL_RESET 0x57
|
||||||
|
|
||||||
|
#define BOOTLOADER_VERSION_REGISTER NRF_TIMER2->CC[0]
|
||||||
|
#define DFU_SERIAL_STARTUP_INTERVAL 1000
|
||||||
|
|
||||||
// Helper function
|
// Helper function
|
||||||
#define memclr(buffer, size) memset(buffer, 0, size)
|
#define memclr(buffer, size) memset(buffer, 0, size)
|
||||||
@ -123,12 +126,12 @@ STATIC_ASSERT( APPDATA_ADDR_START == 0x6D000);
|
|||||||
void adafruit_factory_reset(void);
|
void adafruit_factory_reset(void);
|
||||||
|
|
||||||
// true if ble, false if serial
|
// true if ble, false if serial
|
||||||
bool _ota_update = false;
|
bool _ota_dfu = false;
|
||||||
bool _ota_connected = false;
|
bool _ota_connected = false;
|
||||||
|
|
||||||
bool is_ota(void)
|
bool is_ota(void)
|
||||||
{
|
{
|
||||||
return _ota_update;
|
return _ota_dfu;
|
||||||
}
|
}
|
||||||
|
|
||||||
void softdev_mbr_init(void)
|
void softdev_mbr_init(void)
|
||||||
@ -173,7 +176,6 @@ static uint32_t softdev_init(bool init_softdevice)
|
|||||||
extern uint32_t __data_start__[]; // defined in linker
|
extern uint32_t __data_start__[]; // defined in linker
|
||||||
uint32_t ram_start = (uint32_t) __data_start__;
|
uint32_t ram_start = (uint32_t) __data_start__;
|
||||||
|
|
||||||
#if 0
|
|
||||||
ble_cfg_t blecfg;
|
ble_cfg_t blecfg;
|
||||||
|
|
||||||
// Configure the maximum number of connections.
|
// Configure the maximum number of connections.
|
||||||
@ -201,7 +203,6 @@ static uint32_t softdev_init(bool init_softdevice)
|
|||||||
blecfg.conn_cfg.params.gap_conn_cfg.conn_count = 1;
|
blecfg.conn_cfg.params.gap_conn_cfg.conn_count = 1;
|
||||||
blecfg.conn_cfg.params.gap_conn_cfg.event_length = BLEGAP_EVENT_LENGTH;
|
blecfg.conn_cfg.params.gap_conn_cfg.event_length = BLEGAP_EVENT_LENGTH;
|
||||||
APP_ERROR_CHECK( sd_ble_cfg_set(BLE_CONN_CFG_GAP, &blecfg, ram_start) );
|
APP_ERROR_CHECK( sd_ble_cfg_set(BLE_CONN_CFG_GAP, &blecfg, ram_start) );
|
||||||
#endif
|
|
||||||
|
|
||||||
// Enable BLE stack.
|
// Enable BLE stack.
|
||||||
// Note: Interrupt state (enabled, forwarding) is not work properly if not enable ble
|
// Note: Interrupt state (enabled, forwarding) is not work properly if not enable ble
|
||||||
@ -220,16 +221,16 @@ static uint32_t softdev_init(bool init_softdevice)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
// SD is already Initialized in case of BOOTLOADER_DFU_OTA_MAGIC
|
// SD is already Initialized in case of BOOTLOADER_DFU_OTA_MAGIC
|
||||||
bool sd_inited = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC);
|
bool sd_inited = (NRF_POWER->GPREGRET == DFU_MAGIC_OTA_APPJUM);
|
||||||
|
|
||||||
// Start Bootloader in BLE OTA mode
|
// Start Bootloader in BLE OTA mode
|
||||||
_ota_update = (NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_MAGIC) ||
|
_ota_dfu = (NRF_POWER->GPREGRET == DFU_MAGIC_OTA_APPJUM) ||
|
||||||
(NRF_POWER->GPREGRET == BOOTLOADER_DFU_OTA_FULLRESET_MAGIC);
|
(NRF_POWER->GPREGRET == DFU_MAGIC_OTA_RESET);
|
||||||
|
|
||||||
_ota_update = 1; // force OTA for testing
|
//
|
||||||
|
|
||||||
// start bootloader either serial or ble
|
// start bootloader either serial or ble
|
||||||
bool dfu_start = _ota_update || (NRF_POWER->GPREGRET == BOOTLOADER_DFU_SERIAL_MAGIC);
|
bool dfu_start = _ota_dfu || (NRF_POWER->GPREGRET == DFU_MAGIC_SERIAL_ONLY_RESET);
|
||||||
|
|
||||||
// Clear GPREGRET if it is our values
|
// Clear GPREGRET if it is our values
|
||||||
if (dfu_start) NRF_POWER->GPREGRET = 0;
|
if (dfu_start) NRF_POWER->GPREGRET = 0;
|
||||||
@ -255,11 +256,11 @@ int main(void)
|
|||||||
dfu_start = dfu_start || button_pressed(BUTTON_DFU);
|
dfu_start = dfu_start || button_pressed(BUTTON_DFU);
|
||||||
|
|
||||||
// DFU + FRESET are pressed --> OTA
|
// DFU + FRESET are pressed --> OTA
|
||||||
_ota_update = _ota_update || ( button_pressed(BUTTON_DFU) && button_pressed(BUTTON_FRESET) ) ;
|
_ota_dfu = _ota_dfu || ( button_pressed(BUTTON_DFU) && button_pressed(BUTTON_FRESET) ) ;
|
||||||
|
|
||||||
if ( dfu_start || !bootloader_app_is_valid(DFU_BANK_0_REGION_START) )
|
if ( dfu_start || !bootloader_app_is_valid(DFU_BANK_0_REGION_START) )
|
||||||
{
|
{
|
||||||
if ( _ota_update )
|
if ( _ota_dfu )
|
||||||
{
|
{
|
||||||
// Enable BLE if in OTA
|
// Enable BLE if in OTA
|
||||||
led_pwm_init(NRF_PWM1, LED_BLUE);
|
led_pwm_init(NRF_PWM1, LED_BLUE);
|
||||||
@ -274,9 +275,9 @@ int main(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initiate an update of the firmware.
|
// Initiate an update of the firmware.
|
||||||
APP_ERROR_CHECK( bootloader_dfu_start(_ota_update, 0) );
|
APP_ERROR_CHECK( bootloader_dfu_start(_ota_dfu, 0) );
|
||||||
|
|
||||||
if ( _ota_update )
|
if ( _ota_dfu )
|
||||||
{
|
{
|
||||||
led_pwm_teardown(NRF_PWM1);
|
led_pwm_teardown(NRF_PWM1);
|
||||||
led_off(LED_BLUE);
|
led_off(LED_BLUE);
|
||||||
@ -293,7 +294,7 @@ int main(void)
|
|||||||
/* Adafruit Modification
|
/* Adafruit Modification
|
||||||
* Even DFU is not active, we still force an 1000 ms dfu serial mode when startup
|
* Even DFU is not active, we still force an 1000 ms dfu serial mode when startup
|
||||||
* to support auto programming from Arduino IDE */
|
* to support auto programming from Arduino IDE */
|
||||||
bootloader_dfu_start(false, BOOTLOADER_STARTUP_DFU_INTERVAL);
|
bootloader_dfu_start(false, DFU_SERIAL_STARTUP_INTERVAL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user