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
33
36
37#include <IPXACTmodels/Component/validators/PortValidator.h>
38
39class MessageMediator;
40
41class Component;
42class Field;
43class Register;
44class RegisterBase;
45class AddressBlock;
46class MemoryMap;
47class FileSet;
48
51
54class PortValidator;
56
57class ParameterValidator;
58class MemoryMapValidator;
59
60class Design;
61
62
63//-----------------------------------------------------------------------------
65//-----------------------------------------------------------------------------
67{
68public:
69
73 enum StdRev
74 {
75 Std14, // IEEE 1685-2014
76 Std22 // IEEE 1685-2022
77 };
78
82 PythonAPI();
83
87 ~PythonAPI() = default;
88
94 std::string getVersion() const;
95
101 std::vector<std::string> getActiveLibraryPaths() const;
102
108 std::vector<std::string> getAllLibraryPaths() const;
109
116 void setLibraryPathActive(std::string const& path, bool isActive);
117
124 void addLibraryPath(std::string const& path, bool isActive = true);
125
131 void removeLibraryPath(std::string const& path);
132
139
146
153
160
167
173 void setupLibrary(std::string const& settingsFileString);
174
180 void setLibraryPaths(std::vector<std::string> const& paths) const;
181
187 std::string getDefaultLibraryPath() const;
188
194 void setDefaultLibraryPath(std::string const& path) const;
195
205 int importFile(std::string const& path, std::string const& vlnv, bool overwrite = false) const;
206
215 void generate(std::string const& format, std::string const& vlnv, std::string const& viewName,
216 std::string const& outputDirectory) const;
217
219
225 int getFileCount() const;
226
234
235 std::vector<std::string> listVLNVs(std::string const& vendor = std::string()) const;
236
242 std::vector<std::string> listComponentVLNVs() const;
243
254 bool vlnvExistsInLibrary(std::string const& vendor, std::string const& library, std::string const& name,
255 std::string const& version) const;
256
268 bool createComponent(std::string const& vendor, std::string const& library, std::string const& name,
269 std::string const& version, StdRev revision = StdRev::Std22);
270
281 std::string getVLNVDirectory(std::string const& vendor, std::string const& library, std::string const& name,
282 std::string const& version) const;
283
289 std::string getFirstViewName() const;
290
298 bool openComponent(std::string const& vlnvString);
299
303 void closeOpenComponent();
304
308
309 std::string getComponentName() const;
310
314
315 std::string getComponentDescription() const;
316
320 std::string getComponentStdRevision() const;
321
325 void saveComponent();
326
327
333 void setBlocksForInterface(std::string const& mapName);
334
341 void setRegistersForInterface(std::string const& mapName, std::string const& blockName);
342
350 void setFieldsForInterface(std::string const& mapName, std::string const& blockName,
351 std::string const& registerName);
352
361 void setResetsForInterface(std::string const& mapName, std::string const& blockName,
362 std::string const& registerName, std::string const& fieldName);
363
369 void setFilesForInterface(std::string const& setName);
370
376 void setFileBuildersForInterface(std::string const& setName);
377
389 bool createDesign(std::string const& vendor, std::string const& library, std::string const& name,
390 std::string const& version, StdRev revision = StdRev::Std22);
391
395 std::string getDesignStdRevision() const;
396
404 bool openDesign(std::string const& vlnvString);
405
409 void closeOpenDesign();
410
414 void saveDesign();
415
424 bool addComponentInstance(std::string const& vlnvString, std::string const& instanceName);
425
433 bool removeComponentInstance(std::string const& instanceName);
434
442 bool removeInstanceConnections(std::string const& instanceName);
443
451 bool removeInstanceAdHocConnections(std::string const& instanceName);
452
461 bool renameInstance(std::string const& currentName, std::string const& newName);
462
473 bool createConnection(std::string const& startInstanceName, std::string const& startBus,
474 std::string const& endInstanceName, std::string const& endBus);
475
485 bool createHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
486 std::string const& topBus);
487
498 bool removeInstanceConnection(std::string const& startInstanceName, std::string const& startBus,
499 std::string const& endInstanceName, std::string const& endBus);
500
510 bool removeHierarchicalConnection(std::string const& instanceName, std::string const& instanceBus,
511 std::string const& topBus);
512
521 bool renameConnection(std::string const& currentName, std::string const& newName);
522
533 bool createAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
534 std::string const& endInstanceName, std::string const& endPort);
535
545 bool createHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
546 std::string const& topPort);
547
558 bool removeInstanceAdHocConnection(std::string const& startInstanceName, std::string const& startPort,
559 std::string const& endInstanceName, std::string const& endPort);
560
570 bool removeHierarchicalAdHocConnection(std::string const& instanceName, std::string const& instancePort,
571 std::string const& topPort);
572
581 bool renameAdHocConnection(std::string const& currentName, std::string const& newName);
582
583private:
584
596 bool connectionEndsCheck(QString const& startInstanceName, QString const& startBus,
597 QString const& endInstanceName, QString const& endBus, bool isAdHocConnection);
598
606 bool instanceExists(QString const& instanceName) const;
607
620 bool endsCheckForAdHoc(QSharedPointer<const Component> startComponent, QString const& startBus,
621 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
622 QString const& endInstanceName);
623
636 bool endsCheckForInterconnection(QSharedPointer<const Component> startComponent, QString const& startBus,
637 QString const& startInstanceName, QSharedPointer<const Component> endComponent, QString const& endBus,
638 QString const& endInstanceName);
639
647 bool removeConnection(std::string const& connectionName);
648
656 bool removeAdHocConnection(std::string const& connectionName);
657
665 QSharedPointer<Document> getDocument(QString const& vlnvString) const;
666
670 void constructMemoryValidators();
671
675 void constructMemoryInterface();
676
680 void constructFileSetInterface();
681
689 QSharedPointer<MemoryMap> getMemoryMap(QString const& mapName) const;
690
699 QSharedPointer<AddressBlock> getAddressBock(QSharedPointer<MemoryMap> containingMap, QString const& blockName)
700 const;
701
710 QSharedPointer<Register> getRegister(QSharedPointer<AddressBlock> containingBlock, QString const& registerName)
711 const;
712
721 QSharedPointer<Field> getField(QSharedPointer<Register> containingRegister, QString const& fieldName) const;
722
730 QSharedPointer<FileSet> getFileSet(QString const& setName) const;
731
737 void sendMemoryMapNotFoundError(QString const& mapName) const;
738
745 void sendAddressBlockNotFoundError(QString const& mapName, QString const& blockName) const;
746
754 void sendRegisterNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName)
755 const;
756
765 void sendFieldNotFoundError(QString const& mapName, QString const& blockName, QString const& registerName,
766 QString const& fieldName) const;
767
773 void sendFileSetNotFoundError(QString const& setName) const;
774
775 //-----------------------------------------------------------------------------
776 // Data.
777 //-----------------------------------------------------------------------------
778
780 LibraryInterface* library_{ KactusAPI::getLibrary() };
781
783 MessageMediator* messager_{ KactusAPI::getMessageChannel() };
784
786 QSharedPointer<ComponentParameterFinder> parameterFinder_{ new ComponentAndInstantiationsParameterFinder(nullptr) };
787
789 QSharedPointer<ExpressionParser> expressionParser_{ new IPXactSystemVerilogParser(parameterFinder_) };
790
792 QSharedPointer<ExpressionFormatter>expressionFormatter_{ new ExpressionFormatter(parameterFinder_) };
793
795 QSharedPointer<Component> activeComponent_{ nullptr };
796
798 QSharedPointer<Design> activeDesign_{ nullptr };
799
801 QSharedPointer<PortValidator> portValidator_{ new PortValidator(expressionParser_,
802 QSharedPointer<QList<QSharedPointer<View> > >()) };
803
805 QSharedPointer<ParameterValidator> parameterValidator_{ new ParameterValidator(expressionParser_,
806 QSharedPointer<QList<QSharedPointer<Choice> > >(), Document::Revision::Std22) };
807
809 QSharedPointer<MemoryMapValidator> mapValidator_{ nullptr };
810
812 PortsInterface* portsInterface_{ new PortsInterface(portValidator_, expressionParser_, expressionFormatter_) };
813
815 QSharedPointer<ListParameterFinder> absDefFinder_{ new ListParameterFinder() };
816
818 QSharedPointer<ExpressionParser> absDefParser_{ new IPXactSystemVerilogParser(absDefFinder_)};
819
821 BusInterfaceInterface* busInterface_{ BusInterfaceInterfaceFactory::createBusInterface(parameterFinder_,
822 expressionFormatter_, expressionParser_,
823 absDefFinder_, absDefParser_,
824 QSharedPointer<Component>(new Component(VLNV(), Document::Revision::Unknown)), library_) };
825
827 ParametersInterface* componentParameterInterface_{ new ParametersInterface(parameterValidator_,
828 expressionParser_, expressionFormatter_) };
829
831 MemoryMapInterface* mapInterface_{ nullptr };
832
834 FileSetInterface* fileSetInterface_{ nullptr };
835
837 InterconnectionInterface* connectionInterface_{ new InterconnectionInterface() };
838
840 AdHocConnectionInterface* adhocConnectionInterface_{ new AdHocConnectionInterface() };
841
843 ComponentInstanceInterface* instanceInterface_{ new ComponentInstanceInterface(connectionInterface_,
844 adhocConnectionInterface_) };
845
846};
847
848#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 > componentParameterFinder, QSharedPointer< ExpressionFormatter > componentExpressionFormatter, QSharedPointer< ExpressionParser > componentParameterParser, QSharedPointer< ListFinder > absDefFinder, QSharedPointer< ExpressionParser > absDefParser, QSharedPointer< Component > component, LibraryInterface *library)