Controller
Distributor
Warning
doxygennamespace: Cannot find namespace “dist” in doxygen xml output for project “hybrid-controller” from directory: ../doxygen/xml/
Nonvolatile configuration
Warning
doxygennamespace: Cannot find namespace “nvmconfig” in doxygen xml output for project “hybrid-controller” from directory: ../doxygen/xml/
Code Loaders
Utilities
-
namespace utils
Typedefs
-
typedef enum utils::_dcp_ch_enable _dcp_ch_enable_t
-
typedef enum utils::_dcp_channel dcp_channel_t
-
typedef enum utils::_dcp_key_slot dcp_key_slot_t
-
typedef enum utils::_dcp_hash_algo_t dcp_hash_algo_t
-
typedef struct utils::_dcp_hash_ctx_t dcp_hash_ctx_t
-
typedef union utils::_dcp_hash_block dcp_hash_block_t
-
typedef enum utils::_dcp_hash_algo_state dcp_hash_algo_state_t
-
typedef struct utils::_dcp_handle dcp_handle_t
-
typedef struct utils::_dcp_hash_ctx_internal dcp_hash_ctx_internal_t
-
typedef struct utils::_dcp_work_packet dcp_work_packet_t
Enums
-
enum _generic_status
Values:
-
enumerator kStatus_Success
-
enumerator kStatus_Fail
-
enumerator kStatus_ReadOnly
-
enumerator kStatus_OutOfRange
-
enumerator kStatus_InvalidArgument
-
enumerator kStatus_Timeout
-
enumerator kStatus_DCP_Again
-
enumerator kStatus_Success
-
enum _dcp_ch_enable
Values:
-
enumerator kDCP_chDisable
DCP channel disable.
-
enumerator kDCP_ch0Enable
DCP channel 0 enable.
-
enumerator kDCP_ch1Enable
DCP channel 1 enable.
-
enumerator kDCP_ch2Enable
DCP channel 2 enable.
-
enumerator kDCP_ch3Enable
DCP channel 3 enable.
-
enumerator kDCP_chEnableAll
DCP channel enable all.
-
enumerator kDCP_chDisable
-
enum _dcp_channel
Values:
-
enumerator kDCP_Channel0
DCP channel 0.
-
enumerator kDCP_Channel1
DCP channel 1.
-
enumerator kDCP_Channel2
DCP channel 2.
-
enumerator kDCP_Channel3
DCP channel 3.
-
enumerator kDCP_Channel0
-
enum _dcp_key_slot
Values:
-
enumerator kDCP_KeySlot0
DCP key slot 0.
-
enumerator kDCP_KeySlot1
DCP key slot 1.
-
enumerator kDCP_KeySlot2
DCP key slot 2.
-
enumerator kDCP_KeySlot3
DCP key slot 3.
-
enumerator kDCP_OtpKey
DCP OTP key.
-
enumerator kDCP_OtpUniqueKey
DCP unique OTP key.
-
enumerator kDCP_PayloadKey
DCP payload key.
-
enumerator kDCP_KeySlot0
-
enum _dcp_swap
Values:
-
enumerator kDCP_NoSwap
-
enumerator kDCP_KeyByteSwap
-
enumerator kDCP_KeyWordSwap
-
enumerator kDCP_InputByteSwap
-
enumerator kDCP_InputWordSwap
-
enumerator kDCP_OutputByteSwap
-
enumerator kDCP_OutputWordSwap
-
enumerator kDCP_NoSwap
-
enum _dcp_hash_algo_t
Values:
-
enumerator kDCP_Sha1
SHA_1.
-
enumerator kDCP_Sha256
SHA_256.
-
enumerator kDCP_Crc32
CRC_32.
-
enumerator kDCP_Sha1
-
enum _dcp_hash_digest_len
Values:
-
enumerator kDCP_OutLenSha1
-
enumerator kDCP_OutLenSha256
-
enumerator kDCP_OutLenCrc32
-
enumerator kDCP_OutLenSha1
-
enum _dcp_work_packet_bit_definitions
Values:
-
enumerator kDCP_CONTROL0_DECR_SEMAPHOR
-
enumerator kDCP_CONTROL0_ENABLE_HASH
-
enumerator kDCP_CONTROL0_HASH_INIT
-
enumerator kDCP_CONTROL0_HASH_TERM
-
enumerator kDCP_CONTROL1_HASH_SELECT_SHA256
-
enumerator kDCP_CONTROL1_HASH_SELECT_SHA1
-
enumerator kDCP_CONTROL1_HASH_SELECT_CRC32
-
enumerator kDCP_CONTROL0_DECR_SEMAPHOR
Functions
-
void check_and_log_crash()
Logs out what has been captured by the Teensy CrashReport tooling, cf.
https://www.pjrc.com/teensy/td_crashreport.html
This can help to debug faults generated by the memory protection unit (MPU) such as null pointer references or other pointer arithmetics gone bad. In order to have this work, the microcontroller needs to do a “soft-reboot” which preserves the RAM content so the “post-mortem report” is available.
In order to understand the error codes, have a loook at the IMXRT1060 processor architecture manual, for instance at https://www.pjrc.com/teensy/DDI0403Ee_arm_v7m_ref_manual.pdf at page 611
- static FLASHMEM void dcp_reverse_and_copy (uint8_t *src, uint8_t *dest, size_t src_len)
- static FLASHMEM uint32_t dcp_get_channel_status (dcp_channel_t channel)
- static FLASHMEM void dcp_clear_status ()
- static FLASHMEM void dcp_clear_channel_status (uint32_t mask)
-
uint32_t DCP_WaitForChannelComplete(dcp_handle_t *handle)
- static FLASHMEM uint32_t dcp_schedule_work (dcp_handle_t *handle, dcp_work_packet_t *dcpPacket)
- static FLASHMEM uint32_t dcp_hash_update_non_blocking (dcp_hash_ctx_internal_t *ctxInternal, dcp_work_packet_t *dcpPacket, const uint8_t *msg, size_t size)
-
void dcp_hash_update(dcp_hash_ctx_internal_t *ctxInternal, const uint8_t *msg, size_t size)
- FLASHMEM void dcp_hash_process_message_data (dcp_hash_ctx_internal_t *ctxInternal, const uint8_t *message, size_t messageSize)
- FLASHMEM void DCP_HASH_Init (dcp_handle_t *handle, dcp_hash_ctx_t *ctx, dcp_hash_algo_t algo)
- FLASHMEM void DCP_HASH_Update (dcp_hash_ctx_t *ctx, const uint8_t *input, size_t inputSize)
- FLASHMEM void DCP_HASH_Finish (dcp_hash_ctx_t *ctx, uint8_t *output)
- FLASHMEM void dcp_init ()
- FLASHMEM void prhash (unsigned char *h, int n)
- FLASHMEM void demo_sha256 ()
- FLASHMEM void demo_crc32 ()
- FLASHMEM void hash (const uint8_t *msg, size_t msg_len, uint8_t *out_hash, dcp_hash_algo_t algo)
- FLASHMEM void hash_sha256 (const uint8_t *msg, size_t msg_len, uint8_t *out_hash)
Computes the SHA256 sum of an arbitrary message (large memory segment).
Outputs an uint8_t[32]. Use for instance prhash(out_hash, 32) for a string representation.
- FLASHMEM void hash_sha1 (const uint8_t *msg, size_t msg_len, uint8_t *out_hash)
-
inline uint32_t rotr(uint32_t x, uint32_t n)
-
inline uint32_t ch(uint32_t x, uint32_t y, uint32_t z)
-
inline uint32_t maj(uint32_t x, uint32_t y, uint32_t z)
-
inline uint32_t sigma0(uint32_t x)
-
inline uint32_t sigma1(uint32_t x)
Variables
-
std::array<uint32_t, 64> K = {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2}
-
std::array<uint32_t, 4> H1 = {0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476}
-
struct _dcp_handle
Public Members
-
dcp_channel_t channel
Specify DCP channel.
-
dcp_key_slot_t keySlot
For operations with key (such as AES encryption/decryption), specify DCP key slot.
-
uint32_t swapConfig
For configuration of key, input, output byte/word swap options.
-
uint32_t keyWord[4]
-
uint32_t iv[4]
-
dcp_channel_t channel
-
union _dcp_hash_block
-
struct _dcp_hash_ctx_internal
Public Members
-
dcp_hash_block_t blk
memory buffer.
only full blocks are written to DCP during hash updates
-
size_t blksz
number of valid bytes in memory buffer
-
dcp_hash_algo_t algo
selected algorithm from the set of supported algorithms
-
dcp_hash_algo_state_t state
finite machine state of the hash software process
-
uint32_t fullMessageSize
track message size
-
uint32_t ctrl0
HASH_INIT and HASH_TERM flags.
-
uint32_t runningHash[9]
running hash.
up to SHA-256 plus size, that is 36 bytes.
-
dcp_handle_t *handle
-
dcp_hash_block_t blk
-
struct _dcp_work_packet
-
struct DCP_Type
DCP - Register Layout Typedef.
Public Members
-
volatile uint32_t CTRL
DCP control register 0, offset: 0x0.
-
uint8_t RESERVED_0[12]
-
volatile uint32_t STAT
DCP status register, offset: 0x10.
-
uint8_t RESERVED_1[12]
-
volatile uint32_t CHANNELCTRL
DCP channel control register, offset: 0x20.
-
uint8_t RESERVED_2[12]
-
volatile uint32_t CAPABILITY0
DCP capability 0 register, offset: 0x30.
-
uint8_t RESERVED_3[12]
-
volatile uint32_t CAPABILITY1
DCP capability 1 register, offset: 0x40.
-
uint8_t RESERVED_4[12]
-
volatile uint32_t CONTEXT
DCP context buffer pointer, offset: 0x50.
-
uint8_t RESERVED_5[12]
-
volatile uint32_t KEY
DCP key index, offset: 0x60.
-
uint8_t RESERVED_6[12]
-
volatile uint32_t KEYDATA
DCP key data, offset: 0x70.
-
uint8_t RESERVED_7[12]
-
volatile uint32_t PACKET0
DCP work packet 0 status register, offset: 0x80.
-
uint8_t RESERVED_8[12]
-
volatile uint32_t PACKET1
DCP work packet 1 status register, offset: 0x90.
-
uint8_t RESERVED_9[12]
-
volatile uint32_t PACKET2
DCP work packet 2 status register, offset: 0xA0.
-
uint8_t RESERVED_10[12]
-
volatile uint32_t PACKET3
DCP work packet 3 status register, offset: 0xB0.
-
uint8_t RESERVED_11[12]
-
volatile uint32_t PACKET4
DCP work packet 4 status register, offset: 0xC0.
-
uint8_t RESERVED_12[12]
-
volatile uint32_t PACKET5
DCP work packet 5 status register, offset: 0xD0.
-
uint8_t RESERVED_13[12]
-
volatile uint32_t PACKET6
DCP work packet 6 status register, offset: 0xE0.
-
uint8_t RESERVED_14[28]
-
volatile uint32_t CH0CMDPTR
DCP channel 0 command pointer address register, offset: 0x100.
-
uint8_t RESERVED_15[12]
-
volatile uint32_t CH0SEMA
DCP channel 0 semaphore register, offset: 0x110.
-
uint8_t RESERVED_16[12]
-
volatile uint32_t CH0STAT
DCP channel 0 status register, offset: 0x120.
-
uint8_t RESERVED_17[12]
-
volatile uint32_t CH0OPTS
DCP channel 0 options register, offset: 0x130.
-
uint8_t RESERVED_18[12]
-
volatile uint32_t CH1CMDPTR
DCP channel 1 command pointer address register, offset: 0x140.
-
uint8_t RESERVED_19[12]
-
volatile uint32_t CH1SEMA
DCP channel 1 semaphore register, offset: 0x150.
-
uint8_t RESERVED_20[12]
-
volatile uint32_t CH1STAT
DCP channel 1 status register, offset: 0x160.
-
uint8_t RESERVED_21[12]
-
volatile uint32_t CH1OPTS
DCP channel 1 options register, offset: 0x170.
-
uint8_t RESERVED_22[12]
-
volatile uint32_t CH2CMDPTR
DCP channel 2 command pointer address register, offset: 0x180.
-
uint8_t RESERVED_23[12]
-
volatile uint32_t CH2SEMA
DCP channel 2 semaphore register, offset: 0x190.
-
uint8_t RESERVED_24[12]
-
volatile uint32_t CH2STAT
DCP channel 2 status register, offset: 0x1A0.
-
uint8_t RESERVED_25[12]
-
volatile uint32_t CH2OPTS
DCP channel 2 options register, offset: 0x1B0.
-
uint8_t RESERVED_26[12]
-
volatile uint32_t CH3CMDPTR
DCP channel 3 command pointer address register, offset: 0x1C0.
-
uint8_t RESERVED_27[12]
-
volatile uint32_t CH3SEMA
DCP channel 3 semaphore register, offset: 0x1D0.
-
uint8_t RESERVED_28[12]
-
volatile uint32_t CH3STAT
DCP channel 3 status register, offset: 0x1E0.
-
uint8_t RESERVED_29[12]
-
volatile uint32_t CH3OPTS
DCP channel 3 options register, offset: 0x1F0.
-
uint8_t RESERVED_30[524]
-
volatile uint32_t DBGSELECT
DCP debug select register, offset: 0x400.
-
uint8_t RESERVED_31[12]
-
volatile uint32_t DBGDATA
DCP debug data register, offset: 0x410.
-
uint8_t RESERVED_32[12]
-
volatile uint32_t PAGETABLE
DCP page table register, offset: 0x420.
-
uint8_t RESERVED_33[12]
-
volatile uint32_t VERSION
DCP version register, offset: 0x430.
-
volatile uint32_t CTRL
-
typedef enum utils::_dcp_ch_enable _dcp_ch_enable_t