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 |
|
48 | STATE_NORM_OFFLINE, |
| 42 |
|
49 | STATE_NORM_ONLINE, |
| 43 |
|
50 | STATE_NORM_LIST, |
| 44 |
|
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 |
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 | ||