Update xdrv_05_irremote.ino

Code shaving
This commit is contained in:
Theo Arends 2019-04-09 15:41:01 +02:00
parent 19ab3183f4
commit 51e66bcccf

View File

@ -549,49 +549,45 @@ bool IrSendCommand(void)
error = IE_INVALID_RAWDATA; error = IE_INVALID_RAWDATA;
} else { } else {
uint16_t freq = atoi(str); uint16_t freq = atoi(str);
if (!freq && (*str != '0')) { // first parameter is a string if (!freq && (*str != '0')) { // First parameter is a string
uint16_t count = 0; uint16_t count = 0;
char *q = p; char *q = p;
for (; *q; count += (*q++ == ',')); for (; *q; count += (*q++ == ','));
if (count != 6) { // parameters must be exactly 6 if (count != 6) { // Parameters must be exactly 6
error = IE_INVALID_RAWDATA; error = IE_INVALID_RAWDATA;
} else { } else {
str = strtok_r(NULL, ", ", &p); uint16_t parm[6];
freq = atoi(str); for (uint8_t i = 0; i < 6; i++) {
if (!freq) { freq = 38000; } // Default to 38kHz str = strtok_r(nullptr, ", ", &p);
str = strtok_r(NULL, ", ", &p); parm[i] = atoi(str);
uint16_t hdr_mrk = atoi(str); // header mark if (!parm[i]) {
str = strtok_r(NULL, ", ", &p); if (!i) {
uint16_t hdr_spc = atoi(str); // header space parm[0] = 38000; // Frequency default to 38kHz
str = strtok_r(NULL, ", ", &p); } else {
uint16_t bit_mrk = atoi(str); // bit mark error = IE_INVALID_RAWDATA;
str = strtok_r(NULL, ", ", &p); break;
uint16_t zer_spc = atoi(str); // zero space }
str = strtok_r(NULL, ", ", &p); }
uint16_t one_spc = atoi(str); // one space }
if (IE_NO_ERROR == error) {
if (!hdr_mrk || !hdr_spc || !bit_mrk || !zer_spc || !one_spc) { uint16_t raw_array[strlen(p)*2+3]; // Header + bits + end
error = IE_INVALID_RAWDATA; uint16_t i = 0;
} else { raw_array[i++] = parm[1]; // Header mark
uint16_t raw_array[strlen(p)*2+3]; // header + bits + end raw_array[i++] = parm[2]; // Header space
uint16_t i = 0; for (; *p; *p++) {
raw_array[i++] = hdr_mrk; if (*p == '0') {
raw_array[i++] = hdr_spc; raw_array[i++] = parm[3]; // Bit mark
raw_array[i++] = parm[4]; // Zero space
for (; *p; *p++) { }
if (*p == '0') { else if (*p == '1') {
raw_array[i++] = bit_mrk; raw_array[i++] = parm[3]; // Bit mark
raw_array[i++] = zer_spc; raw_array[i++] = parm[5]; // One space
} else if (*p == '1') { }
raw_array[i++] = bit_mrk; }
raw_array[i++] = one_spc; raw_array[i++] = parm[3]; // Trailing mark
} irsend_active = true;
} irsend->sendRaw(raw_array, i, parm[0]);
raw_array[i++] = bit_mrk; // trailing mark }
irsend_active = true;
irsend->sendRaw(raw_array, i, freq);
}
} }
} else { } else {
if (!freq) { freq = 38000; } // Default to 38kHz if (!freq) { freq = 38000; } // Default to 38kHz