Kactus2
Kactus2 reference guide
Loading...
Searching...
No Matches
PythonAPI.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// File: PythonAPI.h
3//-----------------------------------------------------------------------------
4// Project: Kactus 2
5// Author: Mikko Teuho
6// Date: 12.02.2020
7//
8// Description:
9// Interface for accessing Kactus2 data using Python.
10//-----------------------------------------------------------------------------
11
12#ifndef PYTHON_API_H
13#define PYTHON_API_H
14
15#include "pythonapi_global.h"
16
17#include <KactusAPI/KactusAPI.h>
18
19#include <string>
20#include <vector>
21#include <QSharedPointer>
22
26
32
35
36#include <IPXACTmodels/Component/validators/PortValidator.h>
37
38class MessageMediator;
39
40class Component;
41class Field;
42class Register;
43class RegisterBase;
44class AddressBlock;
45class MemoryMap;
46class FileSet;
47
50
53class PortValidator;
55
56class ParameterValidator;
57class MemoryMapValidator;
58
59class Design;
60
61
62//-----------------------------------------------------------------------------
64//-----------------------------------------------------------------------------
66{
67public:
68
72 enum StdRev
73 {
74 Std14, // IEEE 1685-2014
75 Std22 // IEEE 1685-2022
76 };
77
81 PythonAPI();
82
86 ~PythonAPI() = default;
87
93 std::string getVersion() const;
94
100 std::vector<std::string> getActiveLibraryPaths() const;
101
107 std::vector<std::string> getAllLibraryPaths() const;
108
115 void setLibraryPathActive(std::string const& path, bool isActive);
116
123 void addLibraryPath(std::string const& path, bool isActive = true);
124
130 void removeLibraryPath(std::string const& path);
131
138
145
152
159
166
172 void setupLibrary(std::string const& settingsFileString);
173
179 void setLibraryPaths(std::vector<std::string> const& paths) const;
180
186 std::string getDefaultLibraryPath() const;
187
193 void setDefaultLibraryPath(std::string const& path) const;
194
204 int importFile(std::string const& path, std::string const& vlnv, bool overwrite = false) const;
205
214 void generate(std::string const& format, std::string const& vlnv, std::string const& viewName,
215 std::string const& outputDirectory) const;
216
222 int getFileCount() const;
223
231
232 std::vector<std::string> listVLNVs(std::string const& vendor = std::string()) const;
233
239 std::vector<std::string> listComponentVLNVs() const;
240
251 bool vlnvExistsInLibrary(std::string const& vendor, std::string const& library, std::string const& name,
252 std::string const& version) const;
253
265 bool createComponent(std::string const& vendor, std::string const& library, std::string const& name,
266 std::string const& version, StdRev revision = StdRev::Std22);
267
278 std::string getVLNVDirectory(std::string const& vendor, std::string const& library, std::string const& name,
279 std::string const& version) const;
280
286 std::string getFirstViewName() const;
287
295 bool openComponent(std::string const& vlnvString);
296
300 void closeOpenComponent();
301
305
306 std::string getComponentName() const;
307
311
312 std::string getComponentDescription() const;
313
317 std::string getComponentStdRevision() const;
318
322 void saveComponent();
323
324
330 void setBlocksForInterface(std::string const& mapName);
331
338 void setRegistersForInterface(std::string const& mapName, std::string const& blockName);
339
347 void setFieldsForInterface(std::string const& mapName, std::string const& blockName,
348 std::string const& registerName);
349
358 void setResetsForInterface(std::string const& mapName, std::string const& blockName,
359 std::string const& registerName, std::string const& fieldName);
360
366 void setFilesForInterface(std::string const& setName);
367
373 void setFileBuildersForInterface(std::string const& setName);
374
386 bool createDesign(std::string const& vendor, std::string const& library, std::string const& name,
387 std::string const& version, StdRev revision = StdRev::Std22);
388
392 std::string getDesignStdRevision() const;
393
401 bool openDesign(std::string const& vlnvString);
402
406 void closeOpenDesign();
407
411 void saveDesign();
412
421 bool addComponentInstance(std::string const& vlnvString, std::string const& instanceName);
422
430 bool removeComponentInstance(std::string const& instanceName);
431
439 bool removeInstanceConnections(std::string const& instanceName);
440
448 bool removeInstanceAdHocConnections(std::string const& instanceName);
449
458 bool renameInstance(std::string const& currentName, std::string const& newName);
459
470 bool createConnection(std::string const& startInstanceName, std::string const& startBus,
471 std::string const& endInstanceName, std::string const& endBus);
472
482 bool createHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
483 std::string const& topBus);
484
495 bool removeInstanceConnection(std::string const& startInstanceName, std::string const& startBus,
496 std::string const& endInstanceName, std::string const& endBus);
497
507 bool removeHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
508 std::string const& topBus);
509
518 bool renameConnection(std::string const& currentName, std::string const& newName);
519
530 bool createAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
531 std::string const& endInstanceName, std::string const& endPort);
532
542 bool createHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
543 std::string const& topPort);
544
555 bool removeInstanceAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
556 std::string const& endInstanceName, std::string const& endPort);
557
567 bool removeHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
568 std::string const& topPort);
569
578 bool renameAdHocConnection(std::string const& currentName, std::string const& newName);
579
580private:
581
593 bool connectionEndsCheck(QString const& startInstanceName, QString const& startBus,
594 QString const& endInstanceName, QString const& endBus, bool isAdHocConnection);
595
603 bool instanceExists(QString const& instanceName) const;
604
617 bool endsCheckForAdHoc(QSharedPointer<const Component> startComponent, QString const& startBus,
618 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
619 QString const& endInstanceName);
620
633 bool endsCheckForInterconnection(QSharedPointer<const Component> startComponent, QString const& startBus,
634 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
635 QString const& endInstanceName);
636
644 bool removeConnection(std::string const& connectionName);
645
653 bool removeAdHocConnection(std::string const& connectionName);
654
662 QSharedPointer<Document> getDocument(QString const& vlnvString) const;
663
667 void constructMemoryValidators();
668
672 void constructMemoryInterface();
673
677 void constructFileSetInterface();
678
686 QSharedPointer<MemoryMap> getMemoryMap(QString const& mapName) const;
687
696 QSharedPointer<AddressBlock> getAddressBock(QSharedPointer<MemoryMap> containingMap, QString const& blockName)
697 const;
698
707 QSharedPointer<Register> getRegister(QSharedPointer<AddressBlock> containingBlock, QString const& registerName)
708 const;
709
718 QSharedPointer<Field> getField(QSharedPointer<Register> containingRegister, QString const& fieldName) const;
719
727 QSharedPointer<FileSet> getFileSet(QString const& setName) const;
728
734 void sendMemoryMapNotFoundError(QString const& mapName) const;
735
742 void sendAddressBlockNotFoundError(QString const& mapName, QString const& blockName) const;
743
751 void sendRegisterNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName)
752 const;
753
762 void sendFieldNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName,
763 QString const& fieldName) const;
764
770 void sendFileSetNotFoundError(QString const& setName) const;
771
772 //-----------------------------------------------------------------------------
773 // Data.
774 //-----------------------------------------------------------------------------
775
777 LibraryInterface* library_{ KactusAPI::getLibrary() };
778
780 MessageMediator* messager_{ KactusAPI::getMessageChannel() };
781
783 QSharedPointer<ComponentParameterFinder> parameterFinder_{ new ComponentAndInstantiationsParameterFinder(nullptr) };
784
786 QSharedPointer<ExpressionParser> expressionParser_{ new IPXactSystemVerilogParser(parameterFinder_) };
787
789 QSharedPointer<ExpressionFormatter>expressionFormatter_{ new ExpressionFormatter(parameterFinder_) };
790
792 QSharedPointer<Component> activeComponent_{ nullptr };
793
795 QSharedPointer<Design> activeDesign_{ nullptr };
796
798 QSharedPointer<PortValidator> portValidator_{ new PortValidator(expressionParser_,
799 QSharedPointer<QList<QSharedPointer<View> > >()) };
800
802 QSharedPointer<ParameterValidator> parameterValidator_{ new ParameterValidator(expressionParser_,
803 QSharedPointer<QList<QSharedPointer<Choice> > >(), Document::Revision::Std22) };
804
806 QSharedPointer<MemoryMapValidator> mapValidator_{ nullptr };
807
809 PortsInterface* portsInterface_{ new PortsInterface(portValidator_, expressionParser_, expressionFormatter_) };
810
812 BusInterfaceInterface* busInterface_{ BusInterfaceInterfaceFactory::createBusInterface(parameterFinder_,
813 expressionFormatter_, expressionParser_,
814 QSharedPointer<Component>(new Component(VLNV(), Document::Revision::Unknown)), library_) };
815
817 ParametersInterface* componentParameterInterface_{ new ParametersInterface(parameterValidator_,
818 expressionParser_, expressionFormatter_) };
819
821 MemoryMapInterface* mapInterface_{ nullptr };
822
824 FileSetInterface* fileSetInterface_{ nullptr };
825
827 InterconnectionInterface* connectionInterface_{ new InterconnectionInterface() };
828
830 AdHocConnectionInterface* adhocConnectionInterface_{ new AdHocConnectionInterface() };
831
833 ComponentInstanceInterface* instanceInterface_{ new ComponentInstanceInterface(connectionInterface_,
834 adhocConnectionInterface_) };
835
836};
837
838#endif // !PYTHON_API_H
Interface for accessing bus interfaces.
The implementation for finding parameters with the correct ID.
Expression formatter.
Interface for expression parsers.
Interface for editing filesets.
LibraryInterface defines an interface to operate the IP-XACT-library.
Interface for editing memory maps and remaps.
Interface for outputting messages to the user.
Interface for editing parameters.
Interface for editing component ports.
std::string getVersion() const
Definition PythonAPI.cpp:86
bool removeInstanceConnections(std::string const &instanceName)
void setupLibrary(std::string const &settingsFileString)
Definition PythonAPI.cpp:78
bool renameAdHocConnection(std::string const &currentName, std::string const &newName)
bool removeComponentInstance(std::string const &instanceName)
bool removeHierarchicalConnection(std::string const &instanceName, std::string const &instanceBus, std::string const &topBus)
void removeLibraryPath(std::string const &path)
bool renameInstance(std::string const &currentName, std::string const &newName)
std::string getFirstViewName() const
bool openComponent(std::string const &vlnvString)
std::string getComponentDescription() const
void setLibraryPathActive(std::string const &path, bool isActive)
BusInterfaceInterface * getBusInterface()
void setRegistersForInterface(std::string const &mapName, std::string const &blockName)
std::vector< std::string > getActiveLibraryPaths() const
PortsInterface * getPortsInterface() const
std::vector< std::string > listVLNVs(std::string const &vendor=std::string()) const
void setFieldsForInterface(std::string const &mapName, std::string const &blockName, std::string const &registerName)
ParametersInterface * getComponentParameterInterface() const
bool createComponent(std::string const &vendor, std::string const &library, std::string const &name, std::string const &version, StdRev revision=StdRev::Std22)
void setBlocksForInterface(std::string const &mapName)
FileSetInterface * getFileSetInterface()
void setDefaultLibraryPath(std::string const &path) const
void saveComponent()
std::vector< std::string > listComponentVLNVs() const
void generate(std::string const &format, std::string const &vlnv, std::string const &viewName, std::string const &outputDirectory) const
void setFilesForInterface(std::string const &setName)
std::string getDesignStdRevision() const
void setResetsForInterface(std::string const &mapName, std::string const &blockName, std::string const &registerName, std::string const &fieldName)
bool removeHierarchicalAdHocConnection(std::string const &instanceName, std::string const &instancePort, std::string const &topPort)
bool createConnection(std::string const &startInstanceName, std::string const &startBus, std::string const &endInstanceName, std::string const &endBus)
bool removeInstanceAdHocConnections(std::string const &instanceName)
~PythonAPI()=default
std::string getComponentStdRevision() const
void setLibraryPaths(std::vector< std::string > const &paths) const
bool removeInstanceAdHocConnection(std::string const &startInstanceName, std::string const &startPort, std::string const &endInstanceName, std::string const &endPort)
int importFile(std::string const &path, std::string const &vlnv, bool overwrite=false) const
bool removeInstanceConnection(std::string const &startInstanceName, std::string const &startBus, std::string const &endInstanceName, std::string const &endBus)
bool createHierarchicalAdHocConnection(std::string const &instanceName, std::string const &instancePort, std::string const &topPort)
void addLibraryPath(std::string const &path, bool isActive=true)
bool addComponentInstance(std::string const &vlnvString, std::string const &instanceName)
void closeOpenComponent()
bool createAdHocConnection(std::string const &startInstanceName, std::string const &startPort, std::string const &endInstanceName, std::string const &endPort)
std::vector< std::string > getAllLibraryPaths() const
Definition PythonAPI.cpp:94
std::string getVLNVDirectory(std::string const &vendor, std::string const &library, std::string const &name, std::string const &version) const
bool vlnvExistsInLibrary(std::string const &vendor, std::string const &library, std::string const &name, std::string const &version) const
bool createHierarchicalConnection(std::string const &instanceName, std::string const &instanceBus, std::string const &topBus)
bool createDesign(std::string const &vendor, std::string const &library, std::string const &name, std::string const &version, StdRev revision=StdRev::Std22)
void closeOpenDesign()
std::string getDefaultLibraryPath() const
std::string getComponentName() const
void saveDesign()
int getFileCount() const
void setFileBuildersForInterface(std::string const &setName)
bool renameConnection(std::string const &currentName, std::string const &newName)
MemoryMapInterface * getMapInterface()
bool openDesign(std::string const &vlnvString)
KACTUS2_API BusInterfaceInterface * createBusInterface(QSharedPointer< ParameterFinder > parameterFinder, QSharedPointer< ExpressionFormatter > expressionFormatter, QSharedPointer< ExpressionParser > expressionParser, QSharedPointer< Component > component, LibraryInterface *library)