653 lines
16 KiB
C
653 lines
16 KiB
C
|
|
/* USER CODE BEGIN Header */
|
|||
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @file bs83b12_capacitive_touch.c
|
|||
|
|
* @author Motor Control SDK Team, Yuwell Software XiangenWang
|
|||
|
|
* @brief Voice Recognition Module Initialization Section,
|
|||
|
|
including peripheral initialization and message node insertion, etc.
|
|||
|
|
* @version 1.0
|
|||
|
|
* @changelog version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD>汾 2025.11.13
|
|||
|
|
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
******************************************************************************
|
|||
|
|
* @attention
|
|||
|
|
*
|
|||
|
|
* <h2><center>© Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China.
|
|||
|
|
* All rights reserved.</center></h2>
|
|||
|
|
*
|
|||
|
|
* Redistribution and use in source and binary forms, with or without
|
|||
|
|
* modification, are permitted, provided that the following conditions are met:
|
|||
|
|
*
|
|||
|
|
* 1. Redistribution of source code must retain the above copyright notice,
|
|||
|
|
* this list of conditions and the following disclaimer.
|
|||
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|||
|
|
* this list of conditions and the following disclaimer in the documentation
|
|||
|
|
* and/or other materials provided with the distribution.
|
|||
|
|
* 3. Neither the name of Yuwell Software nor the names of other
|
|||
|
|
* contributors to this software may be used to endorse or promote products
|
|||
|
|
* derived from this software without specific written permission.
|
|||
|
|
* 4. This software, including modifications and/or derivative works of this
|
|||
|
|
* software, must execute solely and exclusively on microcontroller or
|
|||
|
|
* microprocessor devices manufactured by or for Yuwell Software.
|
|||
|
|
* 5. Redistribution and use of this software other than as permitted under
|
|||
|
|
* this license is void and will automatically terminate your rights under
|
|||
|
|
* this license.
|
|||
|
|
*
|
|||
|
|
* THIS SOFTWARE IS PROVIDED BY Yuwell Software AND CONTRIBUTORS "AS IS"
|
|||
|
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
|||
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|||
|
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
|||
|
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
|||
|
|
* SHALL Yuwell Software OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|||
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|||
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|||
|
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|||
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|||
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|||
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
|
*
|
|||
|
|
******************************************************************************
|
|||
|
|
*/
|
|||
|
|
/* USER CODE END Header */
|
|||
|
|
#include "bs83b12_capacitive_touch.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define SDA_SET BS83B12_SDA_SET
|
|||
|
|
#define SCL_SET BS83B12_SCL_SET
|
|||
|
|
|
|||
|
|
#define SDA_CLEAR BS83B12_SDA_CLEAR
|
|||
|
|
#define SCL_CLEAR BS83B12_SCL_CLEAR
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
ACK,
|
|||
|
|
NACK
|
|||
|
|
}TYPE_ACK;
|
|||
|
|
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
INPUT,
|
|||
|
|
OUTPUT
|
|||
|
|
}SDA_MODE;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ʵ<EFBFBD>IO<49><4F><EFBFBD>Ʒ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD> *************************/
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
|
* @param us <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HT16K33Ҫ<EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @data 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static void I2C_Delay_us(uint32_t us)
|
|||
|
|
{
|
|||
|
|
FL_DelayUs(us);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2C<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD>Ӹ߱<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ٷ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>д
|
|||
|
|
* @author jarvis
|
|||
|
|
* @data 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static void I2C_Start(void)
|
|||
|
|
{
|
|||
|
|
SDA_SET();
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SDA_CLEAR();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2Cֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>SDA<EFBFBD>ӵͱ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ٷ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>Ȩ
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static void I2C_Stop(void)
|
|||
|
|
{
|
|||
|
|
SDA_CLEAR();
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SDA_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval uint8_t - Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><EFBFBD>(ACK)<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʾδ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><EFBFBD>(NACK)
|
|||
|
|
* @note SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC11<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽ<EFBFBD>ж<EFBFBD>Ӧ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static uint8_t I2C_ReceiveAck(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
uint8_t ack = 1;
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
SDA_SET(); // <20>ͷ<EFBFBD>SDA<44><41><EFBFBD><EFBFBD>
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
|
|||
|
|
|
|||
|
|
if((FL_GPIO_ReadInputPort(BS83B12_SDA_GPIO_GROUP)&BS83B12_SDA_GPIO_PIN) == 0)
|
|||
|
|
{
|
|||
|
|
ack = 0; // <20><><EFBFBD>Ӧ<E2B5BD><D3A6>
|
|||
|
|
}
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
|
|||
|
|
return ack;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief SDA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note Ϊʲô<EFBFBD><EFBFBD>©<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
|
|||
|
|
* @author <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @data 2025.11.19
|
|||
|
|
*/
|
|||
|
|
static void i2c_sda_mode_set(SDA_MODE mode)
|
|||
|
|
{
|
|||
|
|
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
|
|
|||
|
|
if(mode == INPUT)
|
|||
|
|
{
|
|||
|
|
GPIO_InitStruct.pin = BS83B12_SDA_GPIO_PIN;
|
|||
|
|
GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT;
|
|||
|
|
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
|
|||
|
|
GPIO_InitStruct.pull = FL_DISABLE;
|
|||
|
|
GPIO_InitStruct.remapPin = FL_DISABLE;
|
|||
|
|
GPIO_InitStruct.analogSwitch = FL_DISABLE;
|
|||
|
|
|
|||
|
|
FL_GPIO_Init(BS83B12_SDA_GPIO_GROUP, &GPIO_InitStruct);
|
|||
|
|
}else{
|
|||
|
|
GPIO_InitStruct.pin = BS83B12_SDA_GPIO_PIN; // ÿ<>η<EFBFBD><CEB7>ͽ<EFBFBD><CDBD><EFBFBD>֮ǰ<D6AE>һ<EFBFBD><D2BB>ð<EFBFBD>IO<49>ڳ<EFBFBD>ʼ<EFBFBD><CABC>?
|
|||
|
|
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT; // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
|
|||
|
|
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
|
|||
|
|
GPIO_InitStruct.pull = FL_DISABLE;
|
|||
|
|
GPIO_InitStruct.remapPin = FL_DISABLE;
|
|||
|
|
GPIO_InitStruct.analogSwitch = FL_DISABLE;
|
|||
|
|
|
|||
|
|
FL_GPIO_Init(BS83B12_SDA_GPIO_GROUP, &GPIO_InitStruct);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param data - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(MSB first)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.11.25
|
|||
|
|
*/
|
|||
|
|
static void I2C_SendByte(uint8_t data)
|
|||
|
|
{
|
|||
|
|
uint8_t i;
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
for(i = 0; i < 8; i++)
|
|||
|
|
{
|
|||
|
|
if(data & 0x80)
|
|||
|
|
{
|
|||
|
|
SDA_SET(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
|||
|
|
}else{
|
|||
|
|
SDA_CLEAR();
|
|||
|
|
}
|
|||
|
|
data <<= 1;
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2C<EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>/<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>
|
|||
|
|
* @param ack - Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ACK:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>, NACK:<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @retval <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(MSB first)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDA<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ack<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACK/NACKλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD>ƶ<EFBFBD><EFBFBD>ֽڶ<EFBFBD>ȡʱ<EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.12.05
|
|||
|
|
*/
|
|||
|
|
static uint8_t I2C_ReadByte(TYPE_ACK ack)
|
|||
|
|
{
|
|||
|
|
uint8_t dat = 0;
|
|||
|
|
uint32_t EEcount = 0;
|
|||
|
|
|
|||
|
|
i2c_sda_mode_set(OUTPUT);
|
|||
|
|
SDA_SET(); // <20>ͷ<EFBFBD>SDA
|
|||
|
|
|
|||
|
|
i2c_sda_mode_set(INPUT);
|
|||
|
|
for(uint8_t i=0; i<8; i++)
|
|||
|
|
{
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(5); // <20><><EFBFBD><EFBFBD>t_AA<41><41><EFBFBD><EFBFBD>600ns
|
|||
|
|
dat <<= 1;
|
|||
|
|
|
|||
|
|
if(FL_GPIO_GetInputPin(BS83B12_SDA_GPIO_GROUP,BS83B12_SDA_GPIO_PIN))
|
|||
|
|
{
|
|||
|
|
dat |= 0x01;
|
|||
|
|
EEcount++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
|
|||
|
|
i2c_sda_mode_set(OUTPUT);
|
|||
|
|
|
|||
|
|
SDA_CLEAR();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ACK/NACK
|
|||
|
|
if(ack == ACK)
|
|||
|
|
{
|
|||
|
|
SDA_CLEAR();
|
|||
|
|
}else{
|
|||
|
|
SDA_SET();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SCL_SET();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
SCL_CLEAR();
|
|||
|
|
I2C_Delay_us(1);
|
|||
|
|
|
|||
|
|
return dat;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ȡBS83B12<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param feedback_data - <EFBFBD>洢<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>ֽڿռ䣩
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD>ѭI2CЭ<EFBFBD>飬<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>Ϊ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ֽڷ<EFBFBD><EFBFBD><EFBFBD>NACK<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ֽڷ<EFBFBD><EFBFBD><EFBFBD>ACK
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.12.05
|
|||
|
|
*/
|
|||
|
|
static void bs83b12_read_byte(uint8_t* feedback_data)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
I2C_Start();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ+д<><D0B4><EFBFBD><EFBFBD><EEA3A8>ָ<EFBFBD><D6B8>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ġ<EFBFBD>ר<EFBFBD><D7A8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
|||
|
|
I2C_SendByte(BS83B12_ADDR | 0x00);
|
|||
|
|
if (I2C_ReceiveAck())
|
|||
|
|
{
|
|||
|
|
I2C_Stop(); // δ<>յ<EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Stop<6F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
I2C_SendByte(0x00);
|
|||
|
|
if (I2C_ReceiveAck())
|
|||
|
|
{
|
|||
|
|
I2C_Stop(); // δ<>յ<EFBFBD>ACK<43><4B><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
I2C_Start(); // <20>ظ<EFBFBD><D8B8><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
I2C_SendByte(BS83B12_ADDR | 0x01); // <20><><EFBFBD><EFBFBD><EFBFBD>0x01<30><31>
|
|||
|
|
if (I2C_ReceiveAck())
|
|||
|
|
{
|
|||
|
|
I2C_Stop(); // δ<>յ<EFBFBD>ACK<43><4B><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0;i < 3;i++)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(i == 2)
|
|||
|
|
{
|
|||
|
|
feedback_data[i] = I2C_ReadByte(NACK);
|
|||
|
|
}else{
|
|||
|
|
feedback_data[i] = I2C_ReadByte(ACK);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
I2C_Stop();
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>BS83B12<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>оƬд<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param send_data - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
* @param len - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD>ֽڳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD>ѭI2CдЭ<EFBFBD>飬ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ֽڵȴ<EFBFBD>ACK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>յ<EFBFBD>ACK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<EFBFBD><EFBFBD><EFBFBD>䲢<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.12.05
|
|||
|
|
*/
|
|||
|
|
static void bs83b12_write_byte(uint8_t* send_data, uint8_t len)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
I2C_Start();
|
|||
|
|
I2C_SendByte(BS83B12_ADDR | 0x00);
|
|||
|
|
if (I2C_ReceiveAck())
|
|||
|
|
{
|
|||
|
|
I2C_Stop(); // δ<>յ<EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Stop<6F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0;i < len;i++)
|
|||
|
|
{
|
|||
|
|
I2C_SendByte(send_data[i]);
|
|||
|
|
|
|||
|
|
if (I2C_ReceiveAck())
|
|||
|
|
{
|
|||
|
|
I2C_Stop(); // δ<>յ<EFBFBD>ACK<43><4B><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
I2C_Stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief BS83B12<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶơ<EFBFBD>I2C SCL/SDA<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.12.05
|
|||
|
|
*/
|
|||
|
|
void bs83b12_capacitive_touch_init(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>GPIO
|
|||
|
|
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
|
|
|||
|
|
GPIO_InitStruct.pin = ALARM_YELLOW_GPIO_PIN;
|
|||
|
|
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
|
|||
|
|
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
|
|||
|
|
GPIO_InitStruct.pull = FL_ENABLE;
|
|||
|
|
GPIO_InitStruct.remapPin = FL_DISABLE;
|
|||
|
|
GPIO_InitStruct.analogSwitch = FL_DISABLE;
|
|||
|
|
|
|||
|
|
FL_GPIO_Init(ALARM_YELLOW_GPIO_PORT, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>SCKΪ<4B><CEAA><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
GPIO_InitStruct.pin = BS83B12_SCL_GPIO_PIN;
|
|||
|
|
FL_GPIO_Init(BS83B12_SCL_GPIO_GROUP, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>SDAΪ<41><CEAA><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
GPIO_InitStruct.pin = BS83B12_SDA_GPIO_PIN;
|
|||
|
|
FL_GPIO_Init(BS83B12_SDA_GPIO_GROUP, &GPIO_InitStruct);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint8_t config_backlight_on[2] = {BS83B12_BACK_LIGHT_ON_BYTE0, BS83B12_BACK_LIGHT_ON_BYTE1};
|
|||
|
|
|
|||
|
|
bs83b12_write_byte(config_backlight_on, 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
|
static void process_121_event()
|
|||
|
|
{
|
|||
|
|
MsgQueueItem stm_item;
|
|||
|
|
MsgQueueItem queue_item;
|
|||
|
|
|
|||
|
|
// <20>·<EFBFBD>У<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>Ϣ
|
|||
|
|
queue_item.type = MSG_TYPE_CARLIB_SAVE;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(xOxygenEventGroupCheckBit(&global_event, EVENT_KEY121_PRESS))
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>121<32><31><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>ǰ<EFBFBD><C7B0><EFBFBD>ݵ<EFBFBD>EEPROM
|
|||
|
|
|
|||
|
|
peek_queue_node_by_type(&global_queue, MSG_TYPE_OXG_STM, &stm_item);
|
|||
|
|
|
|||
|
|
queue_item.data.carlib_data.netcode = stm_item.data.state_machine.data;
|
|||
|
|
modify_or_add_queue_node_by_type(&global_queue, MSG_TYPE_CARLIB_SAVE, queue_item); // <20>洢<EFBFBD><E6B4A2>ǰֵ
|
|||
|
|
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_KEY121_PRESS);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief BS83B12<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param NONE
|
|||
|
|
* @retval NONE
|
|||
|
|
* @note 1. <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ԣ<EFBFBD>
|
|||
|
|
* 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>KEY2<EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
|
* 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>KEY1<EFBFBD><EFBFBD>KEY2<EFBFBD><EFBFBD>KEY1<EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD>λKEY121<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
|
* 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>ʱʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>KEY121_TIMEOUT_TICKS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @author jarvis
|
|||
|
|
* @date 2025.12.05
|
|||
|
|
*/
|
|||
|
|
void bs83b12_touch_read_task(void)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
static uint8_t s_key121_step = 0; // 1-2-1<>л<EFBFBD><D0BB><EFBFBD><EFBFBD>裺0-<2D><>ʼ<EFBFBD><CABC>1-<2D>Ѱ<EFBFBD>key1<79><31>2-<2D>Ѱ<EFBFBD>key2
|
|||
|
|
static uint16_t s_key121_timeout_cnt = 0;
|
|||
|
|
|
|||
|
|
static uint8_t key2_filter_cnt = 0;
|
|||
|
|
static uint8_t key2_trigger_lock = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1=<3D>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>0=δ<><CEB4><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
uint8_t read_touch[3] = {0};
|
|||
|
|
uint8_t curr_key = BS83B12_KEY_NONE;
|
|||
|
|
|
|||
|
|
MsgQueueItem stm_item;
|
|||
|
|
MsgQueueItem time_item;
|
|||
|
|
|
|||
|
|
peek_queue_node_by_type(&global_queue, MSG_TYPE_OXG_STM, &stm_item); // <20><>ȡ<EFBFBD><C8A1>ǰ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
bs83b12_read_byte(read_touch);
|
|||
|
|
|
|||
|
|
if(((~(read_touch[0]+read_touch[1]) + 1)&0xFF) == read_touch[2]) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
curr_key = read_touch[0];
|
|||
|
|
}else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(((s_key121_step == 0)&&(curr_key == BS83B12_KEY2_CODE))&&\
|
|||
|
|
((stm_item.data.state_machine.oxg_stm == STM_ERROR_SHOUNTDOWN)||(stm_item.data.state_machine.oxg_stm == STM_ERROR_NONE_STOP)))
|
|||
|
|
{
|
|||
|
|
key2_filter_cnt++;
|
|||
|
|
if (key2_filter_cnt >= 1 && key2_trigger_lock == 0)
|
|||
|
|
{
|
|||
|
|
vOxygenEventGroupSetBits(&global_event, EVENT_KEY2_PRESS); // <20><><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0>°<EFBFBD><C2B0><EFBFBD>2<EFBFBD><32><EFBFBD>¼<EFBFBD>
|
|||
|
|
key2_trigger_lock = 1; // <20><><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
|
|||
|
|
key2_trigger_lock = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
key2_filter_cnt = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>key1<79><31>key2<79><32>key1<79>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>
|
|||
|
|
switch(s_key121_step)
|
|||
|
|
{
|
|||
|
|
case 0: // <20><>ʼ״̬<D7B4><CCAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>key1
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨<EFBFBD><E3A3A8><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
s_key121_timeout_cnt = 0;
|
|||
|
|
if(curr_key == BS83B12_KEY1_CODE)
|
|||
|
|
{
|
|||
|
|
s_key121_step = 1; // <20>Ѱ<EFBFBD>key1
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 1: // <20>Ѱ<EFBFBD>key1<79><31><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>key2
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
if(++s_key121_timeout_cnt >= KEY121_TIMEOUT_TICKS)
|
|||
|
|
{
|
|||
|
|
s_key121_step = 0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
s_key121_timeout_cnt = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// ״̬Ǩ<CCAC><C7A8>
|
|||
|
|
if(curr_key == BS83B12_KEY2_CODE)
|
|||
|
|
{
|
|||
|
|
s_key121_step = 2; // <20><><EFBFBD>벽<EFBFBD><EBB2BD>2<EFBFBD><32><EFBFBD>Ѱ<EFBFBD>key2
|
|||
|
|
s_key121_timeout_cnt = 0; // <20><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 2: // <20>Ѱ<EFBFBD>key2<79><32><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>key1<79><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-2-1<><31>
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
if(++s_key121_timeout_cnt >= KEY121_TIMEOUT_TICKS)
|
|||
|
|
{
|
|||
|
|
s_key121_step = 0; // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
s_key121_timeout_cnt = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// ״̬Ǩ<CCAC><C7A8>
|
|||
|
|
if(curr_key == BS83B12_KEY1_CODE)
|
|||
|
|
{
|
|||
|
|
s_key121_step = 0; // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
s_key121_timeout_cnt = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if(stm_item.data.state_machine.oxg_stm == STM_CARLIB) // ֻ<><D6BB><EFBFBD>ڱ궨ģʽ<C4A3><CABD> 121<32>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
{
|
|||
|
|
vOxygenEventGroupSetBits(&global_event, EVENT_KEY121_PRESS); // <20><><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0>°<EFBFBD><C2B0><EFBFBD>121<32><31><EFBFBD>¼<EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
s_key121_step = 0;
|
|||
|
|
s_key121_timeout_cnt = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch(stm_item.data.state_machine.oxg_stm)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
case STM_INIT:
|
|||
|
|
if(peek_queue_node_by_type(&global_queue, MSG_TYPE_CURRENT_TIME, &time_item))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
// <20>˲<EFBFBD><CBB2>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>it<69>ļ<EFBFBD><C4BC>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case STM_ERROR_NONE_STOP: // <20><><EFBFBD>ϵ<EFBFBD>ͣ<EFBFBD><CDA3>״̬ʱ
|
|||
|
|
|
|||
|
|
ALARM_YELLOW_ON;
|
|||
|
|
if(xOxygenEventGroupCheckAnyBits(&global_event, EVENT_O2_835_LOW | EVENT_E7_220V_LOW))
|
|||
|
|
{
|
|||
|
|
if(xOxygenEventGroupCheckBit(&global_event, EVENT_KEY2_PRESS)) // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(xOxygenEventGroupCheckBit(&global_event, EVENT_BEEP_MUTE))
|
|||
|
|
{
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_BEEP_MUTE);
|
|||
|
|
}else{
|
|||
|
|
vOxygenEventGroupSetBits(&global_event, EVENT_BEEP_MUTE); // <20><><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_KEY2_PRESS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>¼<EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
case STM_ERROR_SHOUNTDOWN: // <20><><EFBFBD><EFBFBD>E7<45><37><EFBFBD><EFBFBD> <20><>ʾE7<45><37><EFBFBD>Dz<EFBFBD>ͣ<EFBFBD><CDA3>
|
|||
|
|
ALARM_YELLOW_ON;
|
|||
|
|
|
|||
|
|
if(xOxygenEventGroupCheckBit(&global_event, EVENT_KEY2_PRESS)) // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><CBB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(xOxygenEventGroupCheckBit(&global_event, EVENT_BEEP_MUTE))
|
|||
|
|
{
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_BEEP_MUTE);
|
|||
|
|
}else{
|
|||
|
|
vOxygenEventGroupSetBits(&global_event, EVENT_BEEP_MUTE); // <20><><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_KEY2_PRESS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>¼<EFBFBD>
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case STM_CARLIB: // <20><><EFBFBD><EFBFBD>ǰΪУ״̬
|
|||
|
|
ALARM_YELLOW_OFF;
|
|||
|
|
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_KEY2_PRESS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>¼<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>121<32>¼<EFBFBD><C2BC>߽<F2BDABB1>ֵд<D6B5><D0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD>߽<EFBFBD>
|
|||
|
|
process_121_event();
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case STM_NOM:
|
|||
|
|
vOxygenEventGroupClearBits(&global_event, EVENT_KEY2_PRESS); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>¼<EFBFBD>
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
ALARM_YELLOW_OFF;
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/
|