Statistics
| Branch: | Tag: | Revision:

amiro-os / core / inc / aos_system.h @ 7da800ab

History | View | Annotate | Download (8.744 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2019  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

    
19
/**
20
 * @file    aos_system.h
21
 * @brief   System macros and structures.
22
 *
23
 * @addtogroup aos_system
24
 * @{
25
 */
26

    
27
#ifndef AMIROOS_SYSTEM_H
28
#define AMIROOS_SYSTEM_H
29

    
30
#include <amiroos.h>
31
#include <chprintf.h>
32

    
33
/******************************************************************************/
34
/* CONSTANTS                                                                  */
35
/******************************************************************************/
36

    
37
/**
38
 * @brief   Resolution of the system time measurement.
39
 */
40
#define AOS_SYSTEM_TIME_RESOLUTION              ((MICROSECONDS_PER_SECOND + CH_CFG_ST_FREQUENCY - 1) / CH_CFG_ST_FREQUENCY)
41

    
42
/**
43
 * @brief   System event flag which is emitted when a shutdown was initiated.
44
 */
45
#define AOS_SYSTEM_EVENTFLAGS_SHUTDOWN          (eventflags_t)(1 << 0)
46

    
47
/**
48
 * @brief   System event flag which is emitted when a shutdown to transportation mode was initiated.
49
 */
50
#define AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION    (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 1))
51

    
52
/**
53
 * @brief   System event flag which is emitted when a shutdown to deepsleep mode was initiated.
54
 */
55
#define AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP         (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 2))
56

    
57
/**
58
 * @brief   System event flag which is emitted when a shutdown to hibernate mode was initiated.
59
 */
60
#define AOS_SYSTEM_EVENTFLAGS_HIBERNATE         (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 3))
61

    
62
/**
63
 * @brief   System event flag which is emitted when a system restart was initiated.
64
 */
65
#define AOS_SYSTEM_EVENTFLAGS_RESTART           (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 4))
66

    
67
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
68

    
69
/**
70
 * @brief   Major version of the implemented SSSP.
71
 */
72
#define AOS_SYSTEM_SSSP_VERSION_MAJOR           1
73

    
74
/**
75
 * @brief   Minor version of the implemented SSSP.
76
 */
77
#define AOS_SYSTEM_SSSP_VERSION_MINOR           4
78

    
79
/**
80
 * @brief   Timeout delay according to SSSP.
81
 * @details SSSP defines timeouts to be ten times longer than the signal delay time.
82
 */
83
#define AOS_SYSTEM_SSSP_TIMEOUT                 (10 * AMIROOS_CFG_SSSP_SIGNALDELAY)
84

    
85
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
86

    
87
/******************************************************************************/
88
/* SETTINGS                                                                   */
89
/******************************************************************************/
90

    
91
/******************************************************************************/
92
/* CHECKS                                                                     */
93
/******************************************************************************/
94

    
95
/******************************************************************************/
96
/* DATA STRUCTURES AND TYPES                                                  */
97
/******************************************************************************/
98

    
99
/**
100
 * @brief   Enumerator to identify shutdown types.
101
 */
102
typedef enum aos_shutdown {
103
  AOS_SHUTDOWN_NONE,            /**< Default value if no shutdown action was initiated */
104
  AOS_SHUTDOWN_PASSIVE,         /**< Passive shutdown (initiated by another module). */
105
  AOS_SHUTDOWN_HIBERNATE,       /**< Active shutdown to hibernate mode. */
106
  AOS_SHUTDOWN_DEEPSLEEP,       /**< Active shutdown to deepsleep mode. */
107
  AOS_SHUTDOWN_TRANSPORTATION,  /**< Active shutdown to transportation mode. */
108
  AOS_SHUTDOWN_RESTART,         /**< Active saystem restart request. */
109
} aos_shutdown_t;
110

    
111
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
112

    
113
/**
114
 * @brief   Enumerator of the several stages of SSSP.
115
 */
116
typedef enum aos_ssspstage {
117
  AOS_SSSP_STARTUP_1_1  = 0x10, /**< Identifier of SSSP startup phase stage 1-1. */
118
  AOS_SSSP_STARTUP_1_2  = 0x11, /**< Identifier of SSSP startup phase stage 1-2. */
119
  AOS_SSSP_STARTUP_1_3  = 0x12, /**< Identifier of SSSP startup phase stage 1-3. */
120
  AOS_SSSP_STARTUP_2_1  = 0x14, /**< Identifier of SSSP startup phase stage 2-1. */
121
  AOS_SSSP_STARTUP_2_2  = 0x15, /**< Identifier of SSSP startup phase stage 2-2. */
122
  AOS_SSSP_STARTUP_3_1  = 0x18, /**< Identifier of SSSP startup phase stage 3-1. */
123
  AOS_SSSP_STARTUP_3_2  = 0x19, /**< Identifier of SSSP startup phase stage 3-2. */
124
  AOS_SSSP_STARTUP_3_3  = 0x1A, /**< Identifier of SSSP startup phase stage 3-3. */
125
  AOS_SSSP_STARTUP_3_4  = 0x1B, /**< Identifier of SSSP startup phase stage 3-4. */
126
  AOS_SSSP_OPERATION    = 0x20, /**< Identifier of SSSP operation pahse. */
127
  AOS_SSSP_SHUTDOWN_1_1 = 0x30, /**< Identifier of SSSP shutdown phase stage 1-1. */
128
  AOS_SSSP_SHUTDOWN_1_2 = 0x31, /**< Identifier of SSSP shutdown phase stage 1-2. */
129
  AOS_SSSP_SHUTDOWN_1_3 = 0x32, /**< Identifier of SSSP shutdown phase stage 1-3. */
130
  AOS_SSSP_SHUTDOWN_2_1 = 0x34, /**< Identifier of SSSP shutdown phase stage 2-1. */
131
  AOS_SSSP_SHUTDOWN_2_2 = 0x35, /**< Identifier of SSSP shutdown phase stage 2-2. */
132
  AOS_SSSP_SHUTDOWN_3   = 0x38, /**< Identifier of SSSP shutdown phase stage 3. */
133
} aos_ssspstage_t;
134

    
135
/**
136
 * @brief   Type to represent module IDs.
137
 */
138
typedef uint16_t aos_ssspmoduleid_t;
139

    
140
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
141

    
142
/**
143
 * @brief   AMiRo-OS base system structure.
144
 */
145
typedef struct aos_system {
146
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
147
  /**
148
   * @brief   SSSP relevant data.
149
   */
150
  struct {
151
    /**
152
     * @brief   Current SSSP stage of the system.
153
     */
154
    aos_ssspstage_t stage;
155

    
156
    /**
157
     * @brief   Module identifier.
158
     * @details A value of 0 indicates an uninitialized ID.
159
     *          The vlaues 0 and ~0 are reserved und must not be set.
160
     */
161
    aos_ssspmoduleid_t moduleId;
162
  } sssp;
163
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
164

    
165
  /**
166
   * @brief   System I/O stream.
167
   */
168
  AosIOStream iostream;
169

    
170
  /**
171
   * @brief   Event structure.
172
   */
173
  struct {
174

    
175
    /**
176
     * @brief   I/O event source.
177
     */
178
    event_source_t io;
179

    
180
    /**
181
     * @brief   OS event source.
182
     */
183
    event_source_t os;
184
  } events;
185

    
186
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
187
  /**
188
   * @brief   Pointer to the shell object.
189
   */
190
  aos_shell_t shell;
191
#endif
192

    
193
} aos_system_t;
194

    
195
/******************************************************************************/
196
/* MACROS                                                                     */
197
/******************************************************************************/
198

    
199
/**
200
 * @brief   Printf function that uses the default system I/O stream.
201
 *
202
 * @param[in] fmt   Formatted string to print.
203
 */
204
#define aosprintf(fmt, ...)                     chprintf((BaseSequentialStream*)&aos.iostream, fmt, ##__VA_ARGS__)
205

    
206
/******************************************************************************/
207
/* EXTERN DECLARATIONS                                                        */
208
/******************************************************************************/
209

    
210
/**
211
 * @brief   Global system object.
212
 */
213
extern aos_system_t aos;
214

    
215
#ifdef __cplusplus
216
extern "C" {
217
#endif
218
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true)
219
  void aosSysInit(const char* shellPrompt);
220
#else
221
  void aosSysInit(void);
222
#endif
223
  void aosSysStart(void);
224
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined (__DOXYGEN__)
225
  eventmask_t aosSysSsspStartupOsInitSyncCheck(event_listener_t* syncEvtListener);
226
#endif
227
  void aosSysGetUptimeX(aos_timestamp_t* ut);
228
  void aosSysGetDateTime(struct tm* dt);
229
  void aosSysSetDateTime(struct tm* dt);
230
  void aosSysShutdownInit(aos_shutdown_t shutdown);
231
  void aosSysStop(void);
232
  void aosSysDeinit(void);
233
  void aosSysShutdownFinal(aos_shutdown_t shutdown);
234
#ifdef __cplusplus
235
}
236
#endif
237

    
238
/******************************************************************************/
239
/* INLINE FUNCTIONS                                                           */
240
/******************************************************************************/
241

    
242
/**
243
 * @brief   Retrieves the system uptime.
244
 *
245
 * @param[out] ut   Pointer to the system uptime.
246
 */
247
static inline void aosSysGetUptime(aos_timestamp_t* ut)
248
{
249
  chSysLock();
250
  aosSysGetUptimeX(ut);
251
  chSysUnlock();
252
}
253

    
254
#endif /* AMIROOS_SYSTEM_H */
255

    
256
/** @} */