Subversion Repositories HomeAutomation

Rev

Rev 1601 | Rev 1642 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1601 Rev 1627
Line 20... Line 20...
20
 
20
 
21
#ifndef CAN_NODE_H
21
#ifndef CAN_NODE_H
22
#define CAN_NODE_H
22
#define CAN_NODE_H
23
 
23
 
24
#include <string>
24
#include <string>
-
 
25
#include <map>
25
 
26
 
26
#include <boost/shared_ptr.hpp>
27
#include <boost/shared_ptr.hpp>
-
 
28
#include <boost/signals2.hpp>
27
 
29
 
28
#include <time.h>
30
#include <time.h>
-
 
31
 
-
 
32
#include "type/common.h"
-
 
33
#include "logging/Logger.h"
29
 
34
 
30
namespace atom {
35
namespace atom {
31
namespace can {
36
namespace can {
32
 
37
 
33
class Node
38
class Node
Line 36... Line 41...
36
    typedef boost::shared_ptr<Node> Pointer;
41
    typedef boost::shared_ptr<Node> Pointer;
37
    typedef unsigned int Id;
42
    typedef unsigned int Id;
38
   
43
   
39
    typedef enum
44
    typedef enum
40
    {
45
    {
-
 
46
        STATE_INVALID,
-
 
47
        STATE_NO_CHANGE,
41
        STATE_OFFLINE,
48
        STATE_NORM_OFFLINE,
42
        STATE_ONLINE,
49
        STATE_NORM_ONLINE,
43
        STATE_PENDING,
50
        STATE_NORM_LIST,
44
        STATE_INITIALIZED
51
        STATE_NORM_INITIALIZED,
-
 
52
        STATE_BPGM_OFFLINE,
-
 
53
        STATE_BPGM_START,
-
 
54
        STATE_BPGM_DATA,
-
 
55
        STATE_BPGM_END,
-
 
56
        STATE_BPGM_COPY,
-
 
57
        STATE_APGM_OFFLINE,
-
 
58
        STATE_APGM_START,
-
 
59
        STATE_APGM_DATA,
-
 
60
        STATE_APGM_END,
45
    } State;
61
    } State;
-
 
62
 
-
 
63
    typedef enum
-
 
64
    {
-
 
65
        EVENT_BIOS_START,
-
 
66
        EVENT_APP_START,
-
 
67
        EVENT_HEARTBEAT,
-
 
68
        EVENT_PGM_ACK,
-
 
69
        EVENT_PGM_NACK,
-
 
70
        EVENT_LIST_DONE,
-
 
71
        EVENT_PROGRAM_BIOS,
-
 
72
        EVENT_PROGRAM_APP,
-
 
73
        EVENT_RESET
-
 
74
    } Event;
-
 
75
   
-
 
76
    typedef boost::signals2::signal<void(Id, State, State)> SignalOnNewState;
46
   
77
   
-
 
78
   
47
    Node(Id id);
79
    Node(Id id);
48
    virtual ~Node();
80
    virtual ~Node();
-
 
81
   
-
 
82
    static void SetupStateMachine();
-
 
83
   
-
 
84
    void ConnectSlots(const SignalOnNewState::slot_type& slot_on_new_state);
49
   
85
   
50
    Id GetId();
86
    Id GetId();
51
    State GetState();
87
    State GetState();
-
 
88
 
52
    void SetState(State state);
89
    void Trigger(Event event, type::StringMap variables);
53
   
90
   
54
    bool CheckTimeout();
91
    bool CheckTimeout();
55
    void ResetTimeout();
92
    void ResetTimeout();
56
   
93
   
57
private:
94
private:
-
 
95
    typedef std::map<Event, State> Transition;
-
 
96
    typedef std::map<State, Transition> TransitionList;
-
 
97
   
58
    Id id_;
98
    Id id_;
59
    State state_;
99
    State state_;
60
    time_t last_active_;
100
    time_t last_active_;
-
 
101
    SignalOnNewState signal_on_new_state_;
-
 
102
    logging::Logger LOG;
-
 
103
   
-
 
104
    static TransitionList transitions_;
-
 
105
   
-
 
106
    static void AddTransition(State current_state, Event event, State target_state);
-
 
107
   
-
 
108
    State GetTransitionTarget(Event event);
-
 
109
    void SendReset();
-
 
110
    void SendListRequest();
61
};
111
};
62
 
112
 
63
}; // namespace can
113
}; // namespace can
64
}; // namespace atom
114
}; // namespace atom
65
 
115