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