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

📄 wireless.cpp

📁 这是一个完整的无线通讯工程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						  }
					  }
				  }
			}while(ret==ERROR_SUCCESS || ret == ERROR_MORE_DATA);
		}   
	}
	RegCloseKey(hKey);
}

UINT GetComRecv(LPVOID lpvoid)
{
	CWnd *MsgWnd = (CWnd*)lpvoid;

    char ans[128] = "\0", *p = NULL;
	while(!ThreadEnd)
	{

		if (ReadComm(ans,128))
		{
			TRACE("\r\n 接收数据\r\n--------%s---------\r\n", ans);
            if (strstr(ans,"RING") != NULL)
			{
				
				char Noke[32] = "\0";
				if ((p = strstr(ans,"+CLIP:")) != NULL)
				{
				    p += 8;
					CString temp = p;
					int pos = temp.Find("\"");
					strcpy(Noke, temp.Left(pos));
					Noke[pos] = '\0';
				}
				::PostMessage(MsgWnd->m_hWnd,WM_COMRECV,(WPARAM)1,(LPARAM)Noke);
				
			}
			else if ((p = strstr(ans,"+CMTI:")) != NULL)
			{
				p += 12;
				CString temp = p;
				int pos = temp.Find("\r\n");
				char Noke[32] = "\0";
				strcpy(Noke,temp.Left(pos));
				LPSMSINFO newsms = new SMSINFO;
				ZeroMemory(newsms, sizeof(SMSINFO));
				RecSMS(&newsms, atoi(Noke));
			
				::SendMessage(MsgWnd->m_hWnd,WM_COMRECV,(WPARAM)2,(LPARAM)newsms);
			}
			else if (strstr(ans, "BUSY") != NULL)
			{
				::SendMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)12);
			}
			else if (strstr(ans, "NO CARRIER") != NULL)
			{
				::SendMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)11);			
			}
			else if (strstr(ans, "%CPI: 1,6") != NULL)
			{
				::PostMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)10);
			}
			else if (strstr(ans, "%CPI: 1,7") != NULL)
			{
				::PostMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)13);
			}
		}
	//	ClearCommData();
		Sleep(500);
	}
	return 0;
}

extern "C" __declspec(dllexport) int InitModem()
{
	if (m_DevIsOK)
	{
		char ans[128] = "\0";
		
		ClearCommData();
	//	CloseDev();
	//	StartCom(m_MsgHand);
		
		WriteComm("AT\r\n", strlen("at\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL) 
		{
			//ReStartComEX();
			return 1;//AT不通
		}
        TRACE("1 %s\r\n", ans);
	
		WriteComm("AT+CPIN?\r", strlen("AT+CPIN?\r"));
		ReadComm(ans, 128);
		if (strstr(ans, "ERROR") != NULL)  return 3;//没有SIM卡
        TRACE("2 %s\r\n", ans);

		WriteComm("ATZ\r", strlen("ATZ\r"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;//复位失败
        TRACE("3 %s\r\n", ans);
		
		WriteComm("ATE0\r", 5);
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;//关闭回显
        TRACE("4 %s\r\n", ans);
		ClearCommData();

        WriteComm("AT+CMGF=0\r\n", strlen("AT+CMGF=0\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;
        TRACE("5 %s\r\n", ans);
		ClearCommData();
		
		WriteComm("AT+CREG=2\r", strlen("AT+CREG=2\r"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;//网络注册失败
        TRACE("6 %s\r\n", ans);
		ClearCommData();

		WriteComm("AT+CLIP=1\r\n",strlen("AT+CLIP=1\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;
        TRACE("7 %s\r\n", ans);
		ClearCommData();
		
		WriteComm("AT+CNMI=2,1,0,0,0\r\n", strlen("AT+CNMI=2,1,0,0,0\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;
        TRACE("8 %s\r\n", ans);
		ClearCommData();
		
		WriteComm("AT+AUDIO=2,1\r\n", strlen("AT+AUDIO=2,1\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;
        TRACE("9 %s\r\n", ans);
		ClearCommData();

		WriteComm("AT+CMEE=1\r\n", strlen("AT+CMEE=1\r\n"));
		ReadComm(ans, 128);
		if (strstr(ans, "OK") == NULL)  return 1;
        TRACE("10 %s\r\n", ans);
		ClearCommData();
        
	/*	WriteComm("AT+CFUN?\r\n", strlen("AT+CFUN?\r\n"));
		if (strstr(ans, "OK") == NULL)  return 1;

		WriteComm("AT+CRC=0\r\n", strlen("AT+CRC=0\r\n"));
		if (strstr(ans, "OK") == NULL)  return 1;

		WriteComm("AT+PWR?\r\n", strlen("AT+PWR?\r\n"));
		if (strstr(ans, "OK") == NULL)  return 1;

        WriteComm("AT+CPIN?\r\n", strlen("AT+CPIN?\r\n"));
		if (strstr(ans, "ERROR") == NULL)  return 3;
*/
		m_ComStateThread = AfxBeginThread(GetComRecv, m_MsgHand);
		m_ComStateThread->m_bAutoDelete   =   false;   
		return 0; 
	}
	return 1;
}

//启动模块
extern "C" __declspec(dllexport) bool StartCom(CWnd *MainDlg)
{
	bool flag = false;
	m_MsgHand = MainDlg;
	CString com;

	InitDevice();
	com.Format("Com%d",m_nCom);
/*	if (m_SerPort.InitPort(MainDlg, m_nCom, m_nRate))
	{
	   m_SerPort.StartMonitoring();
	   m_SerPort.WriteToPort((unsigned char*)"AT\r\n", strlen("AT\r\n"));
	}
	m_SerPort.StopMonitoring();
	m_SerPort.FreeRecvBuf();
	m_SerPort.DesInitPort();
	*/
	if (OpenComm(com,m_nRate))
	{
		m_DevIsOK = true;
		return true;
	}
	m_DevIsOK = false;
	return false;	
}
//获取当前信号量
int GetCSQ()
{
	char ans[128] = "\0";
	char *p = NULL;
	int csqvalue = 0;
    CString csq;
	WriteComm("at+csq\r\n",strlen("at+csq\r\n"));
	
	if (ReadComm(ans, 128) > 0)
	{
		TRACE("%s\r\n", ans);
        if ((p = strstr(ans,"+CSQ: ")) != NULL)
		{
			p += 6;
			csq = p;	
			int pos = csq.Find(',');
			if (pos != -1)
			{
				csqvalue = atoi(csq.Left(pos));
			}
		}
	}
    return csqvalue;
}

extern "C" __declspec(dllexport) bool SearchNet()
{
    if (m_DevIsOK)
	{
		time_t	t_begin = time(NULL);
		while(1)
		{
			if(GetCSQ() < 0 || GetCSQ() > 31)
			{
				if((time(NULL) - t_begin) > 30)
				{
					return false;
				}
				Sleep(1000);
			}
			else
				return true;
		}
	}
	return false;
}

//获取当前网络
bool GetCurNetwork(char *network)
{
    char ans[128],*send = "AT+COPS?\r\n";
	char *p = NULL;
	CString netvalue;
	
	WriteComm(send,strlen(send));
	if (ReadComm(ans, 128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((p = strstr(ans,"+COPS: 0,0")) != NULL || (p = strstr(ans,"+COPS: 1,0")) != NULL || (p = strstr(ans,"+COPS: 2,0")) != NULL || (p = strstr(ans,"+COPS: 3,0")) != NULL || (p = strstr(ans,"+COPS: 5,0")) != NULL || (p = strstr(ans,"+COPS: 4,0")) != NULL)
		{
			p += 12;
			netvalue = p;
			int pos = netvalue.Find("\"");
			strncpy(network,p,pos);
			network[pos] = '\0';
			return true;
		}
	}
	return false;
}

//获取短信中心号码
bool GetCSCA(char *csca)
{
    char ans[128],*p = NULL,*send = "AT+CSCA?\r\n";
	WriteComm(send,strlen(send));
	CString cscavalue;
	
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
        if ((p = strstr(ans,"+CSCA: ")) != NULL)
		{
			p += 8;
			cscavalue = p;
			int pos = cscavalue.Find("\"");
			strncpy(csca,p,pos);
			csca[pos] = '\0';
			return true;
		}
	}
	return false;
}


//获取所有运营商列表
bool GetTotalOperator(LPNETWORKLIST  *operatorList)
{
	char ans[128], *send = "AT+COPS=?\r\n";
	char *p = NULL;
	CString operatorvalue;
    LPNETWORKLIST tempvalue = new NETWORKLIST;
	ZeroMemory(tempvalue,sizeof(NETWORKLIST));
	
	WriteComm(send,strlen(send));
	while(1)
	{
		if (ReadComm(ans,128))
		{
			TRACE("%s\r\n", ans);
			if ((p = strstr(ans,"+COPS:")) != NULL)
			{
				p += 8;
                int state = atoi(&p[0]);
                tempvalue->iStat = state;
				
				p += 3;
				operatorvalue = p;
				int pos = operatorvalue.Find("\"");
                strncpy(tempvalue->szName,p,pos);
				
				p += (pos+3);
                operatorvalue = p;
				pos = operatorvalue.Find("\"");
				strncpy(tempvalue->szSName,p,pos);
				
				p += (pos+3);
				operatorvalue = p;
				pos = operatorvalue.Find("\"");
				strncpy(tempvalue->szCode,p,pos);
				
				*operatorList = tempvalue;
				return true;
			}
			else if (strstr(ans,"ERROR") != NULL)
				break;
		}
	}
	return false;
}


//获取当前所用频段
bool GetBaud(char *baud)
{
	
    char ans[128], *p = NULL, *temp = NULL ,*send = "AT%BAND?\r\n";
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((p = strstr(ans,"%BAND: ")) != NULL)
		{
			p += 6;
			memmove(baud,p,4);
			baud[4] = '\0';
			return true;
		}
	}
	return false;
}

//获取IMEI号
bool GetIMEI(char *imei)
{
    char ans[128], *p = NULL ,*send = "AT+GSN\r\n";
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") != NULL)
		{
			p = ans+2;
			memmove(imei,p,15);
			imei[15] = '\0';
			return true;
		}
	}
	return false;
}

//获取所用模块类别(如:M32 ,SIM600)
bool GetModemType(char *modemname)
{
    char ans[128], *p = NULL, *send = "AT+GMM\r\n";
	WriteComm(send,strlen(send));
	CString namevalue;
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
        if (strstr(ans,"OK") != NULL)
		{
			p = ans+2;
            namevalue = p;
			int pos = namevalue.Find("\r\n");
			memmove(modemname,p,pos);
			modemname[pos] = '\0';
			return true;
		}
	}
	return false;
}

//获取CGMI
bool GetCGMI(char *cgmi)
{
	
    char ans[128], *p = NULL , *send = "AT+CGMI\r\n";
	WriteComm(send,strlen(send));
	CString cgmivalue;
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") != NULL)
		{
			p = ans+2;
			cgmivalue = p;
			int pos = cgmivalue.Find("\r\n");
			memmove(cgmi,p,pos);
			cgmi[pos] = '\0';
			return true;
		}
	}
	return false;
}

//获取音量
extern "C" __declspec(dllexport) int  GetEarVolume()
{
    char ans[128], *p = NULL,*send = "AT+CLVL?\r\n";
	WriteComm(send,strlen(send));
	CString value;
	int Volume = 0;
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((strstr(ans, "OK")) !=NULL)
		{
			p = ans+9;
			value = p;
			int pos = value.Find("\r\n");
			int tempvol = atoi(value.Left(pos));
            if (tempvol > 0 && tempvol <=2)
				Volume = 1;
			else if (tempvol <= 4)
				Volume = 2;
			else if (tempvol <= 6)
				Volume = 3;
			else if (tempvol <= 8)
				Volume = 4;
			else if (tempvol <= 10)
				Volume = 5;
		}
	}
	return Volume;
}

extern "C" __declspec(dllexport) bool  SetEarVolume(int value)
{
    char ans[128], *p = NULL,*send = NULL;
	CString temp;
	temp.Format("AT+CLVL=%d\r\n",value);
    send = temp.GetBuffer(0);
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((strstr(ans, "OK")) !=NULL)
		{
            return true;
		}
	}
	return false;
}


void WriteApnToFile(LPAPNINFO apn)
{
	char	szPath[_MAX_PATH] = "\0";
	GetModuleFileName(NULL,szPath,MAX_PATH);
	char	*p = strrchr(szPath, (int)'\\');
	if(p)
	{
		*p = 0;
		strcat(szPath, "\\system.ini");
		g_inifile = szPath;
	}
	CString apninfo;
	apninfo.Format("%s;%s;%s;%s;%s;%s;",apn->szApn,apn->szUser,apn->szPwd,apn->szNumber,apn->szDns1,apn->szDns2);
	WritePrivateProfileString("APN", apn->szName, apninfo,g_inifile);
}


extern "C" __declspec(dllexport) void AddApn(LPAPNINFO apn)
{
	WriteApnToFile(apn);
}

extern "C" __declspec(dllexport) void DelApn(LPAPNINFO apn)
{
	char	szPath[_MAX_PATH] = "\0";
	GetModuleFileName(NULL,szPath,MAX_PATH);
	char	*p = strrchr(szPath, (int)'\\');
	if(p)
	{
		*p = 0;
		strcat(szPath, "\\system.ini");
		g_inifile = szPath;
	}	
	WritePrivateProfileString("APN", apn->szName, NULL,g_inifile);
}

extern "C" __declspec(dllexport) bool SetApnInfo(LPAPNINFO apn)
{
	OptAPN(m_DevInfo.ModemID,apn->szApn,0);
	return true;
}

DWORD WINAPI GetVoiceState(LPVOID lpvoid)
{
	char ans[128] = "\0";
	while(1)
	{	
		if (ReadComm(ans,128) > 0)
		{
			TRACE("\r\n-----%s----- \r\n", ans);
			
			if (strstr(ans, "%CPI: 1,6") != NULL)
			{
				::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)10);
			}
			if (strstr(ans,"NO CARRIER") != NULL)
			{
				::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)11);
				m_ComStateThread->ResumeThread();
				return 0;
			}
			if (strstr(ans,"BUSY") != NULL)
			{
				::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)12);
				m_ComStateThread->ResumeThread();
				return 0;
			}
		}
		ClearCommData();
		Sleep(1);
	}
	return 0;
}

⌨️ 快捷键说明

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