aw_cir: in the pulse encoding the actual length is one greater than value

While here change type of some variables from long to int, it's sufficient.
Also, add length reporting to a couple of debug printfs.

MFC after:	3 weeks
This commit is contained in:
Andriy Gapon 2020-08-12 09:57:28 +00:00
parent 852d135791
commit d9fe3aed75
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=364149

View File

@ -202,9 +202,9 @@ aw_ir_read_data(struct aw_ir_softc *sc)
static unsigned long static unsigned long
aw_ir_decode_packets(struct aw_ir_softc *sc) aw_ir_decode_packets(struct aw_ir_softc *sc)
{ {
unsigned long len, code; unsigned int len, code;
unsigned char val, last;
unsigned int active_delay; unsigned int active_delay;
unsigned char val, last;
int i, bitcount; int i, bitcount;
if (bootverbose) if (bootverbose)
@ -215,11 +215,11 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
(AW_IR_ACTIVE_T_C_VAL != 0 ? 128 : 1); (AW_IR_ACTIVE_T_C_VAL != 0 ? 128 : 1);
len = active_delay; len = active_delay;
if (bootverbose) if (bootverbose)
device_printf(sc->dev, "Initial len: %ld\n", len); device_printf(sc->dev, "Initial len: %d\n", len);
for (i = 0; i < sc->dcnt; i++) { for (i = 0; i < sc->dcnt; i++) {
val = sc->buf[i]; val = sc->buf[i];
if (val & VAL_MASK) if (val & VAL_MASK)
len += val & PERIOD_MASK; len += (val & PERIOD_MASK) + 1;
else { else {
if (len > AW_IR_L1_MIN) if (len > AW_IR_L1_MIN)
break; break;
@ -227,7 +227,7 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
} }
} }
if (bootverbose) if (bootverbose)
device_printf(sc->dev, "len = %ld\n", len); device_printf(sc->dev, "len = %d\n", len);
if ((val & VAL_MASK) || (len <= AW_IR_L1_MIN)) { if ((val & VAL_MASK) || (len <= AW_IR_L1_MIN)) {
if (bootverbose) if (bootverbose)
device_printf(sc->dev, "Bit separator error\n"); device_printf(sc->dev, "Bit separator error\n");
@ -243,7 +243,7 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
break; break;
len = 0; len = 0;
} else } else
len += val & PERIOD_MASK; len += (val & PERIOD_MASK) + 1;
} }
if ((!(val & VAL_MASK)) || (len <= AW_IR_L0_MIN)) { if ((!(val & VAL_MASK)) || (len <= AW_IR_L0_MIN)) {
if (bootverbose) if (bootverbose)
@ -260,23 +260,25 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
val = sc->buf[i]; val = sc->buf[i];
if (last) { if (last) {
if (val & VAL_MASK) if (val & VAL_MASK)
len += val & PERIOD_MASK; len += (val & PERIOD_MASK) + 1;
else { else {
if (len > AW_IR_PMAX) { if (len > AW_IR_PMAX) {
if (bootverbose) if (bootverbose)
device_printf(sc->dev, device_printf(sc->dev,
"Pulse error\n"); "Pulse error, len=%d\n",
len);
goto error_code; goto error_code;
} }
last = 0; last = 0;
len = val & PERIOD_MASK; len = (val & PERIOD_MASK) + 1;
} }
} else { } else {
if (val & VAL_MASK) { if (val & VAL_MASK) {
if (len > AW_IR_DMAX) { if (len > AW_IR_DMAX) {
if (bootverbose) if (bootverbose)
device_printf(sc->dev, device_printf(sc->dev,
"Distant error\n"); "Distance error, len=%d\n",
len);
goto error_code; goto error_code;
} else { } else {
if (len > AW_IR_DMID) { if (len > AW_IR_DMID) {
@ -288,9 +290,9 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
break; /* Finish decoding */ break; /* Finish decoding */
} }
last = 1; last = 1;
len = val & PERIOD_MASK; len = (val & PERIOD_MASK) + 1;
} else } else
len += val & PERIOD_MASK; len += (val & PERIOD_MASK) + 1;
} }
} }
return (code); return (code);