mobilemodule.cpp
来自「wince中 我自己的流驱动实现 注册表和bib文件 修改在QZSerialS」· C++ 代码 · 共 1,978 行 · 第 1/4 页
CPP
1,978 行
void CMobileModule::CSCLKCommand(int Value)
{//Configure Slow Clock
CString ATCommand("AT+CSCLK=") ;
char tmp[2] ;
memset(tmp,0,2) ;
sprintf(tmp,"%d",Value) ;
ATCommand += tmp ;
ATCommand += "\r" ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CSDTCommand(int Value)
{//Switch On Or Off Detecting SIM Card
CString ATCommand("AT+CSDT=") ;
char tmp[2] ;
memset(tmp,0,2) ;
sprintf(tmp,"%d",Value) ;
ATCommand += tmp ;
ATCommand += "\r" ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CCFCCommand(int Value)
{//query call forwarding
CString ATCommand("AT+CCFC=") ;
char tmp[2] ;
memset(tmp,0,2) ;
sprintf(tmp,"%d",Value) ;
ATCommand += tmp ;
ATCommand += ",2\r" ;
//ATCommand += "\r" ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CCFCCommand()
{//Clear Call forwarding
CString ATCommand("AT+CCFC=4,4\r") ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CCFCCommand(int Index,CString PhoneNum)
{//Set Phone Call Forwarding
CString ATCommand("AT+CCFC=") ;
char tmp[2] ;
memset(tmp,0,2) ;
sprintf(tmp,"%d",Index) ;
ATCommand += tmp ;
ATCommand += ",3,\"" ;
ATCommand += PhoneNum ;
ATCommand += "\"\r" ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CIMICommand()
{//Request the IMSI
CString ATCommand("AT+CIMI\r") ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::VTSCommand(CString Index)
{
CString ATCommand("AT+VTS=") ;
ATCommand += Index ;
ATCommand += "\r" ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::CPMSCommand()
{//
CString ATCommand("AT+CPMS?\r") ;
OpeSerial.WriteSerial(ATCommand);
}
void CMobileModule::InitModule()
{
//InitGpioSet() ;
PowerUpModule() ;
Sleep(3000) ;
//check if module initialized
TCHAR InitModule_C[128] ;
memset(InitModule_C,0,128) ;
wsprintf (InitModule_C, TEXT("\\Adbon\\AdPhoneSet\\InitModule"));
HKEY hkey ;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,InitModule_C,0,0,&hkey))
{
DWORD value = 0;
DWORD dwSize = sizeof(DWORD) ;
LONG m_hkey ;
m_hkey = RegQueryValueEx(hkey,_T("Initialized"), NULL, 0, (LPBYTE)&value, &dwSize);
if(m_hkey == ERROR_SUCCESS)
{
if(value == 0)
{
CLIPCommand(1) ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
COLPCommand(1) ; //
WaitForSingleObject(m_hInitEvent,INFINITE) ;
ATECommand(1) ; //Open Call Back Charactors
WaitForSingleObject(m_hInitEvent,INFINITE) ;
IPRCommand(115200) ;//Set Module BauteRate
WaitForSingleObject(m_hInitEvent,INFINITE) ;
CEXTHSCommand(1) ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
CSCLKCommand(1) ;//Save All Current Module variables
WaitForSingleObject(m_hInitEvent,INFINITE) ;
ATWCommand() ;//Save All Current Module variables
WaitForSingleObject(m_hInitEvent,INFINITE) ;
}
value = 1 ;
}
if(ERROR_SUCCESS == RegSetValueEx(hkey,_T("Initialized"),0,REG_DWORD,(LPBYTE)&value,dwSize))
{
}
RegCloseKey(hkey) ;
}
else
{//Create hKey
DWORD value = 1 ;
DWORD RCNK = 0 ;
DWORD dwSize = sizeof(DWORD);
CLIPCommand(1) ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
COLPCommand(1) ; //
WaitForSingleObject(m_hInitEvent,INFINITE) ;
ATECommand(1) ; //Open Call Back Charactors
WaitForSingleObject(m_hInitEvent,INFINITE) ;
IPRCommand(115200) ;//Set Module BauteRate
WaitForSingleObject(m_hInitEvent,INFINITE) ;
CEXTHSCommand(1) ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
CSCLKCommand(1) ;//Save All Current Module variables
WaitForSingleObject(m_hInitEvent,INFINITE) ;
ATWCommand() ;//Save All Current Module variables
WaitForSingleObject(m_hInitEvent,INFINITE) ;
if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_USERS,InitModule_C,0,NULL,
REG_OPTION_NON_VOLATILE,0,NULL,&hkey,&RCNK))
{
if(ERROR_SUCCESS == RegSetValueEx(hkey,_T("Initialized"),0,REG_DWORD,(LPBYTE)&value,dwSize))
{
}
}
RegCloseKey(hkey) ;
}
//Init other variables
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,TEXT("\\Adbon\\AdPhoneSet\\CallSet\\HeadPhones"),0,0,&hkey))
{//Set Module Sound Volumn
DWORD value = 0;
DWORD dwSize = sizeof(DWORD) ;
LONG m_hkey ;
m_hkey = RegQueryValueEx(hkey,_T("PhoneVolume"), NULL, 0, (LPBYTE)&value, &dwSize);
if(m_hkey == ERROR_SUCCESS)
{
CLVLCommand(value) ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
}
}
RegCloseKey(hkey) ;
PullUpRTD() ;
//打开扬声器
// (*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_E].DR))) |= 0x0010;
// Sleep(20) ;
CIMICommand() ;
WaitForSingleObject(m_hInitEvent,INFINITE) ;
DWORD DWvalue,DWsize = sizeof(DWORD) ;
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_USERS,TEXT("\\Adbon\\AdPhoneSet\\Scene\\Current"),0,0,&hkey))
{
if(ERROR_SUCCESS == RegQueryValueEx(hkey, TEXT("SceneModal"),NULL,0, (LPBYTE)&DWvalue,&DWsize))
{
if( DWvalue == 4 )
{//飞机模式时,关闭模块
int i = 0 ;
while(++i < 1000) ;
PowerDownModule() ;
return ;
}
}
}
}
void AnalyseAtCommand()
{
CString temp = ComData_List.GetTail().var.var_str3 ;
switch(ComData_List.GetTail().m_CommandId)
{
case ATID_AT:
mobile1.AtCommand() ;
break ;
case ATID_ATD:
mobile1.Call(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_ATDL:
mobile1.ReCall() ;
break ;
case ATID_ATA:
mobile1.Answer() ;
break ;
case ATID_ATH:
mobile1.HandUp() ;
break ;
case ATID_ATE:
mobile1.ATECommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_ATS0:
mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_ATS7:
mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_ATX:
mobile1.ATXCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_ATF:
mobile1.ATFCommand() ;
break ;
case ATID_ATW:
mobile1.ATWCommand() ;
break ;
case ATID_GSN:
mobile1.GSNCommand() ;
break ;
case ATID_IPR:
mobile1.IPRCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CACM:
mobile1.CACMCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
break ;
case ATID_CCFC_1://Query call forwarding
mobile1.CCFCCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CCFC_2://Set call forwarding
mobile1.CCFCCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CCFC_3://Clear Call Forwarding
mobile1.CCFCCommand() ;
break ;
case ATID_ATL:
mobile1.ATLCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_ATM:
mobile1.ATMCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_ATS:
mobile1.ATSCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_ATT:
mobile1.ATTCommand() ;
break ;
case ATID_ATV:
mobile1.ATVCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CMGD:
mobile1.CMGDCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CMGF:
mobile1.CMGFCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CMGL:
mobile1.CMGLCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CMGR:
mobile1.CMGRCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CMGS:
mobile1.CMGSCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2,ComData_List.GetTail().var.var_str3) ;
break ;
case ATID_CSCA_1:
mobile1.CSCAGetCommand() ;
break ;
case ATID_CSCA_2:
mobile1.CSCASetCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CNMI:
mobile1.CNMICommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2,ComData_List.GetTail().var.var_int3,ComData_List.GetTail().var.var_int4,ComData_List.GetTail().var.var_int5) ;
break ;
case ATID_CPBF:
mobile1.CPBFCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CPBR:
mobile1.CPBRCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CPBS_1:
mobile1.CPBSCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CPBS_2:
mobile1.CPBSCommand() ;
break ;
case ATID_CPBW:
mobile1.CPBWCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
break ;
case ATID_CSCS:
mobile1.CSCSCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CHLD:
mobile1.CHLDCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CLCC:
mobile1.CLCCCommand() ;
break ;
case ATID_CLCK:
mobile1.CLCKCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str2,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_CLIP:
mobile1.CLIPCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_COLP:
mobile1.COLPCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_COPS:
mobile1.COPSCommand();
break ;
case ATID_CPAS:
mobile1.CPASCommand() ;
break ;
case ATID_CPIN_1:
mobile1.CPINGetCommand() ;
break ;
case ATID_CPIN_2:
mobile1.CPINSetCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
break ;
case ATID_CPWD:
if(temp.Compare(L"") == 0)
{
mobile1.CPWDCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2) ;
}
else
{
mobile1.CPWDCommand(ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_str2,temp) ;
}
break ;
case ATID_CRC:
mobile1.CRCCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CSQ:
mobile1.CSQCommand() ;
break ;
case ATID_CFUN_1:
mobile1.CFUNCommand() ;
break ;
case ATID_CFUN_2:
mobile1.CFUNCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CCLK_1:
mobile1.CCLKCommand() ;
break ;
case ATID_CCLK_2:
mobile1.CCLKCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CALM:
mobile1.CALMCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CRSL:
mobile1.CRSLCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CLVL:
mobile1.CLVLCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CCWE:
mobile1.CCWECommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CBC:
mobile1.CBCCommand() ;
break ;
case ATID_CSSN:
mobile1.CSSNCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_CPOWD:
mobile1.CPOWDCommand() ;
break ;
case ATID_CMIC:
mobile1.CMICCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_int2) ;
break ;
case ATID_ALARM:
mobile1.AlarmCommand(ComData_List.GetTail().var.var_int1,ComData_List.GetTail().var.var_str1,ComData_List.GetTail().var.var_int2,ComData_List.GetTail().var.var_int3) ;
break ;
case ATID_EXTHS:
mobile1.CEXTHSCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_EXTBUT:
mobile1.CEXTBUTCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_SMINS:
mobile1.CSMINSCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CHFA:
mobile1.CHFACommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CSCLK:
mobile1.CSCLKCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_CSDT:
mobile1.CSDTCommand(ComData_List.GetTail().var.var_int1) ;
break ;
case ATID_VTS:
mobile1.VTSCommand(ComData_List.GetTail().var.var_str1) ;
break ;
case ATID_CIMI:
mobile1.CIMICommand() ;
break ;
case ATID_CPMS:
mobile1.CPMSCommand() ;
break ;
default:
break ;
}
ComData_List.RemoveTail() ;
}
void CMobileModule::PowerDownModule()
{
//if(m_ModuleStatus)
//{
//Sleep(20);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
//Sleep(50);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
//Sleep(2500);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
//Sleep(50);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
//VirtualFree(&pGPIO,0,MEM_RELEASE);
//m_ModuleStatus = FALSE ;
//}
}
void CMobileModule::PowerUpModule()
{
//if(!m_ModuleStatus)
//{/
//Sleep(20);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
//Sleep(50);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
//Sleep(2500);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000;
// Sleep(50);
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000;
//m_ModuleStatus = TRUE ;
//}
}
void CMobileModule::PullUpRTD()
{//Pull Up RTD for module sleep automatically
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DDIR))) |= 0x40000000;
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].OCR2))) |= 0x30000000;
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) |= 0x40000000 ;
//Sleep(50) ;
}
void CMobileModule::PullDownRTD()
{//Pull Down RTD in case module go to sleep auto
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DDIR))) |= 0x40000000;
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].OCR2))) |= 0x30000000;
//(*(volatile unsigned long * const)(&(pGPIO->PORT[GPIO_PORT_C].DR))) &= ~0x40000000;
//Sleep(50) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//****************************************************************************************
////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI WriteSerialThread(LPVOID lp)
{
INT cGoHead ;
while(true)
{
cGoHead = WaitForSingleObject(m_hWriteSerialEvent,INFINITE) ;
if(cGoHead == WAIT_OBJECT_0)
{
writethreadmutex = true ;
while(ComData_List.GetCount()>0)
{
//call write port function
AnalyseAtCommand();
WaitForSingleObject(m_hWriteEndEvent,INFINITE) ;
}
writethreadmutex = false ;
}
}
return 1 ;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?