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:
parent
852d135791
commit
d9fe3aed75
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=364149
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user