aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2023-03-09 11:34:15 +0100
committermyrtle <gatecat@ds0.me>2023-03-16 13:37:23 +0100
commit1f115ddd320dc5e2f9c69e32ee2e40b758285f6e (patch)
tree975962b8786ad8c499c930d31e900c3f7aa57d96
parent26798038fe5dc3f9063cd1cc11e67f64df582c3a (diff)
downloadnextpnr-1f115ddd320dc5e2f9c69e32ee2e40b758285f6e.tar.gz
nextpnr-1f115ddd320dc5e2f9c69e32ee2e40b758285f6e.tar.bz2
nextpnr-1f115ddd320dc5e2f9c69e32ee2e40b758285f6e.zip
Basic GUI part selection
-rw-r--r--gui/machxo2/mainwindow.cc53
-rw-r--r--machxo2/arch.cc4
-rw-r--r--machxo2/main.cc2
3 files changed, 36 insertions, 23 deletions
diff --git a/gui/machxo2/mainwindow.cc b/gui/machxo2/mainwindow.cc
index b92f752c..851caacf 100644
--- a/gui/machxo2/mainwindow.cc
+++ b/gui/machxo2/mainwindow.cc
@@ -21,6 +21,8 @@
#include <fstream>
#include "bitstream.h"
#include "log.h"
+#include "embed.h"
+#include "chipdb/available.h"
#include <QFileDialog>
#include <QInputDialog>
@@ -78,30 +80,41 @@ void MainWindow::createMenu()
void MainWindow::new_proj()
{
-/* QMap<QString, int> arch;
+ QList<QString> arch;
+
+ std::stringstream ss(available_devices);
+ std::string name;
+ while(getline(ss, name, ';')){
+ std::string chipdb = stringf("machxo2/chipdb-%s.bin", name.c_str());
+ auto db_ptr = reinterpret_cast<const RelPtr<ChipInfoPOD> *>(get_chipdb(chipdb));
+ if (!db_ptr)
+ continue; // chipdb not available
+ for (auto &chip : db_ptr->get()->variants) {
+ for (auto &pkg : chip.packages) {
+ for (auto &speedgrade : chip.speed_grades) {
+ for (auto &rating : chip.suffixes) {
+ std::string devname = stringf("%s-%d%s%s", chip.name.get(), speedgrade.speed, pkg.short_name.get(), rating.suffix.get());
+ arch.append(QString::fromLocal8Bit(devname.c_str()));
+ }
+ }
+ }
+ }
+ }
+
bool ok;
- QString item = QInputDialog::getItem(this, "Select new context", "Chip:", arch.keys(), 0, false, &ok);
+ QString item = QInputDialog::getItem(this, "Select new context", "Part:", arch, 0, false, &ok);
if (ok && !item.isEmpty()) {
ArchArgs chipArgs;
- chipArgs.type = (ArchArgs::ArchArgsTypes)arch.value(item);
-
- QStringList packages;
- for (auto package : Arch::get_supported_packages(chipArgs.type))
- packages.append(QLatin1String(package.data(), package.size()));
- QString package = QInputDialog::getItem(this, "Select package", "Package:", packages, 0, false, &ok);
-
- if (ok && !item.isEmpty()) {
- handler->clear();
- currentProj = "";
- disableActions();
- chipArgs.package = package.toStdString().c_str();
- ctx = std::unique_ptr<Context>(new Context(chipArgs));
- actionLoadJSON->setEnabled(true);
-
- Q_EMIT contextChanged(ctx.get());
- }
+ chipArgs.device = item.toUtf8().constData();;
+
+ handler->clear();
+ currentProj = "";
+ disableActions();
+ ctx = std::unique_ptr<Context>(new Context(chipArgs));
+ actionLoadJSON->setEnabled(true);
+
+ Q_EMIT contextChanged(ctx.get());
}
-*/
}
void MainWindow::open_lpf()
diff --git a/machxo2/arch.cc b/machxo2/arch.cc
index 481d15ee..385b776f 100644
--- a/machxo2/arch.cc
+++ b/machxo2/arch.cc
@@ -58,8 +58,8 @@ static void get_chip_info(std::string device, const ChipInfoPOD **chip_info, con
for (auto &pkg : chip.packages) {
for (auto &speedgrade : chip.speed_grades) {
for (auto &rating : chip.suffixes) {
- std::string name = stringf("%s-%d%s%s", chip.name.get(), speedgrade.speed, pkg.short_name.get(), rating.suffix.get());
- if (device == name) {
+ std::string devname = stringf("%s-%d%s%s", chip.name.get(), speedgrade.speed, pkg.short_name.get(), rating.suffix.get());
+ if (device == devname) {
*chip_info = db_ptr->get();
*package_info = nullptr;
*package_name = pkg.name.get();
diff --git a/machxo2/main.cc b/machxo2/main.cc
index e5b8176a..283bc59c 100644
--- a/machxo2/main.cc
+++ b/machxo2/main.cc
@@ -72,7 +72,7 @@ std::unique_ptr<Context> MachXO2CommandHandler::createContext(dict<std::string,
exit(0);
}
if (!vm.count("device")) {
- log_error("device must be specified on the command line (e.g. --device LCMXO2-7000HC-4TG144I)\n");
+ log_error("device must be specified on the command line (e.g. --device LCMXO2-1200HC-4SG32C)\n");
}
chipArgs.device = vm["device"].as<std::string>();
auto ctx = std::unique_ptr<Context>(new Context(chipArgs));