📄 wireless.cpp
字号:
}
}
}
}while(ret==ERROR_SUCCESS || ret == ERROR_MORE_DATA);
}
}
RegCloseKey(hKey);
}
UINT GetComRecv(LPVOID lpvoid)
{
CWnd *MsgWnd = (CWnd*)lpvoid;
char ans[128] = "\0", *p = NULL;
while(!ThreadEnd)
{
if (ReadComm(ans,128))
{
TRACE("\r\n 接收数据\r\n--------%s---------\r\n", ans);
if (strstr(ans,"RING") != NULL)
{
char Noke[32] = "\0";
if ((p = strstr(ans,"+CLIP:")) != NULL)
{
p += 8;
CString temp = p;
int pos = temp.Find("\"");
strcpy(Noke, temp.Left(pos));
Noke[pos] = '\0';
}
::PostMessage(MsgWnd->m_hWnd,WM_COMRECV,(WPARAM)1,(LPARAM)Noke);
}
else if ((p = strstr(ans,"+CMTI:")) != NULL)
{
p += 12;
CString temp = p;
int pos = temp.Find("\r\n");
char Noke[32] = "\0";
strcpy(Noke,temp.Left(pos));
LPSMSINFO newsms = new SMSINFO;
ZeroMemory(newsms, sizeof(SMSINFO));
RecSMS(&newsms, atoi(Noke));
::SendMessage(MsgWnd->m_hWnd,WM_COMRECV,(WPARAM)2,(LPARAM)newsms);
}
else if (strstr(ans, "BUSY") != NULL)
{
::SendMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)12);
}
else if (strstr(ans, "NO CARRIER") != NULL)
{
::SendMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)11);
}
else if (strstr(ans, "%CPI: 1,6") != NULL)
{
::PostMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)10);
}
else if (strstr(ans, "%CPI: 1,7") != NULL)
{
::PostMessage(MsgWnd->m_hWnd, WM_COMRECV, 3, (LPARAM)13);
}
}
// ClearCommData();
Sleep(500);
}
return 0;
}
extern "C" __declspec(dllexport) int InitModem()
{
if (m_DevIsOK)
{
char ans[128] = "\0";
ClearCommData();
// CloseDev();
// StartCom(m_MsgHand);
WriteComm("AT\r\n", strlen("at\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL)
{
//ReStartComEX();
return 1;//AT不通
}
TRACE("1 %s\r\n", ans);
WriteComm("AT+CPIN?\r", strlen("AT+CPIN?\r"));
ReadComm(ans, 128);
if (strstr(ans, "ERROR") != NULL) return 3;//没有SIM卡
TRACE("2 %s\r\n", ans);
WriteComm("ATZ\r", strlen("ATZ\r"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;//复位失败
TRACE("3 %s\r\n", ans);
WriteComm("ATE0\r", 5);
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;//关闭回显
TRACE("4 %s\r\n", ans);
ClearCommData();
WriteComm("AT+CMGF=0\r\n", strlen("AT+CMGF=0\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;
TRACE("5 %s\r\n", ans);
ClearCommData();
WriteComm("AT+CREG=2\r", strlen("AT+CREG=2\r"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;//网络注册失败
TRACE("6 %s\r\n", ans);
ClearCommData();
WriteComm("AT+CLIP=1\r\n",strlen("AT+CLIP=1\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;
TRACE("7 %s\r\n", ans);
ClearCommData();
WriteComm("AT+CNMI=2,1,0,0,0\r\n", strlen("AT+CNMI=2,1,0,0,0\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;
TRACE("8 %s\r\n", ans);
ClearCommData();
WriteComm("AT+AUDIO=2,1\r\n", strlen("AT+AUDIO=2,1\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;
TRACE("9 %s\r\n", ans);
ClearCommData();
WriteComm("AT+CMEE=1\r\n", strlen("AT+CMEE=1\r\n"));
ReadComm(ans, 128);
if (strstr(ans, "OK") == NULL) return 1;
TRACE("10 %s\r\n", ans);
ClearCommData();
/* WriteComm("AT+CFUN?\r\n", strlen("AT+CFUN?\r\n"));
if (strstr(ans, "OK") == NULL) return 1;
WriteComm("AT+CRC=0\r\n", strlen("AT+CRC=0\r\n"));
if (strstr(ans, "OK") == NULL) return 1;
WriteComm("AT+PWR?\r\n", strlen("AT+PWR?\r\n"));
if (strstr(ans, "OK") == NULL) return 1;
WriteComm("AT+CPIN?\r\n", strlen("AT+CPIN?\r\n"));
if (strstr(ans, "ERROR") == NULL) return 3;
*/
m_ComStateThread = AfxBeginThread(GetComRecv, m_MsgHand);
m_ComStateThread->m_bAutoDelete = false;
return 0;
}
return 1;
}
//启动模块
extern "C" __declspec(dllexport) bool StartCom(CWnd *MainDlg)
{
bool flag = false;
m_MsgHand = MainDlg;
CString com;
InitDevice();
com.Format("Com%d",m_nCom);
/* if (m_SerPort.InitPort(MainDlg, m_nCom, m_nRate))
{
m_SerPort.StartMonitoring();
m_SerPort.WriteToPort((unsigned char*)"AT\r\n", strlen("AT\r\n"));
}
m_SerPort.StopMonitoring();
m_SerPort.FreeRecvBuf();
m_SerPort.DesInitPort();
*/
if (OpenComm(com,m_nRate))
{
m_DevIsOK = true;
return true;
}
m_DevIsOK = false;
return false;
}
//获取当前信号量
int GetCSQ()
{
char ans[128] = "\0";
char *p = NULL;
int csqvalue = 0;
CString csq;
WriteComm("at+csq\r\n",strlen("at+csq\r\n"));
if (ReadComm(ans, 128) > 0)
{
TRACE("%s\r\n", ans);
if ((p = strstr(ans,"+CSQ: ")) != NULL)
{
p += 6;
csq = p;
int pos = csq.Find(',');
if (pos != -1)
{
csqvalue = atoi(csq.Left(pos));
}
}
}
return csqvalue;
}
extern "C" __declspec(dllexport) bool SearchNet()
{
if (m_DevIsOK)
{
time_t t_begin = time(NULL);
while(1)
{
if(GetCSQ() < 0 || GetCSQ() > 31)
{
if((time(NULL) - t_begin) > 30)
{
return false;
}
Sleep(1000);
}
else
return true;
}
}
return false;
}
//获取当前网络
bool GetCurNetwork(char *network)
{
char ans[128],*send = "AT+COPS?\r\n";
char *p = NULL;
CString netvalue;
WriteComm(send,strlen(send));
if (ReadComm(ans, 128) > 0)
{
TRACE("%s\r\n", ans);
if ((p = strstr(ans,"+COPS: 0,0")) != NULL || (p = strstr(ans,"+COPS: 1,0")) != NULL || (p = strstr(ans,"+COPS: 2,0")) != NULL || (p = strstr(ans,"+COPS: 3,0")) != NULL || (p = strstr(ans,"+COPS: 5,0")) != NULL || (p = strstr(ans,"+COPS: 4,0")) != NULL)
{
p += 12;
netvalue = p;
int pos = netvalue.Find("\"");
strncpy(network,p,pos);
network[pos] = '\0';
return true;
}
}
return false;
}
//获取短信中心号码
bool GetCSCA(char *csca)
{
char ans[128],*p = NULL,*send = "AT+CSCA?\r\n";
WriteComm(send,strlen(send));
CString cscavalue;
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if ((p = strstr(ans,"+CSCA: ")) != NULL)
{
p += 8;
cscavalue = p;
int pos = cscavalue.Find("\"");
strncpy(csca,p,pos);
csca[pos] = '\0';
return true;
}
}
return false;
}
//获取所有运营商列表
bool GetTotalOperator(LPNETWORKLIST *operatorList)
{
char ans[128], *send = "AT+COPS=?\r\n";
char *p = NULL;
CString operatorvalue;
LPNETWORKLIST tempvalue = new NETWORKLIST;
ZeroMemory(tempvalue,sizeof(NETWORKLIST));
WriteComm(send,strlen(send));
while(1)
{
if (ReadComm(ans,128))
{
TRACE("%s\r\n", ans);
if ((p = strstr(ans,"+COPS:")) != NULL)
{
p += 8;
int state = atoi(&p[0]);
tempvalue->iStat = state;
p += 3;
operatorvalue = p;
int pos = operatorvalue.Find("\"");
strncpy(tempvalue->szName,p,pos);
p += (pos+3);
operatorvalue = p;
pos = operatorvalue.Find("\"");
strncpy(tempvalue->szSName,p,pos);
p += (pos+3);
operatorvalue = p;
pos = operatorvalue.Find("\"");
strncpy(tempvalue->szCode,p,pos);
*operatorList = tempvalue;
return true;
}
else if (strstr(ans,"ERROR") != NULL)
break;
}
}
return false;
}
//获取当前所用频段
bool GetBaud(char *baud)
{
char ans[128], *p = NULL, *temp = NULL ,*send = "AT%BAND?\r\n";
WriteComm(send,strlen(send));
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if ((p = strstr(ans,"%BAND: ")) != NULL)
{
p += 6;
memmove(baud,p,4);
baud[4] = '\0';
return true;
}
}
return false;
}
//获取IMEI号
bool GetIMEI(char *imei)
{
char ans[128], *p = NULL ,*send = "AT+GSN\r\n";
WriteComm(send,strlen(send));
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if (strstr(ans,"OK") != NULL)
{
p = ans+2;
memmove(imei,p,15);
imei[15] = '\0';
return true;
}
}
return false;
}
//获取所用模块类别(如:M32 ,SIM600)
bool GetModemType(char *modemname)
{
char ans[128], *p = NULL, *send = "AT+GMM\r\n";
WriteComm(send,strlen(send));
CString namevalue;
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if (strstr(ans,"OK") != NULL)
{
p = ans+2;
namevalue = p;
int pos = namevalue.Find("\r\n");
memmove(modemname,p,pos);
modemname[pos] = '\0';
return true;
}
}
return false;
}
//获取CGMI
bool GetCGMI(char *cgmi)
{
char ans[128], *p = NULL , *send = "AT+CGMI\r\n";
WriteComm(send,strlen(send));
CString cgmivalue;
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if (strstr(ans,"OK") != NULL)
{
p = ans+2;
cgmivalue = p;
int pos = cgmivalue.Find("\r\n");
memmove(cgmi,p,pos);
cgmi[pos] = '\0';
return true;
}
}
return false;
}
//获取音量
extern "C" __declspec(dllexport) int GetEarVolume()
{
char ans[128], *p = NULL,*send = "AT+CLVL?\r\n";
WriteComm(send,strlen(send));
CString value;
int Volume = 0;
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if ((strstr(ans, "OK")) !=NULL)
{
p = ans+9;
value = p;
int pos = value.Find("\r\n");
int tempvol = atoi(value.Left(pos));
if (tempvol > 0 && tempvol <=2)
Volume = 1;
else if (tempvol <= 4)
Volume = 2;
else if (tempvol <= 6)
Volume = 3;
else if (tempvol <= 8)
Volume = 4;
else if (tempvol <= 10)
Volume = 5;
}
}
return Volume;
}
extern "C" __declspec(dllexport) bool SetEarVolume(int value)
{
char ans[128], *p = NULL,*send = NULL;
CString temp;
temp.Format("AT+CLVL=%d\r\n",value);
send = temp.GetBuffer(0);
WriteComm(send,strlen(send));
if (ReadComm(ans,128) > 0)
{
TRACE("%s\r\n", ans);
if ((strstr(ans, "OK")) !=NULL)
{
return true;
}
}
return false;
}
void WriteApnToFile(LPAPNINFO apn)
{
char szPath[_MAX_PATH] = "\0";
GetModuleFileName(NULL,szPath,MAX_PATH);
char *p = strrchr(szPath, (int)'\\');
if(p)
{
*p = 0;
strcat(szPath, "\\system.ini");
g_inifile = szPath;
}
CString apninfo;
apninfo.Format("%s;%s;%s;%s;%s;%s;",apn->szApn,apn->szUser,apn->szPwd,apn->szNumber,apn->szDns1,apn->szDns2);
WritePrivateProfileString("APN", apn->szName, apninfo,g_inifile);
}
extern "C" __declspec(dllexport) void AddApn(LPAPNINFO apn)
{
WriteApnToFile(apn);
}
extern "C" __declspec(dllexport) void DelApn(LPAPNINFO apn)
{
char szPath[_MAX_PATH] = "\0";
GetModuleFileName(NULL,szPath,MAX_PATH);
char *p = strrchr(szPath, (int)'\\');
if(p)
{
*p = 0;
strcat(szPath, "\\system.ini");
g_inifile = szPath;
}
WritePrivateProfileString("APN", apn->szName, NULL,g_inifile);
}
extern "C" __declspec(dllexport) bool SetApnInfo(LPAPNINFO apn)
{
OptAPN(m_DevInfo.ModemID,apn->szApn,0);
return true;
}
DWORD WINAPI GetVoiceState(LPVOID lpvoid)
{
char ans[128] = "\0";
while(1)
{
if (ReadComm(ans,128) > 0)
{
TRACE("\r\n-----%s----- \r\n", ans);
if (strstr(ans, "%CPI: 1,6") != NULL)
{
::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)10);
}
if (strstr(ans,"NO CARRIER") != NULL)
{
::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)11);
m_ComStateThread->ResumeThread();
return 0;
}
if (strstr(ans,"BUSY") != NULL)
{
::PostMessage(m_CallHand->GetSafeHwnd(), WM_CALLSTATE, 2, (LPARAM)12);
m_ComStateThread->ResumeThread();
return 0;
}
}
ClearCommData();
Sleep(1);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -