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 + -
显示快捷键?