⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phonestatuscontrol.cpp

📁 KDE下的西门子手机管理程序
💻 CPP
字号:
/***************************************************************************                          phonestatuscontrol.cpp  -  description                             -------------------    begin                : Wed Jan 17 2001    copyright            : (C) 2001 by Matthias Welwarsky    email                : matze@stud.fbi.fh-darmstadt.de ***************************************************************************//*************************************************************************** *                                                                         * *   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.                                   * *                                                                         * ***************************************************************************/#include <kdebug.h>#include <klocale.h>#include <qregexp.h>#include <qlabel.h>#include <qprogressbar.h>#include "phonestatuscontrol.h"#include "phonectrlcenter.h"#include "messagedispatcher.h"PhoneStatusControl::PhoneStatusControl(QWidget *parent, const char *name )	:PhoneStatusControlDlg(parent,name){	timerCount = 0;	controlState = Idle;	PhoneCtrlCenter* pcCenter = dynamic_cast<PhoneCtrlCenter*>(parentWidget());	if (!pcCenter) {		kdDebug() << "cannot resolve control center\n";		return;	}	messageDispatcher = pcCenter->getDispatcher();	messageDispatcher->registerControl(this, QRegExp("^\n\\+COPS:"));	messageDispatcher->registerControl(this, QRegExp("^\n\\+CPAS:"));	messageDispatcher->registerControl(this, QRegExp("^\n\\+CBC:"));	messageDispatcher->registerControl(this, QRegExp("^\n\\+CREG:"));	messageDispatcher->registerControl(this, QRegExp("^\n\\+CSQ:"));	messageDispatcher->registerControl(this, QRegExp("^\n[a-zA-Z0-9.]+$"));	kdDebug() << "PhoneStatusControl registered\n";}PhoneStatusControl::~PhoneStatusControl(){}/** starts the status control, reimplemented from PhoneControl */void PhoneStatusControl::startControl(){	startUpdateSequence();	startTimer(10000);}/** stops the status control, reimplemented from PhoneControl */void PhoneStatusControl::stopControl() {	controlState = Idle;	killTimers();}/** reimplemented from PhoneControl */void PhoneStatusControl::deliverMessage(QString message) {	int pos; // position of the match	int len; // length of the match	if (controlState == Idle)		return;    if (message.find(QRegExp("\nOK")) != -1) {		return;	}		if (message.find(QRegExp("\nERROR")) != -1) {		kdDebug() << "ERROR";		controlState = Idle;		return;	}	if (message.find(QRegExp("\\+COPS:")) != -1) {		kdDebug() << "COPS\n";		pos = QRegExp("\\d").match(message);		int status = message.mid(pos, 1).toInt();		networkSelection->setText(status?i18n("manual"):i18n("automatic"));		pos = QRegExp("\".+\"").match(message, 0, &len);		selectedNetwork->setText(message.mid(pos+1, len-2));		// trigger the next command		messageDispatcher->sendCommand(QString("AT+CSQ"));		return;	}	if (message.find(QRegExp("\\+CSQ:")) != -1) {		kdDebug() << "CSQ\n";		pos = QRegExp("\\d+").match(message, 0, &len);		int rssi = message.mid(pos, len).toInt();		// check for "unknown" rssi level		if (rssi == 99)			rssi = -1;		rssiLevel->setProgress(rssi);		messageDispatcher->sendCommand(QString("AT+CPAS"));		return;	}	if (message.find(QRegExp("\\+CPAS:")) != -1) {		kdDebug() << "CPAS\n";		pos = QRegExp("\\d").match(message, 0, &len);		int status = message.mid(pos, len).toInt();		QString statusText;		switch (status) {		case 0:			statusText = "Ready/Idle";			break;		case 3:			statusText = "Incoming Call";			break;		case 4:			statusText = "Call active";			break;		}		callStatus->setText(statusText);		messageDispatcher->sendCommand(QString("AT+CBC"));		return;	}	if (message.find(QRegExp("\\+CBC:")) != -1) {		kdDebug() << "CBC\n";		pos = QRegExp("\\d").match(message, 0, &len);		int status = message.mid(pos, len).toInt();		QString statusText;		switch (status) {		case 0:			statusText = "Battery";			break;		case 1:			statusText = "external Supply";			break;		case 2:			statusText = "no Battery";			break;		}		powerStatus->setText(statusText);		pos = QRegExp("\\d+").match(message, pos+len, &len);		batteryLevel->setProgress(message.mid(pos, len).toInt());		controlState = ExpectManufacturer;		messageDispatcher->sendCommand(QString("AT+CGMI"));		return;	}	if (message.find(QRegExp("^\n[a-zA-Z]+$")) != -1 && controlState == ExpectManufacturer) {		pos = QRegExp("[a-zA-Z]+").match(message, 0, &len);		manufId->setText(message.mid(pos, len));		controlState = ExpectSoftVersion;		messageDispatcher->sendCommand(QString("AT+CGMR"));		return;	}	if (message.find(QRegExp("^\n[a-zA-Z0-9.]+$")) != -1 && controlState == ExpectSoftVersion) {		pos = QRegExp("[a-zA-Z0-9.]+").match(message, 0, &len);		softVersion->setText(message.mid(pos, len));		controlState = MessageSent;		messageDispatcher->sendCommand(QString("AT+CREG?"));		return;	}	if (message.find(QRegExp("\\+CREG:")) != -1) {		// skip the first number		pos = QRegExp("\\d").match(message, 0, &len);		pos = QRegExp("\\d").match(message, pos+len, &len);        int status = message.mid(pos, len).toInt();		QString statusText;		switch (status) {		case 0:			statusText = "Not checked in";			break;		case 1:            statusText = "Checked in";			break;		case 2:			statusText = "Searching";			break;		case 3:			statusText = "Access denied";			break;		case 4:			statusText = "Unknown";			break;		case 5:			statusText = "Roaming";			break;		}		networkStatus->setText(statusText);		pos = QRegExp("\"[A-Z0-9]+\"").match(message, pos+len, &len);		lacView->setText(message.mid(pos+1, len-2));		pos = QRegExp("\"[A-Z0-9]+\"").match(message, pos+len, &len);		ciView->setText(message.mid(pos+1, len-2));		messageDispatcher->sendCommand(QString("AT+CIMI"));		controlState = ExpectIMSI;		return;	}	if (message.find(QRegExp("^\n[0-9A-Z]+$")) != -1 && controlState == ExpectIMSI) {		imsiView->setText(message.mid(1));		controlState = Idle;		return;	}}/** timer callback for regular status updates. called every 10 seconds *  if the control is active */void PhoneStatusControl::timerEvent(QTimerEvent*) {	startUpdateSequence();}/** starts an update sequence to gather information from the mobile phone */void PhoneStatusControl::startUpdateSequence() {	// if we're just in a sequence, skip this.	if (controlState != Idle)		return;	// start the sequence with a COPS message	messageDispatcher->sendCommand(QString("AT+COPS?"));	controlState = MessageSent;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -