Hi All, I managed to partially answer my own question:
> ... Question: > > Although I know when the command was sent, I don't know when it was > processed. I want to either: > > 1. get 'rx_time' and 'rx_freq' messages after the 'tune' command is executed, > or > 2. access <my_uhd_block>.get_time_now() / <my_uhd_block>.get_center_freq() > from within a python block. I'm unclear on how to get the <my_uhd_block> > reference. > I'm still not sure how to get messages (1.), the answer for (2.) is as follows: ASSUMPTIONS/PRECONDITIONS: - An existing 'UHD: USRP Source' Block named 'B210A' ... - An Embedded 'Python Block' (epyblock) named 'MyEPyBlock' that needs info from B210A (1) Create a variable in the flowgraph named 'REF_B210A' and initialize it to 0 (2) Create a 'Python Snippet' Block 'pysnip_main_after_start_setB210A' : the 'Section of Flowgraph' must be set to 'Main After Start'. (3) The 'Code Snippet' of the 'pysnip_main_after_start_setB210A' block must contain this line: ```python # this line must be in the body of 'pysnip_main_after_start_setB210A': self.set_REF_B210A(self.B210A) # note: self.set_REF_B210A, **NOT** self.REF_B210A ``` (4.A) Add a parameter `ref_usrp` to the `__init__(...)` method of 'MyEPyBlock' [Code], and (4.B) Initialize property `self.ref_usrp = ref_usrp` (so GRC will create a callback): ```python class MyEPyBlock(gr.basic_block): # ... other code ... def __init__(self, # other params ... ref_usrp = 0, # ... more params ): self.ref_usrp = ref_usrp # creates callbacks in flowgraph # ... more initializion ... ``` (5) After editing the code, the Python Block will have a parameter 'Ref_Usrp' ... Set the value of 'Ref_Usrp' to REF_USRP (the variable name) (6) 'MyEPyBlock' code can now access the referenced usrp: ```python # a function called by `work(...)` or a message handler in 'MyEPyBlock': def my_usrp_info() -> str: uhd_msg_str: str = 'NOTHING YET' if self.ref_usrp: usrp_tm: float = (_t_ := self.ref_usrp.get_time_now()).get_real_secs() usrp_last_pps: float = self.ref_usrp.get_time_last_pps().get_real_secs() usrp_cr: float = self.ref_usrp.get_clock_rate() usrp_ticks: int = _t_.to_ticks(usrp_tm) uhd_msg_str = (f"snippetMStart_get_USRP_info:\n" f"usrp_tm={usrp_tm} (ticks={usrp_ticks})\nusrp_last_pps={usrp_last_pps}\nusrp_cr={usrp_cr}") return uhd_msg_str ``` Cheers, - W