From 8050d23eefba2142eed5acbd40c64dcd975fd3ea Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Sat, 21 Dec 2024 17:34:39 -0800 Subject: [PATCH 1/2] Feat: OpenBySerial + free DeviceList --- hackrf/device.go | 15 ++++++++ hackrf/hackrf.go | 4 ++- hackrf/hackrf_test.go | 82 +++++++++++++++++++++++++++++++++++-------- 3 files changed, 86 insertions(+), 15 deletions(-) diff --git a/hackrf/device.go b/hackrf/device.go index 06ba425..2aa1c17 100644 --- a/hackrf/device.go +++ b/hackrf/device.go @@ -63,6 +63,21 @@ func Open() (*Device, error) { return &d, nil } +func OpenBySerial(serial string) (*Device, error) { + if serial == "" { + return Open() + } + + var d Device + cSerial := C.CString(serial) + defer C.free(unsafe.Pointer(cSerial)) + if r := C.hackrf_open_by_serial(cSerial, &d.cdev); r != C.HACKRF_SUCCESS { + return nil, toError(r) + } + + return &d, nil +} + func (d *Device) Close() error { e := toError(C.hackrf_close(d.cdev)) if e == nil { diff --git a/hackrf/hackrf.go b/hackrf/hackrf.go index 70ce059..b872967 100644 --- a/hackrf/hackrf.go +++ b/hackrf/hackrf.go @@ -115,7 +115,7 @@ func DeviceList() ([]*DeviceInfo, error) { if clist.devicecount < 1 { return nil, nil } - fmt.Printf("%d devices\n", clist.devicecount) + // fmt.Printf("%d devices\n", clist.devicecount) serials := (*[1 << 30](*C.char))(unsafe.Pointer(clist.serial_numbers))[:clist.devicecount:clist.devicecount] usbBoardIDs := (*[1 << 30](C.int))(unsafe.Pointer(clist.usb_board_ids))[:clist.devicecount:clist.devicecount] @@ -130,5 +130,7 @@ func DeviceList() ([]*DeviceInfo, error) { } } + C.hackrf_device_list_free(clist) + return devices, nil } diff --git a/hackrf/hackrf_test.go b/hackrf/hackrf_test.go index 2759e60..cd9566f 100644 --- a/hackrf/hackrf_test.go +++ b/hackrf/hackrf_test.go @@ -1,29 +1,24 @@ package hackrf import ( - "fmt" "testing" "time" ) -func TestHackRF(t *testing.T) { - if err := Init(); err != nil { - t.Fatal(err) - } - defer Exit() - dev, err := Open() +func testVer(dev *Device, t *testing.T) { + ver, err := dev.Version() if err != nil { t.Fatal(err) + return } - defer dev.Close() - if ver, err := dev.Version(); err != nil { - t.Fatal(err) - } else { - t.Logf("Version: %s", ver) - } + t.Logf("Version: %s\n", ver) +} + +func testRx(dev *Device, t *testing.T) { total := 0 if err := dev.StartRX(func(buf []byte) error { total += len(buf) + t.Logf("Rx: %d", len(buf)) return nil }); err != nil { t.Fatal(err) @@ -32,5 +27,64 @@ func TestHackRF(t *testing.T) { if err := dev.StopRX(); err != nil { t.Fatal(err) } - fmt.Printf("%d bytes\n", total) + t.Logf("Rx total: %d bytes\n", total) +} + +func TestHackRF(t *testing.T) { + if err := Init(); err != nil { + t.Fatal(err) + } + defer func() { + if err := Exit(); err != nil { + t.Error(err) + } + }() + + var devs = make([]*DeviceInfo, 0) + + t.Run("TestDeviceList", func(t *testing.T) { + var err error + if devs, err = DeviceList(); err != nil { + t.Fatal(err) + return + } + for i, dev := range devs { + t.Logf("Device %d: %s\n", i, dev.SerialNumber) + } + }) + + if len(devs) == 0 { + t.Skip("hackrf not found") + return + } + + t.Run("TestOpen", func(t *testing.T) { + dev, err := Open() + if err != nil { + t.Fatal(err) + } + defer func() { + if err = dev.Close(); err != nil { + t.Error(err) + } + }() + + testVer(dev, t) + testRx(dev, t) + }) + + t.Run("TestOpenBySerial", func(t *testing.T) { + dev, err := OpenBySerial(devs[0].SerialNumber) + if err != nil { + t.Fatal(err) + } + defer func() { + if err = dev.Close(); err != nil { + t.Error(err) + } + }() + + testVer(dev, t) + testRx(dev, t) + }) } From 3da18e3f9f39bf71f1b7ebd9d20faef106d04ba7 Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Tue, 24 Dec 2024 01:52:07 -0800 Subject: [PATCH 2/2] Fix[tx][cb]: Use tx callback pointer for StartTX (cherry picked from commit 8bc1c0249faca038aa49673eceded5d2d0a600ce) Signed-off-by: kayos@tcp.direct --- hackrf/device.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hackrf/device.go b/hackrf/device.go index 2aa1c17..ca651e8 100644 --- a/hackrf/device.go +++ b/hackrf/device.go @@ -115,7 +115,7 @@ func (d *Device) StartTX(cb Callback) error { tx: true, dev: d, }) - return toError(C.hackrf_start_tx(d.cdev, (*[0]byte)(unsafe.Pointer(C.rxCBPtr)), unsafe.Pointer(uintptr(cbIx)))) + return toError(C.hackrf_start_tx(d.cdev, (*[0]byte)(unsafe.Pointer(C.txCBPtr)), unsafe.Pointer(uintptr(cbIx)))) } func (d *Device) StopTX() error {