lib: retry i2c on failure

pull/6/head
Kyle Keen 2014-08-11 15:54:48 -04:00
rodzic 42d8f12c6e
commit 9ed9ffa37e
1 zmienionych plików z 22 dodań i 6 usunięć

Wyświetl plik

@ -1950,16 +1950,32 @@ uint32_t rtlsdr_get_tuner_clock(void *dev)
int rtlsdr_i2c_write_fn(void *dev, uint8_t addr, uint8_t *buf, int len)
{
if (dev)
return rtlsdr_i2c_write(((rtlsdr_dev_t *)dev), addr, buf, len);
int r;
int retries = 2;
if (!dev)
return -1;
do {
r = rtlsdr_i2c_write(((rtlsdr_dev_t *)dev), addr, buf, len);
if (r >= 0)
return r;
rtlsdr_set_i2c_repeater(dev, 2);
retries--;
} while (retries > 0);
return -1;
}
int rtlsdr_i2c_read_fn(void *dev, uint8_t addr, uint8_t *buf, int len)
{
if (dev)
return rtlsdr_i2c_read(((rtlsdr_dev_t *)dev), addr, buf, len);
int r;
int retries = 2;
if (!dev)
return -1;
do {
r = rtlsdr_i2c_read(((rtlsdr_dev_t *)dev), addr, buf, len);
if (r >= 0)
return r;
rtlsdr_set_i2c_repeater(dev, 2);
retries--;
} while (retries > 0);
return -1;
}