Statistics
| Branch: | Tag: | Revision:

amiro-os / core / inc / aos_system.h @ f3ac1c96

History | View | Annotate | Download (8.83 KB)

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

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 53710ca3 Marc Rothmann
/**
20
 * @file    aos_system.h
21
 * @brief   System macros and structures.
22
 *
23
 * @addtogroup aos_system
24
 * @{
25
 */
26
27 6ff06bbf Thomas Schöpping
#ifndef AMIROOS_SYSTEM_H
28
#define AMIROOS_SYSTEM_H
29 e545e620 Thomas Schöpping
30 9df585c4 Thomas Schöpping
#include <time.h>
31 ba516b61 Thomas Schöpping
#include <aos_iostream.h>
32 e545e620 Thomas Schöpping
#include <amiro-lld.h>
33
#include <aos_shell.h>
34
#include <aos_time.h>
35
#include <chprintf.h>
36
37 f3ac1c96 Thomas Schöpping
/******************************************************************************/
38
/* CONSTANTS                                                                  */
39
/******************************************************************************/
40
41 e545e620 Thomas Schöpping
/**
42 ba516b61 Thomas Schöpping
 * @brief   Resolution of the system time measurement.
43 e545e620 Thomas Schöpping
 */
44 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_TIME_RESOLUTION              ((MICROSECONDS_PER_SECOND + CH_CFG_ST_FREQUENCY - 1) / CH_CFG_ST_FREQUENCY)
45 e545e620 Thomas Schöpping
46
/**
47 ba516b61 Thomas Schöpping
 * @brief   System event flag which is emitted when a shutdown was initiated.
48 e545e620 Thomas Schöpping
 */
49 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_EVENTFLAGS_SHUTDOWN          (eventflags_t)(1 << 0)
50 e545e620 Thomas Schöpping
51
/**
52
 * @brief   System event flag which is emitted when a shutdown to transportation mode was initiated.
53
 */
54 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION    (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 1))
55 e545e620 Thomas Schöpping
56
/**
57
 * @brief   System event flag which is emitted when a shutdown to deepsleep mode was initiated.
58
 */
59 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP         (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 2))
60 e545e620 Thomas Schöpping
61
/**
62
 * @brief   System event flag which is emitted when a shutdown to hibernate mode was initiated.
63
 */
64 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_EVENTFLAGS_HIBERNATE         (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 3))
65 e545e620 Thomas Schöpping
66
/**
67
 * @brief   System event flag which is emitted when a system restart was initiated.
68
 */
69 ba516b61 Thomas Schöpping
#define AOS_SYSTEM_EVENTFLAGS_RESTART           (AOS_SYSTEM_EVENTFLAGS_SHUTDOWN | (eventflags_t)(1 << 4))
70 e545e620 Thomas Schöpping
71 9ebb11a9 Thomas Schöpping
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
72
73
/**
74 e545e620 Thomas Schöpping
 * @brief   Major version of the implemented SSSP.
75
 */
76 933df08e Thomas Schöpping
#define AOS_SYSTEM_SSSP_VERSION_MAJOR           1
77 e545e620 Thomas Schöpping
78
/**
79
 * @brief   Minor version of the implemented SSSP.
80
 */
81 933df08e Thomas Schöpping
#define AOS_SYSTEM_SSSP_VERSION_MINOR           4
82
83
/**
84
 * @brief   Timeout delay according to SSSP.
85
 * @details SSSP defines timeouts to be ten times longer than the signal delay time.
86
 */
87
#define AOS_SYSTEM_SSSP_TIMEOUT                 (10 * AMIROOS_CFG_SSSP_SIGNALDELAY)
88 e545e620 Thomas Schöpping
89 f3ac1c96 Thomas Schöpping
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
90
91
/******************************************************************************/
92
/* SETTINGS                                                                   */
93
/******************************************************************************/
94
95
/******************************************************************************/
96
/* CHECKS                                                                     */
97
/******************************************************************************/
98
99
/******************************************************************************/
100
/* DATA STRUCTURES AND TYPES                                                  */
101
/******************************************************************************/
102
103
/**
104
 * @brief   Enumerator to identify shutdown types.
105
 */
106
typedef enum aos_shutdown {
107
  AOS_SHUTDOWN_NONE,            /**< Default value if no shutdown action was initiated */
108
  AOS_SHUTDOWN_PASSIVE,         /**< Passive shutdown (initiated by another module). */
109
  AOS_SHUTDOWN_HIBERNATE,       /**< Active shutdown to hibernate mode. */
110
  AOS_SHUTDOWN_DEEPSLEEP,       /**< Active shutdown to deepsleep mode. */
111
  AOS_SHUTDOWN_TRANSPORTATION,  /**< Active shutdown to transportation mode. */
112
  AOS_SHUTDOWN_RESTART,         /**< Active saystem restart request. */
113
} aos_shutdown_t;
114
115
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
116
117 e545e620 Thomas Schöpping
/**
118 933df08e Thomas Schöpping
 * @brief   Enumerator of the several stages of SSSP.
119 e545e620 Thomas Schöpping
 */
120
typedef enum aos_ssspstage {
121 933df08e Thomas Schöpping
  AOS_SSSP_STARTUP_1_1  = 0x10, /**< Identifier of SSSP startup phase stage 1-1. */
122
  AOS_SSSP_STARTUP_1_2  = 0x11, /**< Identifier of SSSP startup phase stage 1-2. */
123
  AOS_SSSP_STARTUP_1_3  = 0x12, /**< Identifier of SSSP startup phase stage 1-3. */
124
  AOS_SSSP_STARTUP_2_1  = 0x14, /**< Identifier of SSSP startup phase stage 2-1. */
125
  AOS_SSSP_STARTUP_2_2  = 0x15, /**< Identifier of SSSP startup phase stage 2-2. */
126
  AOS_SSSP_STARTUP_3_1  = 0x18, /**< Identifier of SSSP startup phase stage 3-1. */
127
  AOS_SSSP_STARTUP_3_2  = 0x19, /**< Identifier of SSSP startup phase stage 3-2. */
128
  AOS_SSSP_STARTUP_3_3  = 0x1A, /**< Identifier of SSSP startup phase stage 3-3. */
129
  AOS_SSSP_STARTUP_3_4  = 0x1B, /**< Identifier of SSSP startup phase stage 3-4. */
130
  AOS_SSSP_OPERATION    = 0x20, /**< Identifier of SSSP operation pahse. */
131
  AOS_SSSP_SHUTDOWN_1_1 = 0x30, /**< Identifier of SSSP shutdown phase stage 1-1. */
132
  AOS_SSSP_SHUTDOWN_1_2 = 0x31, /**< Identifier of SSSP shutdown phase stage 1-2. */
133
  AOS_SSSP_SHUTDOWN_1_3 = 0x32, /**< Identifier of SSSP shutdown phase stage 1-3. */
134
  AOS_SSSP_SHUTDOWN_2_1 = 0x34, /**< Identifier of SSSP shutdown phase stage 2-1. */
135
  AOS_SSSP_SHUTDOWN_2_2 = 0x35, /**< Identifier of SSSP shutdown phase stage 2-2. */
136
  AOS_SSSP_SHUTDOWN_3   = 0x38, /**< Identifier of SSSP shutdown phase stage 3. */
137 e545e620 Thomas Schöpping
} aos_ssspstage_t;
138
139
/**
140 933df08e Thomas Schöpping
 * @brief   Type to represent module IDs.
141
 */
142
typedef uint16_t aos_ssspmoduleid_t;
143
144 9ebb11a9 Thomas Schöpping
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
145
146 933df08e Thomas Schöpping
/**
147 e545e620 Thomas Schöpping
 * @brief   AMiRo-OS base system structure.
148
 */
149
typedef struct aos_system {
150 9ebb11a9 Thomas Schöpping
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined(__DOXYGEN__)
151 e545e620 Thomas Schöpping
  /**
152 6b53f6bf Thomas Schöpping
   * @brief   SSSP relevant data.
153 e545e620 Thomas Schöpping
   */
154 6b53f6bf Thomas Schöpping
  struct {
155
    /**
156
     * @brief   Current SSSP stage of the system.
157
     */
158
    aos_ssspstage_t stage;
159 933df08e Thomas Schöpping
160
    /**
161
     * @brief   Module identifier.
162
     * @details A value of 0 indicates an uninitialized ID.
163
     *          The vlaues 0 and ~0 are reserved und must not be set.
164
     */
165
    aos_ssspmoduleid_t moduleId;
166 6b53f6bf Thomas Schöpping
  } sssp;
167 9ebb11a9 Thomas Schöpping
#endif /* AMIROOS_CFG_SSSP_ENABLE == true */
168 e545e620 Thomas Schöpping
169
  /**
170 ba516b61 Thomas Schöpping
   * @brief   System I/O stream.
171
   */
172
  AosIOStream iostream;
173
174
  /**
175 e545e620 Thomas Schöpping
   * @brief   Event structure.
176
   */
177
  struct {
178
179
    /**
180 6b53f6bf Thomas Schöpping
     * @brief   I/O event source.
181 e545e620 Thomas Schöpping
     */
182 6b53f6bf Thomas Schöpping
    event_source_t io;
183 e545e620 Thomas Schöpping
184
    /**
185 6b53f6bf Thomas Schöpping
     * @brief   OS event source.
186 e545e620 Thomas Schöpping
     */
187 6b53f6bf Thomas Schöpping
    event_source_t os;
188 e545e620 Thomas Schöpping
  } events;
189
190 2dd2e257 Thomas Schöpping
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
191 e545e620 Thomas Schöpping
  /**
192
   * @brief   Pointer to the shell object.
193
   */
194 6b53f6bf Thomas Schöpping
  aos_shell_t shell;
195 e545e620 Thomas Schöpping
#endif
196
197
} aos_system_t;
198
199 f3ac1c96 Thomas Schöpping
/******************************************************************************/
200
/* MACROS                                                                     */
201
/******************************************************************************/
202 e545e620 Thomas Schöpping
203 ba516b61 Thomas Schöpping
/**
204
 * @brief   Printf function that uses the default system I/O stream.
205 933df08e Thomas Schöpping
 *
206
 * @param[in] fmt   Formatted string to print.
207 ba516b61 Thomas Schöpping
 */
208
#define aosprintf(fmt, ...)                     chprintf((BaseSequentialStream*)&aos.iostream, fmt, ##__VA_ARGS__)
209
210 f3ac1c96 Thomas Schöpping
/******************************************************************************/
211
/* EXTERN DECLARATIONS                                                        */
212
/******************************************************************************/
213
214
/**
215
 * @brief   Global system object.
216
 */
217
extern aos_system_t aos;
218
219 e545e620 Thomas Schöpping
#ifdef __cplusplus
220
extern "C" {
221
#endif
222 2dd2e257 Thomas Schöpping
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true)
223 6b53f6bf Thomas Schöpping
  void aosSysInit(const char* shellPrompt);
224
#else
225
  void aosSysInit(void);
226
#endif
227 e545e620 Thomas Schöpping
  void aosSysStart(void);
228 9ebb11a9 Thomas Schöpping
#if (AMIROOS_CFG_SSSP_ENABLE == true) || defined (__DOXYGEN__)
229 e545e620 Thomas Schöpping
  eventmask_t aosSysSsspStartupOsInitSyncCheck(event_listener_t* syncEvtListener);
230 9ebb11a9 Thomas Schöpping
#endif
231 e545e620 Thomas Schöpping
  void aosSysGetUptimeX(aos_timestamp_t* ut);
232 8399aeae Thomas Schöpping
  void aosSysGetDateTime(struct tm* dt);
233
  void aosSysSetDateTime(struct tm* dt);
234 e545e620 Thomas Schöpping
  void aosSysShutdownInit(aos_shutdown_t shutdown);
235
  void aosSysStop(void);
236
  void aosSysDeinit(void);
237 1e5f7648 Thomas Schöpping
  void aosSysShutdownFinal(aos_shutdown_t shutdown);
238 e545e620 Thomas Schöpping
#ifdef __cplusplus
239
}
240
#endif
241
242 f3ac1c96 Thomas Schöpping
/******************************************************************************/
243
/* INLINE FUNCTIONS                                                           */
244
/******************************************************************************/
245
246 e545e620 Thomas Schöpping
/**
247
 * @brief   Retrieves the system uptime.
248
 *
249 acc97cbf Thomas Schöpping
 * @param[out] ut   Pointer to the system uptime.
250 e545e620 Thomas Schöpping
 */
251 9ff01927 Thomas Schöpping
static inline void aosSysGetUptime(aos_timestamp_t* ut)
252
{
253
  chSysLock();
254
  aosSysGetUptimeX(ut);
255
  chSysUnlock();
256 e545e620 Thomas Schöpping
}
257
258 6ff06bbf Thomas Schöpping
#endif /* AMIROOS_SYSTEM_H */
259 53710ca3 Marc Rothmann
260
/** @} */