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
218
224 int getFileCount() const;
225
233
234 std::vector<std::string> listVLNVs(std::string const& vendor = std::string()) const;
235
241 std::vector<std::string> listComponentVLNVs() const;
242
253 bool vlnvExistsInLibrary(std::string const& vendor, std::string const& library, std::string const& name,
254 std::string const& version) const;
255
267 bool createComponent(std::string const& vendor, std::string const& library, std::string const& name,
268 std::string const& version, StdRev revision = StdRev::Std22);
269
280 std::string getVLNVDirectory(std::string const& vendor, std::string const& library, std::string const& name,
281 std::string const& version) const;
282
288 std::string getFirstViewName() const;
289
297 bool openComponent(std::string const& vlnvString);
298
302 void closeOpenComponent();
303
307
308 std::string getComponentName() const;
309
313
314 std::string getComponentDescription() const;
315
319 std::string getComponentStdRevision() const;
320
324 void saveComponent();
325
326
332 void setBlocksForInterface(std::string const& mapName);
333
340 void setRegistersForInterface(std::string const& mapName, std::string const& blockName);
341
349 void setFieldsForInterface(std::string const& mapName, std::string const& blockName,
350 std::string const& registerName);
351
360 void setResetsForInterface(std::string const& mapName, std::string const& blockName,
361 std::string const& registerName, std::string const& fieldName);
362
368 void setFilesForInterface(std::string const& setName);
369
375 void setFileBuildersForInterface(std::string const& setName);
376
388 bool createDesign(std::string const& vendor, std::string const& library, std::string const& name,
389 std::string const& version, StdRev revision = StdRev::Std22);
390
394 std::string getDesignStdRevision() const;
395
403 bool openDesign(std::string const& vlnvString);
404
408 void closeOpenDesign();
409
413 void saveDesign();
414
423 bool addComponentInstance(std::string const& vlnvString, std::string const& instanceName);
424
432 bool removeComponentInstance(std::string const& instanceName);
433
441 bool removeInstanceConnections(std::string const& instanceName);
442
450 bool removeInstanceAdHocConnections(std::string const& instanceName);
451
460 bool renameInstance(std::string const& currentName, std::string const& newName);
461
472 bool createConnection(std::string const& startInstanceName, std::string const& startBus,
473 std::string const& endInstanceName, std::string const& endBus);
474
484 bool createHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
485 std::string const& topBus);
486
497 bool removeInstanceConnection(std::string const& startInstanceName, std::string const& startBus,
498 std::string const& endInstanceName, std::string const& endBus);
499
509 bool removeHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
510 std::string const& topBus);
511
520 bool renameConnection(std::string const& currentName, std::string const& newName);
521
532 bool createAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
533 std::string const& endInstanceName, std::string const& endPort);
534
544 bool createHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
545 std::string const& topPort);
546
557 bool removeInstanceAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
558 std::string const& endInstanceName, std::string const& endPort);
559
569 bool removeHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
570 std::string const& topPort);
571
580 bool renameAdHocConnection(std::string const& currentName, std::string const& newName);
581
582private:
583
595 bool connectionEndsCheck(QString const& startInstanceName, QString const& startBus,
596 QString const& endInstanceName, QString const& endBus, bool isAdHocConnection);
597
605 bool instanceExists(QString const& instanceName) const;
606
619 bool endsCheckForAdHoc(QSharedPointer<const Component> startComponent, QString const& startBus,
620 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
621 QString const& endInstanceName);
622
635 bool endsCheckForInterconnection(QSharedPointer<const Component> startComponent, QString const& startBus,
636 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
637 QString const& endInstanceName);
638
646 bool removeConnection(std::string const& connectionName);
647
655 bool removeAdHocConnection(std::string const& connectionName);
656
664 QSharedPointer<Document> getDocument(QString const& vlnvString) const;
665
669 void constructMemoryValidators();
670
674 void constructMemoryInterface();
675
679 void constructFileSetInterface();
680
688 QSharedPointer<MemoryMap> getMemoryMap(QString const& mapName) const;
689
698 QSharedPointer<AddressBlock> getAddressBock(QSharedPointer<MemoryMap> containingMap, QString const& blockName)
699 const;
700
709 QSharedPointer<Register> getRegister(QSharedPointer<AddressBlock> containingBlock, QString const& registerName)
710 const;
711
720 QSharedPointer<Field> getField(QSharedPointer<Register> containingRegister, QString const& fieldName) const;
721
729 QSharedPointer<FileSet> getFileSet(QString const& setName) const;
730
736 void sendMemoryMapNotFoundError(QString const& mapName) const;
737
744 void sendAddressBlockNotFoundError(QString const& mapName, QString const& blockName) const;
745
753 void sendRegisterNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName)
754 const;
755
764 void sendFieldNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName,
765 QString const& fieldName) const;
766
772 void sendFileSetNotFoundError(QString const& setName) const;
773
774 //-----------------------------------------------------------------------------
775 // Data.
776 //-----------------------------------------------------------------------------
777
779 LibraryInterface* library_{ KactusAPI::getLibrary() };
780
782 MessageMediator* messager_{ KactusAPI::getMessageChannel() };
783
785 QSharedPointer<ComponentParameterFinder> parameterFinder_{ new ComponentAndInstantiationsParameterFinder(nullptr) };
786
788 QSharedPointer<ExpressionParser> expressionParser_{ new IPXactSystemVerilogParser(parameterFinder_) };
789
791 QSharedPointer<ExpressionFormatter>expressionFormatter_{ new ExpressionFormatter(parameterFinder_) };
792
794 QSharedPointer<Component> activeComponent_{ nullptr };
795
797 QSharedPointer<Design> activeDesign_{ nullptr };
798
800 QSharedPointer<PortValidator> portValidator_{ new PortValidator(expressionParser_,
801 QSharedPointer<QList<QSharedPointer<View> > >()) };
802
804 QSharedPointer<ParameterValidator> parameterValidator_{ new ParameterValidator(expressionParser_,
805 QSharedPointer<QList<QSharedPointer<Choice> > >(), Document::Revision::Std22) };
806
808 QSharedPointer<MemoryMapValidator> mapValidator_{ nullptr };
809
811 PortsInterface* portsInterface_{ new PortsInterface(portValidator_, expressionParser_, expressionFormatter_) };
812
814 BusInterfaceInterface* busInterface_{ BusInterfaceInterfaceFactory::createBusInterface(parameterFinder_,
815 expressionFormatter_, expressionParser_,
816 QSharedPointer<Component>(new Component(VLNV(), Document::Revision::Unknown)), library_) };
817
819 ParametersInterface* componentParameterInterface_{ new ParametersInterface(parameterValidator_,
820 expressionParser_, expressionFormatter_) };
821
823 MemoryMapInterface* mapInterface_{ nullptr };
824
826 FileSetInterface* fileSetInterface_{ nullptr };
827
829 InterconnectionInterface* connectionInterface_{ new InterconnectionInterface() };
830
832 AdHocConnectionInterface* adhocConnectionInterface_{ new AdHocConnectionInterface() };
833
835 ComponentInstanceInterface* instanceInterface_{ new ComponentInstanceInterface(connectionInterface_,
836 adhocConnectionInterface_) };
837
838};
839
840#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:92
bool removeInstanceConnections(std::string const &instanceName)
void setupLibrary(std::string const &settingsFileString)
Definition PythonAPI.cpp:84
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()
void generateInterconnect()
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
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)