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

📄 wireless.cpp

📁 这是一个完整的无线通讯工程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if (InputNumber(index,newNumber,nametemp))
		return true;
	else
		return false;
}

extern "C" __declspec(dllexport) bool DelNumber(int index)
{
    char ans[128] = "\0", send[] = "\0";
	sprintf(send,"AT+CPBW=%d\r\n",index);
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") != NULL )
			return true;
	}
	return false;
}

extern "C" __declspec(dllexport) bool InputNumber(int index, char *number, char *name)
{
    char ans[128] = "\0", send[] = "\0";
	int type = GetNumberType(number);
    char buf[256];
	unsigned char sendname[256];
	int len = gsmEncodeUcs2(name, sendname, strlen(name));  
    int aa = gsmBytes2String(sendname, buf, len);
    buf[aa] = '\0';
	//伟文模块,如果index为0,那么会自动在SIM卡中找到适当的位置插入
	sprintf(send,"AT+CPBW=%d,\"%s\",%d,\"%s\"\r\n",index,number,type,buf);
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") != NULL)
			return true;
	}
	return false;
}

extern "C" __declspec(dllexport) bool SetBand(int band)
{
    char ans[128] = "\0", *p = NULL, send[] = "\0";
	switch(band)
	{
	case 1:
		sprintf(send,"%s","AT+CBAND=\"EGSM_DCS_MODE\"\r\n");
		break;
	case 2:
		sprintf(send,"%s","AT+CBAND=\"PGSM_MODE\"\r\n");
		break;
	case 3:
		sprintf(send,"%s","AT+CBAND=\"DCS_MODE\"\r\n");
		break;
	case 4:
		sprintf(send,"%s","AT+CBAND=\"PGSM_DCS_MODE\"\r\n");
		break;
	case 5:
		sprintf(send,"%s","AT+CBAND=\"GSM850_PCS_MODE\"\r\n");
		break;
	}
    WriteComm(send,strlen(send));
	while(true)
	{
		if (ReadComm(ans,128) >0 )
		{
			TRACE("%s\r\n", ans);
			if (strstr(ans,"ERROR") != NULL)
				return false;
			else
				return true;
		}
	}
}

extern "C" __declspec(dllexport) bool SetNetwork(char *network)
{
    char ans[128] = "\0", *p = NULL, send[] = "\0";
	sprintf(send, "AT+COPS=4,0,\"%s\"\r\n",network);
	WriteComm(send,strlen(send));
	while(true)
	{
		if (ReadComm(ans,128) > 0)
		{
			TRACE("%s\r\n", ans);
			if (strstr(ans, "OK") != NULL)
				return true;
			else if (strstr(ans, "ERROR") != NULL)
				return false;
		}
	}
}

extern "C" __declspec(dllexport) int  GetNetState()
{
	// -1 failed
	//  0 not registered, ME is not currently searching a new operator to register to
	//	1 registered, home network
	//	2 not registered, but ME is currently searching a new operator to register to
	//	3 registration denied
	//	4 unknown
	//	5 registered, roaming	
    char ans[128] = "\0", *p = NULL, *send = "AT+CGREG?\r\n";
    int state = -1;
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((p = strstr(ans,"+CGREG:")) != NULL)
		{
			p += 10;
			CString temp = p;
			int pos = temp.Find("\r\n");
			char Noke[2] = "\0";
			strcpy(Noke,temp.Left(pos));
            state = atoi(Noke);
		}
	}
	return state;
}

extern "C" __declspec(dllexport) int GetNetType()
{
	char ans[128] = "\0", *p = NULL, *send = "AT+CGATT?\r\n";
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((strstr(ans ,"OK")) != NULL)
		{
			p = ans + 9;
			int value1 = 0, value2 = 0;
			char Noke[32] = "\0";
			CString temp = p;
			//NXP
			//int pos = temp.Find(",");
			//strcpy(Noke,temp.Left(pos));
            //value1 = atoi(Noke);
            //if (value1 == 0)
			//	netType = 1;
			//else if (value1 == 1)
			//	netType = 3;
			
			//p += (pos +1);
			temp = p;
			int pos = temp.Find("\r\n");
			strcpy(Noke,temp.Left(pos));
			netType = atoi(Noke);
		}
	}
	
	int reNetType = 0;
    switch(netType)
    {
	case 0://GPRS
		reNetType = GPRS;
        break;
	case 2://CDMAf 
		reNetType = CDMA;
		break;
	case 1://EDGE
		reNetType = EDGE;
		break;
	case 4://EVDO
		reNetType = EVDO;
		break;
	case 5://GSM
		reNetType = GSM;
		break;
	}
	return reNetType;
}

extern "C" __declspec(dllexport) void ReStartCom(CWnd *msgwnd)
{
	if (StartCom(msgwnd))
	{
		//InitModem();   
	}
}

extern "C" __declspec(dllexport) void OptAPN(IN	LPCSTR	HardwareId,char *szApn,BOOL read)
{
	HDEVINFO		DeviceInfoSet;
	SP_DEVINFO_DATA DeviceInfoData;
	DWORD			i,err;
	BOOL			Found;
	//
	// Create a Device Information Set with all present devices.
	//
	
	DeviceInfoSet = SetupDiGetClassDevs(NULL, // All Classes
		0,
		0, 
		DIGCF_ALLCLASSES | DIGCF_PRESENT ); // All devices present on system
	
	if (DeviceInfoSet == INVALID_HANDLE_VALUE)
	{
		TRACE(_T("GetClassDevs(All Present Devices)")) ;
		return;
	}
	
	_tprintf(_T("\n\nSearch for Device ID: [%s]\n\n"),HardwareId);
	
	//
	// Enumerate through all Devices.
	//
	
	Found = FALSE;
	i = err = 0;
	
	DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
	
	//for (i=0;SetupDiEnumDeviceInfo(DeviceInfoSet,i,&DeviceInfoData);i++)
	while ( !Found && SetupDiEnumDeviceInfo(DeviceInfoSet, i++, &DeviceInfoData))
	{
		DWORD DataT;
		LPTSTR p,buffer = NULL;
		DWORD buffersize = 0;
		if(winver == WIN98 || winver == WINME)
		{
			buffersize = 1024;
			buffer = (char *)LocalAlloc(LPTR,buffersize);
		}
		//
		// We won't know the size of the HardwareID buffer until we call
		// this function. So call it with a null to begin with, and then 
		// use the required buffer size to Alloc the nessicary space.
		// Keep calling we have success or an unknown failure.
		//
		while (!SetupDiGetDeviceRegistryProperty(
			DeviceInfoSet,
			&DeviceInfoData,
			SPDRP_HARDWAREID,
			&DataT,
			(PBYTE)buffer,
			buffersize,
			&buffersize))
		{
			if (GetLastError() == ERROR_INVALID_DATA) {
				//
				// May be a Legacy Device with no HardwareID. Continue.
				//
				break;
			}
			else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
				//
				// We need to change the buffer size.
				//
				if (buffer) 
					LocalFree(buffer);
				buffer = (char *)LocalAlloc(LPTR,buffersize);
			}
			else
			{
				//
				// Unknown Failure.
				//
				TRACE(_T("GetDeviceRegistryProperty"));
				err = 1;
				break;
			}
		}
		
		if (GetLastError() == ERROR_INVALID_DATA)
			continue;
		
		if( err) break;
		
		//
		// Compare each entry in the buffer multi-sz list with our HardwareID.
		//
		for (p=buffer;p&&*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
		{
			if (!_stricmp(HardwareId,p))
			{
				TRACE(_T("Found! [%s]\n"),p);
				
				DWORD		dwDataType,dwDataLen = 1024;
				
				BYTE		bData[128];
				dwDataLen = 128;
				ZeroMemory(bData,128);
				{
					
					if(SetupDiGetDeviceRegistryProperty(DeviceInfoSet,&DeviceInfoData,
						SPDRP_DRIVER,&dwDataType,bData,dwDataLen,&dwDataLen))
					{							//HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
						HKEY hk;
						char	szSubKey[256];
						sprintf(szSubKey,"SYSTEM\\CurrentControlSet\\Control\\Class\\%s",(char *)bData);
						if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,szSubKey,0,KEY_ALL_ACCESS,&hk) == ERROR_SUCCESS)
						{
							
							DWORD	dwType = REG_SZ;
							BYTE	szPort[128];
							memset(szPort,0,128);
							DWORD	dwRet = 128;
							if(read)
							{
								RegQueryValueEx(hk,"UserInit",0,&dwType,szPort,&dwRet);
								char *p = strrchr((char *)szPort, (int)',');
								if(p)
								{
									strcpy(szApn, p+2);
									szApn[strlen(szApn)-1] = 0;
								}
								
							}
							else
							{	
								sprintf((char*)szPort, "AT+CGDCONT=1,\"IP\",\"%s\"", szApn);
								RegSetValueEx(hk, "UserInit", 0, REG_SZ, (LPBYTE)szPort, strlen((char*)szPort));
							}
							
							RegCloseKey(hk);
							Found = 1;
						}
					}
				}
				break;
			}
		}
		
		if (buffer) LocalFree(buffer);
		if (Found) break;
	}
	
	if (GetLastError() != NO_ERROR)
	{
		TRACE(_T("EnumDeviceInfo %d"),GetLastError());
	}
	
	//
	// Cleanup.
	//
	err = GetLastError();
	SetupDiDestroyDeviceInfoList(DeviceInfoSet);
	SetLastError(err);
}

BOOL GetStringTCReg(LPSTR strRet, LPCSTR lpkey, DWORD nRet)
{
	char	szIniFile[_MAX_PATH];
	ZeroMemory(szIniFile, _MAX_PATH);
	GetModuleFileName(NULL, szIniFile, _MAX_PATH);
	char	*p = strrchr(szIniFile, (int)'\\');
	if(p)
	{
		*(p+1) = 0;
		strcat(szIniFile, "system.ini");
	}
	GetPrivateProfileString("APN", lpkey, "", strRet, nRet, szIniFile);
	
	return FALSE;
}


APNLIST	m_ApnList;
void GetApnList()
{
	//初始APN列表
	if(m_ApnList.GetSize())
	{
		for(int i = 0; i < m_ApnList.GetSize();i++)
		{
			LPAPNINFO lpat = m_ApnList.GetAt(i);
			delete lpat;
			
		}
		m_ApnList.RemoveAll();
	}
	
	{
		//读预制APN表
		char	szIniFile[_MAX_PATH];
		ZeroMemory(szIniFile, _MAX_PATH);
		
		GetModuleFileName(NULL, szIniFile, _MAX_PATH);
		char	*p = strrchr(szIniFile, (int)'\\');
		if(p)
		{
			*(p+1) = 0;
			strcat(szIniFile, "system.ini");
		}
		
		char	szKeys[4086];
		ZeroMemory(szKeys, 4086);
		GetPrivateProfileString("APN",NULL, "", szKeys, 4086, szIniFile);
		p = szKeys;
		while(*p)
		{
			if(*p == '#')	
			{
				p += strlen(p);
				p++;
				continue;
			}
			//
			CString strName = p;
			strName.TrimLeft();
			strName.TrimRight();
			
			char	szApn[1024];
			ZeroMemory(szApn, 1024);
			GetPrivateProfileString("APN", strName, "", szApn, 1024, szIniFile);
			
			CString	str = szApn;
			int	pos = str.Find(';');
			if(pos == -1)	continue;
			CString strApn = str.Left(pos);
			strApn.TrimLeft();
			strApn.TrimRight();
			//
			str = str.Mid(pos+1);
			pos = str.Find(';');
			if(pos == -1)	continue;
			CString strUser = str.Left(pos);
			strUser.TrimLeft();
			strUser.TrimRight();
			//
			str = str.Mid(pos+1);
			pos = str.Find(';');
			if(pos == -1)	continue;
			CString strPwd = str.Left(pos);
			strPwd.TrimLeft();
			strPwd.TrimRight();
			//
			str = str.Mid(pos+1);
			pos = str.Find(';');
			if(pos == -1)	continue;
			CString strNumber = str.Left(pos);
			strNumber.TrimLeft();
			strNumber.TrimRight();
			//
			str = str.Mid(pos+1);
			pos = str.Find(';');
			if(pos == -1)	continue;
			CString strDns1 = str.Left(pos);
			strDns1.TrimLeft();
			strDns1.TrimRight();
			//
			str = str.Mid(pos+1);
			pos = str.Find(';');
			CString strDns2;
			
			if(pos != -1)
			{
				strDns2 = str.Left(pos);
				strDns2.TrimLeft();
				strDns2.TrimRight();
			}
			
			LPAPNINFO lpapn = new APNINFO;
			ZeroMemory(lpapn, sizeof(APNINFO));
			strcpy(lpapn->szName, strName);
			strcpy(lpapn->szUser, strUser);
			strcpy(lpapn->szPwd, strPwd);
			strcpy(lpapn->szNumber, strNumber);
			strcpy(lpapn->szApn, strApn);
			strcpy(lpapn->szDns1, strDns1);
			strcpy(lpapn->szDns2, strDns2);
			m_ApnList.Add(lpapn);
			
			p += strlen(p);
			p++;
		}
		if(m_ApnList.GetSize() == 0)
		{
			LPAPNINFO lpapn = new APNINFO;
			ZeroMemory(lpapn, sizeof(APNINFO));
			if(m_DevInfo.ConnectType == CONNECTTYPE_GPRS || m_DevInfo.ConnectType == CONNECTTYPE_EDGE)
			{
				strcpy(lpapn->szName, "中国移动");
				strcpy(lpapn->szUser, "");
				strcpy(lpapn->szPwd, "");
				strcpy(lpapn->szNumber, "*99***1#");
				strcpy(lpapn->szApn, "CMNET");
				strcpy(lpapn->szDns1, "");
				strcpy(lpapn->szDns2, "");
			}else
			{
				strcpy(lpapn->szName, "中国联通");
				strcpy(lpapn->szUser, "card");
				strcpy(lpapn->szPwd, "card");
				strcpy(lpapn->szNumber, "#777");
				strcpy(lpapn->szApn, "");
				strcpy(lpapn->szDns1, "");
				strcpy(lpapn->szDns2, "");
			}
			m_ApnList.Add(lpapn);
		}
	}
}

// PDU解码,用于接收、阅读短消息
// 输入: pSrc - 源PDU串指针
// 输出: pDst - 目标PDU参数指针
// 返回: 用户信息串长度
int gsmDecodePdu(const char* pSrc, SM_PARAM* pDst)
{
	int nDstLength;			// 目标PDU串长度
	unsigned char tmp;		// 内部用的临时字节变量
	unsigned char buf[256];	// 内部用的缓冲区
	
	// SMSC地址信息段
	gsmString2Bytes(pSrc, &tmp, 2);	// 取长度
	tmp = (tmp - 1) * 2;	// SMSC号码串长度
	pSrc += 4;			// 指针后移,忽略了SMSC地址格式
	gsmSerializeNumbers(pSrc, pDst->SCA, tmp);	// 转换SMSC号码到目标PDU串
	pSrc += tmp;		// 指针后移
	
	// TPDU段基本参数
	gsmString2Bytes(pSrc, &tmp, 2);	// 取基本参数
	pSrc += 2;		// 指针后移
	
	// 取回复号码
	gsmString2Bytes(pSrc, &tmp, 2);	// 取长度
	if(tmp & 1) tmp += 1;	// 调整奇偶性
	pSrc += 4;			// 指针后移,忽略了回复地址(TP-RA)格式
	gsmSerializeNumbers(pSrc, pDst->TPA, tmp);	// 取TP-RA号码
	pSrc += tmp;		// 指针后移
	
	// TPDU段协议标识、编码方式、用户信息等
	gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_PID, 2);	// 取协议标识(TP-PID)
	pSrc += 2;		// 指针后移
	gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_DCS, 2);	// 取编码方式(TP-DCS)
	pSrc += 2;		// 指针后移
	gsmSerializeNumbers(pSrc, pDst->TP_SCTS, 14);		// 服务时间戳字符串(TP_SCTS) 
	pSrc += 14;		// 指针后移
	gsmString2Bytes(pSrc, &tmp, 2);	// 用户信息长度(TP-UDL)
	pSrc += 2;		// 指针后移
	if(pDst->TP_DCS == GSM_7BIT)	
	{
		// 

⌨️ 快捷键说明

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