mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Deliver frequency offset info to frame handler
This commit is contained in:
parent
16786d4a7e
commit
4d0bef497b
2 changed files with 31 additions and 4 deletions
|
@ -363,9 +363,32 @@ class Demodulator():
|
||||||
# data[1] = freedv session
|
# data[1] = freedv session
|
||||||
# data[2] = bytes_per_frame
|
# data[2] = bytes_per_frame
|
||||||
# data[3] = snr
|
# data[3] = snr
|
||||||
self.data_queue_received.put([data[0], data[1], data[2], data[3]])
|
|
||||||
|
item = {
|
||||||
|
'payload': data[0],
|
||||||
|
'freedv': data[1],
|
||||||
|
'bytes_per_frame': data[2],
|
||||||
|
'snr': data[3],
|
||||||
|
'frequency_offset': self.get_frequency_offset(data[1]),
|
||||||
|
}
|
||||||
|
|
||||||
|
self.data_queue_received.put(item)
|
||||||
self.modem_received_queue.task_done()
|
self.modem_received_queue.task_done()
|
||||||
|
|
||||||
|
def get_frequency_offset(self, freedv: ctypes.c_void_p) -> float:
|
||||||
|
"""
|
||||||
|
Ask codec2 for the calculated (audio) frequency offset of the received signal.
|
||||||
|
|
||||||
|
:param freedv: codec2 instance to query
|
||||||
|
:type freedv: ctypes.c_void_p
|
||||||
|
:return: Offset of audio frequency in Hz
|
||||||
|
:rtype: float
|
||||||
|
"""
|
||||||
|
modemStats = codec2.MODEMSTATS()
|
||||||
|
codec2.api.freedv_get_modem_extended_stats(freedv, ctypes.byref(modemStats))
|
||||||
|
offset = round(modemStats.foff) * (-1)
|
||||||
|
return offset
|
||||||
|
|
||||||
def demodulate_audio(
|
def demodulate_audio(
|
||||||
self,
|
self,
|
||||||
audiobuffer: codec2.audio_buffer,
|
audiobuffer: codec2.audio_buffer,
|
||||||
|
|
|
@ -152,10 +152,14 @@ class DISPATCHER():
|
||||||
# [2] bytes_per_frame
|
# [2] bytes_per_frame
|
||||||
# [3] snr
|
# [3] snr
|
||||||
self.new_process_data(
|
self.new_process_data(
|
||||||
bytes_out=data[0], freedv=data[1], bytes_per_frame=data[2], snr=data[3]
|
data['payload'],
|
||||||
|
data['freedv'],
|
||||||
|
data['bytes_per_frame'],
|
||||||
|
data['snr'],
|
||||||
|
data['frequency_offset'],
|
||||||
)
|
)
|
||||||
|
|
||||||
def new_process_data(self, bytes_out, freedv, bytes_per_frame: int, snr) -> None:
|
def new_process_data(self, bytes_out, freedv, bytes_per_frame: int, snr, offset) -> None:
|
||||||
# get frame as dictionary
|
# get frame as dictionary
|
||||||
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
|
deconstructed_frame = self.frame_factory.deconstruct(bytes_out)
|
||||||
frametype = deconstructed_frame["frame_type_int"]
|
frametype = deconstructed_frame["frame_type_int"]
|
||||||
|
@ -174,7 +178,7 @@ class DISPATCHER():
|
||||||
MODEM_TRANSMIT_QUEUE,
|
MODEM_TRANSMIT_QUEUE,
|
||||||
self.arq_sessions)
|
self.arq_sessions)
|
||||||
|
|
||||||
handler.handle(deconstructed_frame, snr, 0, freedv, bytes_per_frame)
|
handler.handle(deconstructed_frame, snr, offset, freedv, bytes_per_frame)
|
||||||
|
|
||||||
def old_process_data(self, bytes_out, freedv, bytes_per_frame: int, snr) -> None:
|
def old_process_data(self, bytes_out, freedv, bytes_per_frame: int, snr) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue