/*! ************************************************ * * \file qt_nvclock.cpp * \brief nvclock * \author Jan Prokop * ************************************************/ #include "qt_xfree.h" #include "qt_nvclock.h" #include "../../config.h" #include #include #include #include #include #include #include #include #include #include "x.xpm" #include "nv.xpm" #include "links.xpm" #include "people.xpm" //******************************************************************************** static const char *txtLinks = { "" "NVClock
" "
    " "
  • http://www.linuxhardware.org/nvclock
  • " "
  • http://nvclock.sourceforge.net
  • " "
  • http://projects.uid0.sk/nvclock/index.html
  • " "
" "NVidia
" "
    " "
  • home page http://www.nvidia.com
  • " "
  • linux drivers http://www.nvidia.com/view.asp?IO=linux_display_archive
  • " "
" "Accelerated OpenGL games
    " "
  • PrBoom http://prboom.sourceforge.net/about.html
  • " "
  • Quake2 http://www.icculus.org/quake2
  • " "
  • Quake2 http://www.idsoftware.com/games/quake/quake2
  • " "
  • Quake3 Arena http://www.idsoftware.com/games/quake/quake3-arena
  • " "
  • Return To Castle Wolfrestein http://www.idsoftware.com/games/wolfenstein/rtcw
  • " "
  • Tux Racer http://www.tuxracer.com
  • " "
" "
" }; static const char *txtAbout = { "Roderick Colenbrander thunderbird2k@gmx.nospam.net" "
    " "
  • author of nvclock
  • " "
  • overclocking/pci code
  • " "
  • support for multiple cards
  • " "
  • GTK gui
  • " "
  • documentation
  • " "
" "Jan Prokop jprokop@ibl.nospam.sk" "
    " "
  • Qt dialog
  • " "
" "Christian Zander phoenix@minion.nospam.de" "
(Christian only worked on nvclock 0.1 and 0.2)" "
    " "
  • cleanups
  • " "
  • autoconf/automake
  • " "
  • restructuring
  • " "
" "
" }; //******************************************************************************** CTabNVidia::CTabNVidia(QWidget *parent, const char *name) : QWidget(parent, name) { l = new QGridLayout(this, 2, 3, 4, 4); l->setColStretch(1, 20); int yy = 0; addLabel(tr("Card number"), yy); comboCardNo = new QComboBox(this, "comboCardNo"); l->addWidget(comboCardNo, yy++, 1); addLabel(tr("Memory speed"), yy); spinMemory = new QSpinBox(100, 1200, 1, this, "spinMemory"); spinMemory->setSuffix("MHz"); l->addWidget(spinMemory, yy++, 1); addLabel(tr("Core speed"), yy); spinCore = new QSpinBox(100, 1200, 1, this, "spinCore"); spinCore->setSuffix("MHz"); l->addWidget(spinCore, yy++, 1); checkDebug = new QCheckBox(tr("Debug info"), this, "checkDebug"); l->addWidget(checkDebug, yy++, 1); QPushButton *button = new QPushButton(tr("GO"), this); l->addMultiCellWidget(button, 0, 2, 2, 2); connect(button, SIGNAL(clicked()), SLOT(slotGo())); connect(comboCardNo, SIGNAL(activated(int)), SLOT(slotLoad(int))); initCardInfo(yy++); initAGPInfo(yy++); initVideoBiosInfo(yy++); if(getCards()) slotLoad(0); } //******************************************************************************** void CTabNVidia::addLabel(const QString &text, int yy) { l->addWidget(new QLabel(text, this), yy, 0, AlignRight | AlignVCenter); } //******************************************************************************** void CTabNVidia::initCardInfo(int posy) { #define ADD(lname, txt) \ layout->addWidget(new QLabel(txt, cardInfo), yy, 0, Qt::AlignRight | Qt::AlignVCenter); \ lname = new QLabel(cardInfo); \ lname->setFont(f); \ layout->addWidget(lname, yy, 1); yy++; cardInfo = new QGroupBox(tr("Card info"), this); l->addMultiCellWidget(cardInfo, posy, posy, 0, 2); int yy = 0; QGridLayout *layout = new QGridLayout(cardInfo, 5, 2, 4, 2); layout->addRowSpacing(yy++, 10); QFont f(font()); f.setBold(TRUE); ADD(labelGPUName, tr("GPU Name")); ADD(labelGPUArch, tr("GPU Architecture")); ADD(labelType, tr("Type")); ADD(labelBustype, tr("Bustype")); ADD(labelMemorySize, tr("Memory size")); ADD(labelMemoryType, tr("Memory type")); #undef ADD } //******************************************************************************** void CTabNVidia::initAGPInfo(int posy) { #define ADD(lname, txt) \ layout->addWidget(new QLabel(txt, agpInfo), yy, 0, Qt::AlignRight | Qt::AlignVCenter); \ lname = new QLabel(agpInfo); \ lname->setFont(f); \ layout->addWidget(lname, yy, 1); yy++; agpInfo = new QGroupBox(tr("AGP info"), this); l->addMultiCellWidget(agpInfo, posy, posy, 0, 2); int yy = 0; QGridLayout *layout = new QGridLayout(agpInfo, 6, 2, 4, 2); layout->addRowSpacing(yy++, 10); QFont f(font()); f.setBold(TRUE); ADD(labelAGPstatus, tr("AGP status")); ADD(labelSupAGPrates, tr("Supported AGP rates")); ADD(labelAGPrate, tr("AGP rate")); ADD(labelFWstatus, tr("Fast Writes")); ADD(labelSBAstatus, tr("Sideband Addressing")); #undef ADD } //******************************************************************************** void CTabNVidia::initVideoBiosInfo(int posy) { #define ADD(lname, txt) \ layout->addWidget(new QLabel(txt, biosInfo), yy, 0, Qt::AlignRight | Qt::AlignVCenter); \ lname = new QLabel(biosInfo); \ lname->setFont(f); \ layout->addWidget(lname, yy, 1); yy++; biosInfo = new QGroupBox(tr("BIOS Info"), this); l->addMultiCellWidget(biosInfo, posy, posy, 0, 2); int yy = 0; QGridLayout *layout = new QGridLayout(biosInfo, 6, 2, 4, 2); layout->addRowSpacing(yy++, 10); QFont f(font()); f.setBold(TRUE); ADD(labelBiosMsg, tr("Signon message")); ADD(labelBiosVersion, tr("Version")); ADD(labelBiosPerf, tr("Performance level")); ADD(labelBiosMask, tr("VID mask")); ADD(labelBiosVLevel, tr("Voltage level")); //ADD(labelBios, tr("")); #undef ADD } //******************************************************************************** int CTabNVidia::getCards() { QString s; setEnabled(nvclock.num_cards >= 0); if(!s.isEmpty()) { QMessageBox::warning(this, tr("Error"), s); return(FALSE); } for(int i=0; i < nvclock.num_cards; i++) comboCardNo->insertItem(nvclock.card[i].card_name); return(TRUE); } //******************************************************************************** QString CTabNVidia::getType(int type) const { QString s; switch(type) { case DESKTOP: s = tr("Desktop"); break; case NFORCE: s = tr("NForce"); break; case MOBILE: s = tr("Mobile"); break; default: s = tr("Unknown"); } return(s); } //******************************************************************************** void CTabNVidia::loadCardInfo() { labelGPUName->setText(nv_card->card_name); QString s; s.sprintf("NV%X %X", nv_card->get_gpu_architecture(), nv_card->get_gpu_revision()); labelGPUArch->setText(s); labelType->setText(getType(nv_card->gpu)); labelBustype->setText(nv_card->get_bus_type()); labelMemorySize->setText(QString("%1 MB").arg(nv_card->get_memory_size())); labelMemoryType->setText(QString("%1 bit %2") .arg(nv_card->get_memory_width()) .arg(nv_card->get_memory_type())); QToolTip::add(spinMemory, tr("%1 MHz - %2 MHz") .arg(nv_card->memclk_min) .arg(nv_card->memclk_max)); QToolTip::add(spinCore, tr("%1 MHz - %2 MHz") .arg(nv_card->nvclk_min) .arg(nv_card->nvclk_max)); } //******************************************************************************** void CTabNVidia::loadAGPInfo() { labelAGPstatus->setText(nv_card->get_agp_status()); labelSupAGPrates->setText(nv_card->get_agp_supported_rates()); QString s; if(nv_card->get_bus_rate() == 0) s = "-"; else s = QString("%1X").arg(nv_card->get_bus_rate()); labelAGPrate->setText(s); labelFWstatus->setText(QString("%1").arg(nv_card->get_agp_fw_status())); labelSBAstatus->setText(QString("%1").arg(nv_card->get_agp_sba_status())); } //******************************************************************************** void CTabNVidia::loadVideoBIOSInfo() { nvbios *b = nv_card->bios; labelBiosMsg->setText(b->signon_msg); labelBiosVersion->setText(b->version); QString s, tmp; for(int i=0; iperf_entries; i++) { performance &p = b->perf_lst[i]; if(nv_card->bios->volt_entries) tmp.sprintf("%d: gpu %dMHz/memory %dMHz/%.2fV\n", i, p.nvclk, p.memclk, p.voltage); else tmp.sprintf("%d: %dMHz / %dMHz / %.2fV", i, p.nvclk, p.memclk, p.voltage); s += tmp; } labelBiosPerf->setText(s); //*** VID Mask *** if(nv_card->bios->volt_entries) s.sprintf("VID mask: %x\n", nv_card->bios->volt_mask); else s = QString::null; labelBiosMask->setText(s); //*** Voltage level *** s = QString::null; for(int i=0; ibios->volt_entries; i++) { voltage &v = nv_card->bios->volt_lst[i]; tmp.sprintf("%d: %.2fV, VID: %x\n", i, v.voltage, v.VID); s += tmp; } labelBiosVLevel->setText(s); //labelBios->setText(s); } //******************************************************************************** int CTabNVidia::slotLoad(int card_number) { float memclk, nvclk; int id = comboCardNo->currentItem(); /* Set the card object to the new card */ set_card(id); memclk = nv_card->get_memory_speed(); nvclk = nv_card->get_gpu_speed(); spinMemory->setRange(nv_card->memclk_min, nv_card->memclk_max); spinCore->setRange(nv_card->nvclk_min, nv_card->nvclk_max); spinMemory->setValue((int)memclk); spinCore->setValue((int)nvclk); loadCardInfo(); /* For now a dirty AGP check .. */ if(qstrcmp(nv_card->get_bus_type(), "AGP") == 0) loadAGPInfo(); if(nv_card->bios) loadVideoBIOSInfo(); return(TRUE); } //******************************************************************************** int CTabNVidia::slotGo() { int id = comboCardNo->currentItem(); nv_card->debug = checkDebug->isChecked(); nv_card->set_gpu_speed(spinCore->value()); nv_card->set_memory_speed(spinMemory->value()); return(slotLoad(id)); } //******************************************************************************** //******************************************************************************** CNVclock::CNVclock(QWidget *parent, const char *name) : QTabDialog(parent, name) { setCaption(tr("Linux Overclocker - NVclock QT ")); setOkButton(0); setCancelButton(tr("&Quit")); CTabNVidia *tabNVidia = new CTabNVidia(this); addTab(tabNVidia, QPixmap(nv_xpm), tr("NVidia")); CTabXFree *tabXFree = new CTabXFree(this); addTab(tabXFree, QPixmap(x_xpm), tr("XFree")); QTextBrowser *browser = new QTextBrowser(this); browser->setText(txtLinks); addTab(browser, QPixmap(links_xpm), tr("Links")); browser = new QTextBrowser(this); browser->setText(txtAbout); addTab(browser, QPixmap(people_xpm), tr("About")); }