//
//  Copyright © 2003, RESON Inc. All Rights Reserved.
//
//  No part of this file may be reproduced or transmitted in any form or by
//  any means, electronic or mechanical, including photocopy, recording, or
//  information storage or retrieval system, without permission in writing
//  from RESON Inc.
//
//  Filename:   C7kPort.h
//
//  Project:    6046
//
//  Author(s):  W. Arcus
//
//  Purpose:    Defines the C7kPort class.
//
//  Notes:      
//

#if !defined(AFX_7KPORT_H__B420E3EE_38E3_416A_A51E_D042213EB981__INCLUDED_)
#define AFX_7KPORT_H__B420E3EE_38E3_416A_A51E_D042213EB981__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#pragma pack( push, C7KPORT_H_PACK, 1 )

typedef struct tagPORTINFO                                                          // 7k remote control port command definition.
{
    unsigned long       m_ulPortId;                                                 // Port identifier.
    unsigned long       m_ulType;                                                   // Type identifier number: 0 - coax, 1 - serial, 2 - TCP socket, 3 - UDP socket.
    unsigned __int64    m_ui64Address;                                              // Address. If IPv4, use lower 32 bits.
    unsigned long       m_ulPortNumber;                                             // Port index.
}
PORTINFO, *PPORTINFO;

#pragma pack( pop, C7KPORT_H_PACK )

class EXPORT_DLL C7kPort : private tagPORTINFO
{
public:

    ////////////////
    // Definitions.

    enum EPORTTYPE
    {
        portTypeCoax        = 0,
        portTypeSerial,
        portTypeTCP,
        portTypeUDP
    };

    ////////////////
    // Services.

                        C7kPort                     (   void );
                        C7kPort                     (   const C7kPort          &rRhs );

    virtual            ~C7kPort                     (   void );

    // Operators.

    C7kPort &           operator =                  (   const C7kPort          &rRhs );
    bool                operator ==                 (   const unsigned long    &rulPortID )     const;
    bool                operator <                  (   const C7kPort          &rRhs )          const;
                        operator const PORTINFO *   (   void )                          const;

    // Control.

    void                Configure                   (   const EPORTTYPE        &rePortType      = portTypeCoax,
                                                        const unsigned __int64 &rui64Address    = 0 );

    void                Id                          (   const unsigned long    &rulPortId );                // For the exclusive use by the trigger controller.
    void                TriggerId                   (   const unsigned long    &rulTriggerID );             // Trigger this port maps to.

    void                Enable                      (   void );
    void                Disable                     (   void );

    void                PortNumber                  (   const unsigned long    &rulPortNumber );

    // Read only methods.

    bool                IsEnabled                   (   void )  const;
    unsigned long       Id                          (   void )  const;
    unsigned long       PortNumber                  (   void )  const;
    EPORTTYPE           Type                        (   void )  const;
    unsigned __int64    Address                     (   void )  const;
    unsigned long       TriggerId                   (   void )  const;

private:

    ////////////////
    // Attributes.

    bool                m_bEnabled;
    unsigned long       m_ulTriggerId;

};

#endif // !defined(AFX_7KPORT_H__B420E3EE_38E3_416A_A51E_D042213EB981__INCLUDED_)
