📄 smm.cpp
字号:
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 + -