mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 18:56:38 +00:00
detect double click
This commit is contained in:
parent
23da6285c1
commit
9ca5e94715
@ -231,9 +231,9 @@ void SwitchHandler(uint8_t mode)
|
||||
uint8_t button = Switch.virtual_state[i];
|
||||
uint8_t switchflag = POWER_TOGGLE +1;
|
||||
|
||||
if (Switch.hold_timer[i]) {
|
||||
if (Switch.hold_timer[i] & (((Settings.switchmode[i] == PUSHHOLDMULTI) | (Settings.switchmode[i] == PUSHHOLDMULTI_INV)) ? 0x3F: 0xFF)) {
|
||||
Switch.hold_timer[i]--;
|
||||
if (Switch.hold_timer[i] == loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
if ((Switch.hold_timer[i] & 0x3F) == loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
if ((Settings.switchmode[i] == PUSHHOLDMULTI) & (NOT_PRESSED == Switch.last_state[i])) {
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
||||
}
|
||||
@ -241,7 +241,7 @@ void SwitchHandler(uint8_t mode)
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
||||
}
|
||||
}
|
||||
if (0 == Switch.hold_timer[i]) {
|
||||
if (0 == (Switch.hold_timer[i] & (((Settings.switchmode[i] == PUSHHOLDMULTI) | (Settings.switchmode[i] == PUSHHOLDMULTI_INV)) ? 0x3F: 0xFF))) {
|
||||
switch (Settings.switchmode[i]) {
|
||||
case TOGGLEMULTI:
|
||||
switchflag = POWER_TOGGLE; // Toggle after hold
|
||||
@ -257,6 +257,7 @@ void SwitchHandler(uint8_t mode)
|
||||
Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
||||
} else {
|
||||
Switch.hold_timer[i]= 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT
|
||||
}
|
||||
break;
|
||||
@ -265,6 +266,7 @@ void SwitchHandler(uint8_t mode)
|
||||
Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT
|
||||
} else {
|
||||
Switch.hold_timer[i]= 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT
|
||||
}
|
||||
break;
|
||||
@ -327,31 +329,49 @@ void SwitchHandler(uint8_t mode)
|
||||
break;
|
||||
case PUSHHOLDMULTI:
|
||||
if (NOT_PRESSED == button) {
|
||||
if (Switch.hold_timer[i] != 0) {
|
||||
if ((Switch.hold_timer[i] & 0x3F) != 0) {
|
||||
Switch.hold_timer[i] = ((Switch.hold_timer[i] & 0xc0) == 0x40) ? 0x80 : 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT
|
||||
}
|
||||
} else {
|
||||
if (Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||
if ((Switch.hold_timer[i] & 0x3F) > loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
if((Switch.hold_timer[i] & 0xC0) != 0x80) {
|
||||
Switch.hold_timer[i]= 0x40;
|
||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||
}
|
||||
else{
|
||||
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
||||
Switch.hold_timer[i]= 0;
|
||||
}
|
||||
} else {
|
||||
Switch.hold_timer[i]= 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_RELEASE); // Execute command via MQTT
|
||||
}
|
||||
}
|
||||
Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10;
|
||||
Switch.hold_timer[i] = (Switch.hold_timer[i] & 0xC0) | loops_per_second * Settings.param[P_HOLD_TIME] / 10;
|
||||
break;
|
||||
case PUSHHOLDMULTI_INV:
|
||||
if (PRESSED == button) {
|
||||
if (Switch.hold_timer[i] != 0) {
|
||||
if ((Switch.hold_timer[i] & 0x3F) != 0) {
|
||||
Switch.hold_timer[i] = ((Switch.hold_timer[i] & 0xc0) == 0x40) ? 0x80 : 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT
|
||||
}
|
||||
} else {
|
||||
if (Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||
if ((Switch.hold_timer[i] & 0x3F)> loops_per_second * Settings.param[P_HOLD_TIME] / 25) {
|
||||
if((Switch.hold_timer[i] & 0xC0) != 0x80) {
|
||||
Switch.hold_timer[i]= 0x40;
|
||||
switchflag = POWER_TOGGLE; // Toggle with pushbutton
|
||||
}
|
||||
else{
|
||||
SendKey(KEY_SWITCH, i +1, POWER_100); // Execute command via MQTT
|
||||
Switch.hold_timer[i]= 0;
|
||||
}
|
||||
} else {
|
||||
Switch.hold_timer[i]= 0;
|
||||
SendKey(KEY_SWITCH, i +1, POWER_RELEASE); // Execute command via MQTT
|
||||
}
|
||||
}
|
||||
Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10;
|
||||
Switch.hold_timer[i] = (Switch.hold_timer[i] & 0xC0) | loops_per_second * Settings.param[P_HOLD_TIME] / 10;
|
||||
break;
|
||||
case PUSHON:
|
||||
if (PRESSED == button) {
|
||||
|
@ -234,7 +234,7 @@ enum TopicOptions { CMND, STAT, TELE, nu1, RESULT_OR_CMND, RESULT_OR_STAT, RESUL
|
||||
enum ExecuteCommandPowerOptions { POWER_OFF, POWER_ON, POWER_TOGGLE, POWER_BLINK, POWER_BLINK_STOP,
|
||||
POWER_OFF_NO_STATE = 8, POWER_ON_NO_STATE, POWER_TOGGLE_NO_STATE,
|
||||
POWER_SHOW_STATE = 16 };
|
||||
enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INCREMENT = 4, POWER_INV = 5, POWER_CLEAR = 6, POWER_RELEASE = 7, CLEAR_RETAIN = 9 };
|
||||
enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INCREMENT = 4, POWER_INV = 5, POWER_CLEAR = 6, POWER_RELEASE = 7, POWER_100 = 8, CLEAR_RETAIN = 9 };
|
||||
enum SendKeyOptions { KEY_BUTTON, KEY_SWITCH };
|
||||
enum SendKeyMultiClick { SINGLE = 10, DOUBLE = 11, TRIPLE = 12, QUAD = 13, PENTA = 14};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user