📄 mobliexdoc.cpp
字号:
re = ProcessResAddSMS(); break;
case CW_DEL_SMS:
re = ProcessResDelSMS(); break;
case CW_SEND_SMS_BODY:
re = ProcessResSendSMS(); break;
case CW_CPBS_QUERY:
re = ProcessResCPBSQuery(); break;
case CW_CPBS_SET:
re = ProcessResCPBSSet(); break;
case CW_CPBR_QUERY:
re = ProcessResCPBRQuery(); break;
case CW_CPBR_GET:
re = ProcessResCPBRGet(); break;
case CW_CPBW_SET:
re = ProcessResCPBWSet(); break;
case CW_CPBW_QUERY:
case CW_SEND_SMS_HEAD:
case CW_TEST_COMMAND:
case CW_TM:
default:
re = FALSE;
}
return re;
}
BOOL CMoblieXDoc::ProcessResSendSMS()
{
m_waitingProcessArray.RemoveAll();
if( IsLogRes2Wnd() )
{
if( m_atState == ATS_OK )
AddLog( "短信发送成功" );
else
AddLog( "短信发送失败" );
}
return TRUE;
}
BOOL CMoblieXDoc::ProcessResAddSMS()
{
m_waitingProcessArray.RemoveAll();
if( IsLogRes2Wnd() )
{
if( m_atState != ATS_OK )
{
AddLog( "短信添加失败" );
}
}
::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_GET, 0 );
return TRUE;
}
BOOL CMoblieXDoc::ProcessResDelSMS()
{
m_waitingProcessArray.RemoveAll();
if( IsLogRes2Wnd() )
{
if( m_atState != ATS_OK )
{
AddLog( "短信删除失败" );
::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_GET, 0 );
}
}
return TRUE;
}
BOOL CMoblieXDoc::ProcessResGetSMS()
{
BOOL re;
if( m_atState != ATS_OK )
{
re = FALSE;
}
else
{
int i, size = m_waitingProcessArray.GetSize();
m_receivedSMSHeadArray.RemoveAll();
m_receivedSMSOStrArray.RemoveAll();
for( i = 0; i < size; i++ )
{
if( m_waitingProcessArray[i].Find( "+CMGL:" ) == 0 && i+1 < size )
{
m_receivedSMSHeadArray.Add( m_waitingProcessArray[i] );
i++;
m_receivedSMSOStrArray.Add( m_waitingProcessArray[i] );
}
}
re = TRUE;
}
m_waitingProcessArray.RemoveAll();
//通知视图更新列表
::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_LIST_UPDATE, 0 );
if( IsLogRes2Wnd() )
{
if( m_atState == ATS_OK )
AddLog( "读取短信成功" );
else
AddLog( "错误: 无法读取短信" );
}
return re;
}
//处理由CW_CPBS_QUERY产生的数据
//+CPBS: ("FD","ME","MT","SM")
BOOL CMoblieXDoc::ProcessResCPBSQuery()
{
CStrFilter str;
CPhoneBook & pbME = GetPhoneBook(PBM_ME);
CPhoneBook & pbSM = GetPhoneBook(PBM_SM);
FindStrByHead( m_waitingProcessArray, "+CPBS:", str );
m_waitingProcessArray.RemoveAll();
if( m_atState == ATS_OK && !str.IsEmpty() )
{
CStringArray saBuf;
if( str.Separate( '(' ) )
{
str = str.m_reRight;
str.SeparateAll( ',', saBuf );
for( int i = 0; i < saBuf.GetSize(); i++ )
{
if( saBuf[i].Find( "ME" ) >= 0 )
pbME.m_itemIDMin = 0;
else if( saBuf[i].Find( "SM" ) >= 0 )
pbSM.m_itemIDMin = 0;
}
}
}
else
{//设置无电话本标识
pbME.m_itemIDMin = -1;
pbSM.m_itemIDMin = -1;
}
if( pbME.HavePB() )
{//取手机电话本容量
SendCommandStr( pbME.GetCommand(PBC_CPBS_SET), CW_CPBS_SET );
SendCommandStr( pbME.GetCommand(PBC_CPBR_QUERY), CW_CPBR_QUERY );//查询电话本容量
}
else
{
if( IsLogRes2Wnd() )
{
AddLog( "不支持话机电话本" );
}
}
if( pbSM.HavePB() )
{//取SIM卡电话本容量
SendCommandStr( pbSM.GetCommand(PBC_CPBS_SET), CW_CPBS_SET );
SendCommandStr( pbSM.GetCommand(PBC_CPBR_QUERY), CW_CPBR_QUERY );//查询电话本容量
}
else
{
if( IsLogRes2Wnd() )
{
AddLog( "不支持SIM卡电话本" );
}
}
return TRUE;
}
//处理由CW_CPBR_QUERY产生的数据
//+CPBR: (001-300),032,016
BOOL CMoblieXDoc::ProcessResCPBRQuery()
{
CStrFilter str;
int pbMin = -1, pbMax = -1;
FindStrByHead( m_waitingProcessArray, "+CPBR:", str );
m_waitingProcessArray.RemoveAll();
if( m_atState == ATS_OK && !str.IsEmpty() )
{
if( str.Separate( '(' ) )
{
str = str.m_reRight;
if( str.Separate( ',' ) )
{
str = str.m_reLeft;
if( str.Separate( '-' ) )
{
pbMin = atoi( str.m_reLeft );
pbMax = atoi( str.m_reRight );
}
}
}
}
GetPhoneBook(m_curWorkPBM).m_itemIDMin = pbMin;
GetPhoneBook(m_curWorkPBM).m_itemIDMax = pbMax;
if( IsLogRes2Wnd() )
{
CString str;
str.Format( "%s容量: %d-%d", GetPhoneBook(m_curWorkPBM).m_des, pbMin, pbMax );
AddLog( str );
}
return TRUE;
}
//处理由CW_CPBS_SET产生的数据
BOOL CMoblieXDoc::ProcessResCPBSSet()
{
m_curWorkPBM = PBM_NONE;
if( m_atState == ATS_OK )
{
if( m_curSendStr.Find( "=\"ME\"" ) > 0 )
{
m_curWorkPBM = PBM_ME;
}
else if( m_curSendStr.Find( "=\"SM\"" ) > 0 )
{
m_curWorkPBM = PBM_SM;
}
}
m_waitingProcessArray.RemoveAll();
return TRUE;
}
BOOL CMoblieXDoc::ProcessResCMGSQuery()
{
m_waitingProcessArray.RemoveAll();
if( IsLogRes2Wnd() )
{
if( m_atState != ATS_OK )
AddLog( "不支持短信发送" );
}
return TRUE;
}
//处理由CW_CPBR_GET产生的数据
BOOL CMoblieXDoc::ProcessResCPBRGet()
{
int i, size = m_waitingProcessArray.GetSize() - 1;//去掉OK行
CPhoneBook &pb = GetPhoneBook( m_curWorkPBM );
pb.RemoveAll();
for( i = 0; i < size; i++ )
{
m_waitingProcessArray[i].TrimLeft( "+CPBR:" );
m_waitingProcessArray[i].TrimLeft();
if( m_waitingProcessArray[i][0] <= '9' )
{//是数字
pb.AddItem( m_waitingProcessArray[i] );
}
}
m_waitingProcessArray.RemoveAll();
::PostMessage( m_hMainWnd, WM_COMMAND, ID_PB_UPDATE, 0 );
if( IsLogRes2Wnd() )
{
const char * str;
if( m_atState == ATS_OK )
str = "已成功读取";
else
str = "未能读取";
AddLog( str+pb.m_des );
}
return TRUE;
}
//处理由CW_CPBW_SET产生的数据
BOOL CMoblieXDoc::ProcessResCPBWSet()
{
m_waitingProcessArray.RemoveAll();
if( IsLogRes2Wnd() )
{
if( m_atState == ATS_OK )
AddLog( "写入电话本成功" );
else
AddLog( "写入电话本失败" );
}
return TRUE;
}
long CMoblieXDoc::GetReceivedSMSNum()
{
return m_receivedSMSHeadArray.GetSize();
}
BOOL CMoblieXDoc::GetReceivedSMS(long id, CString &callNo, CString &sendTime, CString &body)
{
if( id < 0 || id > m_receivedSMSHeadArray.GetUpperBound() )
{//ID非法
return FALSE;
}
CSMS sms;
sms.Decode( m_receivedSMSOStrArray[id] );
callNo = sms.m_callNo;
sms.GetFormatedSCST( sendTime );
body = sms.m_sms;
return TRUE;
}
BOOL CMoblieXDoc::DelSMS(long id)
{
CStrFilter buf;
if( id < 0 || id > m_receivedSMSHeadArray.GetUpperBound() )
{
return FALSE;
}
buf = m_receivedSMSHeadArray[id];
buf.Separate( ' ' );
if( buf.m_reRight.IsEmpty() )
{//没有分离到所需参数
return FALSE;
}
buf = buf.m_reRight;
buf.Separate( ',' );
if( buf.m_reLeft.IsEmpty() )
{//没有分离到所需参数
return FALSE;
}
int i = atoi( buf.m_reLeft );
if( i <= 0 )
{//没有分离到所需参数
return FALSE;
}
buf.Format( "AT+CMGD=%d\r", i );
SendCommandStr( buf, CW_DEL_SMS );//当前模式设为删除短信
m_receivedSMSHeadArray.RemoveAt( id );
m_receivedSMSOStrArray.RemoveAt( id );
return TRUE;
}
BOOL CMoblieXDoc::SendSMS(const char * sca, const char *callNo, const char *body)
{
CSMS sms;
CString oSMS;
CString sBuf;
sms.m_callNo = callNo;
sms.m_sms = body;
sms.m_sca = sca;
if( !sms.Encode( oSMS ) )
{
return FALSE;
}
sBuf.Format( "AT+CMGS=%d\r", sms.m_pduLen );
SendCommandStr( sBuf, CW_SEND_SMS_HEAD );//当前模式设为发短信头
sBuf = "正在向<";
sBuf += callNo;
sBuf += ">发送...";
SendCommandStr( oSMS + '\x01A', CW_SEND_SMS_BODY, sBuf );//当前模式设为发短信
return TRUE;
}
BOOL CMoblieXDoc::AddSMS(const char * sca, const char *callNo, const char *body)
{
CSMS sms;
CString oSMS;
CString sBuf;
sms.m_callNo = callNo;
sms.m_sms = body;
sms.m_sca = sca;
if( !sms.Encode( oSMS ) )
{
return FALSE;
}
sBuf.Format( "AT+CMGW=%d\r", sms.m_pduLen );
SendCommandStr( sBuf, CW_SEND_SMS_HEAD );//当前模式设为发短信头
SendCommandStr( oSMS + '\x01A', CW_ADD_SMS, "正在添加短信..." );//当前模式设为添加短信
return TRUE;
}
void CMoblieXDoc::OnLogReadToWnd()
{
m_logRead2Wnd = !m_logRead2Wnd;
}
void CMoblieXDoc::OnUpdateLogReadToWnd(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck( m_logRead2Wnd );
}
void CMoblieXDoc::OnLogResToWnd()
{
m_logRes2Wnd = !m_logRes2Wnd;
}
void CMoblieXDoc::OnUpdateLogResToWnd(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck( m_logRes2Wnd );
}
void CMoblieXDoc::OnLogWriteToWnd()
{
m_logWrite2Wnd = !m_logWrite2Wnd;
}
void CMoblieXDoc::OnUpdateLogWriteToWnd(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck( m_logWrite2Wnd );
}
void CMoblieXDoc::AddLog(CStringArray &strArray)
{
m_logArray.Append( strArray );
::PostMessage( m_hMainWnd, WM_COMMAND, ID_LOG_OUTPUT, 0 );
}
void CMoblieXDoc::AddLog(const char *str)
{
m_logArray.Add( str );
::PostMessage( m_hMainWnd, WM_COMMAND, ID_LOG_OUTPUT, 0 );
}
void CMoblieXDoc::OnCommReadOk()
{
if( !ProcessRecievedStr() )
{//未处理
return;
}
if( IsLogRead2Wnd() && m_readStrArray.GetSize() > 0 )
{//需要记录到终端窗口
AddLog( m_readStrArray );
}
m_readStrArray.RemoveAll();
}
void CMoblieXDoc::OnTest()
{
}
BOOL CMoblieXDoc::FindStrByHead(CStringArray &sa, const char *sHead, CString &reStr)
{
int i, size = sa.GetSize();
for( i = 0; i < size; i++ )
{
if( sa[i].Find( sHead ) == 0 )
{
reStr = sa[i];
return TRUE;
}
}
return FALSE;
}
CPhoneBook & CMoblieXDoc::GetPhoneBook(int pbmID)
{
switch( pbmID )
{
case PBM_ME:
return m_phoneBookME;
default:
break;
}
return m_phoneBookSM;
}
void CMoblieXDoc::UpdateDlgPBSData()
{
m_dlgPBSelect.m_pb.RemoveAll();
m_dlgPBSelect.m_pb.Append( m_phoneBookME );
m_dlgPBSelect.m_pb.Append( m_phoneBookSM );
m_dlgPBSelect.DoFilter();
}
void CMoblieXDoc::OnPbPathSet()
{
m_dlgPBPath.DoModal();
}
void CMoblieXDoc::OnCloseDocument()
{
OnCommClose();
CDocument::OnCloseDocument();
}
void CMoblieXDoc::OnSmsSaveAll()
{
CFileDialog dlgFile( FALSE, "txt", "sms.txt" );
CStdioFile outFile;
if( dlgFile.DoModal() != IDOK )
{
return;
}
if( !outFile.Open( dlgFile.GetPathName(), CFile::modeCreate | CFile::modeWrite ) )
{
AfxMessageBox( "无法打开文件" );
return;
}
long i, size;
CString sCallNo;
CString sSendTime;
CString sBody;
size = GetReceivedSMSNum();
for( i = 0; i < size; i++ )
{
if( GetReceivedSMS(i, sCallNo, sSendTime, sBody) )
{
outFile.WriteString( sCallNo + '\t' );
if( m_dlgPBSelect.m_pb.No2Name( sCallNo, sCallNo ) )
{
outFile.WriteString( sCallNo );
}
outFile.WriteString( '\t' + sSendTime + '\t' );
outFile.WriteString( sBody + '\n' );
}
}
outFile.Close();
}
void CMoblieXDoc::OnUpdateSmsSaveAll(CCmdUI* pCmdUI)
{
pCmdUI->Enable( GetReceivedSMSNum() > 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -