stm8_tsl_multichannelkey.c
来自「STM8s」· C语言 代码 · 共 1,875 行 · 第 1/4 页
C
1,875 行
0, 0, 0, 0, 96, 0, -139, 0, // maj = 6; i = 5
0, 0, 0, 0, 0, 117, 0, -160, // maj = 7; i = 6
0, 0, 0, 0, 0, 0, 139, 0 // maj = 8; i = 7
};
#define MCKEY1_SECTOR_COMPUTATION (43)
#define MCKEY1_POSITION_CORRECTION (43)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 8
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1
/*look up table for the channel and group corresponding*/
__CONST u8 MCKEY2_LOOK_TABLE[CHANNEL_PER_MCKEY][2] = {
/********MCKEY2_A************/
#if MCKEY2_A_CH == SCKEY_P1_CH
0x00
#else //port 2 is used
0x01
#endif
#if (MCKEY2_A == GROUP1)
, 0x00
#elif (MCKEY2_A == GROUP2)
, 0x01
#elif (MCKEY2_A == GROUP3)
, 0x02
#elif (MCKEY2_A == GROUP4)
, 0x03
#elif (MCKEY2_A == GROUP5)
, 0x04
#elif (MCKEY2_A == GROUP6)
, 0x05
#elif (MCKEY2_A == GROUP7)
, 0x06
#elif (MCKEY2_A == GROUP8)
, 0x07
#endif
/********MCKEY2_B************/
#if MCKEY2_B_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_B == GROUP1)
, 0x00
#elif (MCKEY2_B == GROUP2)
, 0x01
#elif (MCKEY2_B == GROUP3)
, 0x02
#elif (MCKEY2_B == GROUP4)
, 0x03
#elif (MCKEY2_B == GROUP5)
, 0x04
#elif (MCKEY2_B == GROUP6)
, 0x05
#elif (MCKEY2_B == GROUP7)
, 0x06
#elif (MCKEY2_B == GROUP8)
, 0x07
#endif
/********MCKEY2_C************/
#if MCKEY2_C_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_C == GROUP1)
, 0x00
#elif (MCKEY2_C == GROUP2)
, 0x01
#elif (MCKEY2_C == GROUP3)
, 0x02
#elif (MCKEY2_C == GROUP4)
, 0x03
#elif (MCKEY2_C == GROUP5)
, 0x04
#elif (MCKEY2_C == GROUP6)
, 0x05
#elif (MCKEY2_C == GROUP7)
, 0x06
#elif (MCKEY2_C == GROUP8)
, 0x07
#endif
#if CHANNEL_PER_MCKEY > 3
/********MCKEY2_D************/
#if MCKEY2_D_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_D == GROUP1)
, 0x00
#elif (MCKEY2_D == GROUP2)
, 0x01
#elif (MCKEY2_D == GROUP3)
, 0x02
#elif (MCKEY2_D == GROUP4)
, 0x03
#elif (MCKEY2_D == GROUP5)
, 0x04
#elif (MCKEY2_D == GROUP6)
, 0x05
#elif (MCKEY2_D == GROUP7)
, 0x06
#elif (MCKEY2_D == GROUP8)
, 0x07
#endif
/********MCKEY2_E************/
#if MCKEY2_E_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_E == GROUP1)
, 0x00
#elif (MCKEY2_E == GROUP2)
, 0x01
#elif (MCKEY2_E == GROUP3)
, 0x02
#elif (MCKEY2_E == GROUP4)
, 0x03
#elif (MCKEY2_E == GROUP5)
, 0x04
#elif (MCKEY2_E == GROUP6)
, 0x05
#elif (MCKEY2_E == GROUP7)
, 0x06
#elif (MCKEY2_E == GROUP8)
, 0x07
#endif
#endif
#if CHANNEL_PER_MCKEY > 5
/********MCKEY2_A************/
#if MCKEY2_F_CH == SCKEY_P1_CH
0x00
#else //port 2 is used
0x01
#endif
#if (MCKEY2_F == GROUP1)
, 0x00
#elif (MCKEY2_F == GROUP2)
, 0x01
#elif (MCKEY2_F == GROUP3)
, 0x02
#elif (MCKEY2_F == GROUP4)
, 0x03
#elif (MCKEY2_F == GROUP5)
, 0x04
#elif (MCKEY2_F == GROUP6)
, 0x05
#elif (MCKEY2_F == GROUP7)
, 0x06
#elif (MCKEY2_F == GROUP8)
, 0x07
#endif
/********MCKEY2_B************/
#if MCKEY2_G_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_G == GROUP1)
, 0x00
#elif (MCKEY2_G == GROUP2)
, 0x01
#elif (MCKEY2_G == GROUP3)
, 0x02
#elif (MCKEY2_G == GROUP4)
, 0x03
#elif (MCKEY2_G == GROUP5)
, 0x04
#elif (MCKEY2_G == GROUP6)
, 0x05
#elif (MCKEY2_G == GROUP7)
, 0x06
#elif (MCKEY2_G == GROUP8)
, 0x07
#endif
/********MCKEY2_C************/
#if MCKEY2_H_CH == SCKEY_P1_CH
, 0x00
#else //port 2 is used
, 0x01
#endif
#if (MCKEY2_H == GROUP1)
, 0x00
#elif (MCKEY2_H == GROUP2)
, 0x01
#elif (MCKEY2_H == GROUP3)
, 0x02
#elif (MCKEY2_H == GROUP4)
, 0x03
#elif (MCKEY2_H == GROUP5)
, 0x04
#elif (MCKEY2_H == GROUP6)
, 0x05
#elif (MCKEY2_H == GROUP7)
, 0x06
#elif (MCKEY2_H == GROUP8)
, 0x07
#endif
#endif
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//----- MCKEY2 __CONSTANT TABLES FOR POSITION CALCULATION -----
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#if CHANNEL_PER_MCKEY == 3
#if MCKEY2_TYPE == 0 // Wheel
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (85)
#define MCKEY2_POSITION_CORRECTION (43)
//#define MCKEY2_SECTOR_COMPUTATION (128)
//#define MCKEY2_POSITION_CORRECTION (128)
#else // Normal electrodes
__CONST s16 MCKEY2_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
0, -19, -83, // maj = 1; i = 0
0, 0, -32, // maj = 2; i = 1
70, 19, 0 // maj = 3; i = 2
};
#define MCKEY2_SECTOR_COMPUTATION (51)
#define MCKEY2_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY2_TYPE == 1 // Slider
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (85)
//#define MCKEY2_POSITION_CORRECTION (43)
#define MCKEY2_SECTOR_COMPUTATION (128)
#define MCKEY2_POSITION_CORRECTION (128)
#else // Normal electrodes
__CONST s16 MCKEY2_TABLE_POSITION_OFFSET[CHANNEL_PER_MCKEY][CHANNEL_PER_MCKEY] =
{
// sec = 1 2 3
// j = 0 1 2
0, -19, -83, // maj = 1; i = 0
0, 0, -32, // maj = 2; i = 1
70, 19, 0 // maj = 3; i = 2
};
#define MCKEY2_SECTOR_COMPUTATION (85)
#define MCKEY2_POSITION_CORRECTION (85)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 3
#if CHANNEL_PER_MCKEY == 5
#if MCKEY2_TYPE == 0 // Wheel
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (26)
#define MCKEY2_POSITION_CORRECTION (0)
#else // Normal electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (51)
#define MCKEY2_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY2_TYPE == 1 // Slider
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (28)
#define MCKEY2_POSITION_CORRECTION (28)
#else // Normal electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (85)
#define MCKEY2_POSITION_CORRECTION (85)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 5
#if CHANNEL_PER_MCKEY == 8
#if MCKEY2_TYPE == 0 // Wheel
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (16)
#define MCKEY2_POSITION_CORRECTION (0)
#else // Normal electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (32)
#define MCKEY2_POSITION_CORRECTION (0)
#endif
#endif
#if MCKEY2_TYPE == 1 // Slider
#if MCKEY2_LAYOUT_TYPE == 0 // Interlaced electrodes
__CONST s16 MCKEY2_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 MCKEY2_SECTOR_COMPUTATION (17)
#define MCKEY2_POSITION_CORRECTION (17)
#else // Normal electrodes
__CONST s16 MCKEY2_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
0, 0, 0, 0, 96, 0, -139, 0, // maj = 6; i = 5
0, 0, 0, 0, 0, 117, 0, -160, // maj = 7; i = 6
0, 0, 0, 0, 0, 0, 139, 0 // maj = 8; i = 7
};
#define MCKEY2_SECTOR_COMPUTATION (43)
#define MCKEY2_POSITION_CORRECTION (43)
#endif
#endif
#endif // CHANNEL_PER_MCKEY == 8
#endif // MCKEY2
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//----- LIBRARY PRIVATE GLOBALS -----
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
******************************************************************************
* @brief Initialize all MCKey relative parameters and variables.
* @par Parameters:
* None
* @retval void None
* @par Required preconditions:
* None
******************************************************************************
*/
void TSL_MCKey_Init(void)
{
for (KeyIndex = 0; KeyIndex < NUMBER_OF_MULTI_CHANNEL_KEYS; KeyIndex++)
{
TSL_MCKey_SetStructPointer();
pMCKeyStruct->State.whole = DISABLED_STATE;
pMCKeyStruct->DetectThreshold = MCKEY_DETECTTHRESHOLD_DEFAULT;
pMCKeyStruct->EndDetectThreshold = MCKEY_ENDDETECTTHRESHOLD_DEFAULT;
pMCKeyStruct->RecalibrationThreshold = MCKEY_RECALIBRATIONTHRESHOLD_DEFAULT;
pMCKeyStruct->Resolution = MCKEY_RESOLUTION_DEFAULT;
pMCKeyStruct->DirectionChangeIntegrator = MCKEY_DIRECTION_CHANGE_INTEGRATOR_DEFAULT;
pMCKeyStruct->DirectionChangeThreshold = MCKEY_DIRECTION_CHANGE_THRESHOLD_DEFAULT;
}
/* Set MC key type: Wheel or Slider */
sMCKeyInfo[0].Setting.b.MCKEY_TYPE = MCKEY1_TYPE;
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 1
sMCKeyInfo[1].Setting.b.MCKEY_TYPE = MCKEY2_TYPE;
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?