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

📄 smm.cpp

📁 手机开发环境BREW实例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		nFindChar = 'O';

		//得到“O”的索引,“O”前有两个“\r”,两个“\n”
		pDestination = strrchr(m_szInBuffer,nFindChar);
		//得到内容最后字符的索引
		nCharIndexEnd = (pDestination - 4) - m_szInBuffer;

		nFindChar = 'K';

		//得到“K”的索引
		pDestination = strrchr(m_szInBuffer,nFindChar);

		
		if((nCharIndexEnd + 1) == ((pDestination - 4) - m_szInBuffer))
		{
			//“OK”&“"”之间是我们需要的内容;
			nFindChar = '\"';
			pDestination = strrchr(m_szInBuffer,nFindChar);

			//得到内容第一个字符的索引,“"”后有一个“\r”,一个“\n”
			nCharIndexStart = pDestination - m_szInBuffer + 2;
			nContentLength = nCharIndexEnd - nCharIndexStart - 1;

			//以下取短消息内容;
			int nStrLen = nContentLength/4;

			szRecvAddress[0] = '\0';

			//消息内容的16进制转换
			for(i = 0;i < nStrLen; i++)
			{
				strncpy(cTemp,m_szInBuffer + nCharIndexStart + (4 * i + 1), 4);

				cTemp[4] = '\0';

				char * szStopString;
				
				unsigned long lTemp = strtoul(cTemp, &szStopString,16);
				unsigned long * lRecvAddress = &lTemp;
				
				wcscat(szRecvAddress,(wchar_t *)lRecvAddress);
			}
			//UNICODE 到 ANSI 的转换;
			m_szOutBuffer[0] = '\0';

			if(UCS22ANSI((char *)szRecvAddress ,m_szOutBuffer))
				return 1;
			else
			{
				//返回阅读的短消息内容;
				strcat(szSMSContent,m_szOutBuffer);	
				return 0;
			}		

		}
		else
			return 1;
	}
	else
		return 1;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    根据短消息的记录号,删除短消息;
//参数描述:
//    nIndex:输入,待删除的短消息的记录号;
//返回值描述:
//    0:成功
//    1:失败
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SMSDel(int nIndex)
{
	int nErr;

	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s%d",COMMAND_SMS_DELETE,nIndex);//拼删除命令"AT+CMGD=";	
	strcat(m_szOutBuffer,"\r");

	m_szInBuffer[0] = '\0';

	nErr = SendCmd(m_szOutBuffer,m_szInBuffer,BUFFER_SIZE_IN);//发送命令;

	if(!nErr)
	{

		if(strstr(m_szInBuffer,"OK") !=NULL)//成功一定有“OK”;
			return 0;
		else
			return 1;
	}
	else
		return 1;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设输入内容不回显;
//参数描述:
//    szEcho:输入,0表示不回显输入内容,1表示回显输入内容。
//    
//返回值描述:
//    0:成功
//    1:设输入内容不回显失败
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetInNoEcho(char * szEcho)
{
	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_INPUT_NODISPLAY);
	strcat(m_szOutBuffer,szEcho);

	if(SetATCmd(m_szOutBuffer))//设输入内容不回显”ATE0“
		return 1;

	return 0;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设置短消息格式;
//参数描述:
//    szSMSFmt:输入,0表示为PDU格式,1表示为文本格式。
//    
//返回值描述:
//    0:成功
//    1:消息格式初始化失败
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetSMSFormat(char * szSMSFmt)
{
	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_FORMAT_INIT);
	strcat(m_szOutBuffer,szSMSFmt);

	if(SetATCmd(m_szOutBuffer))//格式初始化(AT+CMGF=1);
		return 1;

	return 0;
	
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设置短消息TE字符集;
//参数描述:
//    szSMSTEChar:输入,支持两种字符集“GSM”,“UCS2”。
//    
//返回值描述:
//    0:成功
//    1:消息TE字符集初始化失败
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetSMSTEChar(char * szSMSTEChar)
{
	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_CHARACTER_INIT);
	strcat(m_szOutBuffer,"\"");
	strcat(m_szOutBuffer,szSMSTEChar);
	strcat(m_szOutBuffer,"\"");

	if(SetATCmd(m_szOutBuffer))//TE字符集初始化(AT+CSCS=“UCS2)
		return 1;

	return 0;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设置短消息接收提示;
//参数描述:
//    szSMSRecvPrompt:输入,格式为“[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]如:2,1,0,0,0。
//    
//返回值描述:
//    0:成功
//    1:消息接收提示初始化失败
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetSMSRecvPrompt(char * szSMSRecvPrompt)
{
	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_SMS_RECIEVE);
	strcat(m_szOutBuffer,szSMSRecvPrompt);

	if(SetATCmd(m_szOutBuffer))//初始化消息接收命令”AT+CNMI=2,1,0,0,0“
		return 1;

	return 0;

}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    设置短消息文本模式参数;
//参数描述:
//    szSMSParameter:输入,格式为[<fo>[,<vp>[,<pid>[,<dcs>]]]]如:17,167,0,25。
//    
//返回值描述:
//    0:成功
//    1:消息文本模式参数初始化失败
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SetSMSModeParameter(char * szSMSParameter)
{
	m_szOutBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_SMS_MODEPARAMETER);
	strcat(m_szOutBuffer,szSMSParameter);

	if(SetATCmd(m_szOutBuffer))//设文本模式参数置短消息”AT+CSMP=17,167,0,25“
		return 1;

	return 0;
}

//////////////////////////////////////////////////////////////////////////
//功能描述:
//    读取TA中存储的消息记录号;
//参数描述:
//    szIndexType:输入,读取的索引类型,如“REC UNREAD”。
//	  nIndexArray:输出整型数组,记录了消息记录号
//    
//返回值描述:
//    0:成功
//    1:没有消息,只有一个“OK”。
//	  2:发送命令失败。
//
//////////////////////////////////////////////////////////////////////////
BOOL CSMM::SMSIndexList(char * szIndexType,int * nIndexArray)
{
	char *pDestination;
	char *pTempPosition;
	char cTempNO[4];
	int nszFindChar;
	int nStartPosition,nEndPosition,nTempLength;
	int nErr;
	int nTempPoint,nIndexNum = -1;

	m_szOutBuffer[0] = '\0';
	m_szTempBuffer[0] = '\0';

	sprintf(m_szOutBuffer,"%s",COMMAND_SMS_LISTCONTENT);
	strcat(m_szOutBuffer,"\"");
	strcat(m_szOutBuffer,szIndexType);
	strcat(m_szOutBuffer,"\"");
	strcat(m_szOutBuffer,"\r");

	m_szInBuffer[0] = '\0';

	nErr = SendCmd(m_szOutBuffer,m_szInBuffer,BUFFER_SIZE_IN );

	if(!nErr)
	{
		//查找“OK”。
		nszFindChar = 'O';

		pDestination = strrchr(m_szInBuffer,nszFindChar);
		nEndPosition = m_szInBuffer - pDestination - 4;

		nszFindChar = 'K';

		pDestination = strrchr(m_szInBuffer,nszFindChar);

		nTempPoint = 0;//随着查找的进行,可以移动指针。

		if((nEndPosition + 1) == (m_szInBuffer - pDestination) - 4)
		{
			if(nEndPosition > 8)//关键字“+CMGL:\r\n”在OK前正好为8个字节。
			{
				while((pTempPosition = strstr(m_szInBuffer + nTempPoint,"+CMGL:"))!= NULL)
				{
					//查找所有的关键字,并取出所有需要的index.
					nIndexNum++;
					nStartPosition = m_szInBuffer - pTempPosition + 5;

					pTempPosition = strstr(m_szInBuffer + nStartPosition,",");
					nEndPosition = m_szInBuffer - pTempPosition;

					nTempPoint += nStartPosition;//向前移动指针。

					//取出索引号。
					nTempLength = (nStartPosition - nEndPosition) - 1;
					cTempNO[0] = '\0';
					strncpy(cTempNO,m_szInBuffer + nStartPosition,nTempLength);
					cTempNO[nTempLength] = '\0';
					nIndexArray[nIndexNum] = atoi(cTempNO);
				}
				return 0;
			}
			else
				return 1;
		}
		else
		{
			return 2;
		}
	}
	else
		return 2;
}

⌨️ 快捷键说明

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