SOS!!!为什么收不到载波信号???
我在用MSCOM写一个控制内置MODEM发送数据的东东,拨号、接收已经OK,
但在发送时确出现了一个问题困扰,不知为什么对方自动应答后,GetCommEvent()收到了对方载波,但在调用GetCDHolding()时总是为假,不能向对方发送数据。
请串行通讯方面的大侠们,伸出高手,帮小弟一把,谢谢!!!
顺便问一下通过MSCOM能控制MODEM向对方电话发语音提示吗?怎么做!!!
初使化部分
-----------------
pMainDlg->m_com[m_LineNum].SetDTREnable(Setting.m_DTREnable );
pMainDlg->m_com[m_LineNum].SetRTSEnable(Setting.m_DTREnable );
pMainDlg->m_com[m_LineNum].SetInputMode(Setting.m_inputmode );
pMainDlg->m_com[m_LineNum].SetNullDiscard(Stting.m_NullDiscard );
pMainDlg->m_com[m_LineNum].SetHandshaking( m_Setting.m_handshaking );
settings.Format( "%s,%c,%c,%c", comspeed[m_Setting.m_speed],
paritys[m_Setting.m_paritychk],
databits[m_Setting.m_databit],
stopbits[m_Setting.m_stopbit] );
pMainDlg->m_com[m_LineNum].SetSettings( settings );
pMainDlg->m_com[m_LineNum].SetRThreshold( 1 );
pMainDlg->m_com[m_LineNum].SetSThreshold( 1 );
-------------------------------
//检测对方振铃
RecProc()
{
...
case 2: //RING
m_Lines[LineNum].SetLed( RedLED, AALED );
m_Lines[LineNum].SetLed( RedLED, HKLED );
m_Lines[LineNum].ShowLineMsg( "检测到振铃信号" );
m_Lines[LineNum].SetLineIO( IO_INCOMING );
m_Lines[LineNum].m_MonitorTimerID = SetTimer( 10 + LineNum,
20000,NULL );
break;
}
串行事件处理
--------------------------------------
switch ( m_com[LineNum].GetCommEvent() )
{
case comEvSend:
.....
case comEvReceive:
RecPorc();
.....//其中测对方振铃信号
case comEvCD: // Change in Carrier Detect line.
//载波
KillTimer( m_Lines[LineNum].m_MonitorTimerID );
if ( m_com[LineNum].GetCDHolding( ) )//??????????关键之处
{
m_Lines[LineNum].ShowLineMsg( "调制解调器握手结束" );
if ( m_Lines[LineNum].GetLineIO( ) == IO_INCOMING )
{
........
SendFileStart( LineNum );
}
} else
{
if ( m_com[LineNum].GetDSRHolding() )
{
m_Lines[LineNum].SetLed( BlueLED, CDLED );
m_Lines[LineNum].SetLed( BlueLED, AALED );
m_Lines[LineNum].SetLed( BlueLED, HKLED );
m_Lines[LineNum].SetLed( GrayLED, SDLED );
m_Lines[LineNum].SetLed( GrayLED, RDLED );
m_Lines[LineNum].ShowLineMsg( "线路复原(CD)" );
if ( m_Lines[LineNum].GetLineState( ) == LS_SENDDING )
m_Lines[LineNum].m_fo.Close( );
if ( m_Lines[LineNum].GetLineIO() == IO_OUTGOING )
m_Lines[LineNum].ResetOutgoing( );
else
{
m_Lines[LineNum].SetLineState( LS_IDLE );
}
} else
{
m_Lines[LineNum].Reset();
}
}
break;
........
}