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

#include <vcl.h>
#pragma hdrstop
#include <Registry.hpp>
#include "FT_Radio.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//------------------------Переменные, не знаю тока все ли нужны :)-----------
TForm1 *Form1;
DWORD dwToRead = 256;
DWORD dwRead;
OVERLAPPED osWrite;
FT_HANDLE ftHandle;
FT_STATUS ftStatus;
DWORD numDevs;
DWORD devIndex = 0;
char Buffer[16];
char Buf[256]; // contains data to write to the device
DWORD dwToWrite = 128;
DWORD dwWritten;
char TxBuffer[128];
DWORD dwBytesToWrite;
DWORD dwBytesWritten;
unsigned int i,j,jk,k;
DWORD EventDWord = 0;
DWORD RxBytes = 0;
DWORD TxBytes = 0;
DWORD BytesReceived = 0;
char RxBuffer[135170];
UCHAR LatencyTimer = 4; //2
HANDLE hFileA;
DWORD dwBytesA;
short ByteDataChipA[135170];
char string[25];
UCHAR Maska=0xff;
UCHAR Mode=1;
int bb,cc,zz,FrSyn=115700000,St=50000,St1,kdc,Stepn=1;
int aa,dd,ps,B01;
//----------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//------------------Создание формы--------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
// Определяем число подключенных устройств
ftStatus = FT_ListDevices(&numDevs,NULL,FT_LIST_NUMBER_ONLY);
if (ftStatus == FT_OK)
{
// FT_ListDevices OK, number of devices connected is in numDevs
itoa(numDevs, string, 16); // Преобразование формата
Form1->Label3->Caption=IntToStr(numDevs);
}
else
{
// FT_ListDevices failed
Form1->Label3->Caption=IntToStr(numDevs);
}
//------------------Загрузка на последнюю станцию ------------------------------
B01=1;
ps=10;
Read_To_Reg();
}
//--------------------Закрытие формы--------------------------------------------
void __fastcall TForm1::OnClose(TObject *Sender, TCloseAction &Action)
//при выходе из программы
{
B01=0;
SynSet();
FT_Close(ftHandle);

}

//----------------------Отправка Бита "0"---------------------------------------

 void send_0_byte (void)
	{

dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=1;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=1;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=3;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=3;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);

        }
//---------------------Отправка Бита "1"----------------------------------------

 void send_1_byte (void)
	{
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=5;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=5;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=7;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=7;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);

}

//-----------------------Создание 24 бит слова----------------------------------

void __fastcall TForm1::SynSet()
{
aa=(FrSyn-10700000)/1000000;   //   Расчёт отображаемой частоты
kdc=FrSyn/St; //   Расчёт коэфицента деления синтезатора

AnsiString is,Hz,s,str,StrDac,DacBit;
dd=(FrSyn-10700000)/100000-(aa*10);
Form1->Label2->Caption="FM "+ IntToStr(aa)+"."+IntToStr(dd);

//----Перевод коэфицента деления в двоичный формат----
int a,a1,d,d1,ia;
a=kdc;
str="";
for (int ia=0; ia<14; ia++)
{
a1=a%2;
if (a1==1) {str+="1";}
else {str+="0";}
a=a/2;

}
DacBit=str+"00"+B01+"00"+"00011"; // Сборка полной битовой последовательности
Form1->Label1->Caption=DacBit;
Form1->Label4->Caption=FrSyn;
Send_Dt();
 }

 // ------------------Сама отправка (подпрограмма)------------------------------

 void __fastcall TForm1::Send_Dt()
{
ftStatus = FT_Open(0,&ftHandle);
if (ftStatus == FT_OK) {
        // FT_Open OK, use ftHandle to access device
}
else {
        // FT_Open failed
}
        // Установка Bit Bang
ftStatus=FT_SetBitMode(ftHandle,Maska,Mode);
if (ftStatus == FT_OK) {
        // BitBang OK
}
        // Сброс устройства в исходное состояние
FT_ResetDevice(ftHandle);
        // Очистка буфера передачи
FT_Purge(ftHandle,FT_PURGE_TX);
        // Создаём последовательность, данные в LM
char buf[25];
Label1->GetTextBuf(buf,25);
int  f;
        for (f = 0; f < 24; f++)
        if (buf[f]== '0')
        send_0_byte ();
        else
        send_1_byte ();
dwBytesToWrite=1;
for(i=0;i<dwBytesToWrite;i++)
{
TxBuffer[i]=16;
}
FT_Write(ftHandle,TxBuffer,dwBytesToWrite,&dwBytesWritten);
         // Закрываем устройство
FT_Close(ftHandle);
ps=10;
Write_To_Reg();
}
//---------------------Кнопочки управления--------------------------------------


void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
FrSyn=FrSyn-St*2;  // Пересчёт частоты на 100 КГц вниз
SynSet();         // Отправка 24 бит в LM7001
}
//------------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
FrSyn=FrSyn+St*2;  // Пересчёт частоты на 100 КГц вверх
SynSet();         // Отправка 24 бит в LM7001
}
//------------------------------------------------------------------------------

void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{
FrSyn=FrSyn-St*20;  // Пересчёт частоты на 1 MГц вниз
SynSet();         // Отправка 24 бит в LM7001
}
//------------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
FrSyn=FrSyn+St*20;  // Пересчёт частоты на 1 MГц вверх
SynSet();         // Отправка 24 бит в LM7001
}

//----------------------Запись в реестр-----------------------------------------
  void __fastcall TForm1::Write_To_Reg()
	{
    char buf[25];
Form1->Label4->GetTextBuf(buf,25);
TRegistry *Reg = new TRegistry;
 try
 {
  Reg->RootKey = HKEY_LOCAL_MACHINE;
  Reg->OpenKey("Software\\FT_Radio", true);
  Reg->WriteString(ps,buf);
  Reg->CloseKey();
 }
   __finally
 {
   delete Reg;
        }
 }
//----------------------Чтение из реестра---------------------------------------
  void __fastcall TForm1::Read_To_Reg()
	{
   TRegistry *Reg = new TRegistry;
 try
 {
  Reg->RootKey = HKEY_LOCAL_MACHINE;
  Reg->OpenKeyReadOnly("Software\\FT_Radio\\");
  AnsiString buff = Reg->ReadString(ps);
  Form1->Label4->Caption=buff;
  int FrSynReg=StrToInt(buff);
  FrSyn=FrSynReg;
  SynSet();
 }
   __finally
 {
   delete Reg;
 }
        }
//-----------------Кнопка памяти 01---------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
ps=01;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//------------------Кнопка памяти 02--------------------------------------------
void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{
ps=02;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//-------------------Кнопка памяти 03-------------------------------------------

void __fastcall TForm1::BitBtn7Click(TObject *Sender)
{
 ps=03;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//--------------------Кнопка памяти 04------------------------------------------

void __fastcall TForm1::BitBtn8Click(TObject *Sender)
{
ps=04;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//--------------------Кнопка памяти 05------------------------------------------

void __fastcall TForm1::BitBtn9Click(TObject *Sender)
{
 ps=05;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//----------------------Кнопка памяти 06----------------------------------------

void __fastcall TForm1::BitBtn10Click(TObject *Sender)
{
 ps=06;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//-----------------------Кнопка памяти 07---------------------------------------

void __fastcall TForm1::BitBtn11Click(TObject *Sender)
{
 ps=07;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//------------------------Кнопка памяти 08--------------------------------------

void __fastcall TForm1::BitBtn12Click(TObject *Sender)
{
 ps=00;
if(Form1->SpeedButton1->Down==true)
  {
  Write_To_Reg();
   Form1->SpeedButton1->Down==false;
  }
 else
    Read_To_Reg();
}
//------------------------------------------------------------------------------


void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
 if(Form1->SpeedButton2->Down==true)
  {
  B01=0;
  SynSet();
  }
 else
  B01=1;
  SynSet();
}


