STM32CubeWL/Projects/NUCLEO-WL55JC/Applications/KMS/KMS_Blob_Example/Inc/ymodem.h

103 lines
4.3 KiB
C

/**
******************************************************************************
* @file ymodem.h
* @author MCD Application Team
* @brief This file contains definitions for Ymodem functionalities.
******************************************************************************
* @attention
*
* Copyright (c) 2020 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file in
* the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef YMODEM_H_
#define YMODEM_H_
/** @addtogroup USER_APP User App Example
* @{
*/
/** @addtogroup FW_UPDATE Firmware Update Example
* @{
*/
/* Includes ------------------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
typedef enum
{
COM_OK = 0x00U, /*!< OK */
COM_ERROR = 0x01U, /*!< Error */
COM_ABORT = 0x02U, /*!< Abort */
COM_TIMEOUT = 0x03U, /*!< Timeout */
COM_DATA = 0x04U, /*!< Data */
COM_LIMIT = 0x05U /*!< Limit*/
} COM_StatusTypeDef; /*!< Comm status structures definition */
typedef struct
{
HAL_StatusTypeDef(* Ymodem_HeaderPktRxCpltCallback)(uint32_t uFileSize);
HAL_StatusTypeDef(* Ymodem_DataPktRxCpltCallback)(uint8_t *pData, uint32_t uFlashDestination, uint32_t uSize);
} YMODEM_CallbacksTypeDef;
/* Exported constants --------------------------------------------------------*/
/* Packet structure defines */
#define PACKET_HEADER_SIZE ((uint32_t)3U) /*!<Header Size*/
#define PACKET_DATA_INDEX ((uint32_t)4U) /*!<Data Index*/
#define PACKET_START_INDEX ((uint32_t)1U) /*!<Start Index*/
#define PACKET_NUMBER_INDEX ((uint32_t)2U) /*!<Packet Number Index*/
#define PACKET_CNUMBER_INDEX ((uint32_t)3U) /*!<Cnumber Index*/
#define PACKET_TRAILER_SIZE ((uint32_t)2U) /*!<Trailer Size*/
#define PACKET_OVERHEAD_SIZE (PACKET_HEADER_SIZE + PACKET_TRAILER_SIZE - 1U) /*!<Overhead Size*/
#define PACKET_SIZE ((uint32_t)128U) /*!<Packet Size*/
#define PACKET_1K_SIZE ((uint32_t)1024U) /*!<Packet 1K Size*/
/* /-------- Packet in IAP memory ------------------------------------------\
* | 0 | 1 | 2 | 3 | 4 | ... | n+4 | n+5 | n+6 |
* |------------------------------------------------------------------------|
* | unused | start | number | !num | data[0] | ... | data[n] | crc0 | crc1 |
* \------------------------------------------------------------------------/
* the first byte is left unused for memory alignment reasons */
#define FILE_NAME_LENGTH ((uint32_t)64U) /*!< File name length*/
#define FILE_SIZE_LENGTH ((uint32_t)16U) /*!< File size length*/
#define SOH ((uint8_t)0x01U) /*!< start of 128-byte data packet */
#define STX ((uint8_t)0x02U) /*!< start of 1024-byte data packet */
#define EOT ((uint8_t)0x04U) /*!< end of transmission */
#define ACK ((uint8_t)0x06U) /*!< acknowledge */
#define NAK ((uint8_t)0x15U) /*!< negative acknowledge */
#define CA ((uint8_t)0x18U) /*!< two of these in succession aborts transfer */
#define CRC16 ((uint8_t)0x43U) /*!< 'C' == 0x43, request 16-bit CRC */
#define RB ((uint8_t)0x72U) /*!< Startup sequence */
#define NEGATIVE_BYTE ((uint8_t)0xFFU) /*!< Negative Byte*/
#define ABORT1 ((uint8_t)0x41U) /* 'A' == 0x41, abort by user */
#define ABORT2 ((uint8_t)0x61U) /* 'a' == 0x61, abort by user */
#define NAK_TIMEOUT ((uint32_t)0x100000U) /*!< NAK Timeout*/
#define DOWNLOAD_TIMEOUT ((uint32_t)1000U) /* One second retry delay */
#define MAX_ERRORS ((uint32_t)5U) /*!< Maximum number of retry*/
/* Exported functions ------------------------------------------------------- */
void Ymodem_Init(void);
COM_StatusTypeDef Ymodem_Receive(uint32_t *puSize, uint32_t uFlashDestination, YMODEM_CallbacksTypeDef *appCb);
/**
* @}
*/
/**
* @}
*/
#endif /* YMODEM_H_ */