diff --git a/python_bladerf/pylibbladerf/cbladerf.pxd b/python_bladerf/pylibbladerf/cbladerf.pxd index bf8cc0b..68fb871 100644 --- a/python_bladerf/pylibbladerf/cbladerf.pxd +++ b/python_bladerf/pylibbladerf/cbladerf.pxd @@ -326,6 +326,7 @@ cdef extern from 'libbladeRF.h' nogil: ctypedef enum bladerf_format: BLADERF_FORMAT_SC16_Q11 + BLADERF_FORMAT_SC16_Q11_PACKED BLADERF_FORMAT_SC16_Q11_META BLADERF_FORMAT_PACKET_META BLADERF_FORMAT_SC8_Q7 @@ -402,6 +403,7 @@ cdef extern from 'libbladeRF.h' nogil: BLADERF_IMAGE_TYPE_RX_IQ_CAL BLADERF_IMAGE_TYPE_TX_IQ_CAL BLADERF_IMAGE_TYPE_FPGA_A5 + BLADERF_IMAGE_TYPE_GAIN_CAL const int BLADERF_IMAGE_MAGIC_LEN diff --git a/python_bladerf/pylibbladerf/pybladerf.pyx b/python_bladerf/pylibbladerf/pybladerf.pyx index e815966..850be1d 100644 --- a/python_bladerf/pylibbladerf/pybladerf.pyx +++ b/python_bladerf/pylibbladerf/pybladerf.pyx @@ -316,7 +316,9 @@ class pybladerf_correction(IntEnum): class pybladerf_format(IntEnum): PYBLADERF_FORMAT_SC16_Q11 = cbladerf.BLADERF_FORMAT_SC16_Q11 + PYBLADERF_FORMAT_SC16_Q11_PACKED = cbladerf.BLADERF_FORMAT_SC16_Q11_PACKED PYBLADERF_FORMAT_SC16_Q11_META = cbladerf.BLADERF_FORMAT_SC16_Q11_META + PYBLADERF_FORMAT_PACKET_META = cbladerf.BLADERF_FORMAT_PACKET_META PYBLADERF_FORMAT_SC8_Q7 = cbladerf.BLADERF_FORMAT_SC8_Q7 PYBLADERF_FORMAT_SC8_Q7_META = cbladerf.BLADERF_FORMAT_SC8_Q7_META @@ -1709,7 +1711,12 @@ cdef class PyBladerfDevice: cdef void **buffers cdef int result = -1 - async_data.bytes_per_sample = 4 if data_format == pybladerf_format.PYBLADERF_FORMAT_SC16_Q11 else 2 + # SC16_Q11 and SC16_Q11_META carry 16-bit I and Q, so 4 bytes per + # sample; the SC8_Q7 formats carry 8-bit I and Q, so 2 bytes. + async_data.bytes_per_sample = 2 if data_format in ( + pybladerf_format.PYBLADERF_FORMAT_SC8_Q7, + pybladerf_format.PYBLADERF_FORMAT_SC8_Q7_META, + ) else 4 async_data.package_size = USB_PACKAGE_SIZE_SS if self.pybladerf_device_speed() == pybladerf_dev_speed.PYBLADERF_DEVICE_SPEED_SUPER else USB_PACKAGE_SIZE_HS async_data.packages_per_buffer = samples_per_buffer // (async_data.package_size // async_data.bytes_per_sample) async_data.samples_per_package = (samples_per_buffer - PYMETADATA_HEADER_SIZE) // async_data.bytes_per_sample @@ -1737,7 +1744,12 @@ cdef class PyBladerfDevice: cdef void **buffers cdef int result = -1 - async_data.bytes_per_sample = 4 if data_format == pybladerf_format.PYBLADERF_FORMAT_SC16_Q11 else 2 + # SC16_Q11 and SC16_Q11_META carry 16-bit I and Q, so 4 bytes per + # sample; the SC8_Q7 formats carry 8-bit I and Q, so 2 bytes. + async_data.bytes_per_sample = 2 if data_format in ( + pybladerf_format.PYBLADERF_FORMAT_SC8_Q7, + pybladerf_format.PYBLADERF_FORMAT_SC8_Q7_META, + ) else 4 async_data.package_size = USB_PACKAGE_SIZE_SS if self.pybladerf_device_speed() == pybladerf_dev_speed.PYBLADERF_DEVICE_SPEED_SUPER else USB_PACKAGE_SIZE_HS async_data.packages_per_buffer = samples_per_buffer // (async_data.package_size // async_data.bytes_per_sample) async_data.samples_per_package = (samples_per_buffer - PYMETADATA_HEADER_SIZE) // async_data.bytes_per_sample