Compare commits
2 Commits
cache_butt
...
merlokk-pp
Author | SHA1 | Date | |
---|---|---|---|
bb1cfb58f2 | |||
a96fa0a637 |
@ -6,7 +6,7 @@ AR=$(PREFIX)arm-none-eabi-ar
|
|||||||
DRIVER_LIBS := lib/stm32l4xx_hal_pcd.c lib/stm32l4xx_hal_pcd_ex.c lib/stm32l4xx_ll_gpio.c \
|
DRIVER_LIBS := lib/stm32l4xx_hal_pcd.c lib/stm32l4xx_hal_pcd_ex.c lib/stm32l4xx_ll_gpio.c \
|
||||||
lib/stm32l4xx_ll_rcc.c lib/stm32l4xx_ll_rng.c lib/stm32l4xx_ll_tim.c \
|
lib/stm32l4xx_ll_rcc.c lib/stm32l4xx_ll_rng.c lib/stm32l4xx_ll_tim.c \
|
||||||
lib/stm32l4xx_ll_usb.c lib/stm32l4xx_ll_utils.c lib/stm32l4xx_ll_pwr.c \
|
lib/stm32l4xx_ll_usb.c lib/stm32l4xx_ll_utils.c lib/stm32l4xx_ll_pwr.c \
|
||||||
lib/stm32l4xx_ll_usart.c lib/stm32l4xx_ll_spi.c lib/stm32l4xx_ll_exti.c
|
lib/stm32l4xx_ll_usart.c lib/stm32l4xx_ll_spi.c
|
||||||
|
|
||||||
USB_LIB := lib/usbd/usbd_cdc.c lib/usbd/usbd_cdc_if.c lib/usbd/usbd_composite.c \
|
USB_LIB := lib/usbd/usbd_cdc.c lib/usbd/usbd_cdc_if.c lib/usbd/usbd_composite.c \
|
||||||
lib/usbd/usbd_conf.c lib/usbd/usbd_core.c lib/usbd/usbd_ioreq.c \
|
lib/usbd/usbd_conf.c lib/usbd/usbd_core.c lib/usbd/usbd_ioreq.c \
|
||||||
|
@ -1,290 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file stm32l4xx_ll_exti.c
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief EXTI LL module driver.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* <h2><center>© Copyright (c) 2017 STMicroelectronics.
|
|
||||||
* All rights reserved.</center></h2>
|
|
||||||
*
|
|
||||||
* This software component is licensed by ST under BSD 3-Clause license,
|
|
||||||
* the "License"; You may not use this file except in compliance with the
|
|
||||||
* License. You may obtain a copy of the License at:
|
|
||||||
* opensource.org/licenses/BSD-3-Clause
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
#if defined(USE_FULL_LL_DRIVER)
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32l4xx_ll_exti.h"
|
|
||||||
#ifdef USE_FULL_ASSERT
|
|
||||||
#include "stm32_assert.h"
|
|
||||||
#else
|
|
||||||
#define assert_param(expr) ((void)0U)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @addtogroup STM32L4xx_LL_Driver
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined (EXTI)
|
|
||||||
|
|
||||||
/** @defgroup EXTI_LL EXTI
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Private types -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Private constants ---------------------------------------------------------*/
|
|
||||||
/* Private macros ------------------------------------------------------------*/
|
|
||||||
/** @addtogroup EXTI_LL_Private_Macros
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define IS_LL_EXTI_LINE_0_31(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_0_31) == 0x00000000U)
|
|
||||||
#define IS_LL_EXTI_LINE_32_63(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_32_63) == 0x00000000U)
|
|
||||||
|
|
||||||
#define IS_LL_EXTI_MODE(__VALUE__) (((__VALUE__) == LL_EXTI_MODE_IT) \
|
|
||||||
|| ((__VALUE__) == LL_EXTI_MODE_EVENT) \
|
|
||||||
|| ((__VALUE__) == LL_EXTI_MODE_IT_EVENT))
|
|
||||||
|
|
||||||
|
|
||||||
#define IS_LL_EXTI_TRIGGER(__VALUE__) (((__VALUE__) == LL_EXTI_TRIGGER_NONE) \
|
|
||||||
|| ((__VALUE__) == LL_EXTI_TRIGGER_RISING) \
|
|
||||||
|| ((__VALUE__) == LL_EXTI_TRIGGER_FALLING) \
|
|
||||||
|| ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
|
|
||||||
/* Exported functions --------------------------------------------------------*/
|
|
||||||
/** @addtogroup EXTI_LL_Exported_Functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup EXTI_LL_EF_Init
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief De-initialize the EXTI registers to their default reset values.
|
|
||||||
* @retval An ErrorStatus enumeration value:
|
|
||||||
* - 0x00: EXTI registers are de-initialized
|
|
||||||
*/
|
|
||||||
uint32_t LL_EXTI_DeInit(void)
|
|
||||||
{
|
|
||||||
/* Interrupt mask register set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(IMR1, 0xFF820000U);
|
|
||||||
/* Event mask register set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(EMR1, 0x00000000U);
|
|
||||||
/* Rising Trigger selection register set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(RTSR1, 0x00000000U);
|
|
||||||
/* Falling Trigger selection register set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(FTSR1, 0x00000000U);
|
|
||||||
/* Software interrupt event register set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(SWIER1, 0x00000000U);
|
|
||||||
/* Pending register clear */
|
|
||||||
LL_EXTI_WriteReg(PR1, 0x007DFFFFU);
|
|
||||||
|
|
||||||
/* Interrupt mask register 2 set to default reset values */
|
|
||||||
#if defined(LL_EXTI_LINE_40)
|
|
||||||
LL_EXTI_WriteReg(IMR2, 0x00000187U);
|
|
||||||
#else
|
|
||||||
LL_EXTI_WriteReg(IMR2, 0x00000087U);
|
|
||||||
#endif
|
|
||||||
/* Event mask register 2 set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(EMR2, 0x00000000U);
|
|
||||||
/* Rising Trigger selection register 2 set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(RTSR2, 0x00000000U);
|
|
||||||
/* Falling Trigger selection register 2 set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(FTSR2, 0x00000000U);
|
|
||||||
/* Software interrupt event register 2 set to default reset values */
|
|
||||||
LL_EXTI_WriteReg(SWIER2, 0x00000000U);
|
|
||||||
/* Pending register 2 clear */
|
|
||||||
LL_EXTI_WriteReg(PR2, 0x00000078U);
|
|
||||||
|
|
||||||
return 0x00u;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct.
|
|
||||||
* @param EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure.
|
|
||||||
* @retval An ErrorStatus enumeration value:
|
|
||||||
* - 0x00: EXTI registers are initialized
|
|
||||||
* - any other calue : wrong configuration
|
|
||||||
*/
|
|
||||||
uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct)
|
|
||||||
{
|
|
||||||
uint32_t status = 0x00u;
|
|
||||||
|
|
||||||
/* Check the parameters */
|
|
||||||
assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31));
|
|
||||||
assert_param(IS_LL_EXTI_LINE_32_63(EXTI_InitStruct->Line_32_63));
|
|
||||||
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand));
|
|
||||||
assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode));
|
|
||||||
|
|
||||||
/* ENABLE LineCommand */
|
|
||||||
if (EXTI_InitStruct->LineCommand != DISABLE)
|
|
||||||
{
|
|
||||||
assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger));
|
|
||||||
|
|
||||||
/* Configure EXTI Lines in range from 0 to 31 */
|
|
||||||
if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE)
|
|
||||||
{
|
|
||||||
switch (EXTI_InitStruct->Mode)
|
|
||||||
{
|
|
||||||
case LL_EXTI_MODE_IT:
|
|
||||||
/* First Disable Event on provided Lines */
|
|
||||||
LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
/* Then Enable IT on provided Lines */
|
|
||||||
LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_MODE_EVENT:
|
|
||||||
/* First Disable IT on provided Lines */
|
|
||||||
LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
/* Then Enable Event on provided Lines */
|
|
||||||
LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_MODE_IT_EVENT:
|
|
||||||
/* Directly Enable IT & Event on provided Lines */
|
|
||||||
LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
status = 0x01u;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE)
|
|
||||||
{
|
|
||||||
switch (EXTI_InitStruct->Trigger)
|
|
||||||
{
|
|
||||||
case LL_EXTI_TRIGGER_RISING:
|
|
||||||
/* First Disable Falling Trigger on provided Lines */
|
|
||||||
LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
/* Then Enable Rising Trigger on provided Lines */
|
|
||||||
LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_TRIGGER_FALLING:
|
|
||||||
/* First Disable Rising Trigger on provided Lines */
|
|
||||||
LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
/* Then Enable Falling Trigger on provided Lines */
|
|
||||||
LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_TRIGGER_RISING_FALLING:
|
|
||||||
LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
status |= 0x02u;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Configure EXTI Lines in range from 32 to 63 */
|
|
||||||
if (EXTI_InitStruct->Line_32_63 != LL_EXTI_LINE_NONE)
|
|
||||||
{
|
|
||||||
switch (EXTI_InitStruct->Mode)
|
|
||||||
{
|
|
||||||
case LL_EXTI_MODE_IT:
|
|
||||||
/* First Disable Event on provided Lines */
|
|
||||||
LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
/* Then Enable IT on provided Lines */
|
|
||||||
LL_EXTI_EnableIT_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_MODE_EVENT:
|
|
||||||
/* First Disable IT on provided Lines */
|
|
||||||
LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
/* Then Enable Event on provided Lines */
|
|
||||||
LL_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_MODE_IT_EVENT:
|
|
||||||
/* Directly Enable IT & Event on provided Lines */
|
|
||||||
LL_EXTI_EnableIT_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
LL_EXTI_EnableEvent_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
status |= 0x04u;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE)
|
|
||||||
{
|
|
||||||
switch (EXTI_InitStruct->Trigger)
|
|
||||||
{
|
|
||||||
case LL_EXTI_TRIGGER_RISING:
|
|
||||||
/* First Disable Falling Trigger on provided Lines */
|
|
||||||
LL_EXTI_DisableFallingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
/* Then Enable IT on provided Lines */
|
|
||||||
LL_EXTI_EnableRisingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_TRIGGER_FALLING:
|
|
||||||
/* First Disable Rising Trigger on provided Lines */
|
|
||||||
LL_EXTI_DisableRisingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
/* Then Enable Falling Trigger on provided Lines */
|
|
||||||
LL_EXTI_EnableFallingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
case LL_EXTI_TRIGGER_RISING_FALLING:
|
|
||||||
LL_EXTI_EnableRisingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
LL_EXTI_EnableFallingTrig_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
status = ERROR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* DISABLE LineCommand */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* De-configure EXTI Lines in range from 0 to 31 */
|
|
||||||
LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
|
||||||
/* De-configure EXTI Lines in range from 32 to 63 */
|
|
||||||
LL_EXTI_DisableIT_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
LL_EXTI_DisableEvent_32_63(EXTI_InitStruct->Line_32_63);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set each @ref LL_EXTI_InitTypeDef field to default value.
|
|
||||||
* @param EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct)
|
|
||||||
{
|
|
||||||
EXTI_InitStruct->Line_0_31 = LL_EXTI_LINE_NONE;
|
|
||||||
EXTI_InitStruct->Line_32_63 = LL_EXTI_LINE_NONE;
|
|
||||||
EXTI_InitStruct->LineCommand = DISABLE;
|
|
||||||
EXTI_InitStruct->Mode = LL_EXTI_MODE_IT;
|
|
||||||
EXTI_InitStruct->Trigger = LL_EXTI_TRIGGER_FALLING;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* defined (EXTI) */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif /* USE_FULL_LL_DRIVER */
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
File diff suppressed because it is too large
Load Diff
@ -38,8 +38,6 @@ void wait_for_usb_tether();
|
|||||||
|
|
||||||
|
|
||||||
uint32_t __90_ms = 0;
|
uint32_t __90_ms = 0;
|
||||||
uint32_t __last_button_press_time = 0;
|
|
||||||
uint32_t __last_button_bounce_time = 0;
|
|
||||||
uint32_t __device_status = 0;
|
uint32_t __device_status = 0;
|
||||||
uint32_t __last_update = 0;
|
uint32_t __last_update = 0;
|
||||||
extern PCD_HandleTypeDef hpcd;
|
extern PCD_HandleTypeDef hpcd;
|
||||||
@ -77,21 +75,6 @@ void TIM6_DAC_IRQHandler()
|
|||||||
ctaphid_update_status(__device_status);
|
ctaphid_update_status(__device_status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (is_touch_button_pressed == IS_BUTTON_PRESSED)
|
|
||||||
{
|
|
||||||
if (IS_BUTTON_PRESSED())
|
|
||||||
{
|
|
||||||
// Only allow 1 press per 25 ms.
|
|
||||||
if ((millis() - __last_button_bounce_time) > 25)
|
|
||||||
{
|
|
||||||
__last_button_press_time = millis();
|
|
||||||
}
|
|
||||||
__last_button_bounce_time = millis();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef IS_BOOTLOADER
|
#ifndef IS_BOOTLOADER
|
||||||
// NFC sending WTX if needs
|
// NFC sending WTX if needs
|
||||||
if (device_is_nfc() == NFC_IS_ACTIVE)
|
if (device_is_nfc() == NFC_IS_ACTIVE)
|
||||||
@ -101,21 +84,6 @@ void TIM6_DAC_IRQHandler()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interrupt on rising edge of button (button released)
|
|
||||||
void EXTI0_IRQHandler(void)
|
|
||||||
{
|
|
||||||
EXTI->PR1 = EXTI->PR1;
|
|
||||||
if (is_physical_button_pressed == IS_BUTTON_PRESSED)
|
|
||||||
{
|
|
||||||
// Only allow 1 press per 25 ms.
|
|
||||||
if ((millis() - __last_button_bounce_time) > 25)
|
|
||||||
{
|
|
||||||
__last_button_press_time = millis();
|
|
||||||
}
|
|
||||||
__last_button_bounce_time = millis();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Global USB interrupt handler
|
// Global USB interrupt handler
|
||||||
void USB_IRQHandler(void)
|
void USB_IRQHandler(void)
|
||||||
{
|
{
|
||||||
@ -525,41 +493,6 @@ static int handle_packets()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wait_for_button_activate(uint32_t wait)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
uint32_t start = millis();
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if ((start + wait) < millis())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
delay(1);
|
|
||||||
ret = handle_packets();
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
} while (!IS_BUTTON_PRESSED());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
static int wait_for_button_release(uint32_t wait)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
uint32_t start = millis();
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if ((start + wait) < millis())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
delay(1);
|
|
||||||
ret = handle_packets();
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
} while (IS_BUTTON_PRESSED());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ctap_user_presence_test(uint32_t up_delay)
|
int ctap_user_presence_test(uint32_t up_delay)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -567,7 +500,6 @@ int ctap_user_presence_test(uint32_t up_delay)
|
|||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SKIP_BUTTON_CHECK_WITH_DELAY
|
#if SKIP_BUTTON_CHECK_WITH_DELAY
|
||||||
int i=500;
|
int i=500;
|
||||||
while(i--)
|
while(i--)
|
||||||
@ -580,41 +512,53 @@ int ctap_user_presence_test(uint32_t up_delay)
|
|||||||
#elif SKIP_BUTTON_CHECK_FAST
|
#elif SKIP_BUTTON_CHECK_FAST
|
||||||
delay(2);
|
delay(2);
|
||||||
ret = handle_packets();
|
ret = handle_packets();
|
||||||
if (ret)
|
if (ret) return ret;
|
||||||
return ret;
|
|
||||||
goto done;
|
goto done;
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t t1 = millis();
|
||||||
// If button was pressed within last [2] seconds, succeed.
|
|
||||||
if (__last_button_press_time && (millis() - __last_button_press_time < 2000))
|
|
||||||
{
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set LED status and wait.
|
|
||||||
led_rgb(0xff3520);
|
led_rgb(0xff3520);
|
||||||
|
|
||||||
// Block and wait for some time.
|
if (IS_BUTTON_PRESSED == is_touch_button_pressed)
|
||||||
ret = wait_for_button_activate(up_delay);
|
{
|
||||||
if (ret) return ret;
|
// Wait for user to release touch button if it's already pressed
|
||||||
ret = wait_for_button_release(up_delay);
|
while (IS_BUTTON_PRESSED())
|
||||||
if (ret) return ret;
|
|
||||||
|
|
||||||
// If button was pressed within last [2] seconds, succeed.
|
|
||||||
if (__last_button_press_time && (millis() - __last_button_press_time < 2000))
|
|
||||||
{
|
{
|
||||||
goto done;
|
if (t1 + up_delay < millis())
|
||||||
|
{
|
||||||
|
printf1(TAG_GEN,"Button not pressed\n");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
ret = handle_packets();
|
||||||
|
if (ret) return ret;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t1 = millis();
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (t1 + up_delay < millis())
|
||||||
|
{
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
delay(1);
|
||||||
|
ret = handle_packets();
|
||||||
|
if (ret) return ret;
|
||||||
|
}
|
||||||
|
while (! IS_BUTTON_PRESSED());
|
||||||
|
|
||||||
|
led_rgb(0x001040);
|
||||||
|
|
||||||
|
delay(50);
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
#if SKIP_BUTTON_CHECK_WITH_DELAY || SKIP_BUTTON_CHECK_FAST
|
||||||
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
ret = wait_for_button_release(up_delay);
|
#endif
|
||||||
__last_button_press_time = 0;
|
return 1;
|
||||||
return 1;
|
|
||||||
|
|
||||||
|
fail:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ctap_generate_rng(uint8_t * dst, size_t num)
|
int ctap_generate_rng(uint8_t * dst, size_t num)
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include "stm32l4xx_ll_rng.h"
|
#include "stm32l4xx_ll_rng.h"
|
||||||
#include "stm32l4xx_ll_spi.h"
|
#include "stm32l4xx_ll_spi.h"
|
||||||
#include "stm32l4xx_ll_usb.h"
|
#include "stm32l4xx_ll_usb.h"
|
||||||
#include "stm32l4xx_ll_exti.h"
|
|
||||||
#include "stm32l4xx_hal_pcd.h"
|
#include "stm32l4xx_hal_pcd.h"
|
||||||
#include "stm32l4xx_hal.h"
|
#include "stm32l4xx_hal.h"
|
||||||
|
|
||||||
@ -850,17 +849,19 @@ void init_gpio(void)
|
|||||||
LL_GPIO_SetPinMode(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_MODE_INPUT);
|
LL_GPIO_SetPinMode(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_MODE_INPUT);
|
||||||
LL_GPIO_SetPinPull(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_PULL_UP);
|
LL_GPIO_SetPinPull(SOLO_BUTTON_PORT,SOLO_BUTTON_PIN,LL_GPIO_PULL_UP);
|
||||||
|
|
||||||
#ifndef IS_BOOTLOADER
|
#ifdef SOLO_AMS_IRQ_PORT
|
||||||
LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTA, LL_SYSCFG_EXTI_LINE0);
|
// SAVE POWER
|
||||||
LL_EXTI_InitTypeDef EXTI_InitStruct;
|
// LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
|
||||||
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_0; // GPIOA_0
|
// /**/
|
||||||
EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
|
// LL_GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
EXTI_InitStruct.LineCommand = ENABLE;
|
// GPIO_InitStruct.Pin = SOLO_AMS_IRQ_PIN;
|
||||||
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
// GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
|
||||||
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING;
|
// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
|
||||||
LL_EXTI_Init(&EXTI_InitStruct);
|
// LL_GPIO_Init(SOLO_AMS_IRQ_PORT, &GPIO_InitStruct);
|
||||||
|
//
|
||||||
NVIC_EnableIRQ(EXTI0_IRQn);
|
//
|
||||||
|
// LL_GPIO_SetPinMode(SOLO_AMS_IRQ_PORT,SOLO_AMS_IRQ_PIN,LL_GPIO_MODE_INPUT);
|
||||||
|
// LL_GPIO_SetPinPull(SOLO_AMS_IRQ_PORT,SOLO_AMS_IRQ_PIN,LL_GPIO_PULL_UP);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -687,7 +687,14 @@ void nfc_process_block(uint8_t * buf, unsigned int len)
|
|||||||
|
|
||||||
if (IS_PPSS_CMD(buf[0]))
|
if (IS_PPSS_CMD(buf[0]))
|
||||||
{
|
{
|
||||||
printf1(TAG_NFC, "NFC_CMD_PPSS\r\n");
|
printf1(TAG_NFC, "NFC_CMD_PPSS [%d] 0x%02x\r\n", len, (len > 2) ? buf[2] : 0);
|
||||||
|
|
||||||
|
if (buf[1] == 0x11 && (buf[2] & 0x0f) == 0x00) {
|
||||||
|
nfc_write_frame(buf, 1); // ack with correct start byte
|
||||||
|
} else {
|
||||||
|
printf1(TAG_NFC, "NFC_CMD_PPSS ERROR!!!\r\n");
|
||||||
|
nfc_write_frame("\x00", 1); // this should not happend. but iso14443-4 dont have NACK here, so just 0x00
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (IS_IBLOCK(buf[0]))
|
else if (IS_IBLOCK(buf[0]))
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user