Statistics
| Branch: | Tag: | Revision:

amiro-os / core / inc / aos_system.h @ 960338cc

History | View | Annotate | Download (6.919 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2018  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 <aos_iostream.h>
31
#include <amiro-lld.h>
32
#include <aos_shell.h>
33
#include <aos_time.h>
34
#include <chprintf.h>
35

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

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

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

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

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

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

    
66
#if (AMIROOS_CFG_SSSP_ENABLE == true)
67

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

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

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

    
84
#endif
85

    
86
/**
87
 * @brief   Enumerator to identify shutdown types.
88
 */
89
typedef enum aos_shutdown {
90
  AOS_SHUTDOWN_NONE,            /**< Default value if no shutdown action was initiated */
91
  AOS_SHUTDOWN_PASSIVE,         /**< Passive shutdown (initiated by another module). */
92
  AOS_SHUTDOWN_HIBERNATE,       /**< Active shutdown to hibernate mode. */
93
  AOS_SHUTDOWN_DEEPSLEEP,       /**< Active shutdown to deepsleep mode. */
94
  AOS_SHUTDOWN_TRANSPORTATION,  /**< Active shutdown to transportation mode. */
95
  AOS_SHUTDOWN_RESTART,         /**< Active saystem restart request. */
96
} aos_shutdown_t;
97

    
98
#if (AMIROOS_CFG_SSSP_ENABLE == true)
99

    
100
/**
101
 * @brief   Enumerator of the several stages of SSSP.
102
 */
103
typedef enum aos_ssspstage {
104
  AOS_SSSP_STARTUP_1_1  = 0x10, /**< Identifier of SSSP startup phase stage 1-1. */
105
  AOS_SSSP_STARTUP_1_2  = 0x11, /**< Identifier of SSSP startup phase stage 1-2. */
106
  AOS_SSSP_STARTUP_1_3  = 0x12, /**< Identifier of SSSP startup phase stage 1-3. */
107
  AOS_SSSP_STARTUP_2_1  = 0x14, /**< Identifier of SSSP startup phase stage 2-1. */
108
  AOS_SSSP_STARTUP_2_2  = 0x15, /**< Identifier of SSSP startup phase stage 2-2. */
109
  AOS_SSSP_STARTUP_3_1  = 0x18, /**< Identifier of SSSP startup phase stage 3-1. */
110
  AOS_SSSP_STARTUP_3_2  = 0x19, /**< Identifier of SSSP startup phase stage 3-2. */
111
  AOS_SSSP_STARTUP_3_3  = 0x1A, /**< Identifier of SSSP startup phase stage 3-3. */
112
  AOS_SSSP_STARTUP_3_4  = 0x1B, /**< Identifier of SSSP startup phase stage 3-4. */
113
  AOS_SSSP_OPERATION    = 0x20, /**< Identifier of SSSP operation pahse. */
114
  AOS_SSSP_SHUTDOWN_1_1 = 0x30, /**< Identifier of SSSP shutdown phase stage 1-1. */
115
  AOS_SSSP_SHUTDOWN_1_2 = 0x31, /**< Identifier of SSSP shutdown phase stage 1-2. */
116
  AOS_SSSP_SHUTDOWN_1_3 = 0x32, /**< Identifier of SSSP shutdown phase stage 1-3. */
117
  AOS_SSSP_SHUTDOWN_2_1 = 0x34, /**< Identifier of SSSP shutdown phase stage 2-1. */
118
  AOS_SSSP_SHUTDOWN_2_2 = 0x35, /**< Identifier of SSSP shutdown phase stage 2-2. */
119
  AOS_SSSP_SHUTDOWN_3   = 0x38, /**< Identifier of SSSP shutdown phase stage 3. */
120
} aos_ssspstage_t;
121

    
122
#endif
123

    
124
#if (AMIROOS_CFG_SSSP_ENABLE == true)
125
/**
126
 * @brief   Type to represent module IDs.
127
 */
128
typedef uint16_t aos_ssspmoduleid_t;
129
#endif
130

    
131

    
132
/**
133
 * @brief   AMiRo-OS base system structure.
134
 */
135
typedef struct aos_system {
136
#if (AMIROOS_CFG_SSSP_ENABLE == true)
137
  /**
138
   * @brief   SSSP relevant data.
139
   */
140
  struct {
141
    /**
142
     * @brief   Current SSSP stage of the system.
143
     */
144
    aos_ssspstage_t stage;
145

    
146
    /**
147
     * @brief   Module identifier.
148
     * @details A value of 0 indicates an uninitialized ID.
149
     *          The vlaues 0 and ~0 are reserved und must not be set.
150
     */
151
    aos_ssspmoduleid_t moduleId;
152
  } sssp;
153
#endif
154
  /**
155
   * @brief   System I/O stream.
156
   */
157
  AosIOStream iostream;
158

    
159
  /**
160
   * @brief   Event structure.
161
   */
162
  struct {
163

    
164
    /**
165
     * @brief   I/O event source.
166
     */
167
    event_source_t io;
168

    
169
    /**
170
     * @brief   OS event source.
171
     */
172
    event_source_t os;
173
  } events;
174

    
175
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__)
176
  /**
177
   * @brief   Pointer to the shell object.
178
   */
179
  aos_shell_t shell;
180
#endif
181

    
182
} aos_system_t;
183

    
184
/**
185
 * @brief   Global system object.
186
 */
187
extern aos_system_t aos;
188

    
189
/**
190
 * @brief   Printf function that uses the default system I/O stream.
191
 *
192
 * @param[in] fmt   Formatted string to print.
193
 */
194
#define aosprintf(fmt, ...)                     chprintf((BaseSequentialStream*)&aos.iostream, fmt, ##__VA_ARGS__)
195

    
196
#ifdef __cplusplus
197
extern "C" {
198
#endif
199
#if (AMIROOS_CFG_SHELL_ENABLE == true)
200
  void aosSysInit(const char* shellPrompt);
201
#else
202
  void aosSysInit(void);
203
#endif
204
  void aosSysStart(void);
205
  #if (AMIROOS_CFG_SSSP_ENABLE == true)
206
  eventmask_t aosSysSsspStartupOsInitSyncCheck(event_listener_t* syncEvtListener);
207
#endif
208
  void aosSysGetUptimeX(aos_timestamp_t* ut);
209
  void aosSysGetDateTime(struct tm* dt);
210
  void aosSysSetDateTime(struct tm* dt);
211
  void aosSysShutdownInit(aos_shutdown_t shutdown);
212
  void aosSysStop(void);
213
  void aosSysDeinit(void);
214
  void aosSysShutdownFinal(aos_shutdown_t shutdown);
215
#ifdef __cplusplus
216
}
217
#endif
218

    
219
/**
220
 * @brief   Retrieves the system uptime.
221
 *
222
 * @param[out] ut   Pointer to the system uptime.
223
 */
224
static inline void aosSysGetUptime(aos_timestamp_t* ut)
225
{
226
  chSysLock();
227
  aosSysGetUptimeX(ut);
228
  chSysUnlock();
229
}
230

    
231
#endif /* _AMIROOS_SYSTEM_H_ */
232

    
233
/** @} */