File "Settings.cpp"
Full Path: /home/analogde/www/PIC18F452/Settings.cpp
File size: 15.62 KB
MIME-type: text/x-c
Charset: utf-8
/**********************************************************************/
/* */
/* File name: Settings.cpp */
/* */
/* Since: 2002/12/03 */
/* */
/* Version: 1.02 */
/* */
/* Author: MONTAGNE Xavier [XM] {link xavier.montagne@wanadoo.fr} */
/* */
/* Purpose: Manage the Settings Window to program easily the */
/* the configuration of the programmer. */
/* */
/* Distribution: This file is part of PP18. */
/* PP18 is free software; you can redistribute it */
/* and/or modify it under the terms of the GNU General */
/* Public License as published by the Free Software */
/* Foundation; either version 2, or (at your option) */
/* any later version. */
/* */
/* PP18 is distributed in the hope that it will be */
/* useful, but WITHOUT ANY WARRANTY; without even the */
/* implied warranty of MERCHANTABILITY or FITNESS FOR A */
/* PARTICULAR PURPOSE. See the GNU General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU General */
/* Public License along with PP18; see the file */
/* COPYING.txt. If not, write to the Free Software */
/* Foundation, 59 Temple Place - Suite 330, */
/* Boston, MA 02111-1307, USA. */
/* */
/* History: */
/* 2002/12/03 [XM] Create this file */
/* 2003/06/26 [XM] AdvancedWindow is no more called as modal. */
/* */
/**********************************************************************/
/***********************************************************************
* INCLUDES
**********************************************************************/
#include <vcl.h>
#include <vcl\Registry.hpp>
#include "Com.h"
#include "Advanced.h"
#include "Settings.h"
#pragma hdrstop
/***********************************************************************
* Function prototypes.
**********************************************************************/
void AnalyseDataFromPIC(void);
extern "C" void SettingsWindow_Show(void);
/***********************************************************************
* Global variables.
**********************************************************************/
extern TAdvancedWindow *AdvancedWindow;
extern TRegistry *regKey;
static unsigned char CLOCK_status;
static unsigned char DataToPIC_status;
static unsigned char DataFromPIC_status;
static unsigned char VPP_status;
static unsigned char VCC_status;
#pragma package(smart_init)
#pragma resource "*.dfm"
TSettingsWindow *SettingsWindow;
/***********************************************************************
* Window constructor.
*
* @param TComponent* Owner IN Parent object reference
* @return none
**********************************************************************/
__fastcall TSettingsWindow::TSettingsWindow(TComponent* Owner)
: TForm(Owner)
{
}
/***********************************************************************
* Quit the window and save the settings into register base (sould be).
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::ButtonOKClick(TObject *Sender)
{
unsigned char ucMask, ucStatus;
regKey->OpenKey("\\Software\\PP18\\DLL\\Settings", false);
ReadSettings(PL_CLOCK, &ucMask, &ucStatus);
regKey->WriteInteger("CLOCK_INV", ucStatus);
ReadSettings(PL_VCC, &ucMask, &ucStatus);
regKey->WriteInteger("VCC_INV", ucStatus);
ReadSettings(PL_VPP, &ucMask, &ucStatus);
regKey->WriteInteger("VPP_INV", ucStatus);
ReadSettings(PL_DATA_FROM_PIC, &ucMask, &ucStatus);
regKey->WriteInteger("DATA_FROM_PIC_INV", ucStatus);
ReadSettings(PL_DATA_TO_PIC, &ucMask, &ucStatus);
regKey->WriteInteger("DATA_TO_PIC_INV", ucStatus);
SettingsWindow->Close();
}
/***********************************************************************
* Quit the window and restore the previous settings.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::ButtonCancelClick(TObject *Sender)
{
if (CLOCK_status == INVERTED)
RB_CLOCK_InvClick(Sender);
else
RB_CLOCK_NInvClick(Sender);
if (DataToPIC_status == INVERTED)
RB_DataToPIC_InvClick(Sender);
else
RB_DataToPIC_NInvClick(Sender);
if (DataFromPIC_status == INVERTED)
RB_DataFromPIC_InvClick(Sender);
else
RB_DataFromPIC_NInvClick(Sender);
if (VPP_status == INVERTED)
RB_VPP_InvClick(Sender);
else
RB_VPP_NInvClick(Sender);
if (VCC_status == INVERTED)
RB_VCC_InvClick(Sender);
else
RB_VCC_NInvClick(Sender);
Settings(PL_CLOCK, 0, CLOCK_status);
Settings(PL_DATA_TO_PIC, 0, DataToPIC_status);
Settings(PL_DATA_FROM_PIC, 0, DataFromPIC_status);
Settings(PL_VPP, 0, VPP_status);
Settings(PL_VCC, 0, VCC_status);
SettingsWindow->Close();
}
/***********************************************************************
* Set the CLOCK signal at logical 1 or 0.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::SB_CLOCKClick(TObject *Sender)
{
if (SB_CLOCK->Down == true)
{
TestIO_ON(PL_CLOCK);
SB_CLOCK->Caption = "ON ";
AnalyseDataFromPIC();
TestIO_ON(PL_CLOCK);
}
else
{
TestIO_OFF(PL_CLOCK);
SB_CLOCK->Caption = "OFF";
AnalyseDataFromPIC();
TestIO_OFF(PL_CLOCK);
}
}
/***********************************************************************
* Set the DataToPIC signal at logical 1 or 0.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::SB_DataToPICClick(TObject *Sender)
{
if (SB_DataToPIC->Down == true)
{
TestIO_ON(PL_DATA_TO_PIC);
SB_DataToPIC->Caption = "ON ";
}
else
{
TestIO_OFF(PL_DATA_TO_PIC);
SB_DataToPIC->Caption = "OFF";
}
AnalyseDataFromPIC();
}
/***********************************************************************
* Set the VPP signal at logical 1 or 0.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::SB_VPPClick(TObject *Sender)
{
if (SB_VPP->Down == true)
{
TestIO_ON(PL_VPP);
SB_VPP->Caption = "ON ";
}
else
{
TestIO_OFF(PL_VPP);
SB_VPP->Caption = "OFF";
}
AnalyseDataFromPIC();
}
/***********************************************************************
* Set the VCC signal at logical 1 or 0.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::SB_VCCClick(TObject *Sender)
{
if (SB_VCC->Down == true)
{
TestIO_ON(PL_VCC);
SB_VCC->Caption = "ON ";
}
else
{
TestIO_OFF(PL_VCC);
SB_VCC->Caption = "OFF";
}
AnalyseDataFromPIC();
}
/***********************************************************************
* Invert the CLOCK signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_CLOCK_InvClick(TObject *Sender)
{
RB_CLOCK_Inv->Checked = true;
RB_CLOCK_NInv->Checked = false;
Settings(PL_CLOCK, 0, INVERTED);
SB_CLOCKClick(Sender);
}
/***********************************************************************
* Display the window and store the settings into local variables.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::FormShow(TObject *Sender)
{
unsigned char ucMask, ucStatus;
TestIO_OFF(PL_CLOCK);
TestIO_OFF(PL_DATA_TO_PIC);
TestIO_OFF(PL_VPP);
TestIO_OFF(PL_VCC);
ReadSettings(PL_CLOCK, &ucMask, &ucStatus);
if (ucStatus == INVERTED)
{
RB_CLOCK_InvClick(Sender);
CLOCK_status = INVERTED;
}
else
{
RB_CLOCK_NInvClick(Sender);
CLOCK_status = NON_INVERTED;
}
ReadSettings(PL_DATA_TO_PIC, &ucMask, &ucStatus);
if (ucStatus == INVERTED)
{
RB_DataToPIC_InvClick(Sender);
DataToPIC_status = INVERTED;
}
else
{
RB_DataToPIC_NInvClick(Sender);
DataToPIC_status = NON_INVERTED;
}
ReadSettings(PL_VPP, &ucMask, &ucStatus);
if (ucStatus == INVERTED)
{
RB_VPP_InvClick(Sender);
VPP_status = INVERTED;
}
else
{
RB_VPP_NInvClick(Sender);
VPP_status = NON_INVERTED;
}
ReadSettings(PL_VCC, &ucMask, &ucStatus);
if (ucStatus == INVERTED)
{
RB_VCC_InvClick(Sender);
VCC_status = INVERTED;
}
else
{
RB_VCC_NInvClick(Sender);
VCC_status = NON_INVERTED;
}
ReadSettings(PL_DATA_FROM_PIC, &ucMask, &ucStatus);
if (ucStatus == INVERTED)
{
RB_DataFromPIC_InvClick(Sender);
DataFromPIC_status = INVERTED;
}
else
{
RB_DataFromPIC_NInvClick(Sender);
DataFromPIC_status = NON_INVERTED;
}
AnalyseDataFromPIC();
}
/***********************************************************************
* Non invert the VPP signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_VPP_NInvClick(TObject *Sender)
{
RB_VPP_NInv->Checked = true;
RB_VPP_Inv->Checked = false;
Settings(PL_VPP, 0, NON_INVERTED);
SB_VPPClick(Sender);
}
/***********************************************************************
* Non invert the CLOCK signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_CLOCK_NInvClick(TObject *Sender)
{
RB_CLOCK_NInv->Checked = true;
RB_CLOCK_Inv->Checked = false;
Settings(PL_CLOCK, 0, NON_INVERTED);
SB_CLOCKClick(Sender);
}
/***********************************************************************
* Invert the DataToPIC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_DataToPIC_InvClick(TObject *Sender)
{
RB_DataToPIC_Inv->Checked = true;
RB_DataToPIC_NInv->Checked = false;
Settings(PL_DATA_TO_PIC, 0, INVERTED);
SB_DataToPICClick(Sender);
}
/***********************************************************************
* Non invert the DataToPIC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_DataToPIC_NInvClick(TObject *Sender)
{
RB_DataToPIC_NInv->Checked = true;
RB_DataToPIC_Inv->Checked = false;
Settings(PL_DATA_TO_PIC, 0, NON_INVERTED);
SB_DataToPICClick(Sender);
}
/***********************************************************************
* Invert the DataFromPIC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_DataFromPIC_InvClick(TObject *Sender)
{
RB_DataFromPIC_Inv->Checked = true;
RB_DataFromPIC_NInv->Checked = false;
Settings(PL_DATA_FROM_PIC, 0, INVERTED);
AnalyseDataFromPIC();
}
/***********************************************************************
* Non invert the DataFromPIC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_DataFromPIC_NInvClick(TObject *Sender)
{
RB_DataFromPIC_NInv->Checked = true;
RB_DataFromPIC_Inv->Checked = false;
Settings(PL_DATA_FROM_PIC, 0, NON_INVERTED);
AnalyseDataFromPIC();
}
/***********************************************************************
* Invert the VPP signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_VPP_InvClick(TObject *Sender)
{
RB_VPP_Inv->Checked = true;
RB_VPP_NInv->Checked = false;
Settings(PL_VPP, 0, INVERTED);
SB_VPPClick(Sender);
}
/***********************************************************************
* Invert the VCC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_VCC_InvClick(TObject *Sender)
{
RB_VCC_Inv->Checked = true;
RB_VCC_NInv->Checked = false;
Settings(PL_VCC, 0, INVERTED);
SB_VCCClick(Sender);
}
/***********************************************************************
* Non invert the VCC signal.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::RB_VCC_NInvClick(TObject *Sender)
{
RB_VCC_NInv->Checked = true;
RB_VCC_Inv->Checked = false;
Settings(PL_VCC, 0, NON_INVERTED);
SB_VCCClick(Sender);
}
/***********************************************************************
* Read the DataFromPIC signal.
*
* @param void
* @return none
**********************************************************************/
void AnalyseDataFromPIC(void)
{
unsigned char ucReadValue;
ReadDataFromPic(&ucReadValue);
if (ucReadValue)
SettingsWindow->Im_DataFromPIC_ON->Visible = true;
else
SettingsWindow->Im_DataFromPIC_ON->Visible = false;
}
/***********************************************************************
* Display the advanced settings window.
*
* @param TObject *Sender IN Caller object reference
* @return none
**********************************************************************/
void __fastcall TSettingsWindow::ButtonAdvClick(TObject *Sender)
{
if (AdvancedWindow == NULL)
AdvancedWindow = new TAdvancedWindow(Application);
SettingsWindow->Enabled = false;
AdvancedWindow->Show();
}
/***********************************************************************
* Build one instance of the TASettingsWindow object.
* Show the window into modal mode (the window captures the focus).
*
* @param void
* @return void
**********************************************************************/
void SettingsWindow_Show(void)
{
if (SettingsWindow == NULL)
SettingsWindow = new TSettingsWindow(Application);
SettingsWindow->ShowModal();
}