#include "m4gwidget.h" #include "ui_m4gwidget.h" #include #include "terminal.h" #include #include #include #include #include "testserver.h" #include "systemmanager.h" #include "configurer.h" #include #include "messagebox.h" #include "serialport.h" Q_LOGGING_CATEGORY(flapp, "app.m4g") M4gWidget::M4gWidget(QWidget *parent) : IWidget(parent), ui(new Ui::M4gWidget), m_dial(new Configurer) { ui->setupUi(this); } M4gWidget::~M4gWidget() { delete m_dial; delete ui; } void M4gWidget::initUi() { connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](){ ui->textBrowser->clear(); foreach (M4GModel m, m_list) { if(m.id == ui->comboBox->currentText()){ m_curModel=m; break; } } QString cardName =m_curModel.cardName; bool bFindCard =Terminal::execCmd("ifconfig -a").contains(cardName); if(!bFindCard) { processMessage(QString("%1 Not find").arg(cardName)); } ui->connectBtn->setEnabled(bFindCard); }); foreach (M4GModel m, m_list) { ui->comboBox->addItem(m.id); } ui->connectBtn->setCheckable(true); //read apn conf Configurer conf; ui->apnEdt->setText(conf.conf("dial_APN")); ui->userNameEdt->setText(conf.conf("dial_username")); ui->passwordEdt->setText(conf.conf("dial_password")); QString auth =conf.conf("dial_auth"); int t = auth.toInt(); switch (t) { case 0: ui->authCombox->setCurrentIndex(0); break; case 1: ui->authCombox->setCurrentIndex(1); break; case 2: ui->authCombox->setCurrentIndex(2); break; default: break; } m_timer = new QTimer(this); connect(m_timer, &QTimer::timeout, this, &M4gWidget::readInformation); ui->hearLbl->setAutoFillBackground(true); ui->hearLbl->setPalette(this->palette()); } void M4gWidget::loadData(const QDomElement &head, const QDomElement &body) { for(int i=0; itextBrowser->append(/*ui->textBrowser->toPlainText() +*/ info); ui->textBrowser->moveCursor(QTextCursor::End); if(info.contains("adding dns")){ ui->hearLbl->setText("Connect Successful"); //QTimer::singleShot(1000, this, &M4gWidget::readInformation); } } void M4gWidget::setNetowrkCard(bool bOpen) { QString cmd = QString("ifconfig %1 up").arg(m_curModel.cardName); if(!bOpen){ cmd = QString("ifconfig %1 down").arg(m_curModel.cardName); } Terminal::execCmd(cmd); } void M4gWidget::setListenSim(bool bStart) { if(bStart) { m_timer->start(3000); }else{ m_timer->stop(); ui->ISPLbl->clear(); ui->IMEILbl->clear(); ui->versionLbl->clear(); ui->RSSILbl->clear(); ui->IMEILbl->clear(); ui->IPLbl->clear(); } } void M4gWidget::on_testBtn_clicked() { QString s=ui->pingEdt->text(); if(s.isEmpty()){ s = "www.forlinx.com"; } s = QString("ping %1 -c 5 -I %2").arg(s).arg(m_curModel.cardName); ui->textBrowser->append(s); this->start(s); } void M4gWidget::readInformation() { SerialPort serial; QString portName =m_curModel.ttyName; if(serial.config(portName, QSerialPort::Baud9600)) { QString result; QStringList list; result = serial.execCMD("ATE0\r"); result = serial.execCMD("AT\r"); result = serial.execCMD("AT+CGMI\r"); list = SystemManager::instance()->getMatch(result, "[a-zA-Z0-9]+"); if(list.size() >0 && list.contains("OK")){ // ui->textBrowser->append(QString("manufacturer : %1").arg(list[0])); ui->manufacturerLbl->setText(list[0]); }else{ //ui->textBrowser->append(result); } result = serial.execCMD("AT+CGMR\r"); list = SystemManager::instance()->getMatch(result, "[a-zA-Z0-9]+"); if(list.size() >0 && list.contains("OK")){ // ui->textBrowser->append(QString("sofeware version : %1").arg(list[0])); ui->versionLbl->setText(list[0]); }else{ //ui->textBrowser->append(result); } result = serial.execCMD("AT+CGSN\r"); list = SystemManager::instance()->getMatch(result, "[a-zA-Z0-9]+"); if(list.size() >0 && list.contains("OK")){ // ui->textBrowser->append(QString("IMEI : %1").arg(list[0])); ui->IMEILbl->setText(list[0]); }else{ //ui->textBrowser->append(result); } result =serial.execCMD("AT+QENG=\"servingcell\"\r"); list = result.split(","); bool bQNG=false; if(list.size() == 18) { // +QENG: "servingcell","NOCONN", "LTE","FDD", 460, 00, 7F3C740, 219, 1300, 3, 5, 5, 3193, -87, -13, -53,-4,40 // QENG: "servingcell","NOCONN","LTE","FDD", 460, 11, 12C4000, 84, 100, 1, 5, 5, 1680, -62, -11, -31,16,65 if(list.size() == 18){ result = list[15]; ui->RSSILbl->setText(result); bQNG = true; } } if(!bQNG) { result = serial.execCMD("AT+CSQ\r"); list = SystemManager::instance()->getMatch(result, "[a-zA-Z0-9]+"); if(list.size() >1 && list.contains("OK")){ //RSSI和CSQ之间的对应关系式什么呢?OK,就是:CSQ值=(接收信号强度dBm+113)/2。 int csq = list[1].toInt(); int signal = -113 + csq*2; //ui->textBrowser->append(QString("SIGNAL : %1").arg(signal)); ui->RSSILbl->setText(QString::number(signal)); }else{ //ui->textBrowser->append(result); } } result = serial.execCMD("AT+CIMI\r"); list = SystemManager::instance()->getMatch(result, "[0-9]+"); if(list.size() >0){ QString cimi = list[0]; QString isp; if (cimi.startsWith("46000") || cimi.startsWith("46002")) { isp = "中国移动"; } else if (cimi.startsWith("46001")) { isp = "中国联通"; } else if (cimi.startsWith("46003")) { isp = "中国电信"; }else { isp=QString("cimi:%1").arg(result); } if(!isp.isEmpty()) { //ui->textBrowser->append(QString("ISP: %1").arg(isp)); ui->ISPLbl->setText(isp); } } QString ip; QString mask; SystemManager::instance()->getNetwork(m_curModel.cardName, ip, mask); ui->IPLbl->setText(ip); serial.close(); } } void M4gWidget::on_connectBtn_clicked() { if(ui->connectBtn->isChecked()) { ui->comboBox->setEnabled(false); ui->connectBtn->setText("disconnect"); QString processName = m_curModel.startName; if(processName.isEmpty()) { processName= m_dial->processName(); } qDebug()<<"start = "<< processName; this->start(processName); ui->hearLbl->setText("Connnect..."); setListenSim(true); }else{ ui->comboBox->setEnabled(true); ui->connectBtn->setText("connect"); this->stop(); setNetowrkCard(false); ui->hearLbl->clear(); ui->textBrowser->clear(); setListenSim(false); } } void M4gWidget::on_applyBtn_clicked() { QString dial_APN =ui->apnEdt->text(); if(dial_APN.isEmpty()) { dial_APN = "cmnet"; } QString dial_username = ui->userNameEdt->text(); QString dial_password = ui->passwordEdt->text(); QString dial_auth="1"; if(ui->authCombox->currentText() == "auth"){ dial_auth="0"; }else if(ui->authCombox->currentText() == "PAP") { dial_auth="1"; }else{ dial_auth="2"; } QMap maps; maps.insert("dial_APN", dial_APN); maps.insert("dial_username", dial_username); maps.insert("dial_password", dial_password); maps.insert("dial_auth", dial_auth); Configurer conf; conf.changConf(maps); MessageBox::showMessage(this, "please reboot connect"); }