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 
25 typedef enum
26 {
27  BL_RES_OK = 0,
36 
38 #define BL_MEMORY_AREA_UNDEFINED 0xFFFFFFFF
39 
41 typedef uint32_t bl_memory_area_id_t;
42 
44 typedef enum
45 {
55 
57 typedef struct
58 {
60  size_t flash_size;
75  uint32_t byte_write_time;
77  uint32_t page_write_time;
89 
91 typedef struct
92 {
96  size_t area_size;
108 
113 typedef 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 
133 typedef enum
134 {
142 
144 typedef enum
145 {
165 
167 typedef enum
168 {
184 
186 typedef enum
187 {
195 
197 typedef 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;
220  bool dedicated;
226  uint32_t modem_fw_data;
229  uint32_t modem_fw_length;
231 
232 #if defined(NRF91_PLATFORM)
233 typedef struct
234 {
240  const char * at_commands;
241 } bl_platform_nrf91_t;
242 #elif defined(NRF54_PLATFORM)
243 
244 typedef 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)
263 
264 typedef struct
265 {
269  const CMU_HFXOInit_TypeDef * hfxoInit;
273  const CMU_LFXOInit_TypeDef * lfxoInit;
274 } bl_platform_efr32_t;
275 #endif
276 
278 typedef union
279 {
280 #if defined(NRF52_PLATFORM)
281 
284  const void * nrf52;
285 #elif defined(NRF54_PLATFORM)
286 
289  const bl_platform_nrf54_t * nrf54;
290 #elif defined(NRF91_PLATFORM)
291 
294  const bl_platform_nrf91_t * nrf91;
295 #elif defined(EFR32_PLATFORM)
296 
299  const bl_platform_efr32_t * efr32;
300 #endif
301 } bl_platform_t;
302 
304 typedef struct
305 {
313  bool dcdc;
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 
438 typedef uint8_t (*bl_memory_area_getMaxNumAreas_f)(void);
439 
450  bl_scrat_valid_e * validity);
451 
464 typedef bl_interface_res_e (*bl_scrat_read_f)(void * to,
465  uint32_t from,
466  size_t amount);
467 
473 typedef bl_interface_res_e (*bl_scrat_clear_f)(void (*clear_wdt)(void));
474 
485 typedef 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 
527 typedef bl_interface_res_e (*bl_scrat_setStatus_f)(uint32_t status);
528 
534 typedef const bl_hardware_capabilities_t * (*bl_hardware_getCapabilities_f)(
535  void);
536 
537 
538 typedef struct
539 {
550 
551 typedef struct
552 {
562 
563 typedef struct
564 {
567 
571 typedef struct
572 {
573  uint32_t version;
577  const void * dflow_services_p;
579 
580 #endif /* BL_INTERFACE_H_ */
BL_SCRAT_IS_INVALID
@ BL_SCRAT_IS_INVALID
Definition: bl_interface.h:180
bl_flash_info_t::page_write_call_time
uint32_t page_write_call_time
Definition: bl_interface.h:83
bl_memory_area_info_t::area_id
bl_memory_area_id_t area_id
Definition: bl_interface.h:94
BL_SCRAT_WRITE_STATUS_INVALID_HEADER
@ BL_SCRAT_WRITE_STATUS_INVALID_HEADER
Definition: bl_interface.h:159
bl_memory_area_header_t::seq
uint8_t seq
Definition: bl_interface.h:121
bl_scrat_info_t::area_length
uint32_t area_length
Definition: bl_interface.h:200
bl_memory_area_getIdfromType_f
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.
Definition: bl_interface.h:414
scratchpad_services_t::setBootable
bl_scrat_setBootable_f setBootable
Definition: bl_interface.h:559
bl_interface_t::hardware_services_p
const hardware_services_t * hardware_services_p
Definition: bl_interface.h:576
bl_flash_info_t::sector_erase_time
uint32_t sector_erase_time
Definition: bl_interface.h:79
BL_SCRAT_IS_NOTAG
@ BL_SCRAT_IS_NOTAG
Definition: bl_interface.h:174
BL_SCRAT_WRITE_STATUS_INVALID_START
@ BL_SCRAT_WRITE_STATUS_INVALID_START
Definition: bl_interface.h:155
BL_RES_ERROR
@ BL_RES_ERROR
Error during operation.
Definition: bl_interface.h:28
bl_memory_area_info_t::area_physical_address
uint32_t area_physical_address
Definition: bl_interface.h:98
bl_memory_area_info_t::external_flash
bool external_flash
Definition: bl_interface.h:102
bl_memory_area_header_t
Informations contained in the header that the bootloader can store in the beginning of an area (only ...
Definition: bl_interface.h:113
BL_SCRAT_WRITE_STATUS_FLASH_ERROR
@ BL_SCRAT_WRITE_STATUS_FLASH_ERROR
Definition: bl_interface.h:163
bl_memory_area_startRead_f
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.
Definition: bl_interface.h:333
BL_SCRAT_WRITE_STATUS_COMPLETED_ERROR
@ BL_SCRAT_WRITE_STATUS_COMPLETED_ERROR
Definition: bl_interface.h:151
bl_flash_info_t::flash_size
size_t flash_size
Definition: bl_interface.h:60
bl_scrat_info_t::erase_time
uint32_t erase_time
Definition: bl_interface.h:202
bl_platform_t
Platform specific descriptions.
Definition: bl_interface.h:278
bl_interface_t::version
uint32_t version
Definition: bl_interface.h:573
BL_MEM_AREA_TYPE_MODEMFW
@ BL_MEM_AREA_TYPE_MODEMFW
Modem firmware area.
Definition: bl_interface.h:52
bl_memory_area_info_t::has_header
bool has_header
Definition: bl_interface.h:104
memory_area_services_t::startErase
bl_memory_area_startErase_f startErase
Definition: bl_interface.h:542
bl_scrat_write_status_e
bl_scrat_write_status_e
Scratchpad write status.
Definition: bl_interface.h:144
bl_scrat_info_t::modem_fw_type
bl_scrat_modem_file_type_e modem_fw_type
Definition: bl_interface.h:223
bl_hardware_capabilities_t::dcdc
bool dcdc
Definition: bl_interface.h:313
BL_MEM_AREA_TYPE_APPLICATION
@ BL_MEM_AREA_TYPE_APPLICATION
Application area.
Definition: bl_interface.h:48
BL_MEM_AREA_TYPE_PERSISTENT
@ BL_MEM_AREA_TYPE_PERSISTENT
Persistent memory area.
Definition: bl_interface.h:49
memory_area_services_t::isBusy
bl_memory_area_isBusy_f isBusy
Definition: bl_interface.h:543
BL_MEM_AREA_TYPE_MODEMDELTAFW
@ BL_MEM_AREA_TYPE_MODEMDELTAFW
Modem delta firmware area.
Definition: bl_interface.h:53
bl_flash_info_t::is_busy_call_time
uint32_t is_busy_call_time
Definition: bl_interface.h:87
bl_scrat_info_t::status
uint32_t status
Definition: bl_interface.h:218
bl_memory_area_getMaxNumAreas_f
uint8_t(* bl_memory_area_getMaxNumAreas_f)(void)
Return the total number of areas supported by the bootloader.
Definition: bl_interface.h:438
memory_area_services_t::startWrite
bl_memory_area_startWrite_f startWrite
Definition: bl_interface.h:541
memory_area_services_t::getMaxNumAreas
bl_memory_area_getMaxNumAreas_f getMaxNumAreas
Definition: bl_interface.h:548
BL_SCRAT_WRITE_STATUS_COMPLETED_OK
@ BL_SCRAT_WRITE_STATUS_COMPLETED_OK
Definition: bl_interface.h:149
BL_SCRAT_TYPE_BLANK
@ BL_SCRAT_TYPE_BLANK
Definition: bl_interface.h:136
bl_memory_area_header_t::crc
uint16_t crc
Definition: bl_interface.h:118
bl_flash_info_t::write_alignment
size_t write_alignment
Definition: bl_interface.h:69
bl_scrat_setBootable_f
bl_interface_res_e(* bl_scrat_setBootable_f)(void)
Set scratchpad as bootable.
Definition: bl_interface.h:525
scratchpad_services_t::read
bl_scrat_read_f read
Definition: bl_interface.h:554
bl_interface_t
Global interface entry point with a version id.
Definition: bl_interface.h:571
BL_RES_TIMEOUT
@ BL_RES_TIMEOUT
Synchronous call timeout.
Definition: bl_interface.h:33
bl_hardware_getCapabilities_f
const typedef bl_hardware_capabilities_t *(* bl_hardware_getCapabilities_f)(void)
Returns board hardware capabilities.
Definition: bl_interface.h:534
bl_flash_info_t::byte_write_call_time
uint32_t byte_write_call_time
Definition: bl_interface.h:81
bl_memory_area_info_t::type
bl_memory_area_type_e type
Definition: bl_interface.h:106
scratchpad_services_t::setStatus
bl_scrat_setStatus_f setStatus
Definition: bl_interface.h:560
scratchpad_services_t::clear
bl_scrat_clear_f clear
Definition: bl_interface.h:555
bl_scrat_info_t::modem_fw_length
uint32_t modem_fw_length
Definition: bl_interface.h:229
scratchpad_services_t::getInfo
bl_scrat_getInfo_f getInfo
Definition: bl_interface.h:558
bl_memory_area_getAreaHeader_f
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.
Definition: bl_interface.h:428
bl_memory_area_header_t::length
uint32_t length
Definition: bl_interface.h:116
bl_scrat_write_f
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.
Definition: bl_interface.h:503
bl_flash_info_t::erase_sector_size
size_t erase_sector_size
Definition: bl_interface.h:64
bl_flash_info_t::byte_write_time
uint32_t byte_write_time
Definition: bl_interface.h:75
bl_interface_t::scratchpad_services_p
const scratchpad_services_t * scratchpad_services_p
Definition: bl_interface.h:575
BL_SCRAT_IS_CLEAR
@ BL_SCRAT_IS_CLEAR
Definition: bl_interface.h:172
bl_interface_res_e
bl_interface_res_e
Bootloader interface operations result.
Definition: bl_interface.h:25
scratchpad_services_t
Definition: bl_interface.h:551
BL_SCRAT_WRITE_STATUS_NOT_ONGOING
@ BL_SCRAT_WRITE_STATUS_NOT_ONGOING
Definition: bl_interface.h:153
BL_SCRAT_TYPE_PRESENT
@ BL_SCRAT_TYPE_PRESENT
Definition: bl_interface.h:138
BL_SCRAT_IS_UNKNOWN
@ BL_SCRAT_IS_UNKNOWN
Definition: bl_interface.h:170
BL_MEM_AREA_TYPE_SCRATCHPAD
@ BL_MEM_AREA_TYPE_SCRATCHPAD
Dedicated scratchpad area.
Definition: bl_interface.h:50
hardware_services_t::getCapabilities
bl_hardware_getCapabilities_f getCapabilities
Definition: bl_interface.h:565
bl_flash_info_t::page_write_time
uint32_t page_write_time
Definition: bl_interface.h:77
BL_MEM_AREA_TYPE_STACK
@ BL_MEM_AREA_TYPE_STACK
Stack area.
Definition: bl_interface.h:47
BL_RES_OK
@ BL_RES_OK
Operation is successful.
Definition: bl_interface.h:27
BL_SCRAT_IS_INVALID_HEADER
@ BL_SCRAT_IS_INVALID_HEADER
Definition: bl_interface.h:176
bl_scrat_info_t::flags
uint8_t flags
Definition: bl_interface.h:214
BL_SCRAT_MODEM_FILE_TYPE_INVALID
@ BL_SCRAT_MODEM_FILE_TYPE_INVALID
Definition: bl_interface.h:193
bl_scrat_info_t
Scratchpad info definition.
Definition: bl_interface.h:197
BL_RES_BUSY
@ BL_RES_BUSY
Underneath flash driver is busy.
Definition: bl_interface.h:29
bl_memory_area_info_t::area_size
size_t area_size
Definition: bl_interface.h:96
scratchpad_services_t::begin
bl_scrat_begin_f begin
Definition: bl_interface.h:556
BL_SCRAT_MODEM_FILE_TYPE_FULL_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_FULL_IMAGE
Definition: bl_interface.h:189
bl_memory_area_startErase_f
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.
Definition: bl_interface.h:369
bl_scrat_valid_e
bl_scrat_valid_e
Scratchpad validity.
Definition: bl_interface.h:167
bl_memory_area_getAreaList_f
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.
Definition: bl_interface.h:400
hardware_services_t
Definition: bl_interface.h:563
bl_memory_area_startWrite_f
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.
Definition: bl_interface.h:352
bl_scrat_modem_file_type_e
bl_scrat_modem_file_type_e
Definition: bl_interface.h:186
bl_hardware_capabilities_t
Hardware features that can be installed on a board.
Definition: bl_interface.h:304
bl_scrat_read_f
bl_interface_res_e(* bl_scrat_read_f)(void *to, uint32_t from, size_t amount)
Read bytes from a scratchpad file.
Definition: bl_interface.h:464
bl_flash_info_t::sector_erase_call_time
uint32_t sector_erase_call_time
Definition: bl_interface.h:85
bl_memory_area_isBusy_f
bool(* bl_memory_area_isBusy_f)(bl_memory_area_id_t id)
Checks if underlying flash driver is busy.
Definition: bl_interface.h:378
BL_SCRAT_WRITE_STATUS_INVALID_NUM_BYTES
@ BL_SCRAT_WRITE_STATUS_INVALID_NUM_BYTES
Definition: bl_interface.h:157
scratchpad_services_t::getValidity
bl_scrat_getValidity_f getValidity
Definition: bl_interface.h:553
BL_RES_NODRIVER
@ BL_RES_NODRIVER
There is no external flash driver.
Definition: bl_interface.h:30
BL_SCRAT_TYPE_PROCESS
@ BL_SCRAT_TYPE_PROCESS
Definition: bl_interface.h:140
bl_scrat_clear_f
bl_interface_res_e(* bl_scrat_clear_f)(void(*clear_wdt)(void))
Erase the scratchpad area.
Definition: bl_interface.h:473
memory_area_services_t::getAreaInfo
bl_memory_area_getAreaInfo_f getAreaInfo
Definition: bl_interface.h:544
memory_area_services_t::getIdfromType
bl_memory_area_getIdfromType_f getIdfromType
Definition: bl_interface.h:546
BL_SCRAT_IS_VALID
@ BL_SCRAT_IS_VALID
Definition: bl_interface.h:182
bl_memory_area_type_e
bl_memory_area_type_e
Types of Memory Areas.
Definition: bl_interface.h:44
bl_memory_area_header_t::devel
uint8_t devel
Definition: bl_interface.h:129
bl_scrat_info_t::modem_fw_data
uint32_t modem_fw_data
Definition: bl_interface.h:226
bl_hardware_capabilities_t::platform
bl_platform_t platform
Definition: bl_interface.h:317
bl_flash_info_t
Flash memory info definition.
Definition: bl_interface.h:57
bl_memory_area_header_t::maint
uint8_t maint
Definition: bl_interface.h:127
bl_scrat_info_t::type
uint32_t type
Definition: bl_interface.h:216
BL_SCRAT_WRITE_STATUS_OK
@ BL_SCRAT_WRITE_STATUS_OK
Definition: bl_interface.h:147
bl_memory_area_id_t
uint32_t bl_memory_area_id_t
Memory Area id definition.
Definition: bl_interface.h:41
bl_memory_area_info_t::flash
bl_flash_info_t flash
Definition: bl_interface.h:100
BL_RES_INVALID_AREA
@ BL_RES_INVALID_AREA
Area doesn't exists.
Definition: bl_interface.h:32
bl_scrat_info_t::dedicated
bool dedicated
Definition: bl_interface.h:220
BL_RES_PARAM
@ BL_RES_PARAM
Invalid parameters.
Definition: bl_interface.h:31
bl_memory_area_header_t::major
uint8_t major
Definition: bl_interface.h:123
bl_scrat_getInfo_f
bl_interface_res_e(* bl_scrat_getInfo_f)(bl_scrat_info_t *info)
Fills a structure with info about the scratchpad.
Definition: bl_interface.h:517
scratchpad_services_t::write
bl_scrat_write_f write
Definition: bl_interface.h:557
BL_MEM_AREA_TYPE_BOOTLOADER
@ BL_MEM_AREA_TYPE_BOOTLOADER
Bootloader area.
Definition: bl_interface.h:46
BL_SCRAT_IS_INVALID_CRC
@ BL_SCRAT_IS_INVALID_CRC
Definition: bl_interface.h:178
BL_SCRAT_WRITE_STATUS_INVALID_NULL_BYTES
@ BL_SCRAT_WRITE_STATUS_INVALID_NULL_BYTES
Definition: bl_interface.h:161
bl_scrat_begin_f
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.
Definition: bl_interface.h:485
bl_flash_info_t::write_page_size
size_t write_page_size
Definition: bl_interface.h:62
bl_memory_area_header_t::minor
uint8_t minor
Definition: bl_interface.h:125
bl_memory_area_getAreaInfo_f
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.
Definition: bl_interface.h:389
memory_area_services_t::startRead
bl_memory_area_startRead_f startRead
Definition: bl_interface.h:540
bl_hardware_capabilities_t::crystal_32k
bool crystal_32k
Definition: bl_interface.h:309
BL_RES_INVALID_STATE
@ BL_RES_INVALID_STATE
Write ongoing or scratchpad not valid.
Definition: bl_interface.h:34
bl_scrat_getValidity_f
bl_interface_res_e(* bl_scrat_getValidity_f)(bl_scrat_valid_e *validity)
Check if the scratchpad contains valid data.
Definition: bl_interface.h:449
bl_memory_area_info_t
Memory Area info definition.
Definition: bl_interface.h:91
memory_area_services_t
Definition: bl_interface.h:538
BL_SCRAT_MODEM_FILE_TYPE_DELTA_IMAGE
@ BL_SCRAT_MODEM_FILE_TYPE_DELTA_IMAGE
Definition: bl_interface.h:191
bl_interface_t::memory_area_services_p
const memory_area_services_t * memory_area_services_p
Definition: bl_interface.h:574
bl_scrat_type_e
bl_scrat_type_e
Scratchpad type enum.
Definition: bl_interface.h:133
bl_scrat_setStatus_f
bl_interface_res_e(* bl_scrat_setStatus_f)(uint32_t status)
Definition: bl_interface.h:527
bl_interface_t::dflow_services_p
const void * dflow_services_p
Definition: bl_interface.h:577
BL_MEM_AREA_TYPE_USER
@ BL_MEM_AREA_TYPE_USER
User defined area.
Definition: bl_interface.h:51
memory_area_services_t::getAreaHeader
bl_memory_area_getAreaHeader_f getAreaHeader
Definition: bl_interface.h:547
memory_area_services_t::getAreaList
bl_memory_area_getAreaList_f getAreaList
Definition: bl_interface.h:545