current_v/Inc/nec_infrared.h

142 lines
4.7 KiB
C
Raw Normal View History

2025-12-31 08:21:43 +08:00
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : nce_infrared.h
* @brief : <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
* @version : 1.0
* @changelog : version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD> 2025.11.13
******************************************************************************
* @attention
*
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
* THIS SOFTWARE is licensed under the Mulan PSL v1.
* can use this software according to the terms and conditions of the Mulan PSL v1.
* You may obtain a copy of Mulan PSL v1 at:
* http://license.coscl.org.cn/MulanPSL
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v1 for more details.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __NCE_INFRARED_H
#define __NCE_INFRARED_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include "fm33lg0xx_fl.h"
/* <20><><EFBFBD>Ӷ<EFBFBD>Malloc<6F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> */
#include "stdlib.h"
#define NEC_INFRARED_GPIO_PORT GPIOC
#define NEC_INFRARED_GPIO_PIN FL_GPIO_PIN_15
/************************** NEC<45><43><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EAB6A8> **************************/
// NECЭ<43><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣨷ָߵ͵<DFB5>ƽ<EFBFBD><C6BD>1MHz<48><7A><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD>
#define NEC_START_LOW_US 9000 // <20><>ʼλ<CABC>͵<EFBFBD>ƽ<EFBFBD><C6BD>9ms
#define NEC_START_HIGH_US 4500 // <20><>ʼλ<CABC>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>4.5ms
#define NEC_DATA_LOW_US 560 // <20><><EFBFBD><EFBFBD>λ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>560<36><30>s<EFBFBD><73>0<EFBFBD><30>1<EFBFBD>ĵ͵<C4B5>ƽ<EFBFBD><C6BD>ͬ<EFBFBD><CDAC>
#define NEC_DATA0_HIGH_US 560 // <20><><EFBFBD><EFBFBD>0<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>560<36><30>s
#define NEC_DATA1_HIGH_US 1690 // <20><><EFBFBD><EFBFBD>1<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>1690<39><30>s
// <20>ݴ<EFBFBD><DDB4><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>20%<25><>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NEC_TOLERANCE_85(x) ((x) * 80 / 100)
#define NEC_TOLERANCE_115(x) ((x) * 120 / 100)
// <20><>ʼλ<CABC>ߵ͵<DFB5>ƽ<EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Χ
#define NEC_START_LOW_MIN NEC_TOLERANCE_85(NEC_START_LOW_US) // 7650
#define NEC_START_LOW_MAX NEC_TOLERANCE_115(NEC_START_LOW_US) // 10350
#define NEC_START_HIGH_MIN NEC_TOLERANCE_85(NEC_START_HIGH_US) // 3825
#define NEC_START_HIGH_MAX NEC_TOLERANCE_115(NEC_START_HIGH_US) // 5175
// <20><><EFBFBD><EFBFBD>λ<EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Χ
#define NEC_DATA_LOW_MIN NEC_TOLERANCE_85(NEC_DATA_LOW_US) // 476
#define NEC_DATA_LOW_MAX NEC_TOLERANCE_115(NEC_DATA_LOW_US) // 644
#define NEC_DATA0_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA0_HIGH_US) // 476
#define NEC_DATA0_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA0_HIGH_US) // 644
#define NEC_DATA1_HIGH_MIN NEC_TOLERANCE_85(NEC_DATA1_HIGH_US) // 1436
#define NEC_DATA1_HIGH_MAX NEC_TOLERANCE_115(NEC_DATA1_HIGH_US) // 1943
#define NEC_START_FALLING_MIN (NEC_START_LOW_MIN + NEC_START_HIGH_MIN)
#define NEC_START_FALLING_MAX (NEC_START_LOW_MAX + NEC_START_HIGH_MAX)
#define NEC_DATA0_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA0_HIGH_MIN)
#define NEC_DATA0_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA0_HIGH_MAX)
#define NEC_DATA1_FALLING_MIN (NEC_DATA_LOW_MIN + NEC_DATA1_HIGH_MIN)
#define NEC_DATA1_FALLING_MAX (NEC_DATA_LOW_MAX + NEC_DATA1_HIGH_MAX)
// <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȶ<EFBFBD><C8B6><EFBFBD>0
#define NEC_DATA_BYTES 4 // <20><>ַ+<2B><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>+<2B><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
#define NEC_BITS_PER_BYTE 8 // ÿ<>ֽ<EFBFBD>
#define NEC_TOTAL_BITS (NEC_DATA_BYTES * NEC_BITS_PER_BYTE)
#define NEC_CODE_NUM_4 0xEB142322
#define NEC_CODE_NUM_6 0xE9162322
#define NEC_CODE_TIMER 0xF6092322
/************************** <20><><EFBFBD><EFBFBD>״̬ö<CCAC><C3B6> **************************/
typedef enum
{
IR_STATE_IDLE, // <20><><EFBFBD><EFBFBD>״̬ <20>ȴ<EFBFBD><C8B4><EFBFBD>ʼ<EFBFBD>źŵĵ<C5B5>һ<EFBFBD><D2BB><EFBFBD>½<EFBFBD><C2BD><EFBFBD>
IR_STATE_WAIT_DATA_END, // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} IR_State;
/************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8> **************************/
typedef struct
{
IR_State ir_state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
uint16_t pulse_width_array[33]; // <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڵij<DAB5><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t pulse_width_index; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ǰ<EFBFBD><EFBFBD><E6B4A2><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB>
uint8_t clear_delay; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
uint32_t received_data;
uint32_t received_data_index;
uint32_t pulse_width;
uint32_t ic_value_last;
uint32_t ic_value_current;
uint8_t ok_count;
bool decode_error;
uint16_t code_464_ing; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>464У<34><D0A3>
} Infrared;
/************************** <20><><EFBFBD><EFBFBD><E2BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************/
void nec_infrared_init(void); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
void LPTIM_IRQHandler(void);
#ifdef __cplusplus
}
#endif
#endif /* __FM33_QUEUE_H */
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/