Make some more functions available in the API and add DO_NOT_REATTACH compile option

pull/21/head
Tatu Peltola 2017-07-27 17:01:17 +03:00
rodzic 0d825fe08e
commit 8a85973283
3 zmienionych plików z 32 dodań i 0 usunięć

Wyświetl plik

@ -122,6 +122,12 @@ else (DETACH_KERNEL_DRIVER)
message (STATUS "Building with kernel driver detaching disabled, use -DDETACH_KERNEL_DRIVER=ON to enable")
endif (DETACH_KERNEL_DRIVER)
option(DO_NOT_REATTACH "Do not reattach kernel driver" OFF)
if (DO_NOT_REATTACH)
message (STATUS "Disabled reattaching of kernel driver")
add_definitions(-DDO_NOT_REATTACH=1)
endif (DO_NOT_REATTACH)
########################################################################
# Add subdirectories
########################################################################

Wyświetl plik

@ -386,6 +386,10 @@ RTLSDR_API int rtlsdr_read_async(rtlsdr_dev_t *dev,
*/
RTLSDR_API int rtlsdr_cancel_async(rtlsdr_dev_t *dev);
RTLSDR_API int rtlsdr_demod_write_reg(rtlsdr_dev_t *dev, uint8_t page, uint16_t addr, uint16_t val, uint8_t len);
RTLSDR_API void rtlsdr_set_i2c_repeater(rtlsdr_dev_t *dev, int on);
RTLSDR_API int rtlsdr_set_sample_freq_correction_f(rtlsdr_dev_t *dev, float correction);
RTLSDR_API int rtlsdr_set_sample_freq_correction(rtlsdr_dev_t *dev, int ppm);
#ifdef __cplusplus
}
#endif

Wyświetl plik

@ -724,6 +724,26 @@ int rtlsdr_set_if_freq(rtlsdr_dev_t *dev, uint32_t freq)
return r;
}
int rtlsdr_set_sample_freq_correction_f(rtlsdr_dev_t *dev, float correction)
{
int r = 0;
uint8_t tmp;
int16_t offs;
int32_t offs1 = (int16_t)(correction * -1 * TWO_POW(24));
if(offs1 > 0x1FFF) offs = 0x1FFF;
else if(offs1 < -0x1FFF) offs = -0x1FFF;
else offs = offs1;
rtlsdr_set_i2c_repeater(dev, 0);
tmp = offs & 0xff;
r |= rtlsdr_demod_write_reg(dev, 1, 0x3f, tmp, 1);
tmp = (offs >> 8) & 0x3f;
r |= rtlsdr_demod_write_reg(dev, 1, 0x3e, tmp, 1);
return r;
}
int rtlsdr_set_sample_freq_correction(rtlsdr_dev_t *dev, int ppm)
{
int r = 0;
@ -1681,12 +1701,14 @@ int rtlsdr_close(rtlsdr_dev_t *dev)
libusb_release_interface(dev->devh, 0);
#ifdef DETACH_KERNEL_DRIVER
#ifndef DO_NOT_REATTACH
if (dev->driver_active) {
if (!libusb_attach_kernel_driver(dev->devh, 0))
fprintf(stderr, "Reattached kernel driver\n");
else
fprintf(stderr, "Reattaching kernel driver failed!\n");
}
#endif
#endif
libusb_close(dev->devh);