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

📄 admindlg.cpp

📁 s/w handheld terminal ( based on Cygnal 8051f230)
💻 CPP
字号:
// AdminDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RucniTerminal.h"
#include "AdminDlg.h"
#include "Konfig.h"
#include "Komunikator.h"
#include "DozvolePristupaDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAdminDlg dialog


CAdminDlg::CAdminDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAdminDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAdminDlg)
	m_SerijskiBrojTerminala     = 0;
	m_FlegPotrosnja             = FALSE;
	m_FlegVreme                 = FALSE;
	m_FlegTarifa                = FALSE;
	m_FlegTabela1               = FALSE;
	m_FlegMaxSS                 = FALSE;
	m_FlegPotrosnjaPrethMesec   = FALSE;
	m_FlegNapomena              = FALSE;
	m_Verzija = _T("");
	m_FlegMaxUI = FALSE;
	m_FlegStatus = FALSE;
	//}}AFX_DATA_INIT
}


void CAdminDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAdminDlg)
	DDX_Text(pDX, IDC_SERIJSKI_BROJ, m_SerijskiBrojTerminala);
	DDV_MinMaxInt(pDX, m_SerijskiBrojTerminala, 0, 99999999);
	DDX_Check(pDX, IDC_FLEG_POTROSNJA,          m_FlegPotrosnja);
	DDX_Check(pDX, IDC_FLEG_VREME,              m_FlegVreme);
	DDX_Check(pDX, IDC_FLEG_TARIFA,             m_FlegTarifa);
	DDX_Check(pDX, IDC_FLEG_TABELA_1,           m_FlegTabela1);
	DDX_Check(pDX, IDC_FLEG_MAX_SS,             m_FlegMaxSS);
	DDX_Check(pDX, IDC_FLEG_POTR_PRETH_MESEC,   m_FlegPotrosnjaPrethMesec);
	DDX_Check(pDX, IDC_FLEG_NAPOMENA,           m_FlegNapomena);
	DDX_Text(pDX, IDC_VERZIJA, m_Verzija);
	DDX_Check(pDX, IDC_FLEG_MAX_UI, m_FlegMaxUI);
	DDX_Check(pDX, IDC_FLEG_STATUS, m_FlegStatus);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAdminDlg, CDialog)
	//{{AFX_MSG_MAP(CAdminDlg)
	ON_BN_CLICKED(IDC_SNIMI_SERIJSKI, OnSnimiSerijski)
	ON_BN_CLICKED(IDC_PREUZMI_ADMIN_INFO, OnPreuzmiAdminInfo)
	ON_BN_CLICKED(IDC_SNIMI_FLEGOVE, OnSnimiFlegove)
	ON_BN_CLICKED(IDC_DOZVOLE_PRISTUPA, OnDozvolePristupa)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAdminDlg message handlers

BOOL CAdminDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

    // Preuzmi 'admin info' sa terminala
    KAdminInfo admInf;
    KKomunikator::Instance()->DajAdminInfoTerminala( admInf, false );

    // Inicijalizuj opis verzije rucnog terminala
    PostaviVerziju( admInf.nVerzija, admInf.nPodverzija, admInf.KapacitetEEPROMa() );

    // Inicijalizuj sadrzaj polja sa serijskim brojem
    m_SerijskiBrojTerminala = admInf.nSerijskiBrojTerminala;

    // Inicijalizuj flegove
    PostaviFlegPromenljive( admInf.nKontrolniFlegovi );

    // Osvezi polja forme ( usaglasi sa vrednostima odgovarajucih promenljivih )
    CAdminDlg::UpdateData( FALSE );

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CAdminDlg::OnSnimiSerijski() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    pRTApp->PrikaziPorukuIKursorZaCekanje( IDS_SNIMANJE_PODATAKA, this );

    // Najpre proveri da li je terminal spreman za narednu komandu
    int PorukaID;
    KAdminInfo admInf;
    if( pRTApp->TerminalSpreman( PorukaID, admInf ) ) {

        // Preuzmi podatke iz forme u odgovarajuce promenljive
        this->UpdateData();
    
        // Formiraj poruku sa serijskim brojem :
        string cSadrzajPoruke = KKorisno::Instance()->KonvertIntUBCD( m_SerijskiBrojTerminala, 4 ).cString;
    
        PorukaID = IDS_SNIMANJE_NEUSPELO;
        // Snimi serijski broj na terminal
        if ( KKomunikator::Instance()->SnimiNaTerminal( KT_POSTAVI_SERIJSKI_BROJ, cSadrzajPoruke ) ) {
            // Procitaj podatke ( proveri da li je dobro snimljeno )
            KAdminInfo admInf;
            if ( KKomunikator::Instance()->DajAdminInfoTerminala( admInf, true ) ) {
                if ( admInf.nSerijskiBrojTerminala == m_SerijskiBrojTerminala )
                    PorukaID = IDS_SNIMANJE_USPELO;
            }
        }
    }

    pRTApp->UkloniPorukuIKursorZaCekanje();

    pRTApp->MyMessageBox( PorukaID );
}

void CAdminDlg::OnPreuzmiAdminInfo() 
{
    bool bUspeo = false;
    
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();
    pRTApp->PrikaziPorukuIKursorZaCekanje( IDS_PREUZIMANJE_PODATAKA, this );

    // Preuzmi 'admin info' sa terminala
    KAdminInfo admInf;
    if ( KKomunikator::Instance()->DajAdminInfoTerminala( admInf, true ) ) {

        // Inicijalizuj opis verzije rucnog terminala
        PostaviVerziju( admInf.nVerzija, admInf.nPodverzija, admInf.KapacitetEEPROMa() );

        // Inicijalizuj sadrzaj polja sa serijskim brojem
        m_SerijskiBrojTerminala = admInf.nSerijskiBrojTerminala;

        // Inicijalizuj flegove
        PostaviFlegPromenljive( admInf.nKontrolniFlegovi );

        // Osvezi polja forme ( usaglasi sa vrednostima odgovarajucih promenljivih )
        CAdminDlg::UpdateData( FALSE );

        bUspeo = true;
    }

    pRTApp->UkloniPorukuIKursorZaCekanje();

    if ( bUspeo ){
        pRTApp->MyMessageBox( IDS_PREUZIMANJE_USPELO );
    }
    else
        pRTApp->MyMessageBox( IDS_PREUZIMANJE_NEUSPELO );
}

// Pomocna procedura : postavlja promenljive forme vezane za flegove ( checkboxove )
void CAdminDlg::PostaviFlegPromenljive( unsigned int nFlegovi ){
    // Inicijalizuj flegove
    if ( nFlegovi & KF_POTROSNJA )  m_FlegPotrosnja= TRUE;
    else m_FlegPotrosnja= FALSE;

    if ( nFlegovi & KF_VREME    )   m_FlegVreme    = TRUE;
    else m_FlegVreme    = FALSE;

    if ( nFlegovi & KF_TARIFA   )   m_FlegTarifa   = TRUE;
    else m_FlegTarifa   = FALSE;
                                    
    if ( nFlegovi & KF_TABELA_1 )   m_FlegTabela1  = TRUE;
    else m_FlegTabela1  = FALSE;
                                    
    if ( nFlegovi & KF_MAX_SS   )   m_FlegMaxSS    = TRUE;
    else m_FlegMaxSS    = FALSE;
                                    
    if ( nFlegovi & KF_POTR_PRETH_MESEC ) m_FlegPotrosnjaPrethMesec = TRUE;
    else m_FlegPotrosnjaPrethMesec = FALSE;

    if ( nFlegovi & KF_NAPOMENA )   m_FlegNapomena  = TRUE;
    else m_FlegNapomena = FALSE;

    if ( nFlegovi & KF_STATUS )     m_FlegStatus    = TRUE;
    else m_FlegStatus = FALSE;

    if ( nFlegovi & KF_MAX_UI )     m_FlegMaxUI     = TRUE;
    else m_FlegMaxUI = FALSE;
}

// Pomocna procedura : promenljive forme koje predstavljaju flegove konvertuje u jednu celobrojnu promenljivu
unsigned int CAdminDlg::SpojiFlegPromenljive( void ) {
    unsigned int nKontrolniFlegovi = 0;

    if ( m_FlegPotrosnja            )   nKontrolniFlegovi |= KF_POTROSNJA;
    if ( m_FlegVreme                )   nKontrolniFlegovi |= KF_VREME;
    if ( m_FlegTarifa               )   nKontrolniFlegovi |= KF_TARIFA;
    if ( m_FlegTabela1              )   nKontrolniFlegovi |= KF_TABELA_1;
    if ( m_FlegMaxSS                )   nKontrolniFlegovi |= KF_MAX_SS;
    if ( m_FlegPotrosnjaPrethMesec  )   nKontrolniFlegovi |= KF_POTR_PRETH_MESEC;
    if ( m_FlegNapomena             )   nKontrolniFlegovi |= KF_NAPOMENA;
    if ( m_FlegStatus               )   nKontrolniFlegovi |= KF_STATUS;
    if ( m_FlegMaxUI                )   nKontrolniFlegovi |= KF_MAX_UI;

    return nKontrolniFlegovi;
}

// Pomocna procedura : postavlja promenljive forme za prikaz verzije rucnog terminala
void CAdminDlg::PostaviVerziju( unsigned char nVerzija, unsigned char nPodverzija,
                                unsigned int nKapacitetEEPROMa ){
    string cPom;

    // Iscrtaj verziju firmwera rucnog terminala
    cPom =   "firmw: "
           + KKorisno::Instance()->KonvertIntUString( nVerzija, 1000, false )
           + "."
           + KKorisno::Instance()->KonvertIntUString( nPodverzija, 1000, false )
           + "    mem: "
           + KKorisno::Instance()->KonvertIntUString( nKapacitetEEPROMa, 1000, false )
           + " KB";
    m_Verzija = _T( cPom.data() );
}

void CAdminDlg::OnSnimiFlegove() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    pRTApp->PrikaziPorukuIKursorZaCekanje( IDS_SNIMANJE_PODATAKA, this );

    // Najpre proveri da li je terminal spreman za narednu komandu
    int PorukaID;
    KAdminInfo admInf;
    if( pRTApp->TerminalSpreman( PorukaID, admInf ) ) {
        // Preuzmi podatke iz forme u odgovarajuce promenljive
        this->UpdateData();
    
        // Spoji sve flegove u jedan podatak
        unsigned int nKontrolniFlegovi = SpojiFlegPromenljive();
    
        // Formiraj poruku sa flegovima :
        string cSadrzajPoruke = KKorisno::Instance()->KonvertIntUNiblString( nKontrolniFlegovi, 2 ).cString;
    
        PorukaID = IDS_SNIMANJE_NEUSPELO;
        // Snimi flegove na terminal
        if ( KKomunikator::Instance()->SnimiNaTerminal( KT_POSTAVI_KONTROLNE_FLEGOVE, cSadrzajPoruke ) ) {
            // Procitaj podatke ( proveri da li je dobro snimljeno )
            KAdminInfo admInf;
            if ( KKomunikator::Instance()->DajAdminInfoTerminala( admInf, true ) ) {
                if ( nKontrolniFlegovi == admInf.nKontrolniFlegovi )
                    PorukaID = IDS_SNIMANJE_USPELO;
            }
        }
    }

    pRTApp->UkloniPorukuIKursorZaCekanje();

    pRTApp->MyMessageBox( PorukaID );
}

void CAdminDlg::OnDozvolePristupa() 
{
    CDozvolePristupaDlg dozvoleDlg;

    dozvoleDlg.DoModal();
}

⌨️ 快捷键说明

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