]> rtime.felk.cvut.cz Git - CanFestival-3.git/blob - include/states.h
Added removal of dynamically loaded CAN driver interface library in clean make target
[CanFestival-3.git] / include / states.h
1 /*
2 This file is part of CanFestival, a library implementing CanOpen Stack. 
3
4 Copyright (C): Edouard TISSERANT and Francis DUPIN
5
6 See COPYING file for copyrights details.
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21 */
22
23 #ifndef __states_h__
24 #define __states_h__
25
26 #include <applicfg.h>
27
28 /* The nodes states 
29  * -----------------
30  * values are choosen so, that they can be sent directly
31  * for heartbeat messages...
32  * Must be coded on 7 bits only
33  * */
34 /* Should not be modified */
35 enum enum_nodeState {
36   Initialisation  = 0x00, 
37   Disconnected    = 0x01,
38   Connecting      = 0x02,
39   Preparing       = 0x02,
40   Stopped         = 0x04,
41   Operational     = 0x05,
42   Pre_operational = 0x7F,
43   Unknown_state   = 0x0F
44 };
45
46 typedef enum enum_nodeState e_nodeState;
47
48 typedef struct
49 {
50         INTEGER8 csBoot_Up;
51         INTEGER8 csSDO;
52         INTEGER8 csEmergency;
53         INTEGER8 csSYNC;
54         INTEGER8 csHeartbeat;
55         INTEGER8 csPDO;
56         INTEGER8 csLSS;
57 } s_state_communication;
58
59 /** Function that user app can overload
60  * 
61  */
62 typedef void (*initialisation_t)(CO_Data*);
63 typedef void (*preOperational_t)(CO_Data*);
64 typedef void (*operational_t)(CO_Data*);
65 typedef void (*stopped_t)(CO_Data*);
66
67 void _initialisation(CO_Data*);
68 void _preOperational(CO_Data*);
69 void _operational(CO_Data*);
70 void _stopped(CO_Data*);
71
72 #include "data.h"
73
74 /************************* prototypes ******************************/
75
76 /** Called by driver/app when receiving messages
77 */
78 void canDispatch(CO_Data* d, Message *m);
79
80 /** Returns the state of the node 
81 */
82 e_nodeState getState (CO_Data* d);
83
84 /** Change the state of the node 
85 */
86 UNS8 setState (CO_Data* d, e_nodeState newState);
87
88 /** Returns the nodId 
89 */
90 UNS8 getNodeId (CO_Data* d);
91
92 /** Define the node ID. Initialize the object dictionary
93 */
94 void setNodeId (CO_Data* d, UNS8 nodeId);
95
96 /** Some stuff to do when the node enter in reset mode
97  *
98  */
99 /* void initResetMode (CO_Data* d); */
100
101
102 /** Some stuff to do when the node enter in pre-operational mode
103  *
104  */
105 void initPreOperationalMode (CO_Data* d);
106
107 #endif