Common bootloader definitions See Common for detailed documentation.

License#

Copyright 2018 Silicon Laboratories Inc. www.silabs.com

The licensor of this software is Silicon Laboratories Inc. Your use of this software is governed by the terms of Silicon Labs Master Software License Agreement (MSLA) available at www.silabs.com/about-us/legal/master-software-license-agreement. This software is distributed to you in Source Code format and is governed by the sections of the MSLA applicable to Source Code.

/***************************************************************************/
#ifndef __BOOTLOADER_COMMON_H__
#define __BOOTLOADER_COMMON_H__

#ifndef DOXYGEN_SHOULD_SKIP_THIS

//#define BL_DEBUG

#ifdef BL_DEBUG
#define BLDEBUG(x) (x)   // turn debug output on
#define BLDEBUG_PRINT(str) serPutStr(str)
#else
#define BLDEBUG(x)       // turn debug output off
#define BLDEBUG_PRINT(str)
#endif

#endif //DOXYGEN_SHOULD_SKIP_THIS

typedef uint8_t BL_Status;

#define BL_SUCCESS 0U

#define BL_CRC_MATCH 2U

#define BL_IMG_FLASHED 3U

#define BL_ERR 1U

#define BL_ERR_MASK 0x40U

#define BL_ERR_HEADER_EXP 0x41U

#define BL_ERR_HEADER_WRITE_CRC 0x42U

#define BL_ERR_CRC 0x43U

#define BL_ERR_UNKNOWN_TAG 0x44U

#define BL_ERR_SIG 0x45U

#define BL_ERR_ODD_LEN 0x46U

#define BL_ERR_BLOCK_INDEX 0x47U

#define BL_ERR_OVWR_BL 0x48U

#define BL_ERR_OVWR_SIMEE 0x49U

#define BL_ERR_ERASE_FAIL 0x4AU

#define BL_ERR_WRITE_FAIL 0x4BU

#define BL_ERR_CRC_LEN 0x4CU

#define BL_ERR_NO_QUERY 0X4DU

#define BL_ERR_BAD_LEN 0x4EU

#define BL_ERR_TAGBUF 0x4FU

#define BL_EBL_CONTINUE 0x50U

#define BL_ERR_UNEXPECTED_TAG 0x51U

#define BL_ERR_UNK_ENC 0x52U

#define BL_ERR_INV_KEY 0x53U

#define BL_ERR_ENC 0x54U

#define BL_IBR_ERR_CRC 0x55U

#define BL_IBR_ERR_VERS 0x56U

#define BL_IBR_ERR_ADDR 0x57U

#define BL_IBR_ERR_HDR 0x58U

#define TIMEOUT             0x16
#define FILEDONE            0x17
#define FILEABORT           0x18
#define BLOCKOK             0x19
#define QUERYFOUND          0x1A
#define START_TIMEOUT       0x1B
#define BLOCK_TIMEOUT       0x1C
#define BLOCKERR_MASK       0x20

#define BLOCKERR_SOH        0x21

#define BLOCKERR_CHK        0x22

#define BLOCKERR_CRCH       0x23

#define BLOCKERR_CRCL       0x24

#define BLOCKERR_SEQUENCE   0x25

#define BLOCKERR_PARTIAL    0x26

#define BLOCKERR_DUPLICATE 0x27

// two possible communication modes: serial mode, or radio/ota mode.
enum {
  COMM_SERIAL  = 0x01,  // in serial mode (uart or ezsp spi)
  COMM_RADIO   = 0x02,  // in radio mode
};

#endif //__BOOTLOADER_COMMON_H__

Bootloader Status Definitions#

These are numerical definitions for the possible bootloader status codes.

#define
BL_SUCCESS 0U

Numerical definition for a bootloader status code: Success.

#define
BL_CRC_MATCH 2U

Numerical definition for a bootloader status code: CRC match.

#define
BL_IMG_FLASHED 3U

Numerical definition for a bootloader status code: Image flashed.

#define
BL_ERR 1U

Numerical definition for a bootloader status code: serial error.

#define
BL_ERR_MASK 0x40U

Numerical definition for a bootloader status code: Error mask.

#define
BL_ERR_HEADER_EXP 0x41U

Numerical definition for a bootloader status code: Failed in header state. Header expected.

#define
BL_ERR_HEADER_WRITE_CRC 0x42U

Numerical definition for a bootloader status code: Failed write/CRC of header.

#define
BL_ERR_CRC 0x43U

Numerical definition for a bootloader status code: Failed file CRC.

#define
BL_ERR_UNKNOWN_TAG 0x44U

Numerical definition for a bootloader status code: Unknown tag.

#define
BL_ERR_SIG 0x45U

Numerical definition for a bootloader status code: EBL header error.

#define
BL_ERR_ODD_LEN 0x46U

Numerical definition for a bootloader status code: Trying to flash odd length bytes.

#define
BL_ERR_BLOCK_INDEX 0x47U

Numerical definition for a bootloader status code: Indexed past end of block buffer.

#define
BL_ERR_OVWR_BL 0x48U

Numerical definition for a bootloader status code: Attempt to overwrite bootloader flash.

#define
BL_ERR_OVWR_SIMEE 0x49U

Numerical definition for a bootloader status code: Attempt to overwrite Simulated EEPROM flash.

#define
BL_ERR_ERASE_FAIL 0x4AU

Numerical definition for a bootloader status code: Flash erase failed.

#define
BL_ERR_WRITE_FAIL 0x4BU

Numerical definition for a bootloader status code: Flash write failed.

#define
BL_ERR_CRC_LEN 0x4CU

Numerical definition for a bootloader status code: END tag CRC wrong length.

#define
BL_ERR_NO_QUERY 0X4DU

Numerical definition for a bootloader status code: Received data before query request/response.

#define
BL_ERR_BAD_LEN 0x4EU

Numerical definition for a bootloader status code: Invalid length detected.

#define
BL_ERR_TAGBUF 0x4FU

Numerical definition for a bootloader status code: Problem with tagBuf detected.

#define
BL_EBL_CONTINUE 0x50U

Numerical definition for a bootloader status code: processEbl deferred, call again to continue.

#define
BL_ERR_UNEXPECTED_TAG 0x51U

Numerical definition for a bootloader status code: A known tag was found in an unexpected location (eg. header tag found after data)

#define
BL_ERR_UNK_ENC 0x52U

Numerical definition for a bootloader status code: The specified encryption type is unknown to this bootloader.

#define
BL_ERR_INV_KEY 0x53U

Numerical definition for a bootloader status code: No valid encryption key found on the device (ie. It's all 0xFF's). Bootloader will not function until this key is set.

#define
BL_ERR_ENC 0x54U

Numerical definition for a bootloader status code: Generic error indicating that there was a problem with the encrypted file when decrypting.

#define
BL_IBR_ERR_CRC 0x55U

Numerical definition for a bootloader status code: Failed IBR crc.

#define
BL_IBR_ERR_VERS 0x56U

Numerical definition for a bootloader status code: Incorrect IBR version.

#define
BL_IBR_ERR_ADDR 0x57U

Numerical definition for a bootloader status code: Invalid ebl address in IBR.

#define
BL_IBR_ERR_HDR 0x58U

Numerical definition for a bootloader status code: Incorrect IBR header.

Bootloader State Flags#

These are numerical flags for the possible bootloader states. These values are used in the bootloader code for making the current state more verbose. The flags do not start at 0 so that they can be output via the serial port during debug and easily screened out of normal xmodem traffic which depends only on ACK (0x06) and NAK (0x15).

#define
TIMEOUT 0x16

Bootloader state flag.

#define
FILEDONE 0x17

Bootloader state flag.

#define
FILEABORT 0x18

Bootloader state flag.

#define
BLOCKOK 0x19

Bootloader state flag.

#define
QUERYFOUND 0x1A

Bootloader state flag.

#define
START_TIMEOUT 0x1B

Bootloader state flag.

#define
BLOCK_TIMEOUT 0x1C

Bootloader state flag.

#define
BLOCKERR_MASK 0x20

Bootloader state flag.

#define
BLOCKERR_SOH 0x21

Bootloader state flag: Start Of Header not received.

#define
BLOCKERR_CHK 0x22

Bootloader state flag: Sequence of bytes don't match.

#define
BLOCKERR_CRCH 0x23

Bootloader state flag: CRC High byte failure.

#define
BLOCKERR_CRCL 0x24

Bootloader state flag: CRC Low byte failure.

#define
BLOCKERR_SEQUENCE 0x25

Bootloader state flag: Block received out of sequence.

#define
BLOCKERR_PARTIAL 0x26

Bootloader state flag: Partial block received.

#define
BLOCKERR_DUPLICATE 0x27

Bootloader state flag: Duplicate of previous block.

Enumerations#

enum
@0 {
PRIORITIZE_BEACONS_BASED_ON_PARENT_CLASSIFICATION = 0x0001
PRIORITIZE_BEACONS_BASED_ON_TC_CONNECTVITY = 0x0002
TC_CONNECTIVITY = 0x0010
LONG_UPTIME = 0x0020
BAD_PARENT_CONNECTIVITY = 0x0040
EMBER_OUTGOING_MESSAGES = 0x0001
EMBER_INCOMING_MESSAGES = 0x0002
EMBER_RADIO_IS_ON = 0x0004
EMBER_TRANSPORT_ACTIVE = 0x0008
EMBER_APS_LAYER_ACTIVE = 0x0010
EMBER_ASSOCIATING = 0x0020
EMBER_ZLL_TOUCH_LINKING = 0x0040
EMBER_NETWORK_TIMEOUT_REQUEST = 0x0200
EMBER_SEND_ORPHAN_NOTIFICATION = 0x0400
EMBER_MAC_DATA_POLL_SUPER_RETRY = 0x0800
INITIAL = 0x0000
SCAN_FOR_TOUCH_LINK = 0x0001
SCAN_FOR_DEVICE_INFORMATION = 0x0002
SCAN_FOR_IDENTIFY = 0x0004
SCAN_FOR_RESET = 0x0008
TARGET_NETWORK_FOUND = 0x0010
ABORTING_TOUCH_LINK = 0x0020
SCAN_COMPLETE = 0x0040
TOUCH_LINK_TARGET = 0x0080
FORMING_NETWORK = 0x0100
RESETTING_TO_FACTORY_NEW = 0x0200
ADC_REF_INT = 42U
TOKEN_COUNT
COMM_SERIAL = 0x01
COMM_RADIO = 0x02
}

Typedefs#

typedef uint8_t

Define the bootloader status type.

Bootloader Status Definitions Documentation#

Bootloader State Flags Documentation#

Enumeration Documentation#

@0#

@0
Enumerator
PRIORITIZE_BEACONS_BASED_ON_PARENT_CLASSIFICATION
PRIORITIZE_BEACONS_BASED_ON_TC_CONNECTVITY
TC_CONNECTIVITY
LONG_UPTIME
BAD_PARENT_CONNECTIVITY
EMBER_OUTGOING_MESSAGES

There are messages waiting for transmission.

EMBER_INCOMING_MESSAGES

One or more incoming messages being processed.

EMBER_RADIO_IS_ON

The radio is currently powered on. On sleepy devices, the radio is turned off when not in use. On non-sleepy devices (EMBER_COORDINATOR, EMBER_ROUTER, or EMBER_END_DEVICE), the radio is always on.

EMBER_TRANSPORT_ACTIVE

The transport layer has messages awaiting an ACK.

EMBER_APS_LAYER_ACTIVE

The ZigBee APS layer has messages awaiting an ACK.

EMBER_ASSOCIATING

The node is currently trying to associate with a ZigBee PRO network.

EMBER_ZLL_TOUCH_LINKING

The node is currently touch linking.

EMBER_NETWORK_TIMEOUT_REQUEST

Network Timeout Request Event.

EMBER_SEND_ORPHAN_NOTIFICATION

Sending Orphan Notification Event.

EMBER_MAC_DATA_POLL_SUPER_RETRY

MAC Data Poll Super Retry Event .

INITIAL
SCAN_FOR_TOUCH_LINK
SCAN_FOR_DEVICE_INFORMATION
SCAN_FOR_IDENTIFY
SCAN_FOR_RESET
TARGET_NETWORK_FOUND
ABORTING_TOUCH_LINK
SCAN_COMPLETE
TOUCH_LINK_TARGET
FORMING_NETWORK
RESETTING_TO_FACTORY_NEW
ADC_REF_INT

Internal reference.

TOKEN_COUNT
COMM_SERIAL
COMM_RADIO

Typedef Documentation#

BL_Status#

typedef uint8_t BL_Status

Define the bootloader status type.