install udev
[librfid] / src / rfid_asic_rc632.c
index 5a0f12f..28bd5a1 100644 (file)
@@ -288,7 +288,9 @@ static int rc632_wait_idle_timer(struct rfid_asic_handle *handle)
                DEBUGP_STATUS_FLAG(stat);
                if (stat & RC632_STAT_ERR) {
                        u_int8_t err;
-                       rc632_reg_read(handle, RC632_REG_ERROR_FLAG, &err);
+                       ret = rc632_reg_read(handle, RC632_REG_ERROR_FLAG, &err);
+                       if (ret < 0)
+                               return ret;
                        DEBUGP_ERROR_FLAG(err);
                        if (err & (RC632_ERR_FLAG_COL_ERR |
                                   RC632_ERR_FLAG_PARITY_ERR |
@@ -355,7 +357,9 @@ rc632_wait_idle(struct rfid_asic_handle *handle, u_int64_t timeout)
                                ret = rc632_reg_read(handle, RC632_REG_INTERRUPT_RQ, &foo);
                                DEBUGP_INTERRUPT_FLAG("irq_rq",foo);
                                /* clear all interrupts */
-                               rc632_clear_irqs(handle, 0xff);
+                               ret = rc632_clear_irqs(handle, 0xff);
+                               if (ret < 0)
+                                       return ret;
                        }
                }
                if (cmd == 0) {
@@ -447,18 +451,13 @@ rc632_transceive(struct rfid_asic_handle *handle,
                cur_tx_len = tx_len;
 
 
-       ret = rc632_reg_write(handle, RC632_REG_COMMAND, 0x00);
+       ret = rc632_reg_write(handle, RC632_REG_COMMAND, RC632_CMD_IDLE);
        /* clear all interrupts */
        ret = rc632_reg_write(handle, RC632_REG_INTERRUPT_RQ, 0x7f);
-       ret = rc632_reg_write(handle, RC632_REG_ERROR_FLAG, 0xff);
 
        { u_int8_t tmp;
        rc632_reg_read(handle, RC632_REG_PRIMARY_STATUS, &tmp);
        DEBUGP_STATUS_FLAG(tmp);
-       rc632_reg_read(handle, RC632_REG_PRIMARY_STATUS, &tmp);
-       DEBUGP_STATUS_FLAG(tmp);
-       rc632_reg_read(handle, RC632_REG_PRIMARY_STATUS, &tmp);
-       DEBUGP_STATUS_FLAG(tmp);
        rc632_reg_read(handle, RC632_REG_ERROR_FLAG, &tmp);
        DEBUGP_ERROR_FLAG(tmp);
        }
@@ -526,7 +525,7 @@ rc632_transceive(struct rfid_asic_handle *handle,
                rc632_reg_read(handle, RC632_REG_CHANNEL_REDUNDANCY, &tmp);
 
                //return 0;
-               return -1;
+               return -EIO;
        }
 
        return rc632_fifo_read(handle, *rx_len, rx_buf);
@@ -1774,7 +1773,7 @@ rc632_iso15693_transceive_ac(struct rfid_asic_handle *handle,
        ret = rc632_transceive(handle, (u_int8_t *)acf, acf_len,
                               (u_int8_t *) resp, rx_len, 
                               iso15693_timing[rate][ISO15693_T1], 0);
-       if (ret == -ETIMEDOUT)
+       if (ret == -ETIMEDOUT || ret == -EIO)
                return ret;
 
        /* determine whether there was a collission */
@@ -1792,6 +1791,8 @@ rc632_iso15693_transceive_ac(struct rfid_asic_handle *handle,
                *bit_of_col = boc;
        } else {
                *bit_of_col = 0;
+               if (error_flag & RC632_ERR_FLAG_CRC_ERR)
+                       return -EIO;
        }
 
        return 0;