Revision 6b53f6bf os/core/src/aos_system.c
os/core/src/aos_system.c | ||
---|---|---|
54 | 54 |
#endif /* AMIROOS_CFG_TESTS_ENABLE == true */ |
55 | 55 |
|
56 | 56 |
/** |
57 |
* @brief PD signal GPIO. |
|
58 |
*/ |
|
59 |
static apalControlGpio_t* _gpioPd; |
|
60 |
|
|
61 |
/** |
|
62 |
* @brief Sync signal GPIO. |
|
63 |
*/ |
|
64 |
static apalControlGpio_t* _gpioSync; |
|
65 |
|
|
66 |
/** |
|
67 | 57 |
* @brief Timer to accumulate system uptime. |
68 | 58 |
*/ |
69 | 59 |
static virtual_timer_t _systimer; |
... | ... | |
92 | 82 |
|
93 | 83 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__) |
94 | 84 |
/** |
95 |
* @brief System shell. |
|
96 |
*/ |
|
97 |
static aos_shell_t _shell; |
|
98 |
|
|
99 |
/** |
|
100 | 85 |
* @brief Shell thread working area. |
101 | 86 |
*/ |
102 | 87 |
THD_WORKING_AREA(_shell_wa, AMIROOS_CFG_SHELL_STACKSIZE); |
... | ... | |
153 | 138 |
/** |
154 | 139 |
* @brief Global system object. |
155 | 140 |
*/ |
156 |
aos_system_t aos = { |
|
157 |
/* SSSP stage */ AOS_SSSP_STARTUP_2_1, |
|
158 |
/* I/O stream */ { |
|
159 |
/* channel */ NULL, |
|
160 |
}, |
|
161 |
/* event */ { |
|
162 |
/* I/O */ { |
|
163 |
/* source */ { |
|
164 |
/* next listener */ NULL, |
|
165 |
}, |
|
166 |
/* flagsSignalPd */ 0, |
|
167 |
/* flagsSignalSync */ 0, |
|
168 |
}, |
|
169 |
/* OS */ { |
|
170 |
/* source */ { |
|
171 |
/* next listener */ NULL, |
|
172 |
} |
|
173 |
}, |
|
174 |
}, |
|
175 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) |
|
176 |
/* shell */ &_shell, |
|
177 |
#endif |
|
178 |
}; |
|
141 |
aos_system_t aos; |
|
179 | 142 |
|
180 | 143 |
/** |
181 | 144 |
* @brief Print a separator line. |
... | ... | |
328 | 291 |
if (argc > 3) { |
329 | 292 |
// handle the option |
330 | 293 |
if (strcmp(argv[3], "text") == 0) { |
331 |
aos.shell->config &= ~AOS_SHELL_CONFIG_PROMPT_MINIMAL;
|
|
294 |
aos.shell.config &= ~AOS_SHELL_CONFIG_PROMPT_MINIMAL;
|
|
332 | 295 |
retval = AOS_OK; |
333 | 296 |
} |
334 | 297 |
else if (strcmp(argv[3], "minimal") == 0) { |
335 |
aos.shell->config |= AOS_SHELL_CONFIG_PROMPT_MINIMAL;
|
|
298 |
aos.shell.config |= AOS_SHELL_CONFIG_PROMPT_MINIMAL;
|
|
336 | 299 |
retval = AOS_OK; |
337 | 300 |
} |
338 | 301 |
else if (strcmp(argv[3], "notime") == 0) { |
339 |
aos.shell->config &= ~(AOS_SHELL_CONFIG_PROMPT_UPTIME | AOS_SHELL_CONFIG_PROMPT_DATETIME);
|
|
302 |
aos.shell.config &= ~(AOS_SHELL_CONFIG_PROMPT_UPTIME | AOS_SHELL_CONFIG_PROMPT_DATETIME);
|
|
340 | 303 |
retval = AOS_OK; |
341 | 304 |
} |
342 | 305 |
else if (strcmp(argv[3], "uptime") == 0) { |
343 |
aos.shell->config &= ~AOS_SHELL_CONFIG_PROMPT_DATETIME;
|
|
344 |
aos.shell->config |= AOS_SHELL_CONFIG_PROMPT_UPTIME;
|
|
306 |
aos.shell.config &= ~AOS_SHELL_CONFIG_PROMPT_DATETIME;
|
|
307 |
aos.shell.config |= AOS_SHELL_CONFIG_PROMPT_UPTIME;
|
|
345 | 308 |
retval = AOS_OK; |
346 | 309 |
} |
347 | 310 |
else if (strcmp(argv[3], "date&time") == 0) { |
348 |
aos.shell->config &= ~AOS_SHELL_CONFIG_PROMPT_UPTIME;
|
|
349 |
aos.shell->config |= AOS_SHELL_CONFIG_PROMPT_DATETIME;
|
|
311 |
aos.shell.config &= ~AOS_SHELL_CONFIG_PROMPT_UPTIME;
|
|
312 |
aos.shell.config |= AOS_SHELL_CONFIG_PROMPT_DATETIME;
|
|
350 | 313 |
retval = AOS_OK; |
351 | 314 |
} |
352 | 315 |
else { |
... | ... | |
360 | 323 |
// there must be a further argument |
361 | 324 |
if (argc > 3) { |
362 | 325 |
if (strcmp(argv[3], "casesensitive") == 0) { |
363 |
aos.shell->config |= AOS_SHELL_CONFIG_MATCH_CASE;
|
|
326 |
aos.shell.config |= AOS_SHELL_CONFIG_MATCH_CASE;
|
|
364 | 327 |
retval = AOS_OK; |
365 | 328 |
} |
366 | 329 |
else if (strcmp(argv[3], "caseinsensitive") == 0) { |
367 |
aos.shell->config &= ~AOS_SHELL_CONFIG_MATCH_CASE;
|
|
330 |
aos.shell.config &= ~AOS_SHELL_CONFIG_MATCH_CASE;
|
|
368 | 331 |
retval = AOS_OK; |
369 | 332 |
} |
370 | 333 |
} |
... | ... | |
374 | 337 |
else { |
375 | 338 |
chprintf(stream, "current shell configuration:\n"); |
376 | 339 |
chprintf(stream, " prompt text: %s\n", |
377 |
(aos.shell->prompt != NULL) ? aos.shell->prompt : "n/a");
|
|
340 |
(aos.shell.prompt != NULL) ? aos.shell.prompt : "n/a");
|
|
378 | 341 |
char time[10]; |
379 |
switch (aos.shell->config & (AOS_SHELL_CONFIG_PROMPT_UPTIME | AOS_SHELL_CONFIG_PROMPT_DATETIME)) {
|
|
342 |
switch (aos.shell.config & (AOS_SHELL_CONFIG_PROMPT_UPTIME | AOS_SHELL_CONFIG_PROMPT_DATETIME)) {
|
|
380 | 343 |
case AOS_SHELL_CONFIG_PROMPT_UPTIME: |
381 | 344 |
strcpy(time, "uptime"); break; |
382 | 345 |
case AOS_SHELL_CONFIG_PROMPT_DATETIME: |
... | ... | |
385 | 348 |
strcpy(time, "no time"); break; |
386 | 349 |
} |
387 | 350 |
chprintf(stream, " prompt style: %s, %s\n", |
388 |
(aos.shell->config & AOS_SHELL_CONFIG_PROMPT_MINIMAL) ? "minimal" : "text",
|
|
351 |
(aos.shell.config & AOS_SHELL_CONFIG_PROMPT_MINIMAL) ? "minimal" : "text",
|
|
389 | 352 |
time); |
390 | 353 |
chprintf(stream, " input method: %s\n", |
391 |
(aos.shell->config & AOS_SHELL_CONFIG_INPUT_OVERWRITE) ? "replace" : "insert");
|
|
354 |
(aos.shell.config & AOS_SHELL_CONFIG_INPUT_OVERWRITE) ? "replace" : "insert");
|
|
392 | 355 |
chprintf(stream, " text matching: %s\n", |
393 |
(aos.shell->config & AOS_SHELL_CONFIG_MATCH_CASE) ? "case sensitive" : "case insensitive");
|
|
356 |
(aos.shell.config & AOS_SHELL_CONFIG_MATCH_CASE) ? "case sensitive" : "case insensitive");
|
|
394 | 357 |
retval = AOS_OK; |
395 | 358 |
} |
396 | 359 |
} |
... | ... | |
536 | 499 |
// handle argument |
537 | 500 |
else { |
538 | 501 |
if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--hibernate") == 0) { |
539 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_HIBERNATE);
|
|
502 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_HIBERNATE); |
|
540 | 503 |
chThdTerminate(currp); |
541 | 504 |
return AOS_OK; |
542 | 505 |
} |
543 | 506 |
else if (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "--deepsleep") == 0) { |
544 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP);
|
|
507 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP); |
|
545 | 508 |
chThdTerminate(currp); |
546 | 509 |
return AOS_OK; |
547 | 510 |
} |
548 | 511 |
else if (strcmp(argv[1], "-t") == 0 || strcmp(argv[1], "--transportation") == 0) { |
549 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION);
|
|
512 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION); |
|
550 | 513 |
chThdTerminate(currp); |
551 | 514 |
return AOS_OK; |
552 | 515 |
} |
553 | 516 |
else if (strcmp(argv[1], "-r") == 0 || strcmp(argv[1], "--restart") == 0) { |
554 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_RESTART);
|
|
517 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_RESTART); |
|
555 | 518 |
chThdTerminate(currp); |
556 | 519 |
return AOS_OK; |
557 | 520 |
} |
... | ... | |
598 | 561 |
static void _signalPdCallback(EXTDriver* extp, expchannel_t channel) |
599 | 562 |
{ |
600 | 563 |
(void)extp; |
601 |
(void)channel; |
|
602 | 564 |
|
603 | 565 |
chSysLockFromISR(); |
604 |
chEvtBroadcastFlagsI(&aos.events.io.source, aos.events.io.flagsSignalPd);
|
|
566 |
chEvtBroadcastFlagsI(&aos.events.io, (1 << channel));
|
|
605 | 567 |
chSysUnlockFromISR(); |
606 | 568 |
|
607 | 569 |
return; |
... | ... | |
616 | 578 |
static void _signalSyncCallback(EXTDriver* extp, expchannel_t channel) |
617 | 579 |
{ |
618 | 580 |
(void)extp; |
619 |
(void)channel; |
|
620 | 581 |
|
621 | 582 |
#if (AMIROOS_CFG_SSSP_MASTER == true) |
622 | 583 |
chSysLockFromISR(); |
623 |
chEvtBroadcastFlagsI(&aos.events.io.source, aos.events.io.flagsSignalSync);
|
|
584 |
chEvtBroadcastFlagsI(&aos.events.io, (1 << channel));
|
|
624 | 585 |
chSysUnlockFromISR(); |
625 | 586 |
#else |
626 | 587 |
apalControlGpioState_t s_state; |
... | ... | |
630 | 591 |
// get current uptime |
631 | 592 |
aosSysGetUptimeX(&uptime); |
632 | 593 |
// read signal S |
633 |
apalControlGpioGet(_gpioSync, &s_state);
|
|
594 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
634 | 595 |
// if S was toggled from on to off during SSSP operation phase |
635 |
if (aos.ssspStage == AOS_SSSP_OPERATION && s_state == APAL_GPIO_OFF) {
|
|
596 |
if (aos.sssp.stage == AOS_SSSP_OPERATION && s_state == APAL_GPIO_OFF) {
|
|
636 | 597 |
// align the uptime with the synchronization period |
637 | 598 |
if (uptime % AMIROOS_CFG_SSSP_SYSSYNCPERIOD < AMIROOS_CFG_SSSP_SYSSYNCPERIOD / 2) { |
638 | 599 |
_uptime -= uptime % AMIROOS_CFG_SSSP_SYSSYNCPERIOD; |
... | ... | |
641 | 602 |
} |
642 | 603 |
} |
643 | 604 |
// broadcast event |
644 |
chEvtBroadcastFlagsI(&aos.events.io.source, aos.events.io.flagsSignalSync);
|
|
605 |
chEvtBroadcastFlagsI(&aos.events.io, (1 << channel));
|
|
645 | 606 |
chSysUnlockFromISR(); |
646 | 607 |
#endif |
647 | 608 |
|
... | ... | |
686 | 647 |
|
687 | 648 |
chSysLockFromISR(); |
688 | 649 |
// read and toggle signal S |
689 |
apalControlGpioGet(_gpioSync, &s_state);
|
|
650 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
690 | 651 |
s_state = (s_state == APAL_GPIO_ON) ? APAL_GPIO_OFF : APAL_GPIO_ON; |
691 |
apalControlGpioSet(_gpioSync, s_state);
|
|
652 |
apalControlGpioSet(&moduleSsspGpioSync, s_state);
|
|
692 | 653 |
// if S was toggled from off to on |
693 | 654 |
if (s_state == APAL_GPIO_ON) { |
694 | 655 |
// reconfigure the timer precisely, because the logically falling edge (next interrupt) snychronizes the system time |
... | ... | |
711 | 672 |
* @brief AMiRo-OS system initialization. |
712 | 673 |
* @note Must be called from the system control thread (usually main thread). |
713 | 674 |
* |
714 |
* @param[in] extDrv Pointer to the interrupt driver. |
|
715 |
* @param[in] extCfg Configuration for the interrupt driver. |
|
716 |
* @param[in] gpioPd GPIO of the PD signal. |
|
717 |
* @param[in] gpioSync GPIO of the Sync signal |
|
718 |
* @param[in] evtFlagsPd Event flags to be set when a PD interrupt occurs. |
|
719 |
* @param[in] evtFlagsSync Event flags to be set when a Sync interrupt occurs. |
|
720 | 675 |
* @param[in] shellPrompt String to be printed as prompt of the system shell. |
721 |
* @param[in] stdio Default (usually physically) interface for I/O like shell. |
|
722 | 676 |
*/ |
723 |
void aosSysInit(EXTDriver* extDrv, |
|
724 |
EXTConfig* extCfg, |
|
725 |
apalControlGpio_t* gpioPd, |
|
726 |
apalControlGpio_t* gpioSync, |
|
727 |
eventflags_t evtFlagsPd, |
|
728 |
eventflags_t evtFlagsSync, |
|
729 |
const char* shellPrompt) |
|
677 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__) |
|
678 |
void aosSysInit(const char* shellPrompt) |
|
679 |
#else |
|
680 |
void aosSysInit(void) |
|
681 |
#endif |
|
730 | 682 |
{ |
731 |
// check arguments |
|
732 |
aosDbgCheck(extDrv != NULL); |
|
733 |
aosDbgCheck(extCfg != NULL); |
|
734 |
aosDbgCheck(gpioPd != NULL); |
|
735 |
aosDbgCheck(gpioSync != NULL); |
|
736 |
|
|
737 | 683 |
// set control thread to maximum priority |
738 | 684 |
chThdSetPriority(AOS_THD_CTRLPRIO); |
739 | 685 |
|
740 | 686 |
// set local variables |
741 |
_gpioPd = gpioPd; |
|
742 |
_gpioSync = gpioSync; |
|
743 | 687 |
chVTObjectInit(&_systimer); |
744 | 688 |
_synctime = 0; |
745 | 689 |
_uptime = 0; |
... | ... | |
749 | 693 |
#endif |
750 | 694 |
|
751 | 695 |
// set aos configuration |
752 |
aos.ssspStage = AOS_SSSP_STARTUP_2_1; |
|
696 |
aos.sssp.stage = AOS_SSSP_STARTUP_2_1; |
|
697 |
aos.sssp.moduleId = 0; |
|
753 | 698 |
aosIOStreamInit(&aos.iostream); |
754 |
chEvtObjectInit(&aos.events.io.source); |
|
755 |
chEvtObjectInit(&aos.events.os.source); |
|
756 |
aos.events.io.flagsSignalPd = evtFlagsPd; |
|
757 |
aos.events.io.flagsSignalSync = evtFlagsSync; |
|
699 |
chEvtObjectInit(&aos.events.io); |
|
700 |
chEvtObjectInit(&aos.events.os); |
|
758 | 701 |
|
759 | 702 |
// setup external interrupt system |
760 |
extCfg->channels[gpioPd->gpio->pad].cb = _signalPdCallback;
|
|
761 |
extCfg->channels[gpioSync->gpio->pad].cb = _signalSyncCallback;
|
|
762 |
extStart(extDrv, extCfg);
|
|
703 |
moduleHalExtConfig.channels[moduleSsspGpioPd.gpio->pad].cb = _signalPdCallback;
|
|
704 |
moduleHalExtConfig.channels[moduleSsspGpioSync.gpio->pad].cb = _signalSyncCallback;
|
|
705 |
extStart(&MODULE_HAL_EXT, &moduleHalExtConfig);
|
|
763 | 706 |
|
764 | 707 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) |
765 | 708 |
// init shell |
766 |
aosShellInit(aos.shell, |
|
767 |
&aos.events.os.source,
|
|
709 |
aosShellInit(&aos.shell,
|
|
710 |
&aos.events.os, |
|
768 | 711 |
shellPrompt, |
769 | 712 |
_shell_line, |
770 | 713 |
AMIROOS_CFG_SHELL_LINEWIDTH, |
771 | 714 |
_shell_arglist, |
772 | 715 |
AMIROOS_CFG_SHELL_MAXARGS); |
773 | 716 |
// add system commands |
774 |
aosShellAddCommand(aos.shell, &_shellcmd_config); |
|
775 |
aosShellAddCommand(aos.shell, &_shellcmd_info); |
|
776 |
aosShellAddCommand(aos.shell, &_shellcmd_shutdown); |
|
717 |
aosShellAddCommand(&aos.shell, &_shellcmd_config);
|
|
718 |
aosShellAddCommand(&aos.shell, &_shellcmd_info);
|
|
719 |
aosShellAddCommand(&aos.shell, &_shellcmd_shutdown);
|
|
777 | 720 |
#if (AMIROOS_CFG_TESTS_ENABLE == true) |
778 |
aosShellAddCommand(aos.shell, &_shellcmd_kerneltest); |
|
721 |
aosShellAddCommand(&aos.shell, &_shellcmd_kerneltest);
|
|
779 | 722 |
#endif |
780 |
#else |
|
781 |
(void)shellPrompt; |
|
782 | 723 |
#endif |
783 | 724 |
|
784 | 725 |
return; |
... | ... | |
790 | 731 |
inline void aosSysStart(void) |
791 | 732 |
{ |
792 | 733 |
// update the system SSSP stage |
793 |
aos.ssspStage = AOS_SSSP_OPERATION;
|
|
734 |
aos.sssp.stage = AOS_SSSP_OPERATION;
|
|
794 | 735 |
|
795 | 736 |
// print system information; |
796 | 737 |
_printSystemInfo((BaseSequentialStream*)&aos.iostream); |
... | ... | |
798 | 739 |
|
799 | 740 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) |
800 | 741 |
// start system shell thread |
801 |
aos.shell->thread = chThdCreateStatic(_shell_wa, sizeof(_shell_wa), AMIROOS_CFG_SHELL_THREADPRIO, aosShellThread, aos.shell);
|
|
742 |
aos.shell.thread = chThdCreateStatic(_shell_wa, sizeof(_shell_wa), AMIROOS_CFG_SHELL_THREADPRIO, aosShellThread, &aos.shell);
|
|
802 | 743 |
#endif |
803 | 744 |
|
804 | 745 |
return; |
... | ... | |
822 | 763 |
apalControlGpioState_t s; |
823 | 764 |
|
824 | 765 |
// update the system SSSP stage |
825 |
aos.ssspStage = AOS_SSSP_STARTUP_2_2;
|
|
766 |
aos.sssp.stage = AOS_SSSP_STARTUP_2_2;
|
|
826 | 767 |
|
827 | 768 |
// deactivate the sync signal to indicate that the module is ready (SSSPv1 stage 2.1 of startup phase) |
828 |
apalControlGpioSet(_gpioSync, APAL_GPIO_OFF);
|
|
769 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
829 | 770 |
|
830 | 771 |
// wait for any event to occur (do not apply any filter in order not to miss any event) |
831 | 772 |
m = chEvtWaitOne(ALL_EVENTS); |
832 | 773 |
f = chEvtGetAndClearFlags(syncEvtListener); |
833 |
apalControlGpioGet(_gpioSync, &s);
|
|
774 |
apalControlGpioGet(&moduleSsspGpioSync, &s);
|
|
834 | 775 |
|
835 | 776 |
// if the event was a system event, |
836 | 777 |
// and it was fired because of the SysSync control signal, |
837 | 778 |
// and the SysSync control signal has been deactivated |
838 | 779 |
if (m & syncEvtListener->events && |
839 |
f == aos.events.io.flagsSignalSync &&
|
|
780 |
f == MODULE_SSSP_EVENTFLAGS_SYNC &&
|
|
840 | 781 |
s == APAL_GPIO_OFF) { |
841 | 782 |
chSysLock(); |
842 | 783 |
#if (AMIROOS_CFG_SSSP_MASTER == true) |
... | ... | |
922 | 863 |
#endif |
923 | 864 |
|
924 | 865 |
// update the system SSSP stage |
925 |
aos.ssspStage = AOS_SSSP_SHUTDOWN_1_1;
|
|
866 |
aos.sssp.stage = AOS_SSSP_SHUTDOWN_1_1;
|
|
926 | 867 |
|
927 | 868 |
// activate the SYS_PD control signal only, if this module initiated the shutdown |
928 | 869 |
chSysLock(); |
929 | 870 |
if (shutdown != AOS_SHUTDOWN_PASSIVE) { |
930 |
apalControlGpioSet(_gpioPd, APAL_GPIO_ON);
|
|
871 |
apalControlGpioSet(&moduleSsspGpioPd, APAL_GPIO_ON);
|
|
931 | 872 |
} |
932 | 873 |
// activate the SYS_SYNC signal |
933 |
apalControlGpioSet(_gpioSync, APAL_GPIO_ON);
|
|
874 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_ON);
|
|
934 | 875 |
chSysUnlock(); |
935 | 876 |
|
936 | 877 |
switch (shutdown) { |
937 | 878 |
case AOS_SHUTDOWN_PASSIVE: |
938 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_SHUTDOWN);
|
|
879 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_SHUTDOWN); |
|
939 | 880 |
aosprintf("shutdown request received...\n"); |
940 | 881 |
break; |
941 | 882 |
case AOS_SHUTDOWN_HIBERNATE: |
942 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_HIBERNATE);
|
|
883 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_HIBERNATE); |
|
943 | 884 |
aosprintf("shutdown to hibernate mode...\n"); |
944 | 885 |
break; |
945 | 886 |
case AOS_SHUTDOWN_DEEPSLEEP: |
946 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP);
|
|
887 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_DEEPSLEEP); |
|
947 | 888 |
aosprintf("shutdown to deepsleep mode...\n"); |
948 | 889 |
break; |
949 | 890 |
case AOS_SHUTDOWN_TRANSPORTATION: |
950 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION);
|
|
891 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_TRANSPORTATION); |
|
951 | 892 |
aosprintf("shutdown to transportation mode...\n"); |
952 | 893 |
break; |
953 | 894 |
case AOS_SHUTDOWN_RESTART: |
954 |
chEvtBroadcastFlags(&aos.events.os.source, AOS_SYSTEM_EVENTFLAGS_RESTART);
|
|
895 |
chEvtBroadcastFlags(&aos.events.os, AOS_SYSTEM_EVENTFLAGS_RESTART); |
|
955 | 896 |
aosprintf("restarting system...\n"); |
956 | 897 |
break; |
957 | 898 |
// must never occur |
... | ... | |
961 | 902 |
} |
962 | 903 |
|
963 | 904 |
// update the system SSSP stage |
964 |
aos.ssspStage = AOS_SSSP_SHUTDOWN_1_2;
|
|
905 |
aos.sssp.stage = AOS_SSSP_SHUTDOWN_1_2;
|
|
965 | 906 |
|
966 | 907 |
return; |
967 | 908 |
} |
... | ... | |
972 | 913 |
void aosSysStop(void) |
973 | 914 |
{ |
974 | 915 |
#if (AMIROOS_CFG_SHELL_ENABLE == true) |
975 |
chThdWait(aos.shell->thread);
|
|
916 |
chThdWait(aos.shell.thread);
|
|
976 | 917 |
#endif |
977 | 918 |
|
978 | 919 |
return; |
... | ... | |
1003 | 944 |
extStop(extDrv); |
1004 | 945 |
|
1005 | 946 |
// update the system SSSP stage |
1006 |
aos.ssspStage = AOS_SSSP_SHUTDOWN_1_3;
|
|
947 |
aos.sssp.stage = AOS_SSSP_SHUTDOWN_1_3;
|
|
1007 | 948 |
|
1008 | 949 |
// call bootloader callback depending on arguments |
1009 | 950 |
switch (shutdown) { |
Also available in: Unified diff