|
|
|
@ -145,53 +145,41 @@ void controller_init(void) |
|
|
|
(void)osThreadNew(Read_MK32, NULL, &MK32_Task_attributes); |
|
|
|
} |
|
|
|
|
|
|
|
extern const ActionFunc g_ActionTable[KEY_MAX][MODE_MAX][SUB_MODE_MAX]; |
|
|
|
|
|
|
|
#define SAFE_DISPATCH(key, mode, submode) \ |
|
|
|
do { \ |
|
|
|
if ((key) < KEY_MAX && \ |
|
|
|
(mode) < MODE_MAX && \ |
|
|
|
(submode) < SUB_MODE_MAX) { \ |
|
|
|
ActionFunc _fn = g_ActionTable[(key)][(mode)][(submode)]; \ |
|
|
|
if (_fn) _fn(); \ |
|
|
|
} \ |
|
|
|
} while (0) |
|
|
|
|
|
|
|
WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode) |
|
|
|
{ |
|
|
|
if (_iMode <= MODE_NULL || _iMode >= MODE_MAX) return; |
|
|
|
// 急停
|
|
|
|
if (_pstMK32->CH8_SE == -1000 && _pstMK32->CH9_SF == -1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(E_STOP, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(E_STOP); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 根据模式判断换道(仅在竖直向左或向右生效)
|
|
|
|
if (_pstMK32->CH4_SA == 1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SA_UP, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SA_UP); |
|
|
|
return; |
|
|
|
} |
|
|
|
else if (_pstMK32->CH4_SA == -1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SA_DOWN, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SA_DOWN); |
|
|
|
return; |
|
|
|
} |
|
|
|
else // 重置前进计时器以便下一次换道重新计数
|
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SA_DEFAULT, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SA_DEFAULT); |
|
|
|
} |
|
|
|
|
|
|
|
// 自动巡航
|
|
|
|
if (_pstMK32->CH5_SB == -1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SB_UP, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SB_UP); |
|
|
|
return; |
|
|
|
} |
|
|
|
else if(_pstMK32->CH5_SB == 1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SB_DOWN, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SB_DOWN); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
@ -199,21 +187,21 @@ WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode) |
|
|
|
// 开关喷枪
|
|
|
|
if (_pstMK32->CH6_SC == -1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SC_UP, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SC_UP); |
|
|
|
} |
|
|
|
else if (_pstMK32->CH6_SC == 1000) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SC_DOWN, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SC_DOWN); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(KEY_SC_DEFAULT, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(KEY_SC_DEFAULT); |
|
|
|
} |
|
|
|
|
|
|
|
// 【注意!!!】摇杆行程死区判断开始,除摇杆以外按键在上边都处理完,不然走不下去
|
|
|
|
if (abs(_pstMK32->CH2_LY_V) <= g_stCV.Joy_Sticker_Value_Allowance && abs(_pstMK32->CH3_LY_H) <= g_stCV.Joy_Sticker_Value_Allowance) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(JOY_DEFAULT, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(JOY_DEFAULT); |
|
|
|
return; |
|
|
|
} |
|
|
|
// 【注意!!!】摇杆行程死区判断结束,摇杆处理都放在这以后,否则行程死区可能不生效
|
|
|
|
@ -223,19 +211,19 @@ WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode) |
|
|
|
|
|
|
|
if (abs(angle - 90) <= g_stCV.Joy_Sticker_Angle_Allowance) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(JOY_LEFT_UP, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(JOY_LEFT_UP); |
|
|
|
} |
|
|
|
else if (abs(angle - (-90)) <= g_stCV.Joy_Sticker_Angle_Allowance) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(JOY_LEFT_DWON, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(JOY_LEFT_DWON); |
|
|
|
} |
|
|
|
else if (abs(angle - 0) <= g_stCV.Joy_Sticker_Angle_Allowance) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(JOY_LEFT_RIGHT, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(JOY_LEFT_RIGHT); |
|
|
|
} |
|
|
|
else if (abs(angle - 180) <= g_stCV.Joy_Sticker_Angle_Allowance || abs(angle - (-180)) <= g_stCV.Joy_Sticker_Angle_Allowance) |
|
|
|
{ |
|
|
|
SAFE_DISPATCH(JOY_LEFT_LEFT, _iMode, _iSubMode); |
|
|
|
SAFE_DISPATCH(JOY_LEFT_LEFT); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
|