home *** CD-ROM | disk | FTP | other *** search
- //---------------------------------------------------------------------------
- // C++ Hardware Key Programmer 1.0
- // Copyright 2004 spuntosoft@tiscali.it
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
-
- #include "SpuntoHardwareKeyProgrammerUnit.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "SpuntoLedComponent"
- #pragma link "TSpuntoHardwarePortIO_unit"
- #pragma link "CSPIN"
- #pragma resource "*.dfm"
- unsigned short datain, dataout, bitin, bitout, Contabit, CombaseAddress, MCRAddress, LCRAddress, MSRAddress;
- bool WaveFormHigh;
- int DefaultDelay;
-
- TSpuntoHardwareKeyProgrammerForm *SpuntoHardwareKeyProgrammerForm;
-
- //---------------------------------------------------------------------------
-
- void TSpuntoHardwareKeyProgrammerForm::HardwareDeviceSerialON(unsigned short HardwareDeviceComPort)
- {
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+1,0x00); //INT OFF
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+3,0x80); //DLAB ON
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+0,0x80); //300 BPS LB
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+1,0x01); //300 BPS HB
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+3,0x03); //8BITS NP 1STOP
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+2,0xC7); //FIFO REGISTER
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort+4,0x0B); //DTR,RTS OUT2 ON
- SpuntoHardwarePort->WritePort(HardwareDeviceComPort,0xFF); //SENDS FF TO COM PORT
- }
- //---------------------------------------------------------------------------
- byte TSpuntoHardwareKeyProgrammerForm::EEPROMCheck(void) //EEPROM Check
- {
-
- int KeyAddress;
- byte WrittenData, KeyData;
-
- KeyAddress=KeyAddressSpinEdit->Value;
- KeyData=KeyDataSpinEdit->Value;
-
- WrittenData=Read_data(KeyAddress); //Reads written data
-
- if (WrittenData==KeyData) //Verifies written data
- {
- KeyOKLabel->Caption="OK"; //Verification passed
- AckLabel->Caption="SUCCESSFUL";
- KeyOKLabel->Font->Color=clGreen;
- EEPROMStatusLabel->Caption="READY";
- }
- else
- {
- KeyOKLabel->Caption="FAULT"; //Verification not passed
- AckLabel->Caption="NOT SUCCESSFUL";
- KeyOKLabel->Font->Color=clRed;
- EEPROMStatusLabel->Caption="NOT PRESENT";
- }
-
- return(WrittenData);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::TheDelay(int DelayUnit) //Delay
- {
- int I;
- for(I=DelayUnit; I>=0; I--) {}
- }
-
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Low_SDA(void)
- { // Sets SDA LOW
- datain=SpuntoHardwarePort->ReadPort(MCRAddress);
- datain=(datain & 0xFE); // SDA=DTR bit to 0
- SpuntoHardwarePort->WritePort(MCRAddress,datain);
- TheDelay(DefaultDelay);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::High_SDA(void)
- { // Sets SDA High
- datain=SpuntoHardwarePort->ReadPort(MCRAddress);
- datain=(datain | 0x01); // SDA=DTR bit to 1
- SpuntoHardwarePort->WritePort(MCRAddress,datain);
- TheDelay(DefaultDelay);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Low_SCL(void)
- { // Sets SCL LOW
- datain=SpuntoHardwarePort->ReadPort(MCRAddress);
- datain=(datain & 0xFD); // SCL=RTS bit to 0
- SpuntoHardwarePort->WritePort(MCRAddress,datain);
- TheDelay(DefaultDelay);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::High_SCL(void)
- { // Sets SCL High
- datain=SpuntoHardwarePort->ReadPort(MCRAddress);
- datain=(datain | 0x02); // SCL=RTS bit to 1
- SpuntoHardwarePort->WritePort(MCRAddress,datain);
- TheDelay(DefaultDelay);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Start(void)
- {
- // Start condition: SDA Low SCL High
- High_SDA();
- High_SCL();
- Low_SDA();
- Low_SCL();
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Stop(void)
- {
- // Stop condition: SDA High SCL High
- Low_SDA();
- High_SCL();
- High_SDA();
- Low_SCL();
- Low_SDA();
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Output_byte(byte Out_byte)
- {
- //
- int I;
- for(I=7; I>=0; I--)
- {
- bitout=Out_byte >>I;
- if ((bitout & 0x01) == 0)
- {
- Low_SDA();
- }
- else
- {
- High_SDA();
- }
- High_SCL();
- Low_SCL();
- }
- }
- //---------------------------------------------------------------------------
- byte TSpuntoHardwareKeyProgrammerForm::Input_byte(void)
- {
- //
- byte Inp_byte=0x00;
- int I;
- High_SDA();
- for (I=0; I<8; I++)
- {
- High_SCL();
- TheDelay(1000);
- datain=SpuntoHardwarePort->ReadPort(MSRAddress);
- bitin=(datain & 0x10);
- bitin=bitin>>4;
- Inp_byte=(Inp_byte | bitin);
- if (I<7) {Inp_byte=Inp_byte << 1;}
- Low_SCL();
- }
-
- return(Inp_byte);
- }
-
- //---------------------------------------------------------------------------
- byte TSpuntoHardwareKeyProgrammerForm::Acknowledge(void)
- {
- //
- High_SDA();
- High_SCL();
- datain=SpuntoHardwarePort->ReadPort(MSRAddress);
- bitin=(datain & 0x10);
- bitin=bitin>>4;
- if (bitin==0)
- {
- bitout=0;
- AckLabel->Caption="SUCCESSFUL";
- EEPROMStatusLabel->Caption="READY";
- }
- else
- {
- bitout=1;
- AckLabel->Caption="NOT SUCCESSFUL";
- EEPROMStatusLabel->Caption="NOT PRESENT";
- }
- Low_SCL();
- return(bitout);
- }
- //---------------------------------------------------------------------------
- void TSpuntoHardwareKeyProgrammerForm::Write_data(int Address, byte Data)
- {
- //
- byte Control_Byte, Memory_Block;
-
- Memory_Block=Address >>8;
- Memory_Block=Memory_Block <<1;
- Control_Byte=0xa0; //1010 0000 Control Code 1010
- Control_Byte=(Control_Byte | Memory_Block); //Sets the control byte
- Start(); //Start bit
- Output_byte(Control_Byte); //Control Byte
- Acknowledge();
- Output_byte(Address&0xff); //Address Byte
- Acknowledge();
- Output_byte(Data); //Data Byte
- Acknowledge(); //Stop bit
- Stop();
- }
-
- //---------------------------------------------------------------------------
- byte TSpuntoHardwareKeyProgrammerForm::Read_data(int Address)
- {
- //
- byte Control_Byte, Memory_Block, DataValue;
- Memory_Block=Address >>8;
- Memory_Block=Memory_Block <<1;
- Control_Byte=0xa0; //1010 0000 Control Code 1010
- Control_Byte=(Control_Byte | Memory_Block); //Sets the control byte
- Start();
- Output_byte(Control_Byte);
- Acknowledge();
- Output_byte(Address&0xff);
- Acknowledge();
- Start();
- Control_Byte=(Control_Byte | 0x01); //Sets R-/W bit to 1 (Read)
- Output_byte(Control_Byte);
- Acknowledge();
- DataValue=Input_byte();
- Stop();
-
- return(DataValue);
- }
-
- //---------------------------------------------------------------------------
- __fastcall TSpuntoHardwareKeyProgrammerForm::TSpuntoHardwareKeyProgrammerForm(TComponent* Owner)
- : TForm(Owner)
- {
- }
-
-
- //---------------------------------------------------------------------------
- void __fastcall TSpuntoHardwareKeyProgrammerForm::PeriodTrackBarChange(TObject *Sender)
- { //PeriodTrackbar management
- DefaultDelay=(PeriodTrackBar->Position)*100;
- Label1->Caption = IntToStr(PeriodTrackBar->Position);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSpuntoHardwareKeyProgrammerForm::FormCreate(TObject *Sender)
- {
- // Sets the labels
- Label1->Caption = IntToStr(PeriodTrackBar->Position);
-
- // Default (COM1) Port setup
- CombaseAddress=0x03f8;
- MCRAddress=CombaseAddress+4;
- LCRAddress=CombaseAddress+3;
- MSRAddress=CombaseAddress+6;
-
- Contabit=0;
- DefaultDelay=(PeriodTrackBar->Position)*100;
-
- EEPROMCheck();
-
- }
- //---------------------------------------------------------------------------
- void __fastcall TSpuntoHardwareKeyProgrammerForm::PowerONSpeedButtonClick(TObject *Sender)
- { //Power ON
-
- }
- //---------------------------------------------------------------------------
- void __fastcall TSpuntoHardwareKeyProgrammerForm::COM1RadioButtonClick(TObject *Sender)
- {
- // COM1 Port setup
- CombaseAddress=0x03f8;
- MCRAddress=CombaseAddress+4;
- LCRAddress=CombaseAddress+3;
- MSRAddress=CombaseAddress+6;
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::COM2RadioButtonClick(TObject *Sender)
- {
- // COM2 Port setup
- CombaseAddress=0x02f8;
- MCRAddress=CombaseAddress+4;
- LCRAddress=CombaseAddress+3;
- MSRAddress=CombaseAddress+6;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSpuntoHardwareKeyProgrammerForm::WriteEEPROMClick(
- TObject *Sender)
- {
- int ProgramAddress;
- byte ProgramData, WrittenData, IsEEPROMReady;
-
- ProgramAddress=CSpinEditAddress->Value;
- ProgramData=CSpinEditData->Value;
-
- Write_data(ProgramAddress, ProgramData); //Writes the EEPROM
- WrittenData=Read_data(ProgramAddress); //Reads written data
-
- if ((WrittenData==ProgramData)& ( WrittenData!=0)) //Verifies written data
- {
- AckLabel->Caption="SUCCESSFUL";
- EEPROMStatusLabel->Caption="READY";
- }
- else
- {
- AckLabel->Caption="NOT SUCCESSFUL";
- EEPROMStatusLabel->Caption="NOT PRESENT";
- }
- }
- //---------------------------------------------------------------------------
-
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::SCL_LOW_ButtonClick(TObject *Sender)
- {
- Low_SCL();
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::SDA_LOW_ButtonClick(
- TObject *Sender)
- {
- Low_SDA();
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::SCL_HIGH_ButtonClick(
- TObject *Sender)
- {
- High_SCL();
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::SDA_HIGH_ButtonClick(
- TObject *Sender)
- {
- High_SDA();
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::HardwareKeyONButtonClick(
- TObject *Sender)
- {
- HardwareDeviceSerialON(CombaseAddress);
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::ReadEEPROMButtonClick(
- TObject *Sender)
- {
- int QueryAddress;
- Byte FirstByteRead,SecondByteRead;
-
- QueryAddress=CSpinEditAddress->Value;
- FirstByteRead=Read_data(QueryAddress); //Reads EEPROM twice
- SecondByteRead=Read_data(QueryAddress);
-
- if ((FirstByteRead==SecondByteRead)& ( SecondByteRead!=0)) //Verifies read data
- {
- AckLabel->Caption="SUCCESSFUL"; //Verification passed
- EEPROMStatusLabel->Caption="READY";
- CSpinEditData->Font->Color=clWindowText;
- }
- else
- {
- AckLabel->Caption="NOT SUCCESSFUL"; //Verification not passed
- EEPROMStatusLabel->Caption="NOT PRESENT";
- CSpinEditData->Font->Color=clRed;
- }
-
- CSpinEditData->Value=SecondByteRead;
- }
- //---------------------------------------------------------------------------
-
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::CheckEEPROMButtonClick(
- TObject *Sender)
- {
- EEPROMCheck();
- }
- //---------------------------------------------------------------------------
-
- void __fastcall TSpuntoHardwareKeyProgrammerForm::CSpinEditAddressChange(
- TObject *Sender)
- {
- int QueryAddress;
- Byte FirstByteRead,SecondByteRead;
-
- QueryAddress=CSpinEditAddress->Value;
- FirstByteRead=Read_data(QueryAddress); //Reads EEPROM twice
- SecondByteRead=Read_data(QueryAddress);
-
- if ((FirstByteRead==SecondByteRead)& ( SecondByteRead!=0)) //Verifies read data
- {
- AckLabel->Caption="SUCCESSFUL"; //Verification passed
- EEPROMStatusLabel->Caption="READY";
- CSpinEditData->Font->Color=clWindowText;
- }
- else
- {
- AckLabel->Caption="NOT SUCCESSFUL"; //Verification not passed
- EEPROMStatusLabel->Caption="NOT PRESENT";
- CSpinEditData->Font->Color=clRed;
- }
-
- CSpinEditData->Value=SecondByteRead;
- }
- //---------------------------------------------------------------------------
-
-
-