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

📄 unit1.cpp

📁 Serial ports. Enumeration and FIFO controls.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                  );

                  //RegCloseKey(keyDevice);
                  if(result != ERROR_SUCCESS)return -1;

                  if(Name1[0] == 0x02)return 1;
                   else if(Name1[0] == 0x00)return 0;
                    else return -1;

          }
         else return -1;

        }

//---------------------------------------------------------------------------
DWORD SetFIFOSize(bool tBuf, int size)
{
char Name1[100];
char namePort[10];
DWORD cbData=100;

if(Form1->keyDevice == NULL)return -1;
DWORD result;

         if(Win32Platform == VER_PLATFORM_WIN32_NT)
          {
                if(tBuf)
                 {
                 if(size != 1 && size != 4 && size != 8 && size != 14)return -1;
                 }
                else
                 {
                 if(size < 1 || size > 16)return -1;
                 }

                char FIFOstr[10];
                if(tBuf)
                   strcpy(FIFOstr,"RxFIFO");
                else
                   strcpy(FIFOstr,"TxFIFO");

                  result=RegSetValueEx(
                  Form1->keyDevice,	// handle of key to set value for
                  FIFOstr,	// address of value to set
                  0,	// reserved
                  REG_DWORD,	// flag for value type
                  (unsigned char*)&size,	// address of value data
                  sizeof(size) 	// size of value data
                  );

                  if(result != ERROR_SUCCESS)return -1;
                   else return 0;
          }

         else
         if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
          {
                if(tBuf)
                 {
                 if(size != 1 && size != 4 && size != 8 && size != 14)return -1;
                 }
                else
                 {
                 if(size != 1 && size != 4 && size != 8 && size != 16)return -1;
                 }
                  DWORD td;
                  RegQueryValueEx(
                  Form1->keyDevice,	// handle of key to query
                  "settings",	// address of name of value to query
                  0,	// reserved
                  &td,	// address of buffer for value type
                  Name1,	// address of data buffer
                  &cbData 	// address of data buffer size
                  );

                  if(tBuf)
                   switch(size)
                    {
                     case 1:  Name1[3]=0x00;break;  //RX
                     case 4:  Name1[3]=0x40;break;
                     case 8:  Name1[3]=0x80;break;
                     case 14: Name1[3]=0xc0;break;
                    }
                  else
                   switch(size)
                    {
                     case 1:  Name1[1]=0x01;break;  //TX
                     case 4:  Name1[1]=0x06;break;
                     case 8:  Name1[1]=0x0b;break;
                     case 16: Name1[1]=0x10;break;
                    }

                  result=RegSetValueEx(
                  Form1->keyDevice,	// handle of key to set value for
                  "settings",	// address of value to set
                  0,	// reserved
                  td,	// flag for value type
                  Name1,	// address of value data
                  cbData 	// size of value data
                  );

                  if(result != 0)return -1;
                   else return 0;
          }
         else return -1;
        }

//---------------------------------------------------------------------------

DWORD GetFIFOSize(bool tBuf)   //true - Rx, false - Tx
        {
char Name1[100];
DWORD cbData=100;

if(Form1->keyDevice == NULL)return -1;

DWORD result;
DWORD sFIFO;
DWORD size=4;

         if(Win32Platform == VER_PLATFORM_WIN32_NT)
          {

                  char FIFOstr[10];
                   if(tBuf)
                   strcpy(FIFOstr,"RxFIFO");
                  else
                   strcpy(FIFOstr,"TxFIFO");

                  DWORD res=RegQueryValueEx(
                  Form1->keyDevice,	// handle of key to query
                  FIFOstr,	// address of name of value to query
                  NULL,	// reserved
                  NULL,	// address of buffer for value type 
                  (unsigned char*)&sFIFO,	// address of data buffer
                  &size 	// address of data buffer size
                  );

/*
                  //RegCloseKey(keyDevice);
*/
                  if(res != ERROR_SUCCESS)return -1;
                   else return sFIFO;
          }
         else
         if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
          {
                  DWORD td;
                  result=RegQueryValueEx(
                  Form1->keyDevice,	// handle of key to query
                  "settings",	// address of name of value to query
                  0,	// reserved
                  &td,	// address of buffer for value type
                  Name1,	// address of data buffer
                  &cbData 	// address of data buffer size
                  );

                  if(result != ERROR_SUCCESS)return -1;

                  if(tBuf)
                   switch((unsigned int)Name1[3])
                    {
                     case 0x00:  return 1;
                     case 0x40:  return 4;
                     case 0x80:  return 8;
                     case 0xc0:  return 14;
                     default: return -1;
                    }
                  else
                   switch((unsigned int)Name1[1])
                    {
                     case 0x01:  return 1;
                     case 0x06:  return 4;
                     case 0x0b:  return 8;
                     case 0x10:  return 16;
                     default: return -1;
                    }

          }
         else return -1;

        }
//---------------------------------------------------------------------------


__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();        
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(CheckBox1->Checked)EnableFIFO(true);
 else EnableFIFO(false);

int pos;

if(Win32Platform == VER_PLATFORM_WIN32_NT)
SetFIFOSize(false, TrackBar1->Position);
  else
  {
        switch(TrackBar1->Position)
        {
         case 0: pos=1;break;
         case 1: pos=4;break;
         case 2: pos=8;break;
         case 3: pos=16;break;
         default: return;
        }
        SetFIFOSize(false, pos);
   }


switch(TrackBar2->Position)
{
case 0: pos=1;break;
case 1: pos=4;break;
case 2: pos=8;break;
case 3: pos=14;break;
default: return;
}

SetFIFOSize(true, pos);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
keyDevice=0;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
if(keyDevice)
       {
        RegCloseKey(keyDevice);
        keyDevice=0;
       }
keyDevice=GetDeviceKey(Form1->ListBox1->Items->Strings[Form1->ListBox1->ItemIndex].c_str());
if(Form1->ListBox1->ItemIndex < 0)return;
TrackBar1->Enabled=false;
int pos=GetFIFOSize(false);

Label4->Caption=IntToStr(pos);
if(Win32Platform == VER_PLATFORM_WIN32_NT)
       {
        TrackBar1->Position=pos;
       }
  else
       {
        switch(pos)
        {
        case 1:pos=0; break;
        case 4:pos=1; break;
        case 8:pos=2; break;
        case 16:pos=3;break;
        }
        TrackBar1->Position=pos;
       }

pos=GetFIFOSize(true);
Label3->Caption=pos;
switch(pos)
{
case 1:pos=0; break;
case 4:pos=1; break;
case 8:pos=2; break;
case 14:pos=3;break;
}
TrackBar2->Position=pos;


TrackBar1->Enabled=true;


TrackBar2->Enabled=false;

TrackBar2->Enabled=true;

CheckBox1->Enabled=false;
int fe=IsFIFOEnable();
if(fe > 0)CheckBox1->Checked=true;
if(fe == 0)CheckBox1->Checked=false;
if(fe < 0)ShowMessage("Registry error");
CheckBox1->Enabled=true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Win32Platform == VER_PLATFORM_WIN32_NT)
               {
                TrackBar1->Max=16;
                TrackBar1->Min=1;
               }
         else
         if(Win32Platform == VER_PLATFORM_WIN32_WINDOWS)
               {
                TrackBar1->Max=3;
                TrackBar1->Min=0;
               }
      else
        {
         ShowMessage("OS version error");
        }
        
        HANDLE res;
        char buf[20];
        int i=0;
        BOOL g;
        res=BeginEnumeratePorts();
        while(TRUE)
         {
          if(!EnumeratePortsNext(res,buf))break;
          ListBox1->Items->Add(buf);
          i++;
         }
        EndEnumeratePorts(res);
        Button3->Enabled=false;
        Button1->Enabled=true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
if(keyDevice)
       {
        RegCloseKey(keyDevice);
        keyDevice=0;
       }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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