On 07/17/2015 05:15 PM, Hans Verkuil wrote:
On 07/16/2015 09:04 AM, Antti Palosaari wrote:
HackRF SDR device has both receiver and transmitter. There is limitation
that receiver and transmitter cannot be used at the same time
(half-duplex operation). That patch implements transmitter support to
existing receiver only driver.

Cc: Hans Verkuil <hverk...@xs4all.nl>
Signed-off-by: Antti Palosaari <cr...@iki.fi>
---
  drivers/media/usb/hackrf/hackrf.c | 787 +++++++++++++++++++++++++++-----------
  1 file changed, 572 insertions(+), 215 deletions(-)

diff --git a/drivers/media/usb/hackrf/hackrf.c 
b/drivers/media/usb/hackrf/hackrf.c
index 5bd291b..97de9cb6 100644
--- a/drivers/media/usb/hackrf/hackrf.c
+++ b/drivers/media/usb/hackrf/hackrf.c
@@ -731,15 +889,19 @@ static int hackrf_querycap(struct file *file, void *fh,
                struct v4l2_capability *cap)
  {
        struct hackrf_dev *dev = video_drvdata(file);
+       struct video_device *vdev = video_devdata(file);

        dev_dbg(dev->dev, "\n");

+       if (vdev->vfl_dir == VFL_DIR_RX)
+               cap->device_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_TUNER;
+       else
+               cap->device_caps = V4L2_CAP_SDR_OUTPUT | V4L2_CAP_MODULATOR;
+       cap->device_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
+       cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;

The capabilities are those of the whole device, so you should OR this with
V4L2_CAP_SDR_CAPTURE | V4L2_CAP_SDR_OUTPUT |
V4L2_CAP_TUNER | V4L2_CAP_MODULATOR

        strlcpy(cap->driver, KBUILD_MODNAME, sizeof(cap->driver));
-       strlcpy(cap->card, dev->vdev.name, sizeof(cap->card));
+       strlcpy(cap->card, dev->rx_vdev.name, sizeof(cap->card));
        usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
-       cap->device_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_STREAMING |
-                       V4L2_CAP_READWRITE | V4L2_CAP_TUNER;
-       cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;

        return 0;
  }

Just to be sure, is it correct that:
**) cap->device_caps == capabilities of whole device, including all the character nodes

**) cap->capabilities == capabilities of single character node


Here is how v4l2-ctl now reports:

[crope@localhost v4l2-ctl]$ ./v4l2-ctl -d /dev/swradio0 --info
Driver Info (not using libv4l2):
        Driver name   : hackrf
        Card type     : HackRF One
        Bus info      : usb-0000:00:13.2-2
        Driver version: 4.2.0
        Capabilities  : 0x85310000
                SDR Capture
                Tuner
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x05790000
                SDR Capture
                SDR Output
                Tuner
                Modulator
                Read/Write
                Streaming
                Extended Pix Format
[crope@localhost v4l2-ctl]$ ./v4l2-ctl -d /dev/swradio1 --info
Driver Info (not using libv4l2):
        Driver name   : hackrf
        Card type     : HackRF One
        Bus info      : usb-0000:00:13.2-2
        Driver version: 4.2.0
        Capabilities  : 0x85680000
                SDR Output
                Modulator
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps   : 0x05790000
                SDR Capture
                SDR Output
                Tuner
                Modulator
                Read/Write
                Streaming
                Extended Pix Format
[crope@localhost v4l2-ctl]$


regards
Antti


--
http://palosaari.fi/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to