⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terminal.cpp

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
void __fastcall TTermForm::HexModeButClick(TObject *Sender)
{
 commandmode = false;
 if (hexmode)
 {
  hexmode = false;
  StatusBar1->Panels->Items[4]->Text = "HexMode : Off";
  Comm->NullStriping = true;
  if (!modechanged)
  {
   position.row++;
   position.col = 0;
   modechanged = true;
  }
 }
 else
 {
  hexmode = true;
  StatusBar1->Panels->Items[4]->Text = "HexMode : On";
  Comm->NullStriping = false;
  if (!modechanged)
  {
   position.row++;
   position.col = 0;
   modechanged = true;
  }
  AddHex (" ", true);
 }
 RichEdit1->SetFocus();
 SetRowCol (position.row, 0);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::FormCreate(TObject *Sender)
{
 Comm->MakePortList (PortBox->Items);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ComboKeyBlock(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::ComboKeyBlock2(TObject *Sender, char &Key)
{
 Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnRxData (DWORD Count)
{
 char buf[1024];

 esccommand = ecNone;
 Comm->Read (buf, Count);
 if (forbidupdate) return;
 if (hexmode) AddHex (buf, false);
 else AddText (buf, false);
 if (textrecording) recordstream->Write (buf, strlen (buf));
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SetButtonClick(TObject *Sender)
{
 AnsiString temp;

 PortSet->Baudrate = Comm->BaudRate;
 PortSet->Databits = Comm->DataBits;
 PortSet->Parity = Comm->Parity;
 PortSet->Stopbits = Comm->StopBits;
 PortSet->Flow = Comm->FlowControl;
 PortSet->ShowWindow ();
 if (PortSet->ModalResult == mrOk)
 {
  Comm->BaudRate = PortSet->Baudrate;
  Comm->DataBits = PortSet->Databits;
  Comm->Parity = PortSet->Parity;
  Comm->StopBits = PortSet->Stopbits;
  Comm->FlowControl = PortSet->Flow;
  temp.printf ("%i %i%c", Comm->BaudRate, Comm->DataBits, Comm->Parity);
  switch (Comm->StopBits)
  {
   case 10: temp += "1";
            break;
   case 15: temp += "1.5";
            break;
   case 20: temp += "2";
  }
  StatusBar1->Panels->Items[0]->Text = temp;
  switch (Comm->FlowControl)
  {
   case fcNone: StatusBar1->Panels->Items[1]->Text = "No Flow Control";
                RTSLED->Enabled = true;
                DTRLED->Enabled = true;
                break;
   case fcXFlow: StatusBar1->Panels->Items[1]->Text = "XOn/XOff";
                 RTSLED->Enabled = true;
                 DTRLED->Enabled = true;
                 break;
   case fcRTSCTS: StatusBar1->Panels->Items[1]->Text = "RTS/CTS";
                  RTSLED->Enabled = false;
                  RTSLED->LEDOn = false;
                  DTRLED->Enabled = true;
                  break;
   case fcDTRDSR: StatusBar1->Panels->Items[1]->Text = "DTR/DSR";
                  RTSLED->Enabled = true;
                  DTRLED->Enabled = false;
                  DTRLED->LEDOn = false;
                  break;
  }
  RTSLED->LEDOn = false;
  DTRLED->LEDOn = false;
  TXBRKLED->LEDOn = false;
 }
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 Timer1->Enabled = false;
 Timer2->Enabled = false;
 if (Comm->PortIsOpen) Comm->Close ();
 ConButton->Enabled = true;
 DisconButton->Enabled = false;
 PortBox->Enabled = true;
 StatusBar1->Panels->Items[5]->Text = "Disconnected";
 if (textrecording) RecordText1Click (this);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnSignalChange (TObject *Sender)
{
 MODEMSTAT stat;

 stat = Comm->GetModemStatus ();
 if (stat.Contains (msCTS)) CTSLED->LEDOn = true;
 else CTSLED->LEDOn = false;
 if (stat.Contains (msDSR)) DSRLED->LEDOn = true;
 else DSRLED->LEDOn = false;
 if (stat.Contains (msRing)) RILED->LEDOn = true;
 else RILED->LEDOn = false;
 if (stat.Contains (msDCD)) DCDLED->LEDOn = true;
 else DCDLED->LEDOn = false;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::EchoButtonClick(TObject *Sender)
{
 if (localecho)
 {
  localecho = false;
  StatusBar1->Panels->Items[2]->Text = "Local Echo : Off";
 }
 else
 {
  localecho = true;
  StatusBar1->Panels->Items[2]->Text = "Local Echo : On";
 }
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::CRLFButtonClick(TObject *Sender)
{
 if (crlf)
 {
  crlf = false;
  StatusBar1->Panels->Items[3]->Text = "CR/LF : Off";
 }
 else
 {
  crlf = true;
  StatusBar1->Panels->Items[3]->Text = "CR/LF : On";
 }
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::Timer1Timer(TObject *Sender)
{
 OnSignalChange (this);
 if (esccommand == ecInitUpload && !escprocessed)
 {
  escprocessed = true;
  TransmitFile1Click (this);
 }
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::TXBRKLEDClick(TObject *Sender)
{
 if (Comm->PortIsOpen)
 {
  Comm->SetBreakState (TXBRKLED->LEDOn);
 }
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::DTRLEDClick(TObject *Sender)
{
 if (Comm->PortIsOpen && Comm->FlowControl != fcDTRDSR)
 {
  Comm->SetDTRState (DTRLED->LEDOn);
 }
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::RTSLEDClick(TObject *Sender)
{
 if (Comm->PortIsOpen && Comm->FlowControl != fcRTSCTS)
 {
  Comm->SetRTSState (RTSLED->LEDOn);
 }
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnBreak (TObject *Sender)
{
 Timer2->Enabled = true;
 BRKLED->LEDOn = true;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::Timer2Timer(TObject *Sender)
{
 Timer2->Enabled = false;
 BRKLED->LEDOn = false;
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SaveAsClick(TObject *Sender)
{
 int r;

 SaveDialog1->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
 SaveDialog1->FilterIndex = 1;
 SaveDialog1->DefaultExt = "txt";
 if (SaveDialog1->Execute ())
 {
  if (FileExists (SaveDialog1->FileName))
  {
   if (Application->MessageBox ("File already exists\nOverwrite ?", "Info",
                       MB_OKCANCEL | MB_ICONINFORMATION) != IDOK) return;
  }
  RichEdit1->Lines->SaveToFile (SaveDialog1->FileName);
 }
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::ClearButtonClick(TObject *Sender)
{
 ClearEditClick (this);       
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::ResetButtonClick(TObject *Sender)
{
 PgmDlg->ResetMCU ();        
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::TransmitFile1Click(TObject *Sender)
{
 char ch = 0x04;

 OpenDialog1->Filter = "All Files (*.*)|*.*";
 OpenDialog1->FilterIndex = 1;
 if (OpenDialog1->Execute ())
 {
  forbidupdate = true;
  TransDlg->TransmitFile (Comm, OpenDialog1->FileName);
  if (esccommand == ecInitUpload) Comm->Write (&ch, 1);
  forbidupdate = false;
 }
 else if (esccommand == ecInitUpload)
 {
  ch = 0x15;
  Comm->Write (&ch, 1);
 }
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::RecordText1Click(TObject *Sender)
{
 if (textrecording)
 {
  textrecording = false;
  RecordText1->Caption = "Record Text";
  if (recordstream != NULL)
  {
   delete recordstream;
   recordstream = 0;
  }
 }
 else
 {
  SaveDialog1->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
  SaveDialog1->FilterIndex = 1;
  SaveDialog1->DefaultExt = "txt";
  if (SaveDialog1->Execute ())
  {
   recordstream = new TFileStream (SaveDialog1->FileName, fmCreate);
   if (recordstream != NULL)
   {
    textrecording = true;
    RecordText1->Caption = "Stop Recording";
   }
  }
 }
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::OnError (DWORD Error)
{
 //if (Error & CE_BREAK) StatusBar1->Panels->Items[6]->Text = "Break detected";
 if (Error & CE_FRAME) StatusBar1->Panels->Items[6]->Text = "Framing Error";
 if (Error & CE_IOE) StatusBar1->Panels->Items[6]->Text = "I/O Error";
 if (Error & CE_MODE) StatusBar1->Panels->Items[6]->Text = "Unsupported Mode";
 if (Error & CE_OVERRUN) StatusBar1->Panels->Items[6]->Text = "Buffer Overrun";
 if (Error & CE_RXPARITY) StatusBar1->Panels->Items[6]->Text = "Parity Error";
 if (Error & CE_FRAME) StatusBar1->Panels->Items[6]->Text = "Tx Buffer Overflow";
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::RichKey(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 Key = 0;
}
//---------------------------------------------------------------------------

void __fastcall TTermForm::ToolButton10Click(TObject *Sender)
{
 mfrm->BringToFront ();
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::SaveSettings(TIniFile *prj)
{
 int t;
 AnsiString temp;

 temp = PortBox->Items->Strings[PortBox->ItemIndex];
 prj->WriteString ("Terminal", "Port", temp);
 prj->WriteInteger ("Terminal", "Baudrate", Comm->BaudRate);
 prj->WriteInteger ("Terminal", "Databits", Comm->DataBits);
 t = (int)Comm->Parity;
 prj->WriteInteger ("Terminal", "Parity", t);
 prj->WriteInteger ("Terminal", "Stopbits", Comm->StopBits);
 prj->WriteInteger ("Terminal", "FlowControl", Comm->FlowControl);
 prj->WriteBool ("Terminal", "CRLF", crlf);
 prj->WriteBool ("Terminal", "Hexmode", hexmode);
 prj->WriteBool ("Terminal", "LocalEcho", localecho);
}
//---------------------------------------------------------------------------
void __fastcall TTermForm::LoadSettings(TIniFile *prj)
{
 int t;
 AnsiString temp;

 Comm->BaudRate = prj->ReadInteger ("Terminal", "Baudrate", 9600);
 Comm->DataBits = prj->ReadInteger ("Terminal", "Databits", 8);
 t = prj->ReadInteger ("Terminal", "Parity", (int)'N');
 Comm->Parity = (char)t;
 Comm->StopBits = prj->ReadInteger ("Terminal", "Stopbits", 10);
 Comm->FlowControl = (TFlowControl)prj->ReadInteger ("Terminal", "FlowControl", fcNone);
 temp = prj->ReadString ("Terminal", "Port", "COM1");
 for (t = 0;t < PortBox->Items->Count;t++)
 {
  if (PortBox->Items->Strings[t] == temp)
  {
   PortBox->ItemIndex = t;
   break;
  }
 }
 if (t == PortBox->Items->Count) PortBox->ItemIndex = 0;
 crlf = prj->ReadBool ("Terminal", "CRLF", true);
 if (crlf) StatusBar1->Panels->Items[3]->Text = "CR/LF : On";
 else StatusBar1->Panels->Items[3]->Text = "CR/LF : Off";
 hexmode = prj->ReadBool ("Terminal", "Hexmode", false);
 if (hexmode) StatusBar1->Panels->Items[4]->Text = "HexMode : On";
 else StatusBar1->Panels->Items[4]->Text = "HexMode : Off";
 localecho = prj->ReadBool ("Terminal", "LocalEcho", false);
 if (localecho) StatusBar1->Panels->Items[2]->Text = "Local Echo : On";
 else StatusBar1->Panels->Items[2]->Text = "Local Echo : Off";
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -