diff --git a/Upstream/Inc/build_config.h b/Upstream/Inc/build_config.h index d1dc3a3..6827adb 100644 --- a/Upstream/Inc/build_config.h +++ b/Upstream/Inc/build_config.h @@ -41,16 +41,15 @@ //Configure mouse bot detection here: #ifdef CONFIG_MOUSE_BOT_DETECT_ENABLED - #define MOUSE_BOTDETECT_VELOCITY_MULTIPLIER 10 - #define MOUSE_BOTDETECT_MOVEMENT_STOP_PERIODS 5 - //----------------------------------------------------------- //Adjust these thresholds first to tune mouse bot detection. Lower values = more sensitive - #define MOUSE_BOTDETECT_JUMP_VELOCITY_THRESHOLD (20 * MOUSE_BOTDETECT_VELOCITY_MULTIPLIER) - #define MOUSE_BOTDETECT_LOCKOUT_CONSTANT_ACCEL_COUNT 20 //20 is ok for most mice. But some weird mice generate longer sequences. - #define MOUSE_BOTDETECT_LOCKOUT_JIGGLE_BIN_THRESHOLD 4 + #define MOUSE_BOTDETECT_JUMP_VELOCITY_THRESHOLD 20 + #define MOUSE_BOTDETECT_LOCKOUT_CONSTANT_ACCEL_COUNT 30 //20 is ok for most mice. But some weird mice generate longer sequences. //----------------------------------------------------------- + #define MOUSE_BOTDETECT_VELOCITY_MULTIPLIER 10 + #define MOUSE_BOTDETECT_MOVEMENT_STOP_PERIODS 5 + //Jump detection stuff #define MOUSE_BOTDETECT_JUMP_MINIMUM_TIME 4 @@ -58,11 +57,6 @@ #define MOUSE_BOTDETECT_VELOCITY_HISTORY_SIZE 12 #define MOUSE_BOTDETECT_VELOCITY_MATCH_BASE 256 #define MOUSE_BOTDETECT_VELOCITY_MATCH_ERROR 6 - - //Jiggle detection stuff - #define MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS 20 //20ms per bin - #define MOUSE_BOTDETECT_JIGGLE_BIN_COUNT 50 //50 bins at 20ms = 1 sec coverage, wrapped - #define MOUSE_BOTDETECT_JIGGLE_BIN_DIVIDER 4 #endif diff --git a/Upstream/Src/upstream_hid_botdetect.c b/Upstream/Src/upstream_hid_botdetect.c index edd727a..00c1c9f 100644 --- a/Upstream/Src/upstream_hid_botdetect.c +++ b/Upstream/Src/upstream_hid_botdetect.c @@ -62,16 +62,11 @@ volatile LockoutStateTypeDef LockoutState = LOCKOUT_STATE_INACTIVE; //Constant acceleration detection stuff uint16_t MouseVelocityHistory[MOUSE_BOTDETECT_VELOCITY_HISTORY_SIZE] = {0}; - int32_t PreviousSmoothedAcceleration = 0; - uint8_t ConstantAccelerationCounter = 0; - - //Jiggle detection stuff - uint8_t MouseStopIntervalBinDrainDivideCount = 0; - uint8_t MouseStopIntervalBinArray[MOUSE_BOTDETECT_JIGGLE_BIN_COUNT] = {0}; + int32_t PreviousSmoothedAcceleration = 0; + uint8_t ConstantAccelerationCounter = 0; //Debug: - uint8_t ConstantAccelerationCounterMax = 0; - uint8_t MouseStopIntervalBinArrayPeak = 0; +// uint8_t ConstantAccelerationCounterMax = 0; static void Upstream_HID_BotDetectMouse_DoLockout(void); #endif @@ -391,7 +386,6 @@ void Upstream_HID_BotDetectMouse(uint8_t* mouseInData) { uint32_t i; uint32_t now = HAL_GetTick(); - uint32_t moveDelay; uint32_t velocity; int8_t mouseX; int8_t mouseY; @@ -407,41 +401,11 @@ void Upstream_HID_BotDetectMouse(uint8_t* mouseInData) mouseY = mouseInData[2]; velocity = (sqrtf(((int32_t)mouseX * mouseX) + ((int32_t)mouseY * mouseY))) * MOUSE_BOTDETECT_VELOCITY_MULTIPLIER; //Multiply floating-point sqrt result to avoid integer rounding errors - moveDelay = now - LastMouseMoveTime; //Did the mouse stop moving? - if (moveDelay > ((MOUSE_BOTDETECT_MOVEMENT_STOP_PERIODS * HID_FS_BINTERVAL) - (HID_FS_BINTERVAL / 2))) + if ((now - LastMouseMoveTime) > ((MOUSE_BOTDETECT_MOVEMENT_STOP_PERIODS * HID_FS_BINTERVAL) - (HID_FS_BINTERVAL / 2))) { - //Jiggle detection - if (velocity != 0) - { - //Add stopped time to jiggle bins - moveDelay = moveDelay % (MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS * MOUSE_BOTDETECT_JIGGLE_BIN_COUNT); //Wrap stopped time into the array - MouseStopIntervalBinArray[(moveDelay / MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS)]++; - if (MouseStopIntervalBinArray[(moveDelay / MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS)] > MOUSE_BOTDETECT_LOCKOUT_JIGGLE_BIN_THRESHOLD) - { - Upstream_HID_BotDetectMouse_DoLockout(); - } - - //Debug: - if (MouseStopIntervalBinArray[(moveDelay / MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS)] > MouseStopIntervalBinArrayPeak) - { - MouseStopIntervalBinArrayPeak = MouseStopIntervalBinArray[(moveDelay / MOUSE_BOTDETECT_JIGGLE_BIN_WIDTH_MS)]; - } - - //Drain jiggle bins at specified rate - MouseStopIntervalBinDrainDivideCount++; - if (MouseStopIntervalBinDrainDivideCount >= MOUSE_BOTDETECT_JIGGLE_BIN_DIVIDER) - { - MouseStopIntervalBinDrainDivideCount = 0; - for (i = 0; i < MOUSE_BOTDETECT_JIGGLE_BIN_COUNT; i++) - { - if (MouseStopIntervalBinArray[i] > 0) MouseStopIntervalBinArray[i]--; - } - } - } - //Jump detection if (MouseIsMoving) { @@ -458,7 +422,7 @@ void Upstream_HID_BotDetectMouse(uint8_t* mouseInData) { //Jump detection LastMouseMoveTime = now; - if ((MouseIsMoving == 0) && (velocity > MOUSE_BOTDETECT_JUMP_VELOCITY_THRESHOLD)) + if ((MouseIsMoving == 0) && (velocity > (MOUSE_BOTDETECT_JUMP_VELOCITY_THRESHOLD * MOUSE_BOTDETECT_VELOCITY_MULTIPLIER))) { MouseIsMoving = 1; LastMouseMoveBeginTime = now; @@ -499,7 +463,7 @@ void Upstream_HID_BotDetectMouse(uint8_t* mouseInData) } //Debug: - if (ConstantAccelerationCounter > ConstantAccelerationCounterMax) ConstantAccelerationCounterMax = ConstantAccelerationCounter; +// if (ConstantAccelerationCounter > ConstantAccelerationCounterMax) ConstantAccelerationCounterMax = ConstantAccelerationCounter; } else { @@ -548,11 +512,6 @@ static void Upstream_HID_BotDetectMouse_DoLockout(void) } ConstantAccelerationCounter = 0; - for (i = 0; i < MOUSE_BOTDETECT_JIGGLE_BIN_COUNT; i++) - { - MouseStopIntervalBinArray[i] = 0; - } - TemporaryLockoutTimeMs = 0; LockoutState = LOCKOUT_STATE_TEMPORARY_ACTIVE; LED_SetState(LED_STATUS_FLASH_BOTDETECT);