STM32CubeWL/Projects/NUCLEO-WL55JC/Applications/KMS/KMS_Derive_Key/Src/com.c

313 lines
7.4 KiB
C

/**
******************************************************************************
* @file com.c
* @author MCD Application Team
* @brief COM module.
* This file provides set of firmware functions to manage Com
* 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.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "com.h"
#include "stm32wlxx_hal.h"
#if defined(__ICCARM__)
#include <LowLevelIOInterface.h>
#endif /* __ICCARM__ */
/** @addtogroup USER_APP User App Example
* @{
*/
/** @addtogroup USER_APP_COMMON Common
* @{
*/
/** @defgroup COM_Private_Defines Private Defines
* @{
*/
#if defined (__ICCARM__)
/* New definition from EWARM V9, compatible with EWARM8 */
int iar_fputc(int ch);
#define PUTCHAR_PROTOTYPE int iar_fputc(int ch)
#elif defined (__ARMCC_VERSION)
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__) && !defined(__ARMCC_VERSION)
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif /* __GNUC__ */
/**
* @}
*/
/** @defgroup COM_Private_Variables Exported Variables
* @{
*/
static UART_HandleTypeDef UartHandle; /*!< Uart Handler*/
/**
* @}
*/
/** @defgroup COM_Exported_Functions Exported Functions
* @{
*/
/** @defgroup COM_Initialization_Functions Initialization Functions
* @{
*/
/**
* @brief Initialize COM module.
* @param None.
* @retval HAL Status.
*/
HAL_StatusTypeDef COM_Init(void)
{
#if defined(__GNUC__)
setvbuf(stdout, NULL, _IONBF, 0);
#endif /* __GNUC__ */
/* USART resources configuration (Clock, GPIO pins and USART registers) ----*/
/* USART configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
UartHandle.Instance = COM_UART;
UartHandle.Init.BaudRate = 115200U;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_RX | UART_MODE_TX;
UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT;
UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
return HAL_UART_Init(&UartHandle);
}
/**
* @brief DeInitialize COM module.
* @retval None.
* @retval HAL Status.
*/
HAL_StatusTypeDef COM_DeInit(void)
{
/*
* ADD SRC CODE HERE
* ...
*/
return HAL_OK;
}
/**
* @brief UART MSP Init.
* @param huart: UART handler pointer.
* @retval None.
*/
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if (huart->Instance == COM_UART)
{
/* Peripheral Clock Enable */
COM_UART_CLK_ENABLE();
/* GPIO Ports Clock Enable */
COM_UART_TX_GPIO_CLK_ENABLE();
COM_UART_RX_GPIO_CLK_ENABLE();
/*Configure GPIO pins : COM_UART_TX_Pin */
GPIO_InitStruct.Pin = COM_UART_TX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = COM_UART_TX_AF;
HAL_GPIO_Init(COM_UART_TX_GPIO_PORT, &GPIO_InitStruct);
/*Configure GPIO pins : COM_UART_RX_Pin */
GPIO_InitStruct.Pin = COM_UART_RX_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = COM_UART_RX_AF;
HAL_GPIO_Init(COM_UART_RX_GPIO_PORT, &GPIO_InitStruct);
}
}
/**
* @brief UART MSP DeInit.
* @param huart: UART handler pointer.
* @retval None.
*/
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
{
if (huart->Instance == COM_UART)
{
/* Peripheral clock disable */
COM_UART_CLK_DISABLE();
HAL_GPIO_DeInit(COM_UART_TX_GPIO_PORT, COM_UART_TX_PIN);
HAL_GPIO_DeInit(COM_UART_RX_GPIO_PORT, COM_UART_RX_PIN);
}
}
/**
* @}
*/
/** @defgroup COM_Control_Functions Control Functions
* @{
*/
/**
* @brief Transmit Data.
* @param uDataLength: Data pointer to the Data to transmit.
* @param uTimeout: Timeout duration.
* @retval Status of the Transmit operation.
*/
HAL_StatusTypeDef COM_Transmit(uint8_t *Data, uint16_t uDataLength, uint32_t uTimeout)
{
return HAL_UART_Transmit(&UartHandle, (uint8_t *)Data, uDataLength, uTimeout);
}
/**
* @brief Receive Data.
* @param uDataLength: Data pointer to the Data to receive.
* @param uTimeout: Timeout duration.
* @retval Status of the Receive operation.
*/
HAL_StatusTypeDef COM_Receive(uint8_t *Data, uint16_t uDataLength, uint32_t uTimeout)
{
return HAL_UART_Receive(&UartHandle, (uint8_t *)Data, uDataLength, uTimeout);
}
/**
* @brief Flush COM Input.
* @param None.
* @retval HAL_Status.
*/
HAL_StatusTypeDef COM_Flush(void)
{
/* Clean the input path */
__HAL_UART_FLUSH_DRREGISTER(&UartHandle);
return HAL_OK;
}
/**
* @}
*/
/** @addtogroup COM_Private_Functions
* @{
*/
/**
* @}
*/
/** @defgroup COM_Callback_Functions Callback Functions
* @{
*/
/**
* @brief Retargets the C library __write function to the IAR function iar_fputc.
* @param file: file descriptor.
* @param ptr: pointer to the buffer where the data is stored.
* @param len: length of the data to write in bytes.
* @retval length of the written data in bytes.
*/
#if defined(__ICCARM__)
size_t __write(int file, unsigned char const *ptr, size_t len)
{
size_t idx;
unsigned char const *pdata = ptr;
for (idx = 0; idx < len; idx++)
{
iar_fputc((int)*pdata);
pdata++;
}
return len;
}
#endif /* __ICCARM__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval ch
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1U, 0xFFFFU);
return ch;
}
/**
* @brief Ymodem Header Packet Transfer completed callback.
* @param FileSize Dimension of the file that will be received.
* @retval None
*/
__weak HAL_StatusTypeDef Ymodem_HeaderPktRxCpltCallback(uint32_t uFileSize)
{
/* NOTE : This function should not be modified, when the callback is needed,
the Ymodem_HeaderPktRxCpltCallback could be implemented in the user file
*/
return HAL_OK;
}
/**
* @brief Ymodem Data Packet Transfer completed callback.
* @param pData Pointer to the buffer.
* @param Size Packet dimension.
* @retval None
*/
__weak HAL_StatusTypeDef Ymodem_DataPktRxCpltCallback(uint8_t *pData, uint32_t uFlashDestination, uint32_t uSize)
{
/* NOTE : This function should not be modified, when the callback is needed,
the Ymodem_DataPktRxCpltCallback could be implemented in the user file
*/
return HAL_OK;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/