kopia lustrzana https://github.com/espressif/esp-idf
118 wiersze
3.8 KiB
C
118 wiersze
3.8 KiB
C
// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/**
|
|
* @file
|
|
* @brief Core dump checksum interface.
|
|
*
|
|
* This file contains all the functions required by the core dump component to
|
|
* calculate checksums for data to write (or already written) on the flash.
|
|
* Currently, both CRC32 and SHA256 are supported, but this interface is
|
|
* implementation independent.
|
|
*/
|
|
|
|
#ifndef CORE_DUMP_CHECKSUM_H_
|
|
#define CORE_DUMP_CHECKSUM_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Maximum possible length for a checksum (regardless of the
|
|
* implentation). This can be modified in the future if a new implementation
|
|
* requires a larger size.
|
|
*/
|
|
#define COREDUMP_CHECKSUM_MAX_LEN 32
|
|
|
|
/**
|
|
* @brief Type describing a checksum context. It is an abstract type as it is
|
|
* implementation independent, it is defined in the C source counterpart.
|
|
*/
|
|
typedef struct core_dump_checksum_ctx core_dump_checksum_ctx;
|
|
|
|
/**
|
|
* @brief Type returned by `esp_core_dump_checksum_finish()`. It describes a
|
|
* checksum as an array of bytes. It can also be provided to `esp_core_dump_print_checksum()`.
|
|
*/
|
|
typedef uint8_t* core_dump_checksum_bytes;
|
|
|
|
|
|
/**
|
|
* @brief Get ELF core dump version.
|
|
*
|
|
* @note Currently, this is used in the core dump header to recognize the
|
|
* checksum used for a certain dump, as the version varies with the checksum.
|
|
*
|
|
* @return Version of the core dump used.
|
|
*/
|
|
uint32_t esp_core_dump_elf_version(void);
|
|
|
|
/**
|
|
* @brief Initialize checksum calculation for the given context.
|
|
*
|
|
* @param wr_data Core dump checksum context to fill.
|
|
*/
|
|
void esp_core_dump_checksum_init(core_dump_checksum_ctx** wr_data);
|
|
|
|
/**
|
|
* @brief Update checksum calculation by integrating the given data in the context.
|
|
*
|
|
* @param wr_data Core dump checksum context.
|
|
* @param data Pointer to the data to integrate in the checksum calculation.
|
|
* This is usually the new data to write (or already written) on
|
|
* the flash.
|
|
*/
|
|
void esp_core_dump_checksum_update(core_dump_checksum_ctx* wr_data, void* data, size_t data_len);
|
|
|
|
/**
|
|
* @brief Terminate and return checksum calculated for the given context.
|
|
*
|
|
* @param wr_data Core dump checksum context. It can be NULL only if chs_ptr is
|
|
* also NULL.
|
|
* @param chs_ptr Pointer used to return the checksum calculated. It can be
|
|
* NULL, in this case, it will be ignored but the correct size
|
|
* of the checksum will be returned.
|
|
*
|
|
* @return The size, in bytes, of the checksum.
|
|
*/
|
|
uint32_t esp_core_dump_checksum_finish(core_dump_checksum_ctx* wr_data, core_dump_checksum_bytes* chs_ptr);
|
|
|
|
/**
|
|
* @brief Return the size of the checksums.
|
|
*
|
|
* @note This is equivalent to `esp_core_dump_checksum_finish(NULL, NULL)`.
|
|
*
|
|
* @return The size, in bytes, of the checksums.
|
|
*/
|
|
uint32_t esp_core_dump_checksum_size(void);
|
|
|
|
/**
|
|
* @brief Print a message followed by the checksum given as a parameter.
|
|
*
|
|
* @note The checksum will be printed in hex format and followed by \r\n.
|
|
*
|
|
* @param msg Message to print before the checksum. Can be NULL.
|
|
* @param checksum Checksum to print. Must not be NULL.
|
|
*/
|
|
void esp_core_dump_print_checksum(const char* msg, core_dump_checksum_bytes checksum);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|