Wirepas SDK
bl_interface.h
Go to the documentation of this file.
1/* Copyright 2018 Wirepas Ltd. All Rights Reserved.
2 *
3 * See file LICENSE.txt for full license details.
4 *
5 */
6
13#ifndef BL_INTERFACE_H_
14#define BL_INTERFACE_H_
15
16#include <stdbool.h>
17#include <stdint.h>
18#include <stddef.h>
19
20#if defined(EFR32_PLATFORM)
21#include "em_cmu.h"
22#endif
23
36
38#define BL_MEMORY_AREA_UNDEFINED 0xFFFFFFFF
39
41typedef uint32_t bl_memory_area_id_t;
42
55
89
108
113typedef struct
114{
116 uint32_t length;
118 uint16_t crc;
121 uint8_t seq;
123 uint8_t major;
125 uint8_t minor;
127 uint8_t maint;
129 uint8_t devel;
131
142
165
184
195
197typedef struct
198{
200 uint32_t area_length;
202 uint32_t erase_time;
204 uint32_t length;
206 uint16_t crc;
210 uint8_t seq;
214 uint8_t flags;
216 uint32_t type;
218 uint32_t status;
231
232#if defined(NRF91_PLATFORM)
233typedef struct
234{
240 const char * at_commands;
241} bl_platform_nrf91_t;
242#elif defined(NRF54_PLATFORM)
244typedef struct
245{
252 const uint16_t hfxo_int_cap_ff;
253
260 const uint16_t lfxo_int_cap_ff;
261} bl_platform_nrf54_t;
262#elif defined(EFR32_PLATFORM)
264typedef struct
265{
269 const CMU_HFXOInit_TypeDef * hfxoInit;
273 const CMU_LFXOInit_TypeDef * lfxoInit;
274} bl_platform_efr32_t;
275#endif
276
278typedef union
279{
280#if defined(NRF52_PLATFORM)
284 const void * nrf52;
285#elif defined(NRF54_PLATFORM)
289 const bl_platform_nrf54_t * nrf54;
290#elif defined(NRF91_PLATFORM)
294 const bl_platform_nrf91_t * nrf91;
295#elif defined(EFR32_PLATFORM)
299 const bl_platform_efr32_t * efr32;
300#endif
302
319
334 void * to,
335 uint32_t from,
336 size_t amount);
337
353 bl_memory_area_id_t id, uint32_t to, const void * from, size_t amount);
354
370 bl_memory_area_id_t id, uint32_t * sector_base, size_t * number_of_sector);
371
379
391
401 uint8_t * num_areas);
402
416
430
438typedef uint8_t (*bl_memory_area_getMaxNumAreas_f)(void);
439
450 bl_scrat_valid_e * validity);
451
465 uint32_t from,
466 size_t amount);
467
473typedef bl_interface_res_e (*bl_scrat_clear_f)(void (*clear_wdt)(void));
474
485typedef bl_interface_res_e (*bl_scrat_begin_f)(uint32_t num_bytes,
486 uint8_t seq,
487 void (*clear_wdt)(void));
488
504 uint32_t to,
505 const void * from,
506 size_t amount,
507 bl_scrat_write_status_e * status);
508
518
526
527typedef bl_interface_res_e (*bl_scrat_setStatus_f)(uint32_t status);
528
534typedef const bl_hardware_capabilities_t * (*bl_hardware_getCapabilities_f)(
535 void);
536
537
550
562
567
579
580#endif /* BL_INTERFACE_H_ */
bl_interface_res_e(* bl_memory_area_getIdfromType_f)(bl_memory_area_id_t *id, bl_memory_area_type_e type)
Return the memory area id of the FIRST area with provided type.
uint32_t area_length
bl_memory_area_getAreaList_f getAreaList
uint32_t erase_time
void(* bl_memory_area_getAreaList_f)(bl_memory_area_id_t *list, uint8_t *num_areas)
Return the list of areas defined in the bootloader.
bl_memory_area_startWrite_f startWrite
const memory_area_services_t * memory_area_services_p
bl_interface_res_e(* bl_scrat_read_f)(void *to, uint32_t from, size_t amount)
Read bytes from a scratchpad file.
bl_flash_info_t flash
uint32_t is_busy_call_time
bl_memory_area_getAreaInfo_f getAreaInfo
bl_interface_res_e(* bl_scrat_clear_f)(void(*clear_wdt)(void))
Erase the scratchpad area.
bl_scrat_modem_file_type_e
@ BL_SCRAT_MODEM_FILE_TYPE_DELTA_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_FULL_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_INVALID
uint32_t modem_fw_length
bl_scrat_modem_file_type_e modem_fw_type
bl_hardware_getCapabilities_f getCapabilities
bl_memory_area_getAreaHeader_f getAreaHeader
bl_scrat_setBootable_f setBootable
bl_scrat_valid_e
Scratchpad validity.
@ BL_SCRAT_IS_UNKNOWN
@ BL_SCRAT_IS_INVALID_HEADER
@ BL_SCRAT_IS_VALID
@ BL_SCRAT_IS_NOTAG
@ BL_SCRAT_IS_INVALID
@ BL_SCRAT_IS_CLEAR
@ BL_SCRAT_IS_INVALID_CRC
uint32_t byte_write_time
bl_scrat_setStatus_f setStatus
bl_interface_res_e(* bl_memory_area_getAreaInfo_f)(bl_memory_area_id_t id, bl_memory_area_info_t *info)
Fills a structure with info about memory area.
const scratchpad_services_t * scratchpad_services_p
bl_memory_area_type_e type
bl_interface_res_e(* bl_scrat_setStatus_f)(uint32_t status)
bl_scrat_getValidity_f getValidity
uint8_t(* bl_memory_area_getMaxNumAreas_f)(void)
Return the total number of areas supported by the bootloader.
size_t write_page_size
const void * dflow_services_p
uint32_t modem_fw_data
bl_memory_area_id_t area_id
bl_memory_area_type_e
Types of Memory Areas.
@ BL_MEM_AREA_TYPE_APPLICATION
Application area.
@ BL_MEM_AREA_TYPE_BOOTLOADER
Bootloader area.
@ BL_MEM_AREA_TYPE_MODEMFW
Modem firmware area.
@ BL_MEM_AREA_TYPE_STACK
Stack area.
@ BL_MEM_AREA_TYPE_SCRATCHPAD
Dedicated scratchpad area.
@ BL_MEM_AREA_TYPE_MODEMDELTAFW
Modem delta firmware area.
@ BL_MEM_AREA_TYPE_USER
User defined area.
@ BL_MEM_AREA_TYPE_PERSISTENT
Persistent memory area.
bl_scrat_write_status_e
Scratchpad write status.
@ BL_SCRAT_WRITE_STATUS_INVALID_HEADER
@ BL_SCRAT_WRITE_STATUS_COMPLETED_OK
@ BL_SCRAT_WRITE_STATUS_INVALID_NULL_BYTES
@ BL_SCRAT_WRITE_STATUS_INVALID_START
@ BL_SCRAT_WRITE_STATUS_INVALID_NUM_BYTES
@ BL_SCRAT_WRITE_STATUS_OK
@ BL_SCRAT_WRITE_STATUS_NOT_ONGOING
@ BL_SCRAT_WRITE_STATUS_FLASH_ERROR
@ BL_SCRAT_WRITE_STATUS_COMPLETED_ERROR
bl_interface_res_e(* bl_scrat_begin_f)(uint32_t num_bytes, uint8_t seq, void(*clear_wdt)(void))
Prepare scratchpad memory for storing new data.
uint32_t byte_write_call_time
const bl_hardware_capabilities_t *(* bl_hardware_getCapabilities_f)(void)
Returns board hardware capabilities.
bl_scrat_write_f write
bl_interface_res_e
Bootloader interface operations result.
@ BL_RES_ERROR
Error during operation.
@ BL_RES_TIMEOUT
Synchronous call timeout.
@ BL_RES_BUSY
Underneath flash driver is busy.
@ BL_RES_INVALID_AREA
Area doesn't exists.
@ BL_RES_INVALID_STATE
Write ongoing or scratchpad not valid.
@ BL_RES_OK
Operation is successful.
@ BL_RES_NODRIVER
There is no external flash driver.
@ BL_RES_PARAM
Invalid parameters.
bl_interface_res_e(* bl_memory_area_getAreaHeader_f)(bl_memory_area_id_t id, bl_memory_area_header_t *header)
Return a structure containing the information stored in the header at the beginning of the area.
uint32_t page_write_time
bl_interface_res_e(* bl_scrat_getInfo_f)(bl_scrat_info_t *info)
Fills a structure with info about the scratchpad.
size_t write_alignment
bl_interface_res_e(* bl_memory_area_startErase_f)(bl_memory_area_id_t id, uint32_t *sector_base, size_t *number_of_sector)
Erase a sector of a memory area.
bl_interface_res_e(* bl_scrat_getValidity_f)(bl_scrat_valid_e *validity)
Check if the scratchpad contains valid data.
bl_scrat_getInfo_f getInfo
bl_interface_res_e(* bl_memory_area_startWrite_f)(bl_memory_area_id_t id, uint32_t to, const void *from, size_t amount)
Write bytes to a memory area.
bl_scrat_read_f read
bl_scrat_type_e
Scratchpad type enum.
@ BL_SCRAT_TYPE_PRESENT
@ BL_SCRAT_TYPE_PROCESS
@ BL_SCRAT_TYPE_BLANK
bl_scrat_clear_f clear
bl_interface_res_e(* bl_scrat_write_f)(uint32_t to, const void *from, size_t amount, bl_scrat_write_status_e *status)
Write bytes to scratchpad area.
uint32_t area_physical_address
bl_memory_area_getIdfromType_f getIdfromType
uint32_t bl_memory_area_id_t
Memory Area id definition.
bl_interface_res_e(* bl_memory_area_startRead_f)(bl_memory_area_id_t id, void *to, uint32_t from, size_t amount)
Read bytes from a memory area.
bl_memory_area_getMaxNumAreas_f getMaxNumAreas
uint32_t sector_erase_call_time
bool(* bl_memory_area_isBusy_f)(bl_memory_area_id_t id)
Checks if underlying flash driver is busy.
bl_memory_area_startErase_f startErase
uint32_t sector_erase_time
bl_memory_area_startRead_f startRead
const hardware_services_t * hardware_services_p
bl_interface_res_e(* bl_scrat_setBootable_f)(void)
Set scratchpad as bootable.
uint32_t page_write_call_time
size_t erase_sector_size
bl_scrat_begin_f begin
bl_memory_area_isBusy_f isBusy
Scratchpad info definition.
Flash memory info definition.
Platform specific descriptions.
Hardware features that can be installed on a board.
Informations contained in the header that the bootloader can store in the beginning of an area (only ...
Global interface entry point with a version id.
Memory Area info definition.