stm8_tsl_multichannelkey.c
来自「STM8s」· C语言 代码 · 共 1,875 行 · 第 1/4 页
C
1,875 行
/**
******************************************************************************
* @file stm8_tsl_multichannelkey.c
* @author MCD Application Team
* @version V2.3.1
* @date 14-February-2011
* @brief STM8 Touch Sensing Library - This file provides the functions to
* manage the multi channel Key (wheel/slider).
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8_tsl_multichannelkey.h"
#include "stm8_tsl_api.h"
#include "stm8_tsl_services.h"
/* CONDITIONAL COMPILING FOR MCKEYS */
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
/* Memory section ------------------------------------------------------------*/
#if defined(_COSMIC_) && defined(USE_PRAGMA_SECTION)
#pragma section [TSLMCK_RAM]
#pragma section @tiny [TSLMCK_RAM0]
#pragma section (TSLMCK_CODE)
#pragma section const {TSLMCK_CONST}
#endif
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
#ifdef CHARGE_TRANSFER
__CONST Info_Channel * Channel_address_tab[] = {
&Channel_P1
#if NUMBER_OF_ACQUISITION_PORTS > 1
, &Channel_P2
#endif
#if NUMBER_OF_ACQUISITION_PORTS > 2
, &Channel_P3
#endif
};
/*look up table for the channel and group corresponding*/
__CONST u8 MCKEY1_LOOK_TABLE[CHANNEL_PER_MCKEY][2] = {
/********MCKEY1_A************/
#if MCKEY1_A_CH == SCKEY_P1_CH
0x00
#elif MCKEY1_A_CH == SCKEY_P2_CH
0x01
#else //MCKEY1_A_CH == SCKEY_P3_CH
0x02
#endif
#if (MCKEY1_A == GROUP1)
, 0x00
#elif (MCKEY1_A == GROUP2)
, 0x01
#elif (MCKEY1_A == GROUP3)
, 0x02
#elif (MCKEY1_A == GROUP4)
, 0x03
#elif (MCKEY1_A == GROUP5)
, 0x04
#elif (MCKEY1_A == GROUP6)
, 0x05
#elif (MCKEY1_A == GROUP7)
, 0x06
#elif (MCKEY1_A == GROUP8)
, 0x07
#endif
/********MCKEY1_B************/
#if MCKEY1_B_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_B_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_A_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_B == GROUP1)
, 0x00
#elif (MCKEY1_B == GROUP2)
, 0x01
#elif (MCKEY1_B == GROUP3)
, 0x02
#elif (MCKEY1_B == GROUP4)
, 0x03
#elif (MCKEY1_B == GROUP5)
, 0x04
#elif (MCKEY1_B == GROUP6)
, 0x05
#elif (MCKEY1_B == GROUP7)
, 0x06
#elif (MCKEY1_B == GROUP8)
, 0x07
#endif
/********MCKEY1_C************/
#if MCKEY1_C_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_C_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_A_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_C == GROUP1)
, 0x00
#elif (MCKEY1_C == GROUP2)
, 0x01
#elif (MCKEY1_C == GROUP3)
, 0x02
#elif (MCKEY1_C == GROUP4)
, 0x03
#elif (MCKEY1_C == GROUP5)
, 0x04
#elif (MCKEY1_C == GROUP6)
, 0x05
#elif (MCKEY1_C == GROUP7)
, 0x06
#elif (MCKEY1_C == GROUP8)
, 0x07
#endif
#if CHANNEL_PER_MCKEY > 3
/********MCKEY1_D************/
#if MCKEY1_D_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_D_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_D_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_D == GROUP1)
, 0x00
#elif (MCKEY1_D == GROUP2)
, 0x01
#elif (MCKEY1_D == GROUP3)
, 0x02
#elif (MCKEY1_D == GROUP4)
, 0x03
#elif (MCKEY1_D == GROUP5)
, 0x04
#elif (MCKEY1_D == GROUP6)
, 0x05
#elif (MCKEY1_D == GROUP7)
, 0x06
#elif (MCKEY1_D == GROUP8)
, 0x07
#endif
/********MCKEY1_E************/
#if MCKEY1_E_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_E_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_E_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_E == GROUP1)
, 0x00
#elif (MCKEY1_E == GROUP2)
, 0x01
#elif (MCKEY1_E == GROUP3)
, 0x02
#elif (MCKEY1_E == GROUP4)
, 0x03
#elif (MCKEY1_E == GROUP5)
, 0x04
#elif (MCKEY1_E == GROUP6)
, 0x05
#elif (MCKEY1_E == GROUP7)
, 0x06
#elif (MCKEY1_E == GROUP8)
, 0x07
#endif
#endif
#if CHANNEL_PER_MCKEY > 5
/********MCKEY1_A************/
#if MCKEY1_F_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_F_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_F_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_F == GROUP1)
, 0x00
#elif (MCKEY1_F == GROUP2)
, 0x01
#elif (MCKEY1_F == GROUP3)
, 0x02
#elif (MCKEY1_F == GROUP4)
, 0x03
#elif (MCKEY1_F == GROUP5)
, 0x04
#elif (MCKEY1_F == GROUP6)
, 0x05
#elif (MCKEY1_F == GROUP7)
, 0x06
#elif (MCKEY1_F == GROUP8)
, 0x07
#endif
/********MCKEY1_B************/
#if MCKEY1_G_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_G_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_G_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_G == GROUP1)
, 0x00
#elif (MCKEY1_G == GROUP2)
, 0x01
#elif (MCKEY1_G == GROUP3)
, 0x02
#elif (MCKEY1_G == GROUP4)
, 0x03
#elif (MCKEY1_G == GROUP5)
, 0x04
#elif (MCKEY1_G == GROUP6)
, 0x05
#elif (MCKEY1_G == GROUP7)
, 0x06
#elif (MCKEY1_G == GROUP8)
, 0x07
#endif
/********MCKEY1_C************/
#if MCKEY1_H_CH == SCKEY_P1_CH
, 0x00
#elif MCKEY1_H_CH == SCKEY_P2_CH
, 0x01
#else //MCKEY1_H_CH == SCKEY_P3_CH
, 0x02
#endif
#if (MCKEY1_H == GROUP1)
, 0x00
#elif (MCKEY1_H == GROUP2)
, 0x01
#elif (MCKEY1_H == GROUP3)
, 0x02
#elif (MCKEY1_H == GROUP4)
, 0x03
#elif (MCKEY1_H == GROUP5)
, 0x04
#elif (MCKEY1_H == GROUP6)
, 0x05
#elif (MCKEY1_H == GROUP7)
, 0x06
#elif (MCKEY1_H == GROUP8)
, 0x07
#endif
#endif
};
#endif
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//----- MCKEY1 __CONSTANT TABLES FOR POSITION CALCULATION -----
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#if CHANNEL_PER_MCKEY == 3
#if MCKEY1_TYPE == 0 // Wheel
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
0, -64, 107, // maj = 1; i = 0
21, 0, -107, // maj = 2; i = 1
-149, 64, 0 // maj = 3; i = 2
};
#define MCKEY1_SECTOR_COMPUTATION (85)
#define MCKEY1_POSITION_CORRECTION (43)
#else // Normal electrodes -- NO VALUE FOR THE MOMENT
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
0, 0, 0, // maj = 1; i = 0
0, 0, 0, // maj = 2; i = 1
0, 0, 0 // maj = 3; i = 2
};
#define MCKEY1_SECTOR_COMPUTATION (51)
#define MCKEY1_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY1_TYPE == 1 // Slider
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
// 0, -64, 107, // maj = 1; i = 0
// 21, 0, -107, // maj = 2; i = 1
// -149, 64, 0 // maj = 3; i = 2
// sec = 1 2 3
// j = 0 1 2
0, -96, 160, // maj = 1; i = 0
32, 0, -160, // maj = 2; i = 1
-224, 96, 0 // maj = 3; i = 2
};
//#define MCKEY1_SECTOR_COMPUTATION (85)
//#define MCKEY1_POSITION_CORRECTION (43)
#define MCKEY1_SECTOR_COMPUTATION (128)
#define MCKEY1_POSITION_CORRECTION (128)
#else // Normal electrodes -- NO VALUE FOR THE MOMENT
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
0, 0, 0, // maj = 1; i = 0
0, 0, 0, // maj = 2; i = 1
0, 0, 0 // maj = 3; i = 2
};
#define MCKEY1_SECTOR_COMPUTATION (85)
#define MCKEY1_POSITION_CORRECTION (85)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 3
#if CHANNEL_PER_MCKEY == 5
#if MCKEY1_TYPE == 0 // Wheel
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5
// j = 0 1 2 3 4
0, -19, -83, 122, 58, // maj = 1; i = 0
6, 0, -32, -122, 96, // maj = 2; i = 1
70, 19, 0, -45, -96, // maj = 3; i = 2
-6, 109, 32, 0, -58, // maj = 4; i = 3
-70, -109, 83, 45, 0 // maj = 5; i = 4
};
#define MCKEY1_SECTOR_COMPUTATION (26)
#define MCKEY1_POSITION_CORRECTION (0)
#else // Normal electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5
// j = 0 1 2 3 4
0, -38, 0, 0, 115, // maj = 1; i = 0
13, 0, -64, 0, 0, // maj = 2; i = 1
0, 38, 0, -90, 0, // maj = 3; i = 2
0, 0, 64, 0, -115, // maj = 4; i = 3
-13, 0, 0, 90, 0 // maj = 5; i = 4
};
#define MCKEY1_SECTOR_COMPUTATION (51)
#define MCKEY1_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY1_TYPE == 1 // Slider
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5
// j = 0 1 2 3 4
0, -21, -92, 135, 64, // maj = 1; i = 0
7, 0, -36, -135, 107, // maj = 2; i = 1
78, 21, 0, -50, -107, // maj = 3; i = 2
-149, 121, 36, 0, -64, // maj = 4; i = 3
-78, -121, 92, 50, 0 // maj = 5; i = 4
};
#define MCKEY1_SECTOR_COMPUTATION (28)
#define MCKEY1_POSITION_CORRECTION (28)
#else // Normal electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5
// j = 0 1 2 3 4
0, -64, 0, 0, 0, // maj = 1; i = 0
21, 0, -107, 0, 0, // maj = 2; i = 1
0, 64, 0, -149, 0, // maj = 3; i = 2
0, 0, 107, 0, -192, // maj = 4; i = 3
0, 0, 0, 149, 0 // maj = 5; i = 4
};
#define MCKEY1_SECTOR_COMPUTATION (85)
#define MCKEY1_POSITION_CORRECTION (85)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 5
#if CHANNEL_PER_MCKEY == 8
#if MCKEY1_TYPE == 0 // Wheel
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5 6 7 8
// j = 0 1 2 3 4 5 6 7
0, -12, 0, -76, 0, 124, 0, 60, // maj = 1; i = 0
4, 0, -20, 0, -100, 0, 84, 0, // maj = 2; i = 1
0, 12, 0, -28, 0, -124, 0, 108, // maj = 3; i = 2
68, 0, 20, 0, -36, 0, -84, 0, // maj = 4; i = 3
0, 92, 0, 28, 0, -44, 0, -108, // maj = 5; i = 4
-4, 0, 116, 0, 36, 0, -52, 0, // maj = 6; i = 5
0, -92, 0, 76, 0, 44, 0, -60, // maj = 7; i = 6
-68, 0, -116, 0, 100, 0, 52, 0 // maj = 8; i = 7
};
#define MCKEY1_SECTOR_COMPUTATION (16)
#define MCKEY1_POSITION_CORRECTION (0)
#else // Normal electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5 6 7 8
// j = 0 1 2 3 4 5 6 7
0, -24, 0, 0, 0, 0, 0, 120, // maj = 1; i = 0
8, 0, -40, 0, 0, 0, 0, 0, // maj = 2; i = 1
0, 24, 0, -56, 0, 0, 0, 0, // maj = 3; i = 2
0, 0, 40, 0, -72, 0, 0, 0, // maj = 4; i = 3
0, 0, 0, 56, 0, -88, 0, 0, // maj = 5; i = 4
0, 0, 0, 0, 72, 0, -104, 0, // maj = 6; i = 5
0, 0, 0, 0, 0, 88, 0, -120, // maj = 7; i = 6
-8, 0, 0, 0, 0, 0, 104, 0 // maj = 8; i = 7
};
#define MCKEY1_SECTOR_COMPUTATION (32)
#define MCKEY1_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY1_TYPE == 1 // Slider
#if MCKEY1_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5 6 7 8
// j = 0 1 2 3 4 5 6 7
0, -13, 0, -81, 0, 132, 0, 64, // maj = 1; i = 0
4, 0, -21, 0, -107, 0, 90, 0, // maj = 2; i = 1
0, 13, 0, -30, 0, -132, 0, 115, // maj = 3; i = 2
73, 0, 21, 0, -38, 0, -90, 0, // maj = 4; i = 3
0, 98, 0, 30, 0, -47, 0, -115, // maj = 5; i = 4
-141, 0, 124, 0, 38, 0, -55, 0, // maj = 6; i = 5
0, -98, 0, 81, 0, 47, 0, -64, // maj = 7; i = 6
-73, 0, -124, 0, 107, 0, 55, 0 // maj = 8; i = 7
};
#define MCKEY1_SECTOR_COMPUTATION (17)
#define MCKEY1_POSITION_CORRECTION (17)
#else // Normal electrodes
__CONST s16 MCKEY1_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3 4 5 6 7 8
// j = 0 1 2 3 4 5 6 7
0, -32, 0, 0, 0, 0, 0, 0, // maj = 1; i = 0
11, 0, -53, 0, 0, 0, 0, 0, // maj = 2; i = 1
0, 32, 0, -75, 0, 0, 0, 0, // maj = 3; i = 2
0, 0, 53, 0, -96, 0, 0, 0, // maj = 4; i = 3
0, 0, 0, 75, 0, -117, 0, 0, // maj = 5; i = 4
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?