Peak Manager

- added multi peak capability

git-svn-id: http://moon:8086/svn/software/trunk/projects/GnuRadio@498 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2019-05-29 08:20:39 +00:00
parent 778ff8f984
commit b665890f9e
+29 -22
View File
@@ -35,6 +35,8 @@ class peak_manager(gr.basic_block):
self.numPeaksMax = numPeaksMax
self.peak_dict = {}
self.ports_avail = []
self.ports_used = []
print ("numPeaksMax : ", numPeaksMax)
@@ -42,29 +44,32 @@ class peak_manager(gr.basic_block):
self.message_port_register_in(pmt.intern("control"))
self.message_port_register_out(pmt.intern("status"))
self.out_ports = []
if self.numPeaksMax < 2:
self.out_ports.append(pmt.intern("freq"))
out_port_name = "freq"
self.ports_avail.append(out_port_name)
self.message_port_register_out(pmt.intern(out_port_name))
else:
for n in range(0, self.numPeaksMax):
self.out_ports.append(pmt.intern("freq" + str(n)))
for out_port in self.out_ports:
self.message_port_register_out(out_port)
out_port_name = "freq" + str(n)
self.ports_avail.append(out_port_name)
self.message_port_register_out(pmt.intern(out_port_name))
# Register in message handler
self.set_msg_handler(pmt.intern("control"), self.msg_handler)
def peak_add(self, key, peak):
if len(self.peak_dict) < self.numPeaksMax:
if len(self.ports_avail) > 0:
port_name = self.ports_avail.pop()
peak['port_name'] = port_name
self.peak_dict[key] = peak
return True
return False
return peak
return None
def peak_del(self, key):
if key in self.peak_dict:
port_name = self.peak_dict[key]['port_name']
self.ports_avail.append(port_name)
self.peak_dict.pop(key, None)
return True
return False
@@ -103,25 +108,27 @@ class peak_manager(gr.basic_block):
id = peak['id']
freq_MHz = peak['freq_Hz']*1e-6
peak_key = 'peak' + str(id)
peak0 = self.peak_get(peak_key)
if peak['state'] == 1:
print ("New peak #{} at {:0.2f} MHz".format(id, freq_MHz))
peak_key = 'peak' + str(id)
peak0 = self.peak_get(peak_key)
if peak0 is not None:
pair = pmt.cons(pmt.intern("freq"), pmt.from_float(peak['freq_Hz']))
print("Update " + peak_key)
self.message_port_pub(pmt.intern("freq"), pair)
elif self.peak_add(peak_key, peak):
portname = peak0['port_name']
print("Update " + peak_key + "(" + portname + ")")
self.message_port_pub(pmt.intern(portname), pair)
else:
print ("New peak #{} at {:0.2f} MHz".format(id, freq_MHz))
peak0 = self.peak_add(peak_key, peak)
pair = pmt.cons(pmt.intern("freq"), pmt.from_float(peak['freq_Hz']))
print("Added " + peak_key)
self.message_port_pub(pmt.intern("freq"), pair)
portname = peak0['port_name']
print("Added " + peak_key + "(" + portname + ")")
self.message_port_pub(pmt.intern(portname), pair)
else:
print ("Lost peak #{} at {:0.2f} MHz".format(id, freq_MHz))
peak_key = 'peak' + str(id)
portname = peak0['port_name']
if self.peak_del(peak_key):
print("Deleted " + peak_key)
print("Deleted " + peak_key + "(" + portname + ")")
else: