mirror of https://github.com/arendst/Tasmota.git
Merge pull request #6096 from s-hadinger/irsend_repeat_test
Support IRSend long press ('repeat' feature from IRRemoteESP8266)
This commit is contained in:
commit
f5bdb23c53
|
@ -3,6 +3,7 @@
|
||||||
* Add support for Sonoff iFan03 as module 71 (#5988)
|
* Add support for Sonoff iFan03 as module 71 (#5988)
|
||||||
* Add support for a buzzer
|
* Add support for a buzzer
|
||||||
* Add command SetOption67 0/1 to disable or enable a buzzer as used in iFan03
|
* Add command SetOption67 0/1 to disable or enable a buzzer as used in iFan03
|
||||||
|
* Add support IRSend long press ('repeat' feature from IRRemoteESP8266) (#6074)
|
||||||
*
|
*
|
||||||
* 6.6.0.1 20190708
|
* 6.6.0.1 20190708
|
||||||
* Fix Domoticz battery level set to 100 if define USE_ADC_VCC is not used (#6033)
|
* Fix Domoticz battery level set to 100 if define USE_ADC_VCC is not used (#6033)
|
||||||
|
|
|
@ -374,6 +374,7 @@
|
||||||
#define D_JSON_IR_BITS "Bits"
|
#define D_JSON_IR_BITS "Bits"
|
||||||
#define D_JSON_IR_DATA "Data"
|
#define D_JSON_IR_DATA "Data"
|
||||||
#define D_JSON_IR_RAWDATA "RawData"
|
#define D_JSON_IR_RAWDATA "RawData"
|
||||||
|
#define D_JSON_IR_REPEAT "Repeat"
|
||||||
#define D_CMND_IRHVAC "IRHVAC"
|
#define D_CMND_IRHVAC "IRHVAC"
|
||||||
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
#define D_JSON_IRHVAC_VENDOR "VENDOR"
|
||||||
#define D_JSON_IRHVAC_POWER "POWER"
|
#define D_JSON_IRHVAC_POWER "POWER"
|
||||||
|
|
|
@ -683,38 +683,39 @@ bool IrSendCommand(void)
|
||||||
error = IE_INVALID_JSON;
|
error = IE_INVALID_JSON;
|
||||||
} else {
|
} else {
|
||||||
// IRsend { "protocol": "SAMSUNG", "bits": 32, "data": 551502015 }
|
// IRsend { "protocol": "SAMSUNG", "bits": 32, "data": 551502015 }
|
||||||
|
// IRsend { "protocol": "NEC", "bits": 32, "data":"0x02FDFE80", "repeat": 2 }
|
||||||
char parm_uc[10];
|
char parm_uc[10];
|
||||||
const char *protocol = root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_PROTOCOL))];
|
const char *protocol = root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_PROTOCOL))];
|
||||||
uint16_t bits = root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_BITS))];
|
uint16_t bits = root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_BITS))];
|
||||||
uint64_t data = strtoull(root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_DATA))], nullptr, 0);
|
uint64_t data = strtoull(root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_DATA))], nullptr, 0);
|
||||||
|
uint16_t repeat = root[UpperCase_P(parm_uc, PSTR(D_JSON_IR_REPEAT))];
|
||||||
if (protocol && bits) {
|
if (protocol && bits) {
|
||||||
char protocol_text[20];
|
char protocol_text[20];
|
||||||
int protocol_code = GetCommandCode(protocol_text, sizeof(protocol_text), protocol, kIrRemoteProtocols);
|
int protocol_code = GetCommandCode(protocol_text, sizeof(protocol_text), protocol, kIrRemoteProtocols);
|
||||||
|
|
||||||
char dvalue[64];
|
char dvalue[64];
|
||||||
char hvalue[64];
|
char hvalue[64];
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("IRS: protocol_text %s, protocol %s, bits %d, data %s (%s), protocol_code %d"),
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("IRS: protocol_text %s, protocol %s, bits %d, data %s (%s), repeat %d, protocol_code %d"),
|
||||||
protocol_text, protocol, bits, ulltoa(data, dvalue, 10), IrUint64toHex(data, hvalue, bits), protocol_code);
|
protocol_text, protocol, bits, ulltoa(data, dvalue, 10), IrUint64toHex(data, hvalue, bits), repeat, protocol_code);
|
||||||
|
|
||||||
irsend_active = true;
|
irsend_active = true;
|
||||||
switch (protocol_code) {
|
switch (protocol_code) {
|
||||||
case NEC:
|
case NEC:
|
||||||
irsend->sendNEC(data, (bits > NEC_BITS) ? NEC_BITS : bits); break;
|
irsend->sendNEC(data, (bits > NEC_BITS) ? NEC_BITS : bits, repeat); break;
|
||||||
case SONY:
|
case SONY:
|
||||||
irsend->sendSony(data, (bits > SONY_20_BITS) ? SONY_20_BITS : bits, 2); break;
|
irsend->sendSony(data, (bits > SONY_20_BITS) ? SONY_20_BITS : bits, repeat > kSonyMinRepeat ? repeat : kSonyMinRepeat); break;
|
||||||
case RC5:
|
case RC5:
|
||||||
irsend->sendRC5(data, bits); break;
|
irsend->sendRC5(data, bits, repeat); break;
|
||||||
case RC6:
|
case RC6:
|
||||||
irsend->sendRC6(data, bits); break;
|
irsend->sendRC6(data, bits, repeat); break;
|
||||||
case DISH:
|
case DISH:
|
||||||
irsend->sendDISH(data, (bits > DISH_BITS) ? DISH_BITS : bits); break;
|
irsend->sendDISH(data, (bits > DISH_BITS) ? DISH_BITS : bits, repeat > kDishMinRepeat ? repeat : kDishMinRepeat); break;
|
||||||
case JVC:
|
case JVC:
|
||||||
irsend->sendJVC(data, (bits > JVC_BITS) ? JVC_BITS : bits, 1); break;
|
irsend->sendJVC(data, (bits > JVC_BITS) ? JVC_BITS : bits, repeat > 1 ? repeat : 1); break;
|
||||||
case SAMSUNG:
|
case SAMSUNG:
|
||||||
irsend->sendSAMSUNG(data, (bits > SAMSUNG_BITS) ? SAMSUNG_BITS : bits); break;
|
irsend->sendSAMSUNG(data, (bits > SAMSUNG_BITS) ? SAMSUNG_BITS : bits, repeat); break;
|
||||||
case PANASONIC:
|
case PANASONIC:
|
||||||
// irsend->sendPanasonic(bits, data); break;
|
irsend->sendPanasonic64(data, bits, repeat); break;
|
||||||
irsend->sendPanasonic64(data, bits); break;
|
|
||||||
default:
|
default:
|
||||||
irsend_active = false;
|
irsend_active = false;
|
||||||
Response_P(S_JSON_COMMAND_SVALUE, command, D_JSON_PROTOCOL_NOT_SUPPORTED);
|
Response_P(S_JSON_COMMAND_SVALUE, command, D_JSON_PROTOCOL_NOT_SUPPORTED);
|
||||||
|
|
Loading…
Reference in New Issue