Revision 933df08e

View differences:

modules/DiWheelDrive_1-1/aosconf.h
99 99
#endif
100 100

  
101 101
/**
102
 * @brief   Flag to set the module to be the first in the stack.
103
 * @details There must be only one module with this flag set to true in a system.
104
 */
105
#if !defined(OS_CFG_SSSP_STACK_START)
106
  #define AMIROOS_CFG_SSSP_STACK_START          true
107
#else
108
  #define AMIROOS_CFG_SSSP_STACK_START          OS_CFG_SSSP_STACK_START
109
#endif
110

  
111
/**
112
 * @brief   Flag to set the module to be the last in the stack.
113
 * @details There must be only one module with this flag set to true in a system.
114
 */
115
#if !defined(OS_CFG_SSSP_STACK_END)
116
  #define AMIROOS_CFG_SSSP_STACK_END            false
117
#else
118
  #define AMIROOS_CFG_SSSP_STACK_END            OS_CFG_SSSP_STACK_END
119
#endif
120

  
121
/**
122
 * @brief   Delay time (in microseconds) how long a SSSP signal must be active.
123
 */
124
#if !defined(OS_CFG_SSSP_SIGNALDELAY)
125
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          1000
126
#else
127
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          OS_CFG_SSSP_SIGNALDELAY
128
#endif
129

  
130
/**
102 131
 * @brief   Time boundary for robot wide clock synchronization in microseconds.
103 132
 * @details Whenever the SSSP S (snychronization) signal gets logically deactivated,
104 133
 *          All modules need to align their local uptime to the nearest multiple of this value.
......
121 150
/**
122 151
 * @brief   Shell enable flag.
123 152
 */
124
#if (AMIROOS_CFG_TESTS_ENABLE == false) && !defined(OS_CFG_SHELL_ENABLE)
153
#if (AMIROOS_CFG_TESTS_ENABLE != true) && !defined(OS_CFG_SHELL_ENABLE)
125 154
  #define AMIROOS_CFG_SHELL_ENABLE              true
126 155
#elif (AMIROOS_CFG_TESTS_ENABLE == true)
127 156
  #define AMIROOS_CFG_SHELL_ENABLE              true
modules/DiWheelDrive_1-1/board.h
260 260
 * PA9  - PROG_RX                   (alternate pushpull 50MHz)
261 261
 * PA10 - PROG_TX                   (input pullup)
262 262
 * PA11 - CAN_RX                    (input pullup)
263
 * PA12 - CAN_TX                    (input floating)
263
 * PA12 - CAN_TX                    (alternate pushpull 50MHz)
264 264
 * PA13 - SWDIO                     (input pullup)
265 265
 * PA14 - SWCLK                     (input pullup)
266 266
 * PA15 - DRIVE_PWM2B               (alternate pushpull 50MHz)
......
277 277
                                     PIN_CR(GPIOA_PROG_RX, PIN_MODE_OUTPUT_50M, PIN_CNF_ALTERNATE_PUSHPULL) |      \
278 278
                                     PIN_CR(GPIOA_PROG_TX, PIN_MODE_INPUT, PIN_CNF_INPUT_PULLX) |                  \
279 279
                                     PIN_CR(GPIOA_CAN_RX, PIN_MODE_INPUT, PIN_CNF_INPUT_PULLX) |                   \
280
                                     PIN_CR(GPIOA_CAN_TX, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
280
                                     PIN_CR(GPIOA_CAN_TX, PIN_MODE_OUTPUT_50M, PIN_CNF_ALTERNATE_PUSHPULL) |       \
281 281
                                     PIN_CR(GPIOA_SWDIO, PIN_MODE_INPUT, PIN_CNF_INPUT_PULLX) |                    \
282 282
                                     PIN_CR(GPIOA_SWCLK, PIN_MODE_INPUT, PIN_CNF_INPUT_PULLX) |                    \
283 283
                                     PIN_CR(GPIOA_DRIVE_PWM2B, PIN_MODE_OUTPUT_50M, PIN_CNF_ALTERNATE_PUSHPULL))
modules/DiWheelDrive_1-1/module.c
310 310
 */
311 311
/*===========================================================================*/
312 312

  
313

  
314 313
apalControlGpio_t moduleSsspGpioPd = {
315 314
  /* GPIO */ &moduleGpioSysPd,
316 315
  /* meta */ {
......
329 328
  },
330 329
};
331 330

  
331
apalControlGpio_t moduleSsspGpioUp = {
332
  /* GPIO */ &moduleGpioSysUartUp,
333
  /* meta */ {
334
    /* active state */ APAL_GPIO_ACTIVE_LOW,
335
    /* edge         */ APAL_GPIO_EDGE_FALLING,
336
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
337
  },
338
};
339

  
332 340
/** @} */
333 341

  
334 342
/*===========================================================================*/
modules/DiWheelDrive_1-1/module.h
437 437
extern apalControlGpio_t moduleSsspGpioSync;
438 438

  
439 439
/**
440
 * @brief   UP signal GPIO.
441
 */
442
extern apalControlGpio_t moduleSsspGpioUp;
443

  
444
/**
440 445
 * @brief   Event flags for PD signal events.
441 446
 */
442 447
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
443 448

  
444 449
/**
445
 * @brief   Event flags for Sync signal events.
450
 * @brief   Event flags for SYNC signal events.
446 451
 */
447 452
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
448 453

  
449 454
/**
455
 * @brief   Event flags for UP signal events.
456
 */
457
#define MODULE_SSSP_EVENTFLAGS_UP               MODULE_OS_IOEVENTFLAGS_SYSUARTUP
458

  
459
/**
450 460
 * @brief   Hook to handle IO events during SSSP startup synchronization.
451 461
 */
452
#define MODULE_SSSP_STARTUP_OSINIT_OUTRO_IOEVENT_HOOK(mask, flags) {          \
462
#define MODULE_SSSP_STARTUP_2_2_IOEVENT_HOOK(mask, flags) {                   \
453 463
  /* ignore all events */                                                     \
454 464
  (void)mask;                                                                 \
455 465
  (void)flags;                                                                \
modules/LightRing_1-0/aosconf.h
99 99
#endif
100 100

  
101 101
/**
102
 * @brief   Flag to set the module to be the first in the stack.
103
 * @details There must be only one module with this flag set to true in a system.
104
 */
105
#if !defined(OS_CFG_SSSP_STACK_START)
106
  #define AMIROOS_CFG_SSSP_STACK_START          false
107
#else
108
  #define AMIROOS_CFG_SSSP_STACK_START          OS_CFG_SSSP_STACK_START
109
#endif
110

  
111
/**
112
 * @brief   Flag to set the module to be the last in the stack.
113
 * @details There must be only one module with this flag set to true in a system.
114
 */
115
#if !defined(OS_CFG_SSSP_STACK_END)
116
  #define AMIROOS_CFG_SSSP_STACK_END            true
117
#else
118
  #define AMIROOS_CFG_SSSP_STACK_END            OS_CFG_SSSP_STACK_END
119
#endif
120

  
121
/**
122
 * @brief   Delay time (in microseconds) how long a SSSP signal must be active.
123
 */
124
#if !defined(OS_CFG_SSSP_SIGNALDELAY)
125
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          1000
126
#else
127
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          OS_CFG_SSSP_SIGNALDELAY
128
#endif
129

  
130
/**
102 131
 * @brief   Time boundary for robot wide clock synchronization in microseconds.
103 132
 * @details Whenever the SSSP S (snychronization) signal gets logically deactivated,
104 133
 *          All modules need to align their local uptime to the nearest multiple of this value.
......
121 150
/**
122 151
 * @brief   Shell enable flag.
123 152
 */
124
#if (AMIROOS_CFG_TESTS_ENABLE == false) && !defined(OS_CFG_SHELL_ENABLE)
153
#if (AMIROOS_CFG_TESTS_ENABLE != true) && !defined(OS_CFG_SHELL_ENABLE)
125 154
  #define AMIROOS_CFG_SHELL_ENABLE              true
126 155
#elif (AMIROOS_CFG_TESTS_ENABLE == true)
127 156
  #define AMIROOS_CFG_SHELL_ENABLE              true
modules/LightRing_1-0/module.c
250 250
  },
251 251
};
252 252

  
253
apalControlGpio_t moduleSsspGpioDn = {
254
  /* GPIO */ &moduleGpioSysUartDn,
255
  /* meta */ {
256
    /* active state */ APAL_GPIO_ACTIVE_LOW,
257
    /* edge         */ APAL_GPIO_EDGE_FALLING,
258
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
259
  },
260
};
261

  
253 262
/** @} */
254 263

  
255 264
/*===========================================================================*/
modules/LightRing_1-0/module.h
277 277
extern apalControlGpio_t moduleSsspGpioSync;
278 278

  
279 279
/**
280
 * @brief   DN signal GPIO.
281
 */
282
extern apalControlGpio_t moduleSsspGpioDn;
283

  
284
/**
280 285
 * @brief   Event flags for PD signal events.
281 286
 */
282 287
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
283 288

  
284 289
/**
285
 * @brief   Event flags for Sync signal events.
290
 * @brief   Event flags for SYNC signal events.
286 291
 */
287 292
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
288 293

  
289 294
/**
295
 * @brief   Event flags for DN signal events.
296
 */
297
#define MODULE_SSSP_EVENTFLAGS_DN               MODULE_OS_IOEVENTFLAGS_SYSUARTDN
298

  
299
/**
290 300
 * @brief   Hook to handle IO events during SSSP startup synchronization.
291 301
 */
292
#define MODULE_SSSP_STARTUP_OSINIT_OUTRO_IOEVENT_HOOK(mask, flags) {          \
302
#define MODULE_SSSP_STARTUP_2_2_IOEVENT_HOOK(mask, flags) {                   \
293 303
  /* ignore all events */                                                     \
294 304
  (void)mask;                                                                 \
295 305
  (void)flags;                                                                \
modules/PowerManagement_1-1/aosconf.h
99 99
#endif
100 100

  
101 101
/**
102
 * @brief   Flag to set the module to be the first in the stack.
103
 * @details There must be only one module with this flag set to true in a system.
104
 */
105
#if !defined(OS_CFG_SSSP_STACK_START)
106
  #define AMIROOS_CFG_SSSP_STACK_START          false
107
#else
108
  #define AMIROOS_CFG_SSSP_STACK_START          OS_CFG_SSSP_STACK_START
109
#endif
110

  
111
/**
112
 * @brief   Flag to set the module to be the last in the stack.
113
 * @details There must be only one module with this flag set to true in a system.
114
 */
115
#if !defined(OS_CFG_SSSP_STACK_END)
116
  #define AMIROOS_CFG_SSSP_STACK_END            false
117
#else
118
  #define AMIROOS_CFG_SSSP_STACK_END            OS_CFG_SSSP_STACK_END
119
#endif
120

  
121
/**
122
 * @brief   Delay time (in microseconds) how long a SSSP signal must be active.
123
 */
124
#if !defined(OS_CFG_SSSP_SIGNALDELAY)
125
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          1000
126
#else
127
  #define AMIROOS_CFG_SSSP_SIGNALDELAY          OS_CFG_SSSP_SIGNALDELAY
128
#endif
129

  
130
/**
102 131
 * @brief   Time boundary for robot wide clock synchronization in microseconds.
103 132
 * @details Whenever the SSSP S (snychronization) signal gets logically deactivated,
104 133
 *          All modules need to align their local uptime to the nearest multiple of this value.
......
121 150
/**
122 151
 * @brief   Shell enable flag.
123 152
 */
124
#if (AMIROOS_CFG_TESTS_ENABLE == false) && !defined(OS_CFG_SHELL_ENABLE)
153
#if (AMIROOS_CFG_TESTS_ENABLE != true) && !defined(OS_CFG_SHELL_ENABLE)
125 154
  #define AMIROOS_CFG_SHELL_ENABLE              true
126 155
#elif (AMIROOS_CFG_TESTS_ENABLE == true)
127 156
  #define AMIROOS_CFG_SHELL_ENABLE              true
modules/PowerManagement_1-1/board.h
323 323
 * PA9  - PROG_RX                       (alternate 7 pushpull floating)
324 324
 * PA10 - PROG_TX                       (alternate 7 pushpull pullup)
325 325
 * PA11 - CAN_RX                        (alternate 9 pushpull floating)
326
 * PA12 - CAN_TX                        (input floating)
326
 * PA12 - CAN_TX                        (alternate 9 pushpull floating)
327 327
 * PA13 - SWDIO                         (alternate 0 pushpull floating)
328 328
 * PA14 - SWCLK                         (alternate 0 pushpull floating)
329 329
 * PA15 - SYS_SPI_SS1_N                 (input floating)
......
340 340
                                         PIN_MODE_ALTERNATE(GPIOA_PROG_RX) |                          \
341 341
                                         PIN_MODE_ALTERNATE(GPIOA_PROG_TX) |                          \
342 342
                                         PIN_MODE_ALTERNATE(GPIOA_CAN_RX) |                           \
343
                                         PIN_MODE_INPUT(GPIOA_CAN_TX) |                               \
343
                                         PIN_MODE_ALTERNATE(GPIOA_CAN_TX) |                           \
344 344
                                         PIN_MODE_ALTERNATE(GPIOA_SWDIO) |                            \
345 345
                                         PIN_MODE_ALTERNATE(GPIOA_SWCLK) |                            \
346 346
                                         PIN_MODE_INPUT(GPIOA_SYS_SPI_SS1_N))
modules/PowerManagement_1-1/module.c
69 69

  
70 70
CANConfig moduleHalCanConfig = {
71 71
  /* mcr  */ CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
72
  /* btr  */ CAN_BTR_SJW(1) | CAN_BTR_TS2(2) | CAN_BTR_TS1(13) | CAN_BTR_BRP(1),
72
  /* btr  */ CAN_BTR_SJW(1) | CAN_BTR_TS2(3) | CAN_BTR_TS1(15) | CAN_BTR_BRP(1),
73 73
};
74 74

  
75 75
EXTConfig moduleHalExtConfig = {
......
386 386
  },
387 387
};
388 388

  
389
apalControlGpio_t moduleSsspGpioDn = {
390
  /* GPIO */ &moduleGpioSysUartDn,
391
  /* meta */ {
392
    /* active state */ APAL_GPIO_ACTIVE_LOW,
393
    /* edge         */ APAL_GPIO_EDGE_FALLING,
394
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
395
  },
396
};
397

  
398
apalControlGpio_t moduleSsspGpioUp = {
399
  /* GPIO */ &moduleGpioSysUartUp,
400
  /* meta */ {
401
    /* active state */ APAL_GPIO_ACTIVE_LOW,
402
    /* edge         */ APAL_GPIO_EDGE_FALLING,
403
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
404
  },
405
};
406

  
389 407
/** @} */
390 408

  
391 409
/*===========================================================================*/
modules/PowerManagement_1-1/module.h
514 514
extern apalControlGpio_t moduleSsspGpioSync;
515 515

  
516 516
/**
517
 * @brief   DN signal GPIO.
518
 */
519
extern apalControlGpio_t moduleSsspGpioDn;
520

  
521
/**
522
 * @brief   UP signal GPIO.
523
 */
524
extern apalControlGpio_t moduleSsspGpioUp;
525

  
526
/**
517 527
 * @brief   Event flags for PD signal events.
518 528
 */
519 529
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
520 530

  
521 531
/**
522
 * @brief   Event flags for Sync signal events.
532
 * @brief   Event flags for SYNC signal events.
523 533
 */
524 534
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
525 535

  
526 536
/**
537
 * @brief   Event flags for UP signal events.
538
 */
539
#define MODULE_SSSP_EVENTFLAGS_UP               MODULE_OS_IOEVENTFLAGS_SYSUARTUP
540

  
541
/**
542
 * @brief   Event flags for DN signal events.
543
 */
544
#define MODULE_SSSP_EVENTFLAGS_DN               MODULE_OS_IOEVENTFLAGS_SYSUARTDN
545

  
546
/**
527 547
 * @brief   Hook to handle IO events during SSSP startup synchronization.
528 548
 */
529
#define MODULE_SSSP_STARTUP_OSINIT_OUTRO_IOEVENT_HOOK(mask, flags) {          \
549
#define MODULE_SSSP_STARTUP_2_2_IOEVENT_HOOK(mask, flags) {                   \
530 550
  /* ignore all events */                                                     \
531 551
  (void)mask;                                                                 \
532 552
  (void)flags;                                                                \
os/core/inc/aos_confcheck.h
49 49
  #error "AMIROOS_CFG_SSSP_MASTER not defined in aosconf.h"
50 50
#endif
51 51

  
52
#ifndef AMIROOS_CFG_SSSP_STACK_START
53
  #error "AMIROOS_CFG_SSSP_STACK_START not defined in aosconf.h"
54
#endif
55

  
56
#ifndef AMIROOS_CFG_SSSP_STACK_END
57
  #error "AMIROOS_CFG_SSSP_STACK_END not defined in aosconf.h"
58
#endif
59

  
60
#if (AMIROOS_CFG_SSSP_STACK_START == true) && (AMIROOS_CFG_SSSP_STACK_END == true)
61
  #warning "AMIROOS_CFG_SSSP_STACK_START and AMIROOS_CFG_SSSP_STACK_END both enabled in aosconf.h"
62
  #if (AMIROOS_CFG_SSSP_MASTER != true)
63
    #error "AMIROOS_CFG_SSSP_MASTER must be enabled in this case"
64
  #endif
65
#endif
66

  
67
#ifndef AMIROOS_CFG_SSSP_SIGNALDELAY
68
  #error "AMIROOS_CFG_SSSP_SIGNALDELAY not defined in aosconf.h"
69
#endif
70

  
52 71
#ifndef AMIROOS_CFG_SSSP_SYSSYNCPERIOD
53 72
  #error "AMIROOS_CFG_SSSP_SYSSYNCPERIOD not defined in aosconf.h"
54 73
#endif
os/core/inc/aos_debug.h
54 54
  chDbgAssert(c, r);                                      \
55 55
}
56 56

  
57
/**
58
 * @brief   Printf function for messages only printed in debug builds.
59
 *
60
 * @param[in] fmt   Formatted string to print.
61
 */
62
#define aosDbgPrintf(fmt, ...)           chprintf((BaseSequentialStream*)&aos.iostream, fmt, ##__VA_ARGS__)
63

  
57 64
#else
58 65

  
59 66
#define aosDbgCheck(c) {                                  \
......
69 76
  (void)(r);                                              \
70 77
}
71 78

  
79
#define aosDbgPrintf(fmt, ...) {                          \
80
  (void)(fmt);                                            \
81
}
82

  
72 83
#endif
73 84

  
74 85
#ifdef __cplusplus
os/core/inc/aos_system.h
58 58
/**
59 59
 * @brief   Major version of the implemented SSSP.
60 60
 */
61
#define AOS_SYSTEM_SSSP_MAJOR                   1
61
#define AOS_SYSTEM_SSSP_VERSION_MAJOR           1
62 62

  
63 63
/**
64 64
 * @brief   Minor version of the implemented SSSP.
65 65
 */
66
#define AOS_SYSTEM_SSSP_MINOR                   3
66
#define AOS_SYSTEM_SSSP_VERSION_MINOR           4
67

  
68
/**
69
 * @brief   Timeout delay according to SSSP.
70
 * @details SSSP defines timeouts to be ten times longer than the signal delay time.
71
 */
72
#define AOS_SYSTEM_SSSP_TIMEOUT                 (10 * AMIROOS_CFG_SSSP_SIGNALDELAY)
67 73

  
68 74
/**
69 75
 * @brief   Enumerator to identify shutdown types.
......
78 84
} aos_shutdown_t;
79 85

  
80 86
/**
81
 * @brief   Enumerator of the several stages of SSSP
87
 * @brief   Enumerator of the several stages of SSSP.
82 88
 */
83 89
typedef enum aos_ssspstage {
84
  AOS_SSSP_STARTUP_1_1  = 0x0000, /**< Identifier of SSSP startup phase stage 1-1. */
85
  AOS_SSSP_STARTUP_1_2  = 0x0001, /**< Identifier of SSSP startup phase stage 1-2. */
86
  AOS_SSSP_STARTUP_1_3  = 0x0002, /**< Identifier of SSSP startup phase stage 1-3. */
87
  AOS_SSSP_STARTUP_2_1  = 0x0004, /**< Identifier of SSSP startup phase stage 2-1. */
88
  AOS_SSSP_STARTUP_2_2  = 0x0005, /**< Identifier of SSSP startup phase stage 2-2. */
89
  AOS_SSSP_STARTUP_3_1  = 0x0008, /**< Identifier of SSSP startup phase stage 3-1. */
90
  AOS_SSSP_STARTUP_3_2  = 0x0009, /**< Identifier of SSSP startup phase stage 3-2. */
91
  AOS_SSSP_STARTUP_3_3  = 0x000A, /**< Identifier of SSSP startup phase stage 3-3. */
92
  AOS_SSSP_STARTUP_3_4  = 0x000B, /**< Identifier of SSSP startup phase stage 3-4. */
93
  AOS_SSSP_OPERATION    = 0x0100, /**< Identifier of SSSP operation pahse. */
94
  AOS_SSSP_SHUTDOWN_1_1 = 0x0200, /**< Identifier of SSSP shutdown phase stage 1-1. */
95
  AOS_SSSP_SHUTDOWN_1_2 = 0x0201, /**< Identifier of SSSP shutdown phase stage 1-2. */
96
  AOS_SSSP_SHUTDOWN_1_3 = 0x0202, /**< Identifier of SSSP shutdown phase stage 1-3. */
97
  AOS_SSSP_SHUTDOWN_2_1 = 0x0204, /**< Identifier of SSSP shutdown phase stage 2-1. */
98
  AOS_SSSP_SHUTDOWN_2_2 = 0x0205, /**< Identifier of SSSP shutdown phase stage 2-2. */
99
  AOS_SSSP_SHUTDOWN_3   = 0x0208, /**< Identifier of SSSP shutdown phase stage 3. */
90
  AOS_SSSP_STARTUP_1_1  = 0x10, /**< Identifier of SSSP startup phase stage 1-1. */
91
  AOS_SSSP_STARTUP_1_2  = 0x11, /**< Identifier of SSSP startup phase stage 1-2. */
92
  AOS_SSSP_STARTUP_1_3  = 0x12, /**< Identifier of SSSP startup phase stage 1-3. */
93
  AOS_SSSP_STARTUP_2_1  = 0x14, /**< Identifier of SSSP startup phase stage 2-1. */
94
  AOS_SSSP_STARTUP_2_2  = 0x15, /**< Identifier of SSSP startup phase stage 2-2. */
95
  AOS_SSSP_STARTUP_3_1  = 0x18, /**< Identifier of SSSP startup phase stage 3-1. */
96
  AOS_SSSP_STARTUP_3_2  = 0x19, /**< Identifier of SSSP startup phase stage 3-2. */
97
  AOS_SSSP_STARTUP_3_3  = 0x1A, /**< Identifier of SSSP startup phase stage 3-3. */
98
  AOS_SSSP_STARTUP_3_4  = 0x1B, /**< Identifier of SSSP startup phase stage 3-4. */
99
  AOS_SSSP_OPERATION    = 0x20, /**< Identifier of SSSP operation pahse. */
100
  AOS_SSSP_SHUTDOWN_1_1 = 0x30, /**< Identifier of SSSP shutdown phase sta