[FL-1351] Wiegand read fix (#483)
* App accessor: fix external interrupts binding. Hal: removed InterruptTypeExternalInterrupt. * GPIO hal: add ex and simple init functions to F6 target * GPIO hal: add dummy alt fn to F6 target * RFID hal: update gpio hal usage * F5,F6: synchronize targets, backport VCP fixes, cleanup. Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									89d1b0546e
								
							
						
					
					
						commit
						eac8626c8c
					
				| @ -28,6 +28,9 @@ void AccessorApp::run(void) { | ||||
|     }; | ||||
| 
 | ||||
|     scenes[current_scene]->on_exit(this); | ||||
| 
 | ||||
|     wiegand.end(); | ||||
|     onewire_master.stop(); | ||||
| } | ||||
| 
 | ||||
| AccessorApp::AccessorApp() | ||||
|  | ||||
| @ -35,18 +35,14 @@ bool WIEGAND::available() { | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| void input_isr(void* _pin, void* _ctx) { | ||||
|     // interrupt manager get us pin constant, so...
 | ||||
|     uint32_t pin = (uint32_t)_pin; | ||||
| static void input_isr_d0(void* _ctx) { | ||||
|     WIEGAND* _this = static_cast<WIEGAND*>(_ctx); | ||||
|     _this->ReadD0(); | ||||
| } | ||||
| 
 | ||||
|     if(pin == gpio_ext_pa6.pin) { | ||||
|         _this->ReadD0(); | ||||
|     } | ||||
| 
 | ||||
|     if(pin == gpio_ext_pa7.pin) { | ||||
|         _this->ReadD1(); | ||||
|     } | ||||
| static void input_isr_d1(void* _ctx) { | ||||
|     WIEGAND* _this = static_cast<WIEGAND*>(_ctx); | ||||
|     _this->ReadD1(); | ||||
| } | ||||
| 
 | ||||
| void WIEGAND::begin() { | ||||
| @ -60,11 +56,19 @@ void WIEGAND::begin() { | ||||
|     const GpioPin* pinD0 = &gpio_ext_pa6; | ||||
|     const GpioPin* pinD1 = &gpio_ext_pa7; | ||||
| 
 | ||||
|     hal_gpio_init(pinD0, GpioModeInterruptFall, GpioPullNo, GpioSpeedLow); // Set D0 pin as input
 | ||||
|     hal_gpio_init(pinD1, GpioModeInterruptFall, GpioPullNo, GpioSpeedLow); // Set D1 pin as input
 | ||||
|     hal_gpio_init_simple(pinD0, GpioModeInterruptFall); // Set D0 pin as input
 | ||||
|     hal_gpio_init_simple(pinD1, GpioModeInterruptFall); // Set D1 pin as input
 | ||||
| 
 | ||||
|     api_interrupt_add( | ||||
|         input_isr, InterruptTypeExternalInterrupt, this); // Hardware interrupt - high to low pulse
 | ||||
|     hal_gpio_add_int_callback(pinD0, input_isr_d0, this); | ||||
|     hal_gpio_add_int_callback(pinD1, input_isr_d1, this); | ||||
| } | ||||
| 
 | ||||
| void WIEGAND::end() { | ||||
|     hal_gpio_remove_int_callback(&gpio_ext_pa6); | ||||
|     hal_gpio_remove_int_callback(&gpio_ext_pa7); | ||||
| 
 | ||||
|     hal_gpio_init_simple(&gpio_ext_pa6, GpioModeAnalog); | ||||
|     hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog); | ||||
| } | ||||
| 
 | ||||
| void WIEGAND::ReadD0() { | ||||
|  | ||||
| @ -4,6 +4,7 @@ class WIEGAND { | ||||
| public: | ||||
|     WIEGAND(); | ||||
|     void begin(); | ||||
|     void end(); | ||||
|     bool available(); | ||||
|     unsigned long getCode(); | ||||
|     unsigned long getCodeHigh(); | ||||
|  | ||||
| @ -14,7 +14,6 @@ typedef enum { | ||||
|     InterruptTypeComparatorTrigger, | ||||
|     InterruptTypeTimerOutputCompare, | ||||
|     InterruptTypeTimerUpdate, | ||||
|     InterruptTypeExternalInterrupt, | ||||
| } InterruptType; | ||||
| 
 | ||||
| /** Interrupt callback type */ | ||||
|  | ||||
| @ -86,6 +86,11 @@ void Error_Handler(void); | ||||
| #define iBTN_GPIO_Port GPIOB | ||||
| #define iBTN_Pin GPIO_PIN_14 | ||||
| 
 | ||||
| #define USART1_TX_Pin GPIO_PIN_6 | ||||
| #define USART1_TX_Port GPIOB | ||||
| #define USART1_RX_Pin GPIO_PIN_7 | ||||
| #define USART1_RX_Port GPIOB | ||||
| 
 | ||||
| #define SPI_D_MISO_GPIO_Port GPIOC | ||||
| #define SPI_D_MISO_Pin GPIO_PIN_2 | ||||
| #define SPI_D_MOSI_GPIO_Port GPIOB | ||||
|  | ||||
| @ -4,12 +4,12 @@ void MX_GPIO_Init(void) { | ||||
|     GPIO_InitTypeDef GPIO_InitStruct = {0}; | ||||
| 
 | ||||
|     /* GPIO Ports Clock Enable */ | ||||
|     __HAL_RCC_GPIOC_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOH_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOA_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOE_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOC_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOD_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOE_CLK_ENABLE(); | ||||
|     __HAL_RCC_GPIOH_CLK_ENABLE(); | ||||
| 
 | ||||
|     /*Configure GPIO pin Output Level */ | ||||
|     HAL_GPIO_WritePin(GPIOA, RF_SW_0_Pin|RF_SW_1_Pin, GPIO_PIN_RESET); | ||||
| @ -135,13 +135,22 @@ void MX_GPIO_Init(void) { | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; | ||||
|     HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct); | ||||
| 
 | ||||
|     /* EXTI interrupt init*/ | ||||
|     /* Enable all NVIC lines related to gpio */ | ||||
|     HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI0_IRQn); | ||||
| 
 | ||||
|     HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI1_IRQn); | ||||
| 
 | ||||
|     HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI2_IRQn); | ||||
| 
 | ||||
|     HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI3_IRQn); | ||||
| 
 | ||||
|     HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI4_IRQn); | ||||
| 
 | ||||
|     HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); | ||||
| 
 | ||||
|  | ||||
| @ -1,121 +1,55 @@ | ||||
| /**
 | ||||
|   ****************************************************************************** | ||||
|   * @file    usart.c | ||||
|   * @brief   This file provides code for the configuration | ||||
|   *          of the USART instances. | ||||
|   ****************************************************************************** | ||||
|   * @attention | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
| 
 | ||||
| /* Includes ------------------------------------------------------------------*/ | ||||
| #include "usart.h" | ||||
| 
 | ||||
| /* USER CODE BEGIN 0 */ | ||||
| 
 | ||||
| /* USER CODE END 0 */ | ||||
| 
 | ||||
| UART_HandleTypeDef huart1; | ||||
| 
 | ||||
| /* USART1 init function */ | ||||
| void MX_USART1_UART_Init(void) { | ||||
|     huart1.Instance = USART1; | ||||
|     huart1.Init.BaudRate = 115200; | ||||
|     huart1.Init.WordLength = UART_WORDLENGTH_8B; | ||||
|     huart1.Init.StopBits = UART_STOPBITS_1; | ||||
|     huart1.Init.Parity = UART_PARITY_NONE; | ||||
|     huart1.Init.Mode = UART_MODE_TX_RX; | ||||
|     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; | ||||
|     huart1.Init.OverSampling = UART_OVERSAMPLING_16; | ||||
|     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; | ||||
|     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; | ||||
|     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; | ||||
| 
 | ||||
| void MX_USART1_UART_Init(void) | ||||
| { | ||||
|     if (HAL_UART_Init(&huart1) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| 
 | ||||
|   huart1.Instance = USART1; | ||||
|   huart1.Init.BaudRate = 115200; | ||||
|   huart1.Init.WordLength = UART_WORDLENGTH_8B; | ||||
|   huart1.Init.StopBits = UART_STOPBITS_1; | ||||
|   huart1.Init.Parity = UART_PARITY_NONE; | ||||
|   huart1.Init.Mode = UART_MODE_TX_RX; | ||||
|   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; | ||||
|   huart1.Init.OverSampling = UART_OVERSAMPLING_16; | ||||
|   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; | ||||
|   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; | ||||
|   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; | ||||
|   if (HAL_UART_Init(&huart1) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|     if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| 
 | ||||
|     if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| 
 | ||||
|     if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) { | ||||
|         Error_Handler(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) | ||||
| { | ||||
| void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) { | ||||
|     GPIO_InitTypeDef GPIO_InitStruct = {0}; | ||||
|     if(uartHandle->Instance==USART1) { | ||||
| 
 | ||||
|   GPIO_InitTypeDef GPIO_InitStruct = {0}; | ||||
|   if(uartHandle->Instance==USART1) | ||||
|   { | ||||
|   /* USER CODE BEGIN USART1_MspInit 0 */ | ||||
| 
 | ||||
|   /* USER CODE END USART1_MspInit 0 */ | ||||
|     /* USART1 clock enable */ | ||||
|     __HAL_RCC_USART1_CLK_ENABLE(); | ||||
| 
 | ||||
|     __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||
|     /**USART1 GPIO Configuration
 | ||||
|     PB6     ------> USART1_TX | ||||
|     PB7     ------> USART1_RX | ||||
|     */ | ||||
|     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; | ||||
|     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|     GPIO_InitStruct.Alternate = GPIO_AF7_USART1; | ||||
|     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); | ||||
| 
 | ||||
|   /* USER CODE BEGIN USART1_MspInit 1 */ | ||||
| 
 | ||||
|   /* USER CODE END USART1_MspInit 1 */ | ||||
|   } | ||||
|         __HAL_RCC_USART1_CLK_ENABLE(); | ||||
|         __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||
|         GPIO_InitStruct.Pin = USART1_TX_Pin|USART1_RX_Pin; | ||||
|         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|         GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|         GPIO_InitStruct.Alternate = GPIO_AF7_USART1; | ||||
|         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) | ||||
| { | ||||
| 
 | ||||
|   if(uartHandle->Instance==USART1) | ||||
|   { | ||||
|   /* USER CODE BEGIN USART1_MspDeInit 0 */ | ||||
| 
 | ||||
|   /* USER CODE END USART1_MspDeInit 0 */ | ||||
|     /* Peripheral clock disable */ | ||||
|     __HAL_RCC_USART1_CLK_DISABLE(); | ||||
| 
 | ||||
|     /**USART1 GPIO Configuration
 | ||||
|     PB6     ------> USART1_TX | ||||
|     PB7     ------> USART1_RX | ||||
|     */ | ||||
|     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7); | ||||
| 
 | ||||
|   /* USER CODE BEGIN USART1_MspDeInit 1 */ | ||||
| 
 | ||||
|   /* USER CODE END USART1_MspDeInit 1 */ | ||||
|   } | ||||
| void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) { | ||||
|     if(uartHandle->Instance==USART1) { | ||||
|         __HAL_RCC_USART1_CLK_DISABLE(); | ||||
|         HAL_GPIO_DeInit(GPIOB, USART1_TX_Pin|USART1_RX_Pin); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /* USER CODE BEGIN 1 */ | ||||
| 
 | ||||
| /* USER CODE END 1 */ | ||||
| 
 | ||||
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ | ||||
|  | ||||
| @ -18,9 +18,4 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) { | ||||
| /* Timer update event */ | ||||
| void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) { | ||||
|     api_interrupt_call(InterruptTypeTimerUpdate, htim); | ||||
| } | ||||
| 
 | ||||
| /* External interrupt event */ | ||||
| void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { | ||||
|     api_interrupt_call(InterruptTypeExternalInterrupt, (void*)(uint32_t)GPIO_Pin); | ||||
| } | ||||
| } | ||||
| @ -152,7 +152,7 @@ void MX_GPIO_Init(void) { | ||||
|     GPIO_InitStruct.Pin = CC1101_CS_Pin; | ||||
|     HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct); | ||||
| 
 | ||||
|     /* EXTI interrupt init*/ | ||||
|     /* Enable all NVIC lines related to gpio */ | ||||
|     HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); | ||||
|     HAL_NVIC_EnableIRQ(EXTI0_IRQn); | ||||
| 
 | ||||
|  | ||||
| @ -41,11 +41,28 @@ static uint8_t hal_gpio_get_pin_num(const GpioPin* gpio) { | ||||
|     return pin_num; | ||||
| } | ||||
| 
 | ||||
| void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode) { | ||||
|     hal_gpio_init(gpio, mode, GpioPullNo, GpioSpeedLow); | ||||
| } | ||||
| 
 | ||||
| void hal_gpio_init( | ||||
|     const GpioPin* gpio, | ||||
|     const GpioMode mode, | ||||
|     const GpioPull pull, | ||||
|     const GpioSpeed speed) { | ||||
|     // we cannot set alternate mode in this function
 | ||||
|     furi_assert(mode != GpioModeAltFunctionPushPull); | ||||
|     furi_assert(mode != GpioModeAltFunctionOpenDrain); | ||||
| 
 | ||||
|     hal_gpio_init_ex(gpio, mode, GpioPullNo, GpioSpeedLow, GpioAltFnUnused); | ||||
| } | ||||
| 
 | ||||
| void hal_gpio_init_ex( | ||||
|     const GpioPin* gpio, | ||||
|     const GpioMode mode, | ||||
|     const GpioPull pull, | ||||
|     const GpioSpeed speed, | ||||
|     const GpioAltFn alt_fn) { | ||||
|     uint32_t sys_exti_port = GET_SYSCFG_EXTI_PORT(gpio->port); | ||||
|     uint32_t sys_exti_line = GET_SYSCFG_EXTI_LINE(gpio->pin); | ||||
|     uint32_t exti_line = GET_EXTI_LINE(gpio->pin); | ||||
| @ -112,27 +129,19 @@ void hal_gpio_init( | ||||
|             LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ANALOG); | ||||
|         } | ||||
|     } | ||||
|     __enable_irq(); | ||||
| } | ||||
| 
 | ||||
| void hal_gpio_init_alt( | ||||
|     const GpioPin* gpio, | ||||
|     const GpioMode mode, | ||||
|     const GpioPull pull, | ||||
|     const GpioSpeed speed, | ||||
|     const GpioAltFn alt_fn) { | ||||
|     hal_gpio_init(gpio, mode, pull, speed); | ||||
|     if(mode == GpioModeAltFunctionPushPull || mode == GpioModeAltFunctionOpenDrain) { | ||||
|         // enable alternate mode
 | ||||
|         LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE); | ||||
| 
 | ||||
|     __disable_irq(); | ||||
|     // enable alternate mode
 | ||||
|     LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE); | ||||
| 
 | ||||
|     // set alternate function
 | ||||
|     if(hal_gpio_get_pin_num(gpio) < 8) { | ||||
|         LL_GPIO_SetAFPin_0_7(gpio->port, gpio->pin, alt_fn); | ||||
|     } else { | ||||
|         LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn); | ||||
|         // set alternate function
 | ||||
|         if(hal_gpio_get_pin_num(gpio) < 8) { | ||||
|             LL_GPIO_SetAFPin_0_7(gpio->port, gpio->pin, alt_fn); | ||||
|         } else { | ||||
|             LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     __enable_irq(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -153,6 +153,8 @@ typedef enum { | ||||
|     GpioAltFn14LPTIM2 = 14, /*!< LPTIM2 Alternate Function mapping */ | ||||
| 
 | ||||
|     GpioAltFn15EVENTOUT = 15, /*!< EVENTOUT Alternate Function mapping */ | ||||
| 
 | ||||
|     GpioAltFnUnused = 16, /*!< just dummy value */ | ||||
| } GpioAltFn; | ||||
| 
 | ||||
| /**
 | ||||
| @ -164,7 +166,14 @@ typedef struct { | ||||
| } GpioPin; | ||||
| 
 | ||||
| /**
 | ||||
|  * GPIO initialization function | ||||
|  * GPIO initialization function, simple version | ||||
|  * @param gpio  GpioPin | ||||
|  * @param mode  GpioMode | ||||
|  */ | ||||
| void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode); | ||||
| 
 | ||||
| /**
 | ||||
|  * GPIO initialization function, normal version | ||||
|  * @param gpio  GpioPin | ||||
|  * @param mode  GpioMode | ||||
|  * @param pull  GpioPull | ||||
| @ -177,14 +186,14 @@ void hal_gpio_init( | ||||
|     const GpioSpeed speed); | ||||
| 
 | ||||
| /**
 | ||||
|  * GPIO initialization with alternative function | ||||
|  * GPIO initialization function, extended version | ||||
|  * @param gpio  GpioPin | ||||
|  * @param mode  GpioMode | ||||
|  * @param pull  GpioPull | ||||
|  * @param speed GpioSpeed | ||||
|  * @param alt_fn GpioAltFn | ||||
|  */ | ||||
| void hal_gpio_init_alt( | ||||
| void hal_gpio_init_ex( | ||||
|     const GpioPin* gpio, | ||||
|     const GpioMode mode, | ||||
|     const GpioPull pull, | ||||
|  | ||||
| @ -26,7 +26,7 @@ void api_hal_rfid_pins_emulate() { | ||||
|     api_hal_ibutton_pin_low(); | ||||
| 
 | ||||
|     // pull pin to timer out
 | ||||
|     hal_gpio_init_alt( | ||||
|     hal_gpio_init_ex( | ||||
|         &gpio_rfid_pull, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1); | ||||
| 
 | ||||
|     // pull rfid antenna from carrier side
 | ||||
| @ -44,7 +44,7 @@ void api_hal_rfid_pins_read() { | ||||
|     hal_gpio_write(&gpio_rfid_pull, false); | ||||
| 
 | ||||
|     // carrier pin to timer out
 | ||||
|     hal_gpio_init_alt( | ||||
|     hal_gpio_init_ex( | ||||
|         &gpio_rfid_carrier_out, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1); | ||||
| 
 | ||||
|     // comparator in
 | ||||
|  | ||||
| @ -46,11 +46,15 @@ void _api_hal_vcp_control_line(uint8_t state) { | ||||
|     bool rts = state & 0b10; | ||||
| 
 | ||||
|     if (rts) { | ||||
|         api_hal_vcp->alive = true; | ||||
|         _api_hal_vcp_rx_callback(&ascii_soh, 1); // SOH
 | ||||
|         if (!api_hal_vcp->alive) { | ||||
|             api_hal_vcp->alive = true; | ||||
|             _api_hal_vcp_rx_callback(&ascii_soh, 1); // SOH
 | ||||
|         } | ||||
|     } else { | ||||
|         api_hal_vcp->alive = false; | ||||
|         _api_hal_vcp_rx_callback(&ascii_eot, 1); // EOT
 | ||||
|         if (api_hal_vcp->alive) { | ||||
|             _api_hal_vcp_rx_callback(&ascii_eot, 1); // EOT
 | ||||
|             api_hal_vcp->alive = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     osSemaphoreRelease(api_hal_vcp->tx_semaphore); | ||||
|  | ||||
| @ -18,9 +18,4 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) { | ||||
| /* Timer update event */ | ||||
| void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) { | ||||
|     api_interrupt_call(InterruptTypeTimerUpdate, htim); | ||||
| } | ||||
| 
 | ||||
| /* External interrupt event */ | ||||
| void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { | ||||
|     api_interrupt_call(InterruptTypeExternalInterrupt, (void*)(uint32_t)GPIO_Pin); | ||||
| } | ||||
| } | ||||
| @ -66,13 +66,6 @@ extern "C"{ | ||||
|    *  Some useful macro definitions   * | ||||
|    * -------------------------------- */ | ||||
| 
 | ||||
| #ifndef MAX | ||||
| #define MAX( x, y )          (((x)>(y))?(x):(y)) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef MIN | ||||
| #define MIN( x, y )          (((x)<(y))?(x):(y)) | ||||
| #endif | ||||
| 
 | ||||
| #define MODINC( a, m )       M_BEGIN  (a)++;  if ((a)>=(m)) (a)=0;  M_END | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SG
						SG