'''Convert a pmt pair (freq . f_Hz) to (freq . f_kHz).

Mike Markowski, mike.ab3ap@gmail.com
Feb 2021
'''

import numpy as np
from gnuradio import gr
import pmt

delta_Hz = 0

class cvtBlock(gr.basic_block):

	def __init__(self, offset_Hz=0):
		"""arguments to this function show up as parameters in GRC"""

		global delta_Hz

		gr.basic_block.__init__(
			self,
			name='kHz to Hz',
			in_sig=None,
			out_sig=None
		)
		delta_Hz = offset_Hz

		self.message_port_register_in(pmt.intern('freq_kHz_in'))
		self.set_msg_handler(pmt.intern('freq_kHz_in'), self.kHzToHz)

		self.message_port_register_out(pmt.intern('freq_Hz_out'))
		self.message_port_register_out(pmt.intern('upConv_Hz_out'))

	def kHzToHz(self, msg):
		'''msg expected to be pmt pair (freq . val).'''

		global delta_Hz

		cmd = pmt.car(msg)
		freq_Hz = 1e3 * pmt.to_python(pmt.cdr(msg))
		upConv_Hz = freq_Hz + delta_Hz

		hzDict = pmt.make_dict()
		hzDict = pmt.dict_add(hzDict, cmd, pmt.to_pmt(freq_Hz))
		self.message_port_pub(pmt.intern('freq_Hz_out'), hzDict)

		hzDict = pmt.make_dict()
		hzDict = pmt.dict_add(hzDict, cmd, pmt.to_pmt(upConv_Hz))
		self.message_port_pub(pmt.intern('upConv_Hz_out'), hzDict)

