// PLCAlarmSimDlg.h : header file
//

#if !defined(AFX_PLCALARMSIMDLG_H__B0174C86_3852_4EDC_8531_8E81C7EB8234__INCLUDED_)
#define AFX_PLCALARMSIMDLG_H__B0174C86_3852_4EDC_8531_8E81C7EB8234__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "..\..\Include\Utils.h"

#include "..\..\Remote6046\6046RemoteClient.h"
#include "..\..\Components\NetUtils\Critical.h"
#include "..\..\Components\NetUtils\7kCommand.h"
#include "..\..\Components\NetUtils\7kStatus.h"
#include "..\..\Components\NetUtils\7kProtocol.h"
#include "..\..\Components\NetUtils\SystemTime.h"
#include "..\..\Components\NetUtils\Generic7kRecordEncoder.h"

/////////////////////////////////////////////////////////////////////////////
// CPLCAlarmSimDlg dialog

class CPLCAlarmSimDlg : public CDialog
{
// Construction
public:

    CPLCAlarmSimDlg     (   CWnd* pParent = NULL );
   ~CPLCAlarmSimDlg     (   void );

// Dialog Data
    //{{AFX_DATA(CPLCAlarmSimDlg)
	enum { IDD = IDD_PLCALARMSIM_DIALOG };
	CComboBox	m_AlarmSelectCombo;
    CString m_Address;
    CString m_Port;
    CString m_AlarmData;
    CString m_ReadbackText;
	CString	m_AlarmFormat;
	//}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CPLCAlarmSimDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

protected:

    HICON m_hIcon;

    // Generated message map functions
    //{{AFX_MSG(CPLCAlarmSimDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnButtonChangeRemoteSetup();
    afx_msg void OnButtonClearAlarm();
    afx_msg void OnButtonConnectDisconnect();
    afx_msg void OnButtonSetAlarm();
    afx_msg void OnButtonStatusUpdate();
    afx_msg void OnSelchangeComboAlarms();
    virtual void OnOK();
	virtual void OnCancel();
	//}}AFX_MSG

    afx_msg LONG    UpdateStatusDisplay( WPARAM wParam, LPARAM lParam );

    DECLARE_MESSAGE_MAP()

private:

    ///////////////
    // Definitions.

    enum EUSERMESSAGES
    {
        userMessageUpdateStatusDisplay  = WM_USER + 1
    };

    ///////////////
    // Attributes.

    unsigned long                       m_ulPort;
    bool                                m_bConnected;

    std::auto_ptr<C6046RemoteClient>    m_pRemote;
    std::auto_ptr<CSystemTime>          m_pSystemTime;

    CCritical                           m_Critical;

    ///////////////
    // Services.

    void                                PLCClientInitialization (   void );

    bool                                SetOrClearAlarm         (   const bool             &rbSet );

    void                                UpdateStatusDisplay     (   const BYTE             *pbyData,
                                                                    const unsigned long    &rulBytes );

    void                                EnableDisableControls   (   const bool             &rbEnable );

    void                                OnConnected             (   void );

    void                                Startup                 (   void );

    void                                OnDisconnected          (   void );
    
    bool                                DoesUserWishToExit      (   void )                  const;

    static  void                        DataCallback            (   void                   *pvParam,
                                                                    BYTE                   *pbyData,
                                                                    unsigned long           ulBytes );

    static  void                        StatusCallback          (   void                   *pvParam,
                                                                    BYTE                   *pbyData,
                                                                    unsigned long           ulBytes );

};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_PLCALARMSIMDLG_H__B0174C86_3852_4EDC_8531_8E81C7EB8234__INCLUDED_)
