STM32CubeWL/Projects/NUCLEO-WL55JC/Applications/KMS/KMS_Blob_Example/Src/common.c

132 lines
3.2 KiB
C

/**
******************************************************************************
* @file common.c
* @author MCD Application Team
* @brief COMMON module.
* This file provides set of firmware functions to manage Common
* 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.
*
******************************************************************************
*/
/** @addtogroup USER_APP User App Example
* @{
*/
/** @addtogroup USER_APP_COMMON Common
* @{
*/
/* Includes ------------------------------------------------------------------*/
#include "common.h"
#include "main.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @brief Convert a string to an integer
* @param pInputStr: The string to be converted
* @param pIntNum: The integer value
* @retval 1: Correct
* 0: Error
*/
uint32_t Str2Int(uint8_t *pInputStr, uint32_t *pIntNum)
{
uint32_t i = 0U;
uint32_t res = 0U;
uint32_t val = 0U;
if ((pInputStr[0U] == '0') && ((pInputStr[1U] == 'x') || (pInputStr[1U] == 'X')))
{
i = 2U;
while ((i < 11U) && (pInputStr[i] != '\0'))
{
if (ISVALIDHEX(pInputStr[i]))
{
val = (val << 4U) + CONVERTHEX(pInputStr[i]);
}
else
{
/* Return 0, Invalid input */
res = 0U;
break;
}
i++;
}
/* valid result */
if (pInputStr[i] == '\0')
{
*pIntNum = val;
res = 1U;
}
}
else /* max 10-digit decimal input */
{
while ((i < 11U) && (res != 1U))
{
if (pInputStr[i] == '\0')
{
*pIntNum = val;
/* return 1 */
res = 1U;
}
else if (((pInputStr[i] == 'k') || (pInputStr[i] == 'K')) && (i > 0U))
{
val = val << 10U;
*pIntNum = val;
res = 1U;
}
else if (((pInputStr[i] == 'm') || (pInputStr[i] == 'M')) && (i > 0U))
{
val = val << 20U;
*pIntNum = val;
res = 1U;
}
else if (ISVALIDDEC(pInputStr[i]))
{
val = val * 10U + CONVERTDEC(pInputStr[i]);
}
else
{
/* return 0, Invalid input */
res = 0U;
break;
}
i++;
}
}
return res;
}
/**
* @brief Transmit a byte to the HyperTerminal
* @param param The byte to be sent
* @retval HAL_StatusTypeDef HAL_OK if OK
*/
HAL_StatusTypeDef Serial_PutByte(uint8_t uParam)
{
return COM_Transmit(&uParam, 1U, TX_TIMEOUT);
}
/**
* @}
*/
/**
* @}
*/