1import SoapySDR
2from SoapySDR import * #SOAPY_SDR_* constants
3import numpy as np
4import time
5
6if __name__ == "__main__":
7    hackrf = SoapySDR.Device(dict(driver="hackrf"))
8    print hackrf
9
10    hackrf.setSampleRate(SOAPY_SDR_RX, 0, 8e6)
11    hackrf.setSampleRate(SOAPY_SDR_TX, 0, 8e6)
12
13    """
14    for i in range(5):
15        print("  Make rx stream #%d"%i)
16        rxStream = hackrf.setupStream(SOAPY_SDR_RX, SOAPY_SDR_CF32, [0])
17        for j in range(5):
18            numSampsTotal = 10000
19            print("    Activate, get %d samples, Deactivate #%d"%(numSampsTotal, j))
20            hackrf.activateStream(rxStream)
21            buff = np.array([0]*1024, np.complex64)
22            while numSampsTotal > 0:
23                sr = hackrf.readStream(rxStream, [buff], buff.size, timeoutUs=int(1e6))
24                #print sr
25                assert(sr.ret > 0)
26                numSampsTotal -= sr.ret
27            hackrf.deactivateStream(rxStream)
28        hackrf.closeStream(rxStream)
29
30    for i in range(5):
31        print("  Make tx stream #%d"%i)
32        txStream = hackrf.setupStream(SOAPY_SDR_TX, SOAPY_SDR_CF32, [0])
33        for j in range(5):
34            numSampsTotal = 10000
35            print("    Activate, send %d samples, Deactivate #%d"%(numSampsTotal, j))
36            hackrf.activateStream(txStream)
37            buff = np.array([0]*1024, np.complex64)
38            while numSampsTotal != 0:
39                size = min(buff.size, numSampsTotal)
40                sr = hackrf.writeStream(txStream, [buff], size)
41                #print sr
42                if not (sr.ret > 0): print("Fail %s, %d"%(sr, numSampsTotal))
43                assert(sr.ret > 0)
44                numSampsTotal -= sr.ret
45            hackrf.deactivateStream(txStream)
46        hackrf.closeStream(txStream)
47    """
48
49    ####################################################################
50    #setup both streams at once
51    ####################################################################
52    rxStream = hackrf.setupStream(SOAPY_SDR_RX, SOAPY_SDR_CF32, [0])
53    txStream = hackrf.setupStream(SOAPY_SDR_TX, SOAPY_SDR_CF32, [0])
54
55    hackrf.activateStream(rxStream)
56    hackrf.activateStream(txStream)
57
58    numSampsTotal = 10000
59    hackrf.activateStream(rxStream)
60    buff = np.array([0]*1024, np.complex64)
61    while numSampsTotal > 0:
62        sr = hackrf.readStream(rxStream, [buff], buff.size, timeoutUs=int(1e6))
63        #print sr
64        assert(sr.ret > 0)
65        numSampsTotal -= sr.ret
66
67    numSampsTotal = 10000
68    buff = np.array([0]*1024, np.complex64)
69    while numSampsTotal != 0:
70        size = min(buff.size, numSampsTotal)
71        sr = hackrf.writeStream(txStream, [buff], size)
72        #print sr
73        if not (sr.ret > 0): print("Fail %s, %d"%(sr, numSampsTotal))
74        assert(sr.ret > 0)
75        numSampsTotal -= sr.ret
76
77    hackrf.deactivateStream(rxStream)
78    hackrf.deactivateStream(txStream)
79
80    hackrf.closeStream(rxStream)
81    hackrf.closeStream(txStream)
82