Initial commit: MT firmware project
- BLE peripheral applications - dr_piezo and bladder_patch projects Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
121
project/dfu/secure_bootloader/main.c
Normal file
121
project/dfu/secure_bootloader/main.c
Normal file
@@ -0,0 +1,121 @@
|
||||
/*******************************************************************************
|
||||
* @file main.c
|
||||
* @author CandyPops Co.
|
||||
* @version V1.0.0
|
||||
* @date 2022-09-05
|
||||
* @brief
|
||||
******************************************************************************/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "boards.h"
|
||||
#include "nrf_mbr.h"
|
||||
#include "nrf_bootloader.h"
|
||||
#include "nrf_bootloader_app_start.h"
|
||||
#include "nrf_bootloader_dfu_timers.h"
|
||||
#include "nrf_dfu.h"
|
||||
#include "nrf_log.h"
|
||||
#include "nrf_log_ctrl.h"
|
||||
#include "nrf_log_default_backends.h"
|
||||
#include "app_error.h"
|
||||
#include "app_error_weak.h"
|
||||
#include "nrf_bootloader_info.h"
|
||||
#include "nrf_delay.h"
|
||||
|
||||
#define POWER_HOLD NRF_GPIO_PIN_MAP(0,8) // power hold port for medithings device
|
||||
|
||||
static void on_error(void)
|
||||
{
|
||||
NRF_LOG_FINAL_FLUSH();
|
||||
|
||||
#if NRF_MODULE_ENABLED(NRF_LOG_BACKEND_RTT)
|
||||
// To allow the buffer to be flushed by the host.
|
||||
nrf_delay_ms(100);
|
||||
#endif
|
||||
#ifdef NRF_DFU_DEBUG_VERSION
|
||||
NRF_BREAKPOINT_COND;
|
||||
#endif
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
|
||||
void app_error_handler(uint32_t error_code, uint32_t line_num, const uint8_t * p_file_name)
|
||||
{
|
||||
NRF_LOG_ERROR("%s:%d", p_file_name, line_num);
|
||||
on_error();
|
||||
}
|
||||
|
||||
|
||||
void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info)
|
||||
{
|
||||
NRF_LOG_ERROR("Received a fault! id: 0x%08x, pc: 0x%08x, info: 0x%08x", id, pc, info);
|
||||
on_error();
|
||||
}
|
||||
|
||||
|
||||
void app_error_handler_bare(uint32_t error_code)
|
||||
{
|
||||
NRF_LOG_ERROR("Received an error: 0x%08x!", error_code);
|
||||
on_error();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Function notifies certain events in DFU process.
|
||||
*/
|
||||
static void dfu_observer(nrf_dfu_evt_type_t evt_type)
|
||||
{
|
||||
switch (evt_type)
|
||||
{
|
||||
case NRF_DFU_EVT_DFU_FAILED:
|
||||
case NRF_DFU_EVT_DFU_ABORTED:
|
||||
case NRF_DFU_EVT_DFU_INITIALIZED:
|
||||
bsp_board_init(BSP_INIT_LEDS);
|
||||
bsp_board_led_on(BSP_BOARD_LED_0);
|
||||
break;
|
||||
case NRF_DFU_EVT_TRANSPORT_ACTIVATED:
|
||||
bsp_board_led_on(BSP_BOARD_LED_0);
|
||||
break;
|
||||
case NRF_DFU_EVT_DFU_STARTED:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**@brief Function for application main entry. */
|
||||
int main(void)
|
||||
{
|
||||
uint32_t ret_val;
|
||||
|
||||
nrf_gpio_cfg_output(POWER_HOLD);
|
||||
nrf_gpio_pin_set(POWER_HOLD); // The medithings device performs power hold when the power button is pressed for 3 seconds.
|
||||
// And then, The medithings device loads the bootloader.
|
||||
|
||||
// Must happen before flash protection is applied, since it edits a protected page.
|
||||
nrf_bootloader_mbr_addrs_populate();
|
||||
|
||||
// Protect MBR and bootloader code from being overwritten.
|
||||
ret_val = nrf_bootloader_flash_protect(0, MBR_SIZE);
|
||||
APP_ERROR_CHECK(ret_val);
|
||||
ret_val = nrf_bootloader_flash_protect(BOOTLOADER_START_ADDR, BOOTLOADER_SIZE);
|
||||
APP_ERROR_CHECK(ret_val);
|
||||
|
||||
(void) NRF_LOG_INIT(nrf_bootloader_dfu_timer_counter_get);
|
||||
NRF_LOG_DEFAULT_BACKENDS_INIT();
|
||||
|
||||
NRF_LOG_INFO("Inside main");
|
||||
|
||||
ret_val = nrf_bootloader_init(dfu_observer);
|
||||
APP_ERROR_CHECK(ret_val);
|
||||
|
||||
NRF_LOG_FLUSH();
|
||||
|
||||
NRF_LOG_ERROR("After main, should never be reached.");
|
||||
NRF_LOG_FLUSH();
|
||||
|
||||
APP_ERROR_CHECK_BOOL(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
Reference in New Issue
Block a user