Author: avg
Date: Wed Aug 12 09:57:28 2020
New Revision: 364149
URL: https://svnweb.freebsd.org/changeset/base/364149

Log:
  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

Modified:
  head/sys/arm/allwinner/aw_cir.c

Modified: head/sys/arm/allwinner/aw_cir.c
==============================================================================
--- head/sys/arm/allwinner/aw_cir.c     Wed Aug 12 09:56:21 2020        
(r364148)
+++ head/sys/arm/allwinner/aw_cir.c     Wed Aug 12 09:57:28 2020        
(r364149)
@@ -202,9 +202,9 @@ aw_ir_read_data(struct aw_ir_softc *sc)
 static unsigned long
 aw_ir_decode_packets(struct aw_ir_softc *sc)
 {
-       unsigned long len, code;
-       unsigned char val, last;
+       unsigned int len, code;
        unsigned int active_delay;
+       unsigned char val, last;
        int i, bitcount;
 
        if (bootverbose)
@@ -215,11 +215,11 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
            (AW_IR_ACTIVE_T_C_VAL != 0 ? 128 : 1);
        len = active_delay;
        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++) {
                val = sc->buf[i];
                if (val & VAL_MASK)
-                       len += val & PERIOD_MASK;
+                       len += (val & PERIOD_MASK) + 1;
                else {
                        if (len > AW_IR_L1_MIN)
                                break;
@@ -227,7 +227,7 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
                }
        }
        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 (bootverbose)
                        device_printf(sc->dev, "Bit separator error\n");
@@ -243,7 +243,7 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
                                break;
                        len = 0;
                } else
-                       len += val & PERIOD_MASK;
+                       len += (val & PERIOD_MASK) + 1;
        }
        if ((!(val & VAL_MASK)) || (len <= AW_IR_L0_MIN)) {
                if (bootverbose)
@@ -260,23 +260,25 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
                val = sc->buf[i];
                if (last) {
                        if (val & VAL_MASK)
-                               len += val & PERIOD_MASK;
+                               len += (val & PERIOD_MASK) + 1;
                        else {
                                if (len > AW_IR_PMAX) {
                                        if (bootverbose)
                                                device_printf(sc->dev,
-                                                   "Pulse error\n");
+                                                   "Pulse error, len=%d\n",
+                                                   len);
                                        goto error_code;
                                }
                                last = 0;
-                               len = val & PERIOD_MASK;
+                               len = (val & PERIOD_MASK) + 1;
                        }
                } else {
                        if (val & VAL_MASK) {
                                if (len > AW_IR_DMAX) {
                                        if (bootverbose)
                                                device_printf(sc->dev,
-                                                   "Distant error\n");
+                                                   "Distance error, len=%d\n",
+                                                   len);
                                        goto error_code;
                                } else {
                                        if (len > AW_IR_DMID) {
@@ -288,9 +290,9 @@ aw_ir_decode_packets(struct aw_ir_softc *sc)
                                                break;  /* Finish decoding */
                                }
                                last = 1;
-                               len = val & PERIOD_MASK;
+                               len = (val & PERIOD_MASK) + 1;
                        } else
-                               len += val & PERIOD_MASK;
+                               len += (val & PERIOD_MASK) + 1;
                }
        }
        return (code);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to