BUGFIX: Incorrect frequency display (conversion error) (#3656)
Doxygen / build (push) Has been cancelled

This commit is contained in:
Mael FEURGARD
2026-05-27 16:35:02 +02:00
committed by GitHub
parent 96b83013b7
commit 91cd5ae7e9
3 changed files with 32 additions and 13 deletions
@@ -55,11 +55,17 @@ class IvyRecorder(QObject):
# Subscribe to everything for detecting senders
self.ivy.subscribe(self.__detectSenders)
self.ivy.subscribe(self.__detectSenders,"(.*ALIVE.*)")
# Start Ivy
self.ivy.start()
# Manually add ground
self.__known_senders[0] = None
self.records[0] = dict()
self.new_sender.emit(0)
self.recordSender(0)
def getMessage(self,i:MessageIndex) -> MessageLog:
return self.records[i.sender_id][i.class_id][i.message_id]
@@ -70,14 +76,14 @@ class IvyRecorder(QObject):
for m in c.values():
m.updateSize(bsize)
def __detectSenders(self,sender_id:int,msg:PprzMessage):
def __detectSenders(self,sender_id,msg:PprzMessage):
if isinstance(sender_id,list):
for id in sender_id:
self.__detectSenders(id,msg)
elif isinstance(sender_id,str) and '[' in sender_id:
sender_id = sender_id[1:-1].split(',')
self.__detectSenders(sender_id)
self.__detectSenders(sender_id,msg)
else:
sender_id = int(sender_id)
@@ -94,17 +100,21 @@ class IvyRecorder(QObject):
try:
class_dict = self.records[sender_id][timed_msg.class_id]
except KeyError:
self.records[sender_id][timed_msg.class_id] = dict()
try:
self.records[sender_id][timed_msg.class_id] = dict()
except KeyError:
self.__detectSenders(sender_id,msg)
self.records[sender_id][timed_msg.class_id] = dict()
class_dict = self.records[sender_id][timed_msg.class_id]
self.classNames[timed_msg.class_id] = timed_msg.msg_class
try:
class_dict[timed_msg.msg_id].addMessage(timed_msg)
p = class_dict[timed_msg.msg_id].addMessage(timed_msg)
except KeyError:
class_dict[timed_msg.msg_id] = MessageLog(self.__buffer_size)
class_dict[timed_msg.msg_id].addMessage(timed_msg)
p = class_dict[timed_msg.msg_id].addMessage(timed_msg)
new_msg = True
self.data_updated.emit(sender_id,timed_msg.class_id,timed_msg.msg_id,new_msg)
def recordMessage(self,sender_id:int,msg:PprzMessage):
@@ -191,6 +191,8 @@ class MessageLog():
sublog = MessageLog(self.queue.maxlen)
self.__groups[field.val] = sublog
sublog.addMessage(msg)
return self.period
def addMessages(self,msgs:typing.Iterable[TimedPprzMessage]):
@@ -225,7 +227,7 @@ class MessageLog():
if self.period is None:
raise NoMessageError()
else:
return 10e9/self.period #ns to s, then s to Hz
return 1e9/self.period #ns to s, then s to Hz
def msg_name(self) -> str:
return self.newest().name
@@ -204,7 +204,7 @@ class MessageSubgroupItem(QStandardItem):
fieldAltValItem = QStandardItem()
fieldAltValItem.setEditable(False)
newitems = [None] * COLUMN_COUNT#####
newitems = [None] * COLUMN_COUNT
newitems[FieldColumns.ROOT] = fieldRootItem
newitems[FieldColumns.VALUE] = fieldValueItem
newitems[FieldColumns.ALT_VALUE] = fieldAltValItem
@@ -447,7 +447,7 @@ class MessageClassItem(QStandardItem):
id = msg.msg_id()
name = msg.msg_name()
timestamp = msg.newest().timestamp
dt = (time.time_ns() - timestamp)/10e9
dt = (time.time_ns() - timestamp)/1e9
try:
freq = msg.meanFreq()
@@ -598,7 +598,14 @@ class IvyModel(QStandardItemModel):
newPin = pyqtSignal(int,int,int,str,bool)
multiPinningDone = pyqtSignal()
def __init__(self,ivy_recorder:IvyRecorder, parent: typing.Optional[QObject] = None):
def __init__(self,ivy_recorder:IvyRecorder, parent: typing.Optional[QObject] = None, refresh_time:int = 500):
""" Build a QStandardItemModel linked to an IvyRecorder storing messages
Args:
ivy_recorder (IvyRecorder): Interface storing messages
parent (typing.Optional[QObject], optional): Parent widget. Defaults to None.
refresh_time (int, optional): Time in ms between updates. Defaults to 500ms.
"""
super().__init__(parent)
self.setHorizontalHeaderLabels(["Name","Id/Value","Time/Alt Value"])
@@ -612,7 +619,7 @@ class IvyModel(QStandardItemModel):
self.timer = QTimer()
self.timer.timeout.connect(self.update)
self.timerDt = 500 # Time between updates, in ms
self.timerDt = refresh_time # Time between updates, in ms
self.timer.start(self.timerDt)
@@ -752,7 +759,7 @@ class IvyModel(QStandardItemModel):
senderItem = SenderItem(senderId)
newItems = [QStandardItem()] * COLUMN_COUNT
newItems = [QStandardItem() for i in range(COLUMN_COUNT)]
newItems[SenderColumns.ROOT] = senderItem
for i in newItems: