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

📄 wireless.cpp

📁 这是一个完整的无线通讯工程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				strncpy(Noke,p,pos);
				Noke[pos] = '\0';
				//tempNumber[NumberCount].index = atoi(Noke);
				tempNumber->index = atoi(Noke);
				
				//TRACE("\r\n序号:%d--", tempNumber[NumberCount].index);
				
				p += (pos+2);
				temp = p;
				pos = temp.Find("\"");
				//strcpy(tempNumber[NumberCount].szNumber,temp.Left(pos));
				//tempNumber[NumberCount].szNumber[pos] = '\0';
				strcpy(tempNumber->szNumber,temp.Left(pos));
				tempNumber->szNumber[pos] = '\0';

				//TRACE("号码:%s--", tempNumber[NumberCount].szNumber);
				
				p += (pos+2);
				temp = p;
				pos = temp.Find(",");
				strcpy(Noke,temp.Left(pos));
				//tempNumber[NumberCount].type = atoi(Noke);
				tempNumber->type = atoi(Noke);
				
				//TRACE("类型:%d--", tempNumber[NumberCount].type);
				
				p += (pos+2);
				temp = p;
				pos = temp.Find("\"");
				//TRACE(("%d"),pos);
				strcpy(Noke,temp.Left(pos));
				
				unsigned char tempRecv[48] = "\0";
				int len = gsmString2Bytes(Noke,tempRecv,pos);
				//gsmDecodeUcs2(tempRecv,tempNumber[NumberCount].szName,len);
				//tempNumber[NumberCount].szName[pos] = '\0';
				gsmDecodeUcs2(tempRecv,tempNumber->szName,len);
				tempNumber->szName[pos] = '\0';

				//TRACE("姓名:%s\r\n", tempNumber[NumberCount].szName);
				
				//numberlist.Add(&tempNumber[NumberCount]);				
				numberlist.Add(tempNumber);				
				
				NumberCount ++;
				if (i == Group-1)
				{
					if (NumberCount < Phonecount)
						Group ++;
				}
				p = strtok(NULL, "\r\n");
			}
			p = NULL;
		}
	
	}
	return NumberCount;
}


extern "C" __declspec(dllexport) bool CloseDev()
{
	ClearCommData();
    return CloseComm();
}

bool SetCMGF()
{
	char ans[128] = "\0";
	WriteComm("AT+CMGF=1\r\n",strlen("AT+CMGF=1\r\n"));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") == NULL)
		{
			return false;  
		}
	}
	else
		return false;
	return true;
}

bool SetCPMS()
{
	char ans[128] = "\0";
	WriteComm("AT+CPMS=\"SM\"\r\n",strlen("AT+CPMS=\"SM\"\r\n"));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
        if (strstr(ans,"OK") == NULL)
		{
            return false;
		}
	}
	else
		return false;
	WriteComm("AT+CSCS=\"UCS2\"\r\n",strlen("AT+CSCS=\"USC2\"\r\n"));
	if ((ReadComm(ans,128) > 0) != NULL)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") == NULL)
			return false;
	}
	return true;
}


extern "C" __declspec(dllexport) bool GetSmsCount(int *count)
{
	char ans[128] = "\0",*p = NULL;
	WriteComm("AT+CPMS?\r\n",strlen("AT+CPMS?\r\n"));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if ((p = strstr(ans,"+CPMS: \"SM\"")) != NULL)
		{
			p += 12;
			CString smsvalue;
			smsvalue = p;
			int pos = smsvalue.Find(",");
			*count =  atoi(smsvalue.Left(pos));
			return true;
		}
	}
	return false;
}


extern "C" __declspec(dllexport) bool GetSmsList(/*LPSMSINFO *smslist, int *count*/)
{
    char ans[1024] = "\0", *p = NULL, send[32] = "\0";
	int smsCount = 0 ,readcount = 0;
	
    if (!SetCMGF())
		return false;
	
	if (!SetCPMS())
		return false;

	if (!GetSmsCount(&smsCount))
		return false;
	
	if (smsCount == 0)
	{
		return true;
	}
    LPSMSINFO tempsmslist = new SMSINFO[smsCount];
	ZeroMemory(tempsmslist,sizeof(SMSINFO));
    if (smsCount <= 0)
		return false;
	for (int i = 0 ; i < smsCount ; i++ )
	{
		Sleep(100);
		sprintf(send,"AT+CMGR=%d\r\n",i+1);
		TRACE("正在读取%d\r\n", i+1);
		WriteComm(send,strlen(send));

		if (ReadComm(ans,1024) > 0)
		{
			TRACE("%d条短信[%s]\r\n\r\n", i+1, ans);
			if ((p = strstr(ans,"+CMGR:")) != NULL)
			{
				CString temp;
				p += 8;
				temp = p;
				char Noke[32];
				memset(Noke,0,32);
				int pos = temp.Find("\"");
				strncpy(Noke,p,pos);
				Noke[pos] = '\0';
				if (strcmp(Noke,"REC READ") == 0) //已读状态
                    tempsmslist[readcount].state = 1;
				else if (strcmp(Noke,"REC UNREAD") == 0) //未读状态
					tempsmslist[readcount].state = 2;
				else if (strcmp(Noke, "STO UNSENT") == 0)
					tempsmslist[readcount].state = 3;
				TRACE("state:%d\r\n", tempsmslist[readcount].state);

				tempsmslist[readcount].index = i+1;	
				p += (pos+3);
				temp = p;
				pos = temp.Find("\"");
				char tempNoke[2048], tempRecv[128];
				memset(tempNoke,0,2048);
				memset(tempRecv,0,128);
				//////////////////////取号码
				strcpy(tempNoke,temp.Left(pos));
				tempNoke[pos] = '\0';
				
				int count = 0;
                for (int j = 3; j < pos; j+=4)
				{
					tempRecv[count++] = tempNoke[j];
				}
				//////////////////////
				if (tempRecv[0] == 'B')
					tempRecv[0] = '+';
				strcpy(tempsmslist[readcount].szNumber,tempRecv);
				tempsmslist[readcount].szNumber[count] = '\0';
				
				p += (pos+2);
				temp = p;
				pos = temp.Find(",");
				
				/*p += (pos+2);
				temp = p;
				pos = temp.Find("+");
				strcpy(tempsmslist[readcount].szTime,temp.Left(pos));
				tempsmslist[readcount].szTime[pos] = '\0';
				*/
				////////////////////////////////
                
				
				p += (pos+2);
				temp = p;
				pos = temp.Find(",");
				strcpy(Noke,temp.Left(pos));
                
				p += (pos + 1);
				temp = p;
				
                pos = temp.Find("+");
				
				strcat(Noke, " ");
				strcat(Noke, temp.Left(pos));
		
				strcpy(tempsmslist[readcount].szTime,Noke);
				tempsmslist[readcount].szTime[strlen(Noke)] = '\0';
				////////////////////////////////////////////////////
				p += (pos+4);
				
				temp = p + 2;
				pos = temp.Find("\r\nOK");
				strcpy(tempNoke,temp.Left(pos));
				tempNoke[pos] = '\0';
                unsigned char buf[256];
                int len = gsmString2Bytes(tempNoke,buf,pos);
				len = gsmDecodeUcs2(buf,tempsmslist[readcount].szContent,len);
				tempsmslist[readcount].szContent[len] = '\0';
				TRACE("state:[%d], index:[%d]\r\n", tempsmslist[readcount].state, tempsmslist[readcount].index);
                TRACE("内容:[%s]", tempsmslist[readcount].szContent);
                
				smslist.Add(&tempsmslist[readcount]);
				readcount ++;
				
				if (i == smsCount-1)
				{
				    if (readcount < smsCount)
						smsCount ++;
				}
			}
		}
	}
//	delete []tempsmslist;
//	tempsmslist = NULL;
	p = NULL;
//	ClearCommData();
//	m_ComStateThread->SuspendThread();
//	CloseComm();
//	ReStartCom(m_MsgHand);
//	m_ComStateThread->ResumeThread();
	return true;
}

extern "C" __declspec(dllexport) bool RecSMS(LPSMSINFO *newsms, int index)
{
    char ans[1024] = "\0", *p = NULL, send[32] = "\0";
	int smsCount = 0 ,readcount = 0;
	
    if (!SetCMGF())
		return false;
	if (!SetCPMS())
		return false;
	
    LPSMSINFO tempsmslist = new SMSINFO;
	ZeroMemory(tempsmslist,sizeof(SMSINFO));
	
	sprintf(send,"AT+CMGR=%d\r\n",index);
	TRACE("正在读取%d\r\n", index);
	WriteComm(send,strlen(send));
	
	if (ReadComm(ans,1024) > 0)
	{
		TRACE("%d条短信[%s]\r\n\r\n", index, ans);
		if ((p = strstr(ans,"+CMGR:")) != NULL)
		{
			CString temp;
			p += 8;
			temp = p;
			char Noke[32];
			memset(Noke,0,32);
			int pos = temp.Find("\"");
			strncpy(Noke,p,pos);
			Noke[pos] = '\0';
			if (strcmp(Noke,"REC READ") == 0) //已读状态
				tempsmslist->state = 1;
			else if (strcmp(Noke,"REC UNREAD") == 0) //未读状态
				tempsmslist->state = 2;
			
			tempsmslist->index = index;	
			p += (pos+3);
			temp = p;
			pos = temp.Find("\"");
			char tempNoke[2048], tempRecv[128];
			memset(tempNoke,0,2048);
			memset(tempRecv,0,128);
			//////////////////////取号码
			strcpy(tempNoke,temp.Left(pos));
			tempNoke[pos] = '\0';
			
			int count = 0;
			for (int i = 3; i < pos; i+=4)
			{
				tempRecv[count++] = tempNoke[i];
			}
			//////////////////////
			if (tempRecv[0] == 'B')
				tempRecv[0] = '+';
			strcpy(tempsmslist->szNumber,tempRecv);
			tempsmslist->szNumber[count] = '\0';
			
			p += (pos+2);
			temp = p;
			pos = temp.Find(",");
			
			p += (pos+2);
			temp = p;
			pos = temp.Find(",");
			strcpy(Noke,temp.Left(pos));
			
			p += (pos + 1);
			temp = p;
			
			pos = temp.Find("+");
			
			strcat(Noke, " ");
			strcat(Noke, temp.Left(pos));
			
			strcpy(tempsmslist->szTime,Noke);
			tempsmslist->szTime[strlen(Noke)] = '\0';
			////////////////////////////////////////////////////
			p += (pos+4);
			
			temp = p + 2;
			pos = temp.Find("\r\nOK");
			strcpy(tempNoke,temp.Left(pos));
			tempNoke[pos] = '\0';
			unsigned char buf[256];
			int len = gsmString2Bytes(tempNoke,buf,pos);
			len = gsmDecodeUcs2(buf,tempsmslist->szContent,len);
			tempsmslist->szContent[len] = '\0';
		}
	}
	*newsms = tempsmslist;
	p = NULL;
	ClearCommData();
	CloseComm();
	ReStartCom(m_MsgHand);
	return true;
}

extern "C" __declspec(dllexport) bool SMSSpaceIsFull()
{
    char ans[128] = "\0", *p = NULL,*send = "AT+CPMS?\r\n";
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > NULL)
	{
		TRACE("%s\r\n", ans);
		if ((p = strstr(ans,"+CPMS: \"SM\"")) != NULL)
		{
			int CurCount = 0, SumCount = 0;
			p += 12;
			CString smsvalue;
			smsvalue = p;
			int pos = smsvalue.Find(",");
			CurCount = atoi(smsvalue.Left(pos));
			
			p += (pos+1);
			smsvalue = p;
			pos = smsvalue.Find(",");
            SumCount = atoi(smsvalue.Left(pos));
            if (CurCount == SumCount)
				return true;
		}
	}
	return false;
}


//isEnable 0-Disable ,1-Enable
extern "C" __declspec(dllexport) bool SetPINEnable(int isEnable, char *pwd)
{
    char ans[128] = "\0", *p = NULL, send[] = "\0";
	sprintf(send,"AT+CLCK=\"SC\",%d,\"%s\"\r\n",isEnable,pwd);
	WriteComm(send,strlen(send));
	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK"))
			return true;
	}
	return false;
} 

extern "C" __declspec(dllexport) int  GetPINState()
{
    char ans[128] = "\0" ,*p = NULL, *send = "AT+CPIN?\r\n";
	WriteComm(send,strlen(send));

	if (ReadComm(ans,128) > 0)
	{
		TRACE("%s\r\n", ans);
		if (strstr(ans,"OK") != NULL)
		{
            if ((strstr(ans,"+CPIN:")) != NULL)
			{
				if (strstr(ans,"READY") != NULL)
					return 11; //未开启PIN码
				else if (strstr(ans,"SIM PIN") != NULL)
					return 12; //开启了PIN码,输入PIN码方可
				else if (strstr(ans,"SIM PUK") != NULL)
					return 13; //需要输入PUK码,可能是因为PIN丢失导致SIM被锁
				else if (strstr(ans,"SIM PIN2") != NULL)
					return 14; //需要输入CHV2
				else if (strstr(ans,"SIM PUK2") != NULL)
					return 15; //需要输入PUK2
				else if (strstr(ans,"PH-SIM PIN") != NULL)
					return 16; //需要输入UIM解锁密码
				else if (strstr(ans,"PH-NET PIN") != NULL)
					return 17; //需要输入个人网络用户标识
			}
		}
	}
	return -1;
}

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

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


int GetNumberType(char *number)
{
	if (!strlen(number))
		return 0;
    if (strstr(number,"+86") != NULL)
        return 145;
	else
		return 129;
}


extern "C" __declspec(dllexport) bool ModifyNumber(int index, char *newNumber, char *name)
{
    char ans[128] = "\0", *p = NULL, send[] = "\0";
	sprintf(send,"AT+CPBR=%d\r\n",index);
	char *nametemp = name;

	LPNUMBERINFO lpat = new NUMBERINFO;
    ZeroMemory(lpat,sizeof(NUMBERINFO));

	if (index > 0 || strlen(name) == 0)
	{
		WriteComm(send,strlen(send));
		if (ReadComm(ans,128) > 0)
		{
			TRACE("%s\r\n", ans);
			if (strstr(ans,"OK") != NULL)
			{
				char *p = ans;
				p += 7;
				CString temp = p;
				int pos = temp.Find(",");
				char Noke[32];
				memset(Noke,0,32);
				strcpy(Noke,temp.Left(pos));
				lpat[0].index = atoi(Noke);
				
				p += (pos+2);
				temp = p;
				pos = temp.Find("\"");
				strcpy(lpat[0].szNumber,temp.Left(pos));
				lpat[0].szNumber[0] = '\0';
				
				p += (pos+2);
				temp = p;
				pos = temp.Find(",");
				strcpy(Noke,temp.Left(pos));
				lpat[0].type = atoi(Noke);
				
				p += (pos+2);
				temp = p;
				pos = temp.Find("\"");
				strcpy(lpat[0].szName,temp.Left(pos));
				lpat[0].szName[pos] = '\0';
				nametemp = lpat[0].szName;
			}
		}
		else
			return false;
	}
	//else
	//	DelNumber(index);

⌨️ 快捷键说明

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