diff options
-rw-r--r-- | gui/machxo2/mainwindow.cc | 53 | ||||
-rw-r--r-- | machxo2/arch.cc | 4 | ||||
-rw-r--r-- | machxo2/main.cc | 2 |
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)); |