File: handler.h

package info (click to toggle)
openhpi 3.8.0-2.3
  • links: PTS
  • area: main
  • in suites: sid, trixie
  • size: 31,888 kB
  • sloc: ansic: 225,326; cpp: 63,687; java: 16,472; cs: 15,161; python: 11,884; sh: 11,508; makefile: 4,945; perl: 1,529; xml: 36; asm: 13
file content (136 lines) | stat: -rw-r--r-- 3,494 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*      -*- linux-c++ -*-
 *
 * (C) Copyright Pigeon Point Systems. 2010
 *
 * This program 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.  This
 * file and program are licensed under a BSD style license.  See
 * the Copying file included with the OpenHPI distribution for
 * full licensing terms.
 *
 * Author(s):
 *        Anton Pak <anton.pak@pigeonpoint.com>
 */

#ifndef __HANDLER_H__
#define __HANDLER_H__

#include <queue>
#include <string>

#include <glib.h>

#include <SaHpi.h>

#include <oh_utils.h>

#include "baselib.h"
#include "lock.h"
#include "resourcemap.h"


namespace Slave {


/**************************************************************
 * class cHandler
 *************************************************************/
class cHandler : public cBaseLib, public cResourceMap
{
public:

    explicit cHandler( unsigned int id,
                       const SaHpiEntityPathT& root,
                       const std::string& host,
                       unsigned short port,
                       oh_evt_queue& eventq );

    ~cHandler();

    bool Init();

    bool WaitForDiscovery();

    const SaHpiEntityPathT& GetRoot() const
    {
        return m_root;
    }

    SaHpiSessionIdT GetSessionId() const
    {
        return m_sid;
    }

private:

    cHandler( const cHandler& );
    cHandler& operator =( const cHandler& );

    SaHpiResourceIdT GetOrCreateMaster( const SaHpiRptEntryT& slave_rpte );

    bool StartThread();
    static gpointer ThreadProcAdapter( gpointer data );
    void ThreadProc();

    bool OpenSession();

    bool CloseSession();

    bool Discover();

    void RemoveAllResources();

    bool ReceiveEvent( struct oh_event *& e );

    void HandleEvent( struct oh_event * e );

    SaHpiUint32T GetRptUpdateCounter() const;
    SaHpiUint32T GetRdrUpdateCounter( SaHpiResourceIdT slave_rid ) const;

    bool FetchRptAndRdrs( std::queue<struct oh_event *>& events ) const;
    bool FetchRdrs( struct oh_event * e ) const;

    void CompleteAndPostEvent( struct oh_event * e,
                               SaHpiResourceIdT master_rid,
                               bool set_timestamp );

    void CompleteAndPostResourceUpdateEvent( struct oh_event * e,
                                             SaHpiResourceIdT master_rid );


    // constants
    static const SaHpiSessionIdT InvalidSessionId             = 0xFFFFFFFF;
    static const SaHpiTimeoutT   DiscoveryStatusCheckInterval = 500000000ULL;
    static const SaHpiTimeoutT   OpenSessionRetryInterval     = 5000000000ULL;
    static const unsigned int    MaxFetchAttempts             = 42;
    static const SaHpiTimeoutT   GetEventTimeout              = 5000000000ULL;


    enum eStartupDiscoveryStatus
    {
        StartupDiscoveryUncompleted,
        StartupDiscoveryFailed,
        StartupDiscoveryDone,
    };


    // data
    unsigned int                     m_id;
    SaHpiEntityPathT                 m_root;
    SaHpiTextBufferT                 m_host;
    unsigned short                   m_port;
    SaHpiDomainIdT                   m_did;
    volatile SaHpiSessionIdT         m_sid;
    oh_evt_queue&                    m_eventq;
    volatile bool                    m_stop;
    GThread *                        m_thread;
    volatile eStartupDiscoveryStatus m_startup_discovery_status;
};


}; // namespace Slave


#endif // __HANDLER_H__