Subversion Repositories FuelGauge

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f0xx_hal_smartcard_ex.c
4
  * @author  MCD Application Team
5
  * @brief   SMARTCARD HAL module driver.
6
  *          This file provides extended firmware functions to manage the following
7
  *          functionalities of the SmartCard.
8
  *           + Initialization and de-initialization functions
9
  *           + Peripheral Control functions
10
  *
11
  @verbatim
12
  =============================================================================
13
               ##### SMARTCARD peripheral extended features  #####
14
  =============================================================================
15
  [..]
16
  The Extended SMARTCARD HAL driver can be used as follows:
17
 
18
    (#) After having configured the SMARTCARD basic features with HAL_SMARTCARD_Init(),
19
        then program SMARTCARD advanced features if required (TX/RX pins swap, TimeOut,
20
        auto-retry counter,...) in the hsmartcard AdvancedInit structure.
21
  @endverbatim
22
  ******************************************************************************
23
  * @attention
24
  *
25
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
26
  * All rights reserved.</center></h2>
27
  *
28
  * This software component is licensed by ST under BSD 3-Clause license,
29
  * the "License"; You may not use this file except in compliance with the
30
  * License. You may obtain a copy of the License at:
31
  *                        opensource.org/licenses/BSD-3-Clause
32
  *
33
  ******************************************************************************
34
  */
35
#if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
36
/* Includes ------------------------------------------------------------------*/
37
#include "stm32f0xx_hal.h"
38
 
39
/** @addtogroup STM32F0xx_HAL_Driver
40
  * @{
41
  */
42
 
43
/** @defgroup SMARTCARDEx SMARTCARDEx
44
  * @brief SMARTCARD Extended HAL module driver
45
  * @{
46
  */
47
#ifdef HAL_SMARTCARD_MODULE_ENABLED
48
 
49
/* Private typedef -----------------------------------------------------------*/
50
/* Private define ------------------------------------------------------------*/
51
/* Private macros ------------------------------------------------------------*/
52
/* Private variables ---------------------------------------------------------*/
53
/* Private function prototypes -----------------------------------------------*/
54
/* Exported functions --------------------------------------------------------*/
55
/** @defgroup SMARTCARDEx_Exported_Functions  SMARTCARD Extended Exported Functions
56
  * @{
57
  */
58
 
59
/** @defgroup SMARTCARDEx_Exported_Functions_Group1 Extended Peripheral Control functions
60
  * @brief    Extended control functions
61
  *
62
@verbatim
63
  ===============================================================================
64
                      ##### Peripheral Control functions #####
65
  ===============================================================================
66
  [..]
67
  This subsection provides a set of functions allowing to initialize the SMARTCARD.
68
     (+) HAL_SMARTCARDEx_BlockLength_Config() API allows to configure the Block Length on the fly
69
     (+) HAL_SMARTCARDEx_TimeOut_Config() API allows to configure the receiver timeout value on the fly
70
     (+) HAL_SMARTCARDEx_EnableReceiverTimeOut() API enables the receiver timeout feature
71
     (+) HAL_SMARTCARDEx_DisableReceiverTimeOut() API disables the receiver timeout feature
72
 
73
@endverbatim
74
  * @{
75
  */
76
 
77
/** @brief Update on the fly the SMARTCARD block length in RTOR register.
78
  * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
79
  *                    the configuration information for the specified SMARTCARD module.
80
  * @param BlockLength SMARTCARD block length (8-bit long at most)
81
  * @retval None
82
  */
83
void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength)
84
{
85
  MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_BLEN, ((uint32_t)BlockLength << USART_RTOR_BLEN_Pos));
86
}
87
 
88
/** @brief Update on the fly the receiver timeout value in RTOR register.
89
  * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
90
  *                    the configuration information for the specified SMARTCARD module.
91
  * @param TimeOutValue receiver timeout value in number of baud blocks. The timeout
92
  *                     value must be less or equal to 0x0FFFFFFFF.
93
  * @retval None
94
  */
95
void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue)
96
{
97
  assert_param(IS_SMARTCARD_TIMEOUT_VALUE(hsmartcard->Init.TimeOutValue));
98
  MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_RTO, TimeOutValue);
99
}
100
 
101
/** @brief Enable the SMARTCARD receiver timeout feature.
102
  * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
103
  *                    the configuration information for the specified SMARTCARD module.
104
  * @retval HAL status
105
  */
106
HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
107
{
108
  if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
109
  {
110
    /* Process Locked */
111
    __HAL_LOCK(hsmartcard);
112
 
113
    hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
114
 
115
    /* Set the USART RTOEN bit */
116
    SET_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
117
 
118
    hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
119
 
120
    /* Process Unlocked */
121
    __HAL_UNLOCK(hsmartcard);
122
 
123
    return HAL_OK;
124
  }
125
  else
126
  {
127
    return HAL_BUSY;
128
  }
129
}
130
 
131
/** @brief Disable the SMARTCARD receiver timeout feature.
132
  * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains
133
  *                    the configuration information for the specified SMARTCARD module.
134
  * @retval HAL status
135
  */
136
HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard)
137
{
138
  if (hsmartcard->gState == HAL_SMARTCARD_STATE_READY)
139
  {
140
    /* Process Locked */
141
    __HAL_LOCK(hsmartcard);
142
 
143
    hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY;
144
 
145
    /* Clear the USART RTOEN bit */
146
    CLEAR_BIT(hsmartcard->Instance->CR2, USART_CR2_RTOEN);
147
 
148
    hsmartcard->gState = HAL_SMARTCARD_STATE_READY;
149
 
150
    /* Process Unlocked */
151
    __HAL_UNLOCK(hsmartcard);
152
 
153
    return HAL_OK;
154
  }
155
  else
156
  {
157
    return HAL_BUSY;
158
  }
159
}
160
 
161
/**
162
  * @}
163
  */
164
 
165
/** @defgroup SMARTCARDEx_Exported_Functions_Group2 Extended Peripheral IO operation functions
166
  * @brief   SMARTCARD Transmit and Receive functions
167
  *
168
  * @{
169
  */
170
 
171
/**
172
  * @}
173
  */
174
 
175
 
176
/**
177
  * @}
178
  */
179
 
180
/** @defgroup SMARTCARDEx_Private_Functions  SMARTCARD Extended Private Functions
181
  * @{
182
  */
183
 
184
/**
185
  * @}
186
  */
187
 
188
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
189
 
190
/**
191
  * @}
192
  */
193
 
194
/**
195
  * @}
196
  */
197
#endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)  */
198
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/