📄 chapt12dlg.cpp
字号:
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnSelchangeBaudRate()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnEditchangeParity()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnSelchangeParity()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnEditupdateStopBits()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnSelchangeStopBits()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnEditupdateWordSize()
{
if ( m_pPort )
m_UpdateButton.EnableWindow( TRUE );
}
void CChapt12Dlg::OnSelchangeWordSize()
{
// TODO: Add your control notification handler code here
}
void CChapt12Dlg::OnRts()
{
if ( !m_pPort )
return;
int check_state = BST_INDETERMINATE;
switch ( m_pPort->Rts( SendDlgItemMessage( IDC_RTS, BM_GETCHECK, 0, 0 ) == BST_CHECKED ) ) {
case 0 : check_state = BST_UNCHECKED; break;
case 1 : check_state = BST_CHECKED; break;
}
SendDlgItemMessage( IDC_RTS, BM_SETCHECK, check_state, 0 );
}
void CChapt12Dlg::OnDtr()
{
if ( !m_pPort )
return;
int check_state = BST_INDETERMINATE;
switch ( m_pPort->Dtr( SendDlgItemMessage( IDC_DTR, BM_GETCHECK, 0, 0 ) == BST_CHECKED ) ) {
case 0 : check_state = BST_UNCHECKED; break;
case 1 : check_state = BST_CHECKED; break;
}
SendDlgItemMessage( IDC_DTR, BM_SETCHECK, check_state, 0 );
}
void CChapt12Dlg::OnDtrDsr()
{
if ( !m_pPort )
return;
bool val = SendDlgItemMessage( IDC_DTR_DSR, BM_GETCHECK, 0, 0 ) == BST_CHECKED;
m_pPort->DtrDsrHandshaking( val );
if ( val == 0 )
OnDtr();
}
void CChapt12Dlg::OnRtsCts()
{
if ( !m_pPort )
return;
bool val = SendDlgItemMessage( IDC_RTS_CTS, BM_GETCHECK, 0, 0 ) == BST_CHECKED;
m_pPort->RtsCtsHandshaking( val );
if ( val == 0 )
OnRts();
}
void CChapt12Dlg::OnXonXoff()
{
if ( !m_pPort )
return;
bool val = SendDlgItemMessage( IDC_XON_XOFF, BM_GETCHECK, 0, 0 ) == BST_CHECKED;
m_pPort->XonXoffHandshaking( val );
}
LRESULT CChapt12Dlg::OnRxNotify( WPARAM wParam, LPARAM lParam )
{
if ( m_eReading == SUPPRESS_READING || !m_pPort || m_hConsoleOutput == INVALID_HANDLE_VALUE )
return 0;
if ( m_eReading == READ_BYTES ) {
for ( ; ; ) {
int c = m_pPort->Read();
if ( c < 0 )
break;
char c1 = c;
DWORD written = 0;
WriteConsole( m_hConsoleOutput, &c1, 1, &written, 0 );
}
} else {
for ( ; ; ) {
char buffer[ 129 ];
int result = m_pPort->Read( buffer, 128 ) ;
if ( m_pPort->ByteCount == 0 )
break;
DWORD written = 0;
WriteConsole( m_hConsoleOutput, &buffer, m_pPort->ByteCount, &written, 0 );
}
}
return 1;
}
void CChapt12Dlg::OnReadChar()
{
int c = m_pPort->Read();
ostringstream s;
s << "\nRead <";
if ( c > 0 )
s << (char) c;
else
s << c;
s << ">\n";
DWORD written = 0;
WriteConsole( m_hConsoleOutput, s.str().c_str(), s.str().size(), &written, 0 );
}
void CChapt12Dlg::OnDumpStatus()
{
char buffer[ 82 ];
DWORD written = 0;
for ( int i = 0 ; i < m_pPort->DebugLineCount() ; i++ ) {
m_pPort->FormatDebugOutput( buffer, i );
strcat( buffer, "\n" );
WriteConsole( m_hConsoleOutput, buffer, strlen( buffer ), &written, 0 );
}
}
LRESULT CChapt12Dlg::OnParityErrorNotify( WPARAM, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
int result = m_pPort->ParityError( true );
if ( result )
SetDlgItemInt( IDC_PARITY_ERROR_COUNT, ++m_iParityErrorCount );
return 1;
}
LRESULT CChapt12Dlg::OnFramingErrorNotify( WPARAM, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
int result = m_pPort->FramingError( true );
if ( result )
SetDlgItemInt( IDC_FRAMING_ERROR_COUNT, ++m_iFramingErrorCount );
return 1;
}
LRESULT CChapt12Dlg::OnHardwareOverrunErrorNotify( WPARAM, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
int result = m_pPort->HardwareOverrunError( true );
if ( result )
SetDlgItemInt( IDC_HARDWARE_OVERRUN_ERROR_COUNT, ++m_iHardwareOverrunErrorCount );
return 1;
}
LRESULT CChapt12Dlg::OnSoftwareOverrunErrorNotify( WPARAM, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
int result = m_pPort->SoftwareOverrunError( true );
if ( result )
SetDlgItemInt( IDC_SOFTWARE_OVERRUN_ERROR_COUNT, ++m_iSoftwareOverrunErrorCount );
return 1;
}
LRESULT CChapt12Dlg::OnBreakDetectNotify( WPARAM, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
int result = m_pPort->BreakDetect( true );
if ( result )
SetDlgItemInt( IDC_BREAK_DETECT_COUNT, ++m_iBreakDetectCount );
return 1;
}
void CChapt12Dlg::OnErrorNotification()
{
m_bErrorNotification = SendDlgItemMessage( IDC_ERROR_NOTIFICATION, BM_GETCHECK, 0, 0 ) == BST_CHECKED;
if ( m_bErrorNotification ) {
OnParityErrorNotify( 0, 0 );
OnFramingErrorNotify( 0, 0 );
OnHardwareOverrunErrorNotify( 0, 0 );
OnSoftwareOverrunErrorNotify( 0, 0 );
OnBreakDetectNotify( 0, 0 );
}
}
void CChapt12Dlg::OnSendBreak()
{
int duration = GetDlgItemInt( IDC_BREAK_DURATION );
if ( duration == 0 )
duration = 250;
m_pPort->Break( duration );
}
LRESULT CChapt12Dlg::OnCtsNotify( WPARAM state, LPARAM )
{
if ( state )
SetDlgItemText( IDC_CTS, "ON" );
else
SetDlgItemText( IDC_CTS, "OFF" );
return 1;
}
LRESULT CChapt12Dlg::OnDsrNotify( WPARAM state, LPARAM )
{
if ( state )
SetDlgItemText( IDC_DSR, "ON" );
else
SetDlgItemText( IDC_DSR, "OFF" );
return 1;
}
LRESULT CChapt12Dlg::OnCdNotify( WPARAM state, LPARAM )
{
if ( state )
SetDlgItemText( IDC_CD, "ON" );
else
SetDlgItemText( IDC_CD, "OFF" );
return 1;
}
LRESULT CChapt12Dlg::OnRiNotify( WPARAM state, LPARAM )
{
if ( state == 0 )
SetDlgItemInt( IDC_RI, ++m_iRingCount );
return 1;
}
LRESULT CChapt12Dlg::OnTxNotify( WPARAM state, LPARAM )
{
if ( !m_bErrorNotification )
return 0;
SetDlgItemInt( IDC_TX_EMPTY_COUNT, ++m_iTxNotifyCount );
if ( m_bSpewing ) {
static int counter = 0;
char buf[ 128 ];
sprintf( buf,
"Packet %d: "
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n",
counter++ );
m_pPort->Write( buf );
}
return 1;
}
void CChapt12Dlg::OnSelchangeReadType()
{
int i = SendDlgItemMessage( IDC_READ_TYPE, CB_GETCURSEL, 0, 0 );
switch ( i ) {
case 0 : m_eReading = SUPPRESS_READING; break;
case 1 : m_eReading = READ_BYTES; break;
case 2 : m_eReading = READ_BUFFERS; break;
}
OnRxNotify( 0,0 );
}
void CChapt12Dlg::OnPeekBuffer()
{
char buffer[ 3001 ];
if ( m_pPort->Peek( buffer, 3000 ) == RS232_SUCCESS ) {
ostringstream s;
s << "\nPeek saw " << m_pPort->ByteCount << " bytes: <";
if ( m_pPort->ByteCount > 40 ) {
buffer[ 40 ] = '\0';
s << buffer << "...>\n";
} else {
s << buffer << ">\n";
}
DWORD written = 0;
WriteConsole( m_hConsoleOutput, s.str().c_str(), s.str().size(), &written, 0 );
}
}
void CChapt12Dlg::OnFlushRx()
{
m_pPort->FlushRXBuffer();
}
void CChapt12Dlg::OnFlushTx()
{
m_pPort->FlushTXBuffer();
}
void CChapt12Dlg::OnSpew()
{
if ( m_bSpewing ) {
m_bSpewing = false;
m_SpewButton.SetWindowText( "Start Spew" );
m_pPort->Write( "Stopping spew...\n" );
} else {
m_bSpewing = true;
m_SpewButton.SetWindowText( "Stop Spew" );
m_pPort->Write( "Starting to spew...\n" );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -