def rawread(self):
aty = ctypes.c_int16 * self.samplesPerPacket
xi = aty()
xq = aty()
firstSampleNum = ctypes.c_uint(0)
grChanged = ctypes.c_uint(0)
rfChanged = ctypes.c_uint(0)
fsChanged = ctypes.c_uint(0)
err = self.lib.mir_sdr_ReadPacket(ctypes.byref(xi),
ctypes.byref(xq),
ctypes.byref(firstSampleNum),
ctypes.byref(grChanged),
ctypes.byref(rfChanged),
ctypes.byref(fsChanged))
if err != 0:
sys.stderr.write("sdrplay: mir_sdrReadPacket failed: %d\n" % (err))
sys.exit(1)
# I don't know if these are needed.
if grChanged.value != 0:
self.lib.mir_sdr_ResetUpdateFlags(1, 0, 0)
if rfChanged.value != 0:
self.lib.mir_sdr_ResetUpdateFlags(0, 1, 0)
if fsChanged.value != 0:
self.lib.mir_sdr_ResetUpdateFlags(0, 0, 1)
# ii = numpy.fromstring(xi, dtype=numpy.int16)
# qq = numpy.fromstring(xq, dtype=numpy.int16)
ii = [ xi[i] for i in range(0, self.samplesPerPacket) ]
ii = numpy.array(ii).astype(numpy.float64)
qq = [ xq[i] for i in range(0, self.samplesPerPacket) ]
qq = numpy.array(qq).astype(numpy.float64)
iq = ii + 1j*qq
# theory: firstSampleNum is only 16 bits, upper bits are junk.
num = firstSampleNum.value
num = num & 0xffff
if self.expect != None and num != self.expect:
print("%d vs %d -- gap %d" % (self.expect, num, num - self.expect))
self.expect = (num + self.samplesPerPacket) & 0xffff
return iq
# blocking read.
# returns [ samples, end_time ]
评论列表
文章目录