mobilemodule.cpp

来自「wince中 我自己的流驱动实现 注册表和bib文件 修改在QZSerialS」· C++ 代码 · 共 1,978 行 · 第 1/4 页

CPP
1,978
字号
void CMobileModule::CSCLKCommand(int Value)
{//Configure Slow Clock
	CString ATCommand("AT+CSCLK=") ;
	char tmp[2] ;
	memset(tmp,0,2) ;
	sprintf(tmp,"%d",Value) ;
	ATCommand += tmp ;
	ATCommand += "\r" ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CSDTCommand(int Value)
{//Switch On Or Off Detecting SIM Card
	CString ATCommand("AT+CSDT=") ;
	char tmp[2] ;
	memset(tmp,0,2) ;
	sprintf(tmp,"%d",Value) ;
	ATCommand += tmp ;
	ATCommand += "\r" ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CCFCCommand(int Value)
{//query call forwarding
	CString ATCommand("AT+CCFC=") ;
	char tmp[2] ;
	memset(tmp,0,2) ;
	sprintf(tmp,"%d",Value) ;
	ATCommand += tmp ;
	ATCommand += ",2\r" ;
	//ATCommand += "\r" ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CCFCCommand()
{//Clear Call forwarding
	CString ATCommand("AT+CCFC=4,4\r") ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CCFCCommand(int Index,CString PhoneNum)
{//Set Phone Call Forwarding
	CString ATCommand("AT+CCFC=") ;
	char tmp[2] ;
	memset(tmp,0,2) ;
	sprintf(tmp,"%d",Index) ;
	ATCommand += tmp ;
	ATCommand += ",3,\"" ;
	ATCommand += PhoneNum ;
	ATCommand += "\"\r" ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CIMICommand()
{//Request the IMSI
	CString ATCommand("AT+CIMI\r") ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::VTSCommand(CString Index)
{
	CString ATCommand("AT+VTS=") ;
	ATCommand += Index ;
	ATCommand += "\r" ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::CPMSCommand()
{//
	CString ATCommand("AT+CPMS?\r") ;
	OpeSerial.WriteSerial(ATCommand);
}

void CMobileModule::InitModule()
{
	//InitGpioSet() ;
	PowerUpModule() ;
	Sleep(3000) ;

//check if module initialized
	TCHAR InitModule_C[128] ;
	memset(InitModule_C,0,128) ;
	wsprintf (InitModule_C, TEXT("\\Adbon\\AdPhoneSet\\InitModule"));
	HKEY hkey ;

	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,InitModule_C,0,0,&hkey))
	{
		DWORD value = 0;
		DWORD dwSize = sizeof(DWORD) ;
		LONG m_hkey ;
		m_hkey = RegQueryValueEx(hkey,_T("Initialized"), NULL, 0, (LPBYTE)&value, &dwSize);
		if(m_hkey == ERROR_SUCCESS)
		{
			if(value == 0)
			{
				CLIPCommand(1) ;
				WaitForSingleObject(m_hInitEvent,INFINITE) ;
				COLPCommand(1) ;  //
				WaitForSingleObject(m_hInitEvent,INFINITE) ;
				ATECommand(1) ;  //Open Call Back Charactors
				WaitForSingleObject(m_hInitEvent,INFINITE) ;
				IPRCommand(115200) ;//Set Module BauteRate
				WaitForSingleObject(m_hInitEvent,INFINITE) ;
				CEXTHSCommand(1) ;
				WaitForSingleObject(m_hInitEvent,INFINITE) ;

				CSCLKCommand(1) ;//Save All Current Module variables
				WaitForSingleObject(m_hInitEvent,INFINITE) ;

				ATWCommand() ;//Save All Current Module variables
				WaitForSingleObject(m_hInitEvent,INFINITE) ;
			}
			value = 1 ;
		}
		if(ERROR_SUCCESS == RegSetValueEx(hkey,_T("Initialized"),0,REG_DWORD,(LPBYTE)&value,dwSize))
		{
		}
		RegCloseKey(hkey) ;
	}
	else
	{//Create hKey
		DWORD value = 1 ;
		DWORD RCNK = 0 ;
		DWORD dwSize = sizeof(DWORD);
		CLIPCommand(1) ;
		WaitForSingleObject(m_hInitEvent,INFINITE) ;
		COLPCommand(1) ;  //
		WaitForSingleObject(m_hInitEvent,INFINITE) ;
		ATECommand(1) ;  //Open Call Back Charactors
		WaitForSingleObject(m_hInitEvent,INFINITE) ;
		IPRCommand(115200) ;//Set Module BauteRate
		WaitForSingleObject(m_hInitEvent,INFINITE) ;
		CEXTHSCommand(1) ;
		WaitForSingleObject(m_hInitEvent,INFINITE) ;

		CSCLKCommand(1) ;//Save All Current Module variables
		WaitForSingleObject(m_hInitEvent,INFINITE) ;

		ATWCommand() ;//Save All Current Module variables
		WaitForSingleObject(m_hInitEvent,INFINITE) ;
		if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_USERS,InitModule_C,0,NULL,
			REG_OPTION_NON_VOLATILE,0,NULL,&hkey,&RCNK))
		{
			if(ERROR_SUCCESS == RegSetValueEx(hkey,_T("Initialized"),0,REG_DWORD,(LPBYTE)&value,dwSize))
			{
			}
		}
		RegCloseKey(hkey) ;
	}
	//Init other variables
	
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,TEXT("\\Adbon\\AdPhoneSet\\CallSet\\HeadPhones"),0,0,&hkey))
	{//Set Module Sound Volumn
		DWORD value = 0;
		DWORD dwSize = sizeof(DWORD) ;
		LONG m_hkey ;
		m_hkey = RegQueryValueEx(hkey,_T("PhoneVolume"), NULL, 0, (LPBYTE)&value, &dwSize);
		if(m_hkey == ERROR_SUCCESS)
		{
			CLVLCommand(value) ;
			WaitForSingleObject(m_hInitEvent,INFINITE) ;
		}
	}
	RegCloseKey(hkey) ;

	PullUpRTD() ;
	//打开扬声器
//	(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_E].DR))) |= 0x0010;

//	Sleep(20) ;

	CIMICommand() ;
	WaitForSingleObject(m_hInitEvent,INFINITE) ;
	DWORD DWvalue,DWsize = sizeof(DWORD) ;
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,TEXT("\\Adbon\\AdPhoneSet\\Scene\\Current"),0,0,&hkey))
	{
		if(ERROR_SUCCESS == RegQueryValueEx(hkey, TEXT("SceneModal"),NULL,0, (LPBYTE)&DWvalue,&DWsize))
		{
			if( DWvalue == 4 )
			{//飞机模式时,关闭模块
				int i = 0 ;
				while(++i < 1000) ;
				PowerDownModule() ;
				return ;
			}
		}
	}
}

void AnalyseAtCommand()
{
	CString temp = ComData_List.GetTail().var.var_str3 ;
	switch(ComData_List.GetTail().m_CommandId)
	{
	case ATID_AT:
		mobile1.AtCommand() ;
		break ;
	case ATID_ATD:
		mobile1.Call(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_ATDL:
		mobile1.ReCall() ;		
		break ;
	case ATID_ATA:
		mobile1.Answer() ;
		break ;
	case ATID_ATH:
		mobile1.HandUp() ;
		break ;
	case ATID_ATE:
		mobile1.ATECommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_ATS0:
		mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_ATS7:
		mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_ATX:
		mobile1.ATXCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_ATF:
		mobile1.ATFCommand() ;
		break ;
	case ATID_ATW:
		mobile1.ATWCommand() ;
		break ;
	case ATID_GSN:
		mobile1.GSNCommand() ;
		break ;
	case ATID_IPR:
		mobile1.IPRCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CACM:
		mobile1.CACMCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
		break ;
	case ATID_CCFC_1://Query call forwarding
		mobile1.CCFCCommand(ComData_List.GetTail().var.var_int1) ;

		break ;
	case ATID_CCFC_2://Set call forwarding
		mobile1.CCFCCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CCFC_3://Clear Call Forwarding
		mobile1.CCFCCommand() ;

		break ;
	case ATID_ATL:
		mobile1.ATLCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_ATM:
		mobile1.ATMCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_ATS:
		mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_ATT:
		mobile1.ATTCommand() ;
		break ;
	case ATID_ATV:
		mobile1.ATVCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CMGD:
		mobile1.CMGDCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CMGF:
		mobile1.CMGFCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CMGL:
		mobile1.CMGLCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CMGR:
		mobile1.CMGRCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CMGS:
		mobile1.CMGSCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2,ComData_List.GetTail().var.var_str3) ;
		break ;
	case ATID_CSCA_1:
		mobile1.CSCAGetCommand() ;
		break ;
	case ATID_CSCA_2:
		mobile1.CSCASetCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CNMI:
		mobile1.CNMICommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2,ComData_List.GetTail().var.var_int3,ComData_List.GetTail().var.var_int4,ComData_List.GetTail().var.var_int5) ;
		break ;
	case ATID_CPBF:
		mobile1.CPBFCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CPBR:
		mobile1.CPBRCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CPBS_1:
		mobile1.CPBSCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CPBS_2:
		mobile1.CPBSCommand() ;
		break ;
	case ATID_CPBW:
		mobile1.CPBWCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
		break ;
	case ATID_CSCS:
		mobile1.CSCSCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CHLD:
		mobile1.CHLDCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CLCC:
		mobile1.CLCCCommand() ;
		break ;
	case ATID_CLCK:
		mobile1.CLCKCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str2,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_CLIP:
		mobile1.CLIPCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_COLP:
		mobile1.COLPCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_COPS:
		mobile1.COPSCommand();
		break ;
	case ATID_CPAS:
		mobile1.CPASCommand() ;
		break ;
	case ATID_CPIN_1:
		mobile1.CPINGetCommand() ;
		break ;
	case ATID_CPIN_2:
		mobile1.CPINSetCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
		break ;
	case ATID_CPWD:
		if(temp.Compare(L"") == 0)
		{
			mobile1.CPWDCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
		}
		else
		{
			mobile1.CPWDCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2,temp) ;
		}
		break ;
	case ATID_CRC:
		mobile1.CRCCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CSQ:
		mobile1.CSQCommand() ;
		break ;
	case ATID_CFUN_1:
		mobile1.CFUNCommand() ;
		break ;
	case ATID_CFUN_2:
		mobile1.CFUNCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CCLK_1:
		mobile1.CCLKCommand() ;
		break ;
	case ATID_CCLK_2:
		mobile1.CCLKCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CALM:
		mobile1.CALMCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CRSL:
		mobile1.CRSLCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CLVL:
		mobile1.CLVLCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CCWE:
		mobile1.CCWECommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CBC:
		mobile1.CBCCommand() ;
		break ;
	case ATID_CSSN:
		mobile1.CSSNCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_CPOWD:
		mobile1.CPOWDCommand() ;
		break ;
	case ATID_CMIC:
		mobile1.CMICCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
		break ;
	case ATID_ALARM:
		mobile1.AlarmCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_int2,ComData_List.GetTail().var.var_int3) ;
		break ;
	case ATID_EXTHS:
		mobile1.CEXTHSCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_EXTBUT:
		mobile1.CEXTBUTCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_SMINS:
		mobile1.CSMINSCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CHFA:
		mobile1.CHFACommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CSCLK:
		mobile1.CSCLKCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_CSDT:
		mobile1.CSDTCommand(ComData_List.GetTail().var.var_int1) ;
		break ;
	case ATID_VTS:
		mobile1.VTSCommand(ComData_List.GetTail().var.var_str1) ;
		break ;
	case ATID_CIMI:
		mobile1.CIMICommand() ;
		break ;
	case ATID_CPMS:
		mobile1.CPMSCommand() ;
		break ;
	default:
		break ;
	}
	ComData_List.RemoveTail() ;
}

void CMobileModule::PowerDownModule()
{
	//if(m_ModuleStatus)
	//{
		//Sleep(20);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
		//Sleep(50);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
		//Sleep(2500);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
		//Sleep(50);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
		//VirtualFree(&pGPIO,0,MEM_RELEASE);
		//m_ModuleStatus = FALSE ;
	//}
}

void CMobileModule::PowerUpModule()
{
	//if(!m_ModuleStatus)
	//{/
		//Sleep(20);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
		//Sleep(50);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
		//Sleep(2500);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
	//	Sleep(50);
		//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
		//m_ModuleStatus = TRUE ;
	//}
}


void CMobileModule::PullUpRTD()
{//Pull Up RTD for module sleep automatically
	//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DDIR))) |=  0x40000000;
	//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].OCR2))) |=  0x30000000;
	//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000000 ;
	//Sleep(50) ;
}

void CMobileModule::PullDownRTD()
{//Pull Down RTD in case module go to sleep auto
	//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DDIR))) |=  0x40000000;
	//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].OCR2))) |=  0x30000000;
	//(*(volatile unsigned long  * const)(&(pGPIO->PORT[GPIO_PORT_C].DR)))   &= ~0x40000000;
	//Sleep(50) ;
}

////////////////////////////////////////////////////////////////////////////////////////
//****************************************************************************************
////////////////////////////////////////////////////////////////////////////////////////

DWORD WINAPI WriteSerialThread(LPVOID lp)
{
	INT cGoHead ;
	while(true)
	{
		cGoHead = WaitForSingleObject(m_hWriteSerialEvent,INFINITE) ;
		if(cGoHead == WAIT_OBJECT_0)
		{
			writethreadmutex = true ;
			while(ComData_List.GetCount()>0)
			{
				//call write port function
				AnalyseAtCommand();
				WaitForSingleObject(m_hWriteEndEvent,INFINITE) ;
			}
			writethreadmutex = false ;
		}
	}
	return 1 ;
}

⌨️ 快捷键说明

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