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

📄 efem.cpp

📁 moto e2 基站定位0.1版软件
💻 CPP
字号:
/*	*****************************E2基站定位   0.1版*************************************************************Written by Letterb @scnu_cs_052008/1/18Email:	boy.letterb@yahoo.com.cn		or letterb@tom.com感谢netsnakecq(Bin Li <glen.redlion@gmail.com>)的开源使用lasly的sdk和ilove3d的更新include********************************letterb******************************************/#define QT_NO_DRAGANDDROP#define QT_NO_PROPERTIES#include <E2_EZX_ZSingleCaptureDlg.h>#include <E2_EZX_ZApplication.h>#include <E2_EZX_ZKbMainWidget.h>#include <E2_EZX_ZMessageDlg.h>#include <E2_EZX_ZLabel.h>#include <E2_EZX_ZScrollPanel.h>#include <E2_EZX_ZSoftKey.h>#include <E2_EZX_ZFormContainer.h>#include <E2_EZX_ZSingleSelectDlg.h>#include <E2_EZX_ZOptionsMenu.h>#include <qpainter.h>#include <qlabel.h>#include <stdio.h>#include <stdlib.h>#include <qfile.h>#include <qtextcodec.h>#include <qlayout.h>#include <string.h>#include <time.h>#include<netinet/in.h>#include <unistd.h>#include <qtimer.h>#include "getadd.h"extern "C" int TAPI_CLIENT_Init(int *pi,int j);extern "C" void TAPI_CLIENT_Fini(void);extern "C" int TAPI_NETWORK_GetCurrentNetworkId(char *mcc,char *mnc);extern "C" int TAPI_NETWORK_GetLocalAreaId(unsigned int *area,int *tac);//QString ChineseAndEnglish(const char*ChineseString);//change string to utf-8QTextCodec* gbk_codec = QTextCodec::codecForName("UTF-8");
QString ChineseAndEnglish(const char*ChineseString)
{
	return gbk_codec->toUnicode(ChineseString);
} class MyZKbMain : public ZKbMainWidget{		Q_OBJECT//////////////////	public:	struct settings	//设置结构体	{		int findneartype;	}settings;	ZScrollPanel *zsv;	ZLabel* infolabel ;	ZSoftKey* softKey;	public:	MyZKbMain(char * currentpath):ZKbMainWidget((ZHeader::HEADER_TYPE)3,NULL , "ZMainWidget" , 0){	QVBoxLayout* layout = getVBoxLayout();	setMainWidgetTitle(ChineseAndEnglish("基站定位"));	zsv = new ZScrollPanel(this , NULL , 0,  (ZSkinService::WidgetClsID)4);	QString info="Loading...";		infolabel = new ZLabel(info, this, "ZLabel", 0, (ZSkinService::WidgetClsID)4);	infolabel->setPreferredWidth(240);	infolabel->setAutoResize(true );	int height = heightForWidth(240);	zsv->addChild(infolabel , 10 , height);	layout->addWidget(zsv);	///////////		QRect rect;	softKey = new ZSoftKey(NULL , this , this);		ZOptionsMenu* menu = new ZOptionsMenu(rect, softKey, NULL , 0 ,(ZSkinService::WidgetClsID)2 );		menu->insertItem(ChineseAndEnglish("修改/添加") , NULL , NULL , true , 0 , 0 );		menu->insertItem(ChineseAndEnglish("设置") , NULL , NULL , true , 1 , 1 );		menu->insertItem(ChineseAndEnglish("关于") , NULL , NULL , true , 2 , 2 );				menu->connectItem(0, this, SLOT(slot_edit()));
		menu->connectItem(1, this, SLOT(slot_nearsettings()));		menu->connectItem(2, this, SLOT(slot_about()));			softKey->setOptMenu(ZSoftKey::LEFT, menu);	softKey->setText(ZSoftKey::LEFT, ChineseAndEnglish("选项"), (ZSoftKey::TEXT_PRIORITY)0);	softKey->setText(ZSoftKey::RIGHT, ChineseAndEnglish("退出"), (ZSoftKey::TEXT_PRIORITY)0);	setSoftKey(softKey);	softKey->setClickedSlot(ZSoftKey::RIGHT, this, SLOT(close()));	//	softKey->setClickedSlot(ZSoftKey::LEFT, this, SLOT(slot_about()));//	startTimer(1000);		ini_soft();//	slotTimeout();	QTimer::singleShot(time_out_time, this, SLOT(slotTimeout()));	//使用定时器}public :	QString AppPath;	char area_db[256];	char usr_area_db[256];	char efem_ini[256];	int time_out_time;	char info_tmp[1000];	char cur_local_id[100];public :	bool CaptureDlg(char* title , char* content,QString & result,int type);	int showSingleSelect(char *title,char *content,QStringList list,int checkid);	int showQ(char *title, char *content, int type);	int ini_soft();	~MyZKbMain();public slots:	void slotTimeout();	virtual void keyReleaseEvent(QKeyEvent* k);	void slot_about();	void slot_edit();	void slot_nearsettings();};void MyZKbMain::slot_nearsettings()		//设置菜单{	QStringList list;	list+=ChineseAndEnglish("禁止");	list+=ChineseAndEnglish("在原数据库内查找");	list+=ChineseAndEnglish("在用户数据库内查找");	int res;	res=showSingleSelect("查找设置","如果找不到时采用的最接近查找方式",list,settings.findneartype);	if(res!=-1)	{		settings.findneartype=res;		FILE *fp=fopen(efem_ini,"wb");		if(fp)		{			fwrite(&settings,sizeof settings,1,fp);			fclose(fp);		}		memset(cur_local_id,0,sizeof cur_local_id);		//重设当前基站id	}}void MyZKbMain::slot_about()	//关于{	showQ("E2基站定位",	 "Written by Letterb\nEmail: boy.letterb@yahoo.com.cn\n版本:0.1\n\n感谢netsnakecq(Bin Li <glen.redlion@gmail.com>)的开源\n\n感谢ayukowa的提醒\n\nThanks Lasly\n\n谢谢使用!",	  2);}void MyZKbMain::slot_edit()	//修改/添加{	QString result;	char newadd[500];	char context[500];	sprintf(context,"请为 %s\n输入基站地址",cur_local_id);	if(!CaptureDlg("设置当前基站",context,result,2))		return;	else	{		char oldline[1000];		memset(oldline,0,sizeof oldline);		strcpy(newadd,result.utf8());		char newlocaline[1000];		sprintf(newlocaline,"%s;-1;%s",cur_local_id,newadd);		if(isexist(usr_area_db,cur_local_id,oldline))		{			oldline[strlen(oldline)-1]=0;			printf("sfsdfs=%s",oldline);			cancel_line(usr_area_db,oldline);		}		strcat(newlocaline,"\n");		append_to_file(usr_area_db,newlocaline);//		append_to_file(usr_area_db,"\n");		char tmpinfo[2000];		sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,newadd);		infolabel->setText(ChineseAndEnglish(tmpinfo));		infolabel->setPreferredWidth(220);		infolabel->setAutoResize(true );	}	return;}int MyZKbMain::showQ(char *title, char *content, int type)
{
	ZMessageDlg *showq=new ZMessageDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), (ZMessageDlg::MessageDlgType)type , 0 , this , "showQ" , true , 0);
	showq->exec();
	int ret=showq->tmp[32];		printf("result=%d\n",ret);

	delete showq;
	return ret;
}
void MyZKbMain::keyReleaseEvent(QKeyEvent* k)		//未用{			//	char info_tmp[1000];	switch (k->key())	{		case 52:		break;	}		return QWidget::keyReleaseEvent(k);}int MyZKbMain::ini_soft()	//初始化{	AppPath = qApp->argv()[0];	AppPath.truncate( AppPath.findRev("/") + 1 );	sprintf(area_db,"%sarea.db",AppPath.latin1 ());	sprintf(usr_area_db,"%susr_area.db",AppPath.latin1 ());	sprintf(efem_ini,"%sefem.ini",AppPath.latin1 ());	FILE *fp;	fp=fopen(efem_ini,"rb");	if(fp)	{		fread(&settings,sizeof settings,1,fp);		fclose(fp);	}	time_out_time=1000;	int pi,j;//	int tapihandle = TAPI_CLIENT_Init(&pi,j);	memset(cur_local_id,0,sizeof cur_local_id);	return 0;}MyZKbMain::~MyZKbMain(){//	TAPI_CLIENT_Fini();}void MyZKbMain::slotTimeout()		//定时器,每隔一秒检测一次{	static int countor=0;	int i=0,pi=0,j=0,tac=0;	unsigned int area=0,lac=0,cid=0;	char mcc[20],mnc[20];	int tapihandle = TAPI_CLIENT_Init(&pi,j);		//初始化	int netrerurn  = TAPI_NETWORK_GetCurrentNetworkId(mcc,mnc);		//获取网络标识	int areareturn = TAPI_NETWORK_GetLocalAreaId(&area,&tac);		//获取基站信息	int ok= 0;	area = htonl(area);															//分析基站id	lac = area >> 16;	cid = area & 0x0000ffff;	char tmpid[100];	sprintf(tmpid ,"%s;%s;%d;%d",mcc,mnc,lac,cid);	if(!strcmp(tmpid,cur_local_id))		//检测是否和当前基站id相同 	{		printf("id no changes!\n");		//如果相同	}	else											//如果不同	{printf("id  changes!\n");/*		infolabel->setText(ChineseAndEnglish(tmpid));		infolabel->setPreferredWidth(220);		infolabel->setAutoResize(true );*/			char tmpinfo[2000];		char curadd[500];		strcpy(cur_local_id,tmpid);				if(!getlocaladd(usr_area_db,cur_local_id,curadd))				//搜索用户数据库		{			if(!getlocaladd(area_db,cur_local_id,curadd))				//搜索原数据库			{				switch (settings.findneartype)								//查找离当前基站最近的基站				{					case 1: 						findnearadd(area_db,cur_local_id,curadd);			//从原数据库里面查找						sprintf(tmpinfo,"发现新基站:\n%s\n附近基站:\n%s",cur_local_id,curadd);										break;					case 2:						findnearadd(usr_area_db,cur_local_id,curadd);	//从用户数据库里面查找						sprintf(tmpinfo,"发现新基站:\n%s\n附近基站:\n%s",cur_local_id,curadd);										break;					default :						sprintf(tmpinfo,"发现新基站:\n%s",cur_local_id);							break;				}//				sprintf(tmpinfo,"基站:\n%s\n您的大致位置:\n%s",cur_local_id,curadd);			}			else			{				sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,curadd);			}		}		else		{			sprintf(tmpinfo,"\n\n基站:\n%s\n\n您的大致位置:\n%s",cur_local_id,curadd);		}		infolabel->setText(ChineseAndEnglish(tmpinfo));		infolabel->setPreferredWidth(220);		infolabel->setAutoResize(true );	}	TAPI_CLIENT_Fini();								//完成	QTimer::singleShot(time_out_time, this, SLOT(slotTimeout()));}int MyZKbMain::showSingleSelect(char *title,char *content,QStringList list,int checkid){	int result=-1;	ZSingleSelectDlg *dlg=new ZSingleSelectDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), NULL, "sss", true, 0, 0);	dlg->addItemsList(list);	if(checkid!=-1)	{		ZListBox* listbox=dlg->getListBox();
		listbox->checkItem(checkid, true);	}	dlg->exec();	if(dlg->tmp[32])	{		result=dlg->getCheckedItemIndex();	}	delete dlg;	return result;}bool MyZKbMain::CaptureDlg(char* title , char* content,QString & result,int type){//	QString result;//(QWidget*, char const*, bool, unsigned);	ZSingleCaptureDlg* dlg = new ZSingleCaptureDlg(ChineseAndEnglish(title), ChineseAndEnglish(content), (ZSingleCaptureDlg::CaptureDlgType)type, this, "ZSingleCaptureDlg", true, 0, 0);    dlg->exec();    	int ret=dlg->tmp[32];	if(ret )	{		result=dlg->getResultText();		delete dlg;					return 1;	}	delete dlg;		return 0;}int main( int argc, char **argv ){	ZApplication* a = new ZApplication( argc, argv );	MyZKbMain*zmain=new MyZKbMain(argv[1]);	a->setMainWidget( zmain );    	zmain->show();	a->exec();	delete zmain;	delete a;   	return argc;}#include"efem.moc"

⌨️ 快捷键说明

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