def getKnownPackets(self, project=None): """ Get all known packets of a Project as objects. Uses the global project if no project is given. :param project: Optional parameter to specify the project to use :return: A list of all known packets as KnownPacket objects """ if project is None: project = Globals.project if Toolbox.Toolbox.checkProjectIsNone(project): return cursor = self.connection.cursor() cursor.execute( DatabaseStatements.getSelectAllStatementWhereEquals( DatabaseStatements.knownPacketTableName, "ProjectID", project.id)) rows = cursor.fetchall() knownPackets = [] for row in rows: assert len(row) == 5 knownPackets.append( KnownPacket(row[0], row[1], row[2], row[3], row[4])) return knownPackets
def addKnownPacket(self, CANID=None, data=None, description=None): """ Save a known packet to the current project (and database) Default: Get values from the GUI elements. But you can also specify the values using the optional parameters. :param CANID: Optional: CAN ID :param data: Optional: Payload data :param description: Optional: Description of the known packet :return: """ if Globals.project is None: QtGui.QMessageBox.information( Globals.ui.tabWidgetMain, Strings.noProjectSelectedMessageBoxTitle, Strings.noProjectSelectedMessageBoxText, QtGui.QMessageBox.Ok) return if CANID is None: CANID = self.lineEditKnownPacketID.text() if data is None: data = self.lineEditKnownPacketData.text() if description is None: description = self.lineEditKnownPacketDescription.text() if len(CANID) < 1 or len(data) < 1 or len(description) < 1: self.logger.info(Strings.managerTabKnownPacketNotAdded) return knownPacket = KnownPacket(None, Globals.project.id, CANID, data, description) Globals.db.saveKnownPacket(knownPacket) self.populateKnownPackets() # Update the dictionary of known values self.getKnownPacketsForCurrentProject() self.lineEditKnownPacketID.clear() self.lineEditKnownPacketData.clear() self.lineEditKnownPacketDescription.clear() self.logger.info(Strings.managerTabKnownPacketAdded)
def editKnownPacket(self): """ Update a known packet with new specified values. """ selectedKnownPacket = self.comboBoxEditKnownPackets.itemData( self.comboBoxEditKnownPackets.currentIndex()) if selectedKnownPacket is None: return oldCANID = selectedKnownPacket.CANID oldData = selectedKnownPacket.data newCANID = self.lineEditKnownPacketEditID.text() newData = self.lineEditKnownPacketEditData.text() newDescription = self.lineEditKnownPacketEditDescription.text() if len(newCANID) == 0 or len(newData) == 0 or len(newDescription) == 0: self.logger.warn(Strings.managerTabKnownPacketNotEdited) return updatedKnownPacket = KnownPacket(selectedKnownPacket.id, Globals.project.id, newCANID, newData, newDescription) Globals.db.updateKnownPacket(updatedKnownPacket) # Also update the comboboxes self.populateKnownPackets(keepCurrentIndex=True) # Also update the global variable that stores all descriptions oldStrIdx = Toolbox.Toolbox.getPacketDictIndex(oldCANID, oldData) # Delete the old value Globals.knownPackets.pop(oldStrIdx, None) # Inser the new value newStrIdx = Toolbox.Toolbox.getPacketDictIndex(newCANID, newData) Globals.knownPackets[newStrIdx] = newDescription self.logger.info(Strings.managerTabKnownPacketUpdated)
def createDump(self, rawPackets=None): """ Save a new dump to the database. This creates a new PacketSet along with associated Packet objects. If only one packet is saved, the user will be asked if he wants to create a known packet entry for the just saved packet. :param rawPackets: Optional: If this is not None, the values from ``rawPackets`` will be used instead of the data that is currently being displayed in the GUI table. """ if rawPackets is None: rawPackets = self.rawData if len(rawPackets) == 0: return if Toolbox.Toolbox.checkProjectIsNone(): return # Get the name from the tuple returned by the dialog packetSetName = QtGui.QInputDialog.getText( self.packetTableView, Strings.packetSetSaveMessageBoxTitle, Strings.packetSetSaveMessageBoxText, )[0] if len(packetSetName) == 0: self.logger.error(Strings.packetSetInvalidName) return progressDialog = Toolbox.Toolbox.getWorkingDialog( Strings.managerTabSavingPackets) progressDialog.open() try: # We've got data, lets save it packetSetID = Globals.db.savePacketSetWithData( packetSetName, rawPackets=rawPackets) if packetSetID is not None and packetSetID > 0: # Reload is being handled by the triggered event anyway self.populatePacketSets(IDtoChoose=packetSetID) if len(rawPackets) == 1: # The user added a PacketSet with size 1 -- maybe he wants to add it as a known packet too if Toolbox.Toolbox.yesNoBox( Strings.managerTabAddAsKnownPacketMessageBoxTitle, Strings.managerTabAddAsKnownPacketMessageBoxText): rawPacket = rawPackets[0] CANID = rawPacket[0] data = rawPacket[1] # Get the description from the tuple returned by the dialog description = QtGui.QInputDialog.getText( self.packetTableView, Strings. managerTabAskKnownPacketDescriptionMessageBoxTitle, Strings. managerTabAskKnownPacketDescriptionMessageBoxText, )[0] if len(description) == 0: self.logger.error( Strings.knownPacketInvalidDescription) return # Create the object and save it knownPacket = KnownPacket(None, Globals.project.id, CANID, data, description) Globals.db.saveKnownPacket(knownPacket) self.populateKnownPackets() finally: progressDialog.close()