MultiButton icon indicating copy to clipboard operation
MultiButton copied to clipboard

BTN_STATE_REPEAT 状态疑问

Open crazy3min opened this issue 8 months ago • 2 comments

case BTN_STATE_REPEAT:
		if (handle->button_level != handle->active_level) {
			// Button released
			handle->event = (uint8_t)BTN_PRESS_UP;
			EVENT_CB(BTN_PRESS_UP);
			if (handle->ticks < SHORT_TICKS) {
				handle->ticks = 0;
				handle->state = BTN_STATE_RELEASE;  // Continue waiting for more presses
			} else {
				handle->state = BTN_STATE_IDLE;  // End of sequence
			}
		} else if (handle->ticks > SHORT_TICKS) {
			// Held down too long, treat as normal press
			handle->state = BTN_STATE_PRESS;
		}
		break;

重复按下,状态,按键重新释放,这个条件 if (handle->ticks < SHORT_TICKS) 是否多余? 要么按键持续按下超过 SHORT_TICKS 转换状态。要么在 SHORT_TICKS 内释放按键

请问是什么情况下需要处理这种情况?如果不处理是有异常? handle->ticks == SHORT_TICKS)

crazy3min avatar Jun 14 '25 09:06 crazy3min

很容易理解吧,现在是连按状态,发现按键已经松开了,就检测是否超时。如果没超时,就进入松开状态(方便再次进入连按状态),超时了就进入空闲状态。如果按键没有松开,而且超时了,那就把状态转换成普通的点按。

zyan0521 avatar Aug 31 '25 10:08 zyan0521

应该是松开那一时刻刚好>=SHORT_TICKS,所以判断进入空闲状态

OnePaiKu avatar Nov 12 '25 01:11 OnePaiKu