/* test menu - Neutrino-GUI Copyright (C) 2001 Steffen Hehn 'McClean' and some other guys Homepage: http://dbox.cyberphoria.org/ Copyright (C) 2011 T. Graf 'dbt' Homepage: http://www.dbox2-tuning.net/ License: GPL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "gui/test_menu.h" #include #include #include #include #include #include #include #include #include #include "gui/widget/hintbox.h" #include "gui/scan.h" #include "gui/scan_setup.h" #include #include extern int cs_test_card(int unit, char * str); CTestMenu::CTestMenu() { width = w_max (50, 10); selected = -1; } CTestMenu::~CTestMenu() { } int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) { dprintf(DEBUG_DEBUG, "init test menu\n"); int res = menu_return::RETURN_REPAINT; if (parent) parent->hide(); printf("CTestMenu::exec: %s\n", actionKey.c_str()); if (actionKey == "vfd") { CVFD::getInstance()->Clear(); int icon = 0x00040000; while (icon > 0x2) { CVFD::getInstance()->ShowIcon((vfd_icon) icon, true); icon /= 2; } for (int i = 0x01000001; i <= 0x0C000001; i+= 0x01000000) { CVFD::getInstance()->ShowIcon((vfd_icon) i, true); } CVFD::getInstance()->ShowIcon((vfd_icon) 0x09000002, true); CVFD::getInstance()->ShowIcon((vfd_icon) 0x0B000002, true); char text[255]; char buf[XML_UTF8_ENCODE_MAX]; int ch = 0x2588; int len = XmlUtf8Encode(ch, buf); for (int i = 0; i < 12; i++) { memmove(&text[i*len], buf, len); } text[12*len] = 0; CVFD::getInstance()->ShowText(text); ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "VFD test, Press OK to return", CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); CVFD::getInstance()->Clear(); return res; } else if (actionKey == "network") { int fd, ret; struct ifreq ifr; char * ip = NULL, str[255]; struct sockaddr_in *addrp=NULL; fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1); ret = ioctl(fd, SIOCGIFHWADDR, &ifr); if (ret < 0) perror("SIOCGIFHWADDR"); ret = ioctl(fd, SIOCGIFADDR, &ifr ); if (ret < 0) perror("SIOCGIFADDR"); else { addrp = (struct sockaddr_in *)&(ifr.ifr_addr); ip = inet_ntoa(addrp->sin_addr); } sprintf(str, "MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\nIP: %s", (unsigned char)ifr.ifr_hwaddr.sa_data[0], (unsigned char)ifr.ifr_hwaddr.sa_data[1], (unsigned char)ifr.ifr_hwaddr.sa_data[2], (unsigned char)ifr.ifr_hwaddr.sa_data[3], (unsigned char)ifr.ifr_hwaddr.sa_data[4], (unsigned char)ifr.ifr_hwaddr.sa_data[5], ip == NULL ? "Unknown" : ip); close(fd); ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); return res; } else if (actionKey == "card0") { char str[255]; int ret = cs_test_card(0, str); switch(ret) { case 0: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); break; case -1: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 ATR read failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; case -2: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 reset failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; default: case -3: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 1 open failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; } return res; } else if (actionKey == "card1") { char str[255]; int ret = cs_test_card(1, str); switch(ret) { case 0: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); break; case -1: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 ATR read failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; case -2: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 reset failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; default: case -3: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, "Smardcard 2 open failed", CMessageBox::mbrBack, CMessageBox::mbBack, "info"); break; } return res; } else if (actionKey == "hdd") { char buffer[255]; FILE *f = fopen("/proc/mounts", "r"); bool mounted = false; if (f != NULL) { while (fgets (buffer, 255, f) != NULL) { if (strstr(buffer, "/dev/sda1")) { mounted = true; break; } } fclose(f); } sprintf(buffer, "HDD: /dev/sda1 is %s", mounted ? "mounted" : "NOT mounted"); printf("%s\n", buffer); ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, buffer, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); return res; } else if (actionKey == "buttons") { neutrino_msg_t msg; neutrino_msg_data_t data; CHintBox * khintBox = NULL; CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Press button, or press EXIT to return"); hintBox->paint(); while (1) { g_RCInput->getMsg(&msg, &data, 100); if (msg == CRCInput::RC_home) break; if (msg != CRCInput::RC_timeout && msg <= CRCInput::RC_MaxRC) { char keyname[50]; sprintf(keyname, "Button [%s] pressed (EXIT to return)", g_RCInput->getKeyName(msg).c_str()); if (khintBox) { delete khintBox; } khintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, keyname); hintBox->hide(); khintBox->paint(); } } if (khintBox) delete khintBox; delete hintBox; return res; } else if (actionKey == "22kon" || actionKey == "22koff") { CScanTs * scanTs = new CScanTs(); int freq = (actionKey == "22kon") ? 12000*1000: 11000*1000; sprintf(scansettings.TP_freq, "%d", freq); #if 0 // not needed ? CFrontend * frontend = CFEManager::getInstance()->getFE(0); switch (frontend->getInfo()->type) { case FE_QPSK: sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.u.qpsk.symbol_rate); scansettings.TP_fec = tmpI->second.feparams.u.qpsk.fec_inner; scansettings.TP_pol = tmpI->second.polarization; break; case FE_QAM: sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.u.qam.symbol_rate); scansettings.TP_fec = tmpI->second.feparams.u.qam.fec_inner; scansettings.TP_mod = tmpI->second.feparams.u.qam.modulation; break; } #endif scanTs->exec(NULL, "test"); delete scanTs; return res; } else if (actionKey == "scan") { CScanTs * scanTs = new CScanTs(); int freq = 12538000; sprintf(scansettings.TP_freq, "%d", freq); CFrontend * frontend = CFEManager::getInstance()->getFE(0); switch (frontend->getInfo()->type) { case FE_QPSK: sprintf(scansettings.TP_rate, "%d", 41250*1000); scansettings.TP_fec = 1; scansettings.TP_pol = 1; break; case FE_QAM: #if 0 sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.u.qam.symbol_rate); scansettings.TP_fec = tmpI->second.feparams.u.qam.fec_inner; scansettings.TP_mod = tmpI->second.feparams.u.qam.modulation; #endif break; case FE_OFDM: case FE_ATSC: break; } scanTs->exec(NULL, "manual"); delete scanTs; return res; } showTestMenu(); return res; } /* shows entries for proxy settings */ void CTestMenu::showTestMenu() { unsigned int system_rev = cs_get_revision(); //init char rev[255]; sprintf(rev, "Test menu, System revision %d %s", system_rev, system_rev == 0 ? "WARNING - INVALID" : ""); CMenuWidget * TestMenu = new CMenuWidget(rev /*"Test menu"*/); TestMenu->setSelected(selected); TestMenu->addIntroItems(); TestMenu->addItem(new CMenuForwarderNonLocalized("VFD", true, NULL, this, "vfd")); TestMenu->addItem(new CMenuForwarderNonLocalized("Network", true, NULL, this, "network")); TestMenu->addItem(new CMenuForwarderNonLocalized("Smartcard 1", true, NULL, this, "card0")); TestMenu->addItem(new CMenuForwarderNonLocalized("Smartcard 2", true, NULL, this, "card1")); TestMenu->addItem(new CMenuForwarderNonLocalized("HDD", true, NULL, this, "hdd")); TestMenu->addItem(new CMenuForwarderNonLocalized("Buttons", true, NULL, this, "buttons")); TestMenu->addItem(new CMenuForwarderNonLocalized("Scan 12538000", true, NULL, this, "scan")); //TestMenu->addItem(new CMenuForwarderNonLocalized("22 Khz ON", true, NULL, this, "22kon")); //TestMenu->addItem(new CMenuForwarderNonLocalized("22 Khz OFF", true, NULL, this, "22koff")); TestMenu->exec(NULL, ""); selected = TestMenu->getSelected(); delete TestMenu; }