Revision 1a8fb642
core/inc/aos_system.h | ||
---|---|---|
173 | 173 |
struct { |
174 | 174 |
|
175 | 175 |
/** |
176 |
* @brief I/O event source.
|
|
176 |
* @brief GPIO event source.
|
|
177 | 177 |
*/ |
178 |
event_source_t io; |
|
178 |
event_source_t gpio;
|
|
179 | 179 |
|
180 | 180 |
/** |
181 | 181 |
* @brief OS event source. |
... | ... | |
231 | 231 |
void aosSysStop(void); |
232 | 232 |
void aosSysDeinit(void); |
233 | 233 |
void aosSysShutdownFinal(aos_shutdown_t shutdown); |
234 |
palcallback_t aosSysGetStdExtiCallback(void);
|
|
234 |
palcallback_t aosSysGetStdGpioCallback(void);
|
|
235 | 235 |
#if defined(__cplusplus) |
236 | 236 |
} |
237 | 237 |
#endif /* defined(__cplusplus) */ |
core/inc/aos_types.h | ||
---|---|---|
87 | 87 |
/** |
88 | 88 |
* @brief Converts a GPIO pad number to a unique event flag. |
89 | 89 |
*/ |
90 |
#define AOS_IOEVENT_FLAG(pad) ((eventflags_t)1 << pad)
|
|
90 |
#define AOS_GPIOEVENT_FLAG(pad) ((eventflags_t)1 << pad)
|
|
91 | 91 |
|
92 | 92 |
/******************************************************************************/ |
93 | 93 |
/* EXTERN DECLARATIONS */ |
core/src/aos_main.cpp | ||
---|---|---|
40 | 40 |
/******************************************************************************/ |
41 | 41 |
|
42 | 42 |
/** |
43 |
* @brief Event mask to identify I/O events.
|
|
43 |
* @brief Event mask to identify GPIO events.
|
|
44 | 44 |
*/ |
45 |
#define IOEVENT_MASK EVENT_MASK(0)
|
|
45 |
#define GPIOEVENT_MASK EVENT_MASK(0)
|
|
46 | 46 |
|
47 | 47 |
/** |
48 | 48 |
* @brief Event mask to identify OS events. |
... | ... | |
116 | 116 |
/******************************************************************************/ |
117 | 117 |
|
118 | 118 |
/** |
119 |
* @brief Listener object for I/O events.
|
|
119 |
* @brief Listener object for GPIO events.
|
|
120 | 120 |
*/ |
121 |
static event_listener_t _eventListenerIO; |
|
121 |
static event_listener_t _eventListenerGPIO;
|
|
122 | 122 |
|
123 | 123 |
/** |
124 | 124 |
* @brief Listener object for OS events. |
... | ... | |
126 | 126 |
static event_listener_t _eventListenerOS; |
127 | 127 |
|
128 | 128 |
#if defined(MODULE_HAL_PROGIF) || defined(__DOXYGEN__) |
129 |
|
|
129 | 130 |
/** |
130 | 131 |
* @brief I/O channel for the programmer interface. |
131 | 132 |
*/ |
... | ... | |
444 | 445 |
continue; |
445 | 446 |
} |
446 | 447 |
// if an IO event occurred |
447 |
if (eventmask & _eventListenerIO.events) { |
|
448 |
ioflags = chEvtGetAndClearFlags(&_eventListenerIO); |
|
448 |
if (eventmask & _eventListenerGPIO.events) {
|
|
449 |
ioflags = chEvtGetAndClearFlags(&_eventListenerGPIO);
|
|
449 | 450 |
aosDbgPrintf("INFO: IO evt (0x%08X)\n", ioflags); |
450 | 451 |
// a power-down event occurred |
451 |
if (ioflags & MODULE_SSSP_EVENTFLAGS_PD) {
|
|
452 |
if (ioflags & MODULE_SSSP_EVENTFLAG_PD) { |
|
452 | 453 |
aosDbgPrintf("PD evt\n"); |
453 | 454 |
// deactivate S and UP |
454 | 455 |
aosDbgPrintf("disabling S\n"); |
455 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
456 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
456 | 457 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
457 | 458 |
aosDbgPrintf("disabling UP\n"); |
458 |
apalControlGpioSet(&moduleSsspGpioUp, APAL_GPIO_OFF);
|
|
459 |
apalControlGpioSet(&moduleSsspGpioUP, APAL_GPIO_OFF);
|
|
459 | 460 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
460 | 461 |
// set shutdown flag and exit the loop |
461 | 462 |
shutdown = AOS_SHUTDOWN_PASSIVE; |
462 | 463 |
break; |
463 | 464 |
} |
464 | 465 |
// the S signal was deactivated |
465 |
if (ioflags & MODULE_SSSP_EVENTFLAGS_SYNC) {
|
|
466 |
if (ioflags & MODULE_SSSP_EVENTFLAG_S) {
|
|
466 | 467 |
apalControlGpioState_t sstate; |
467 |
apalControlGpioGet(&moduleSsspGpioSync, &sstate);
|
|
468 |
apalControlGpioGet(&moduleSsspGpioS, &sstate); |
|
468 | 469 |
if (sstate == APAL_GPIO_ON) { |
469 | 470 |
aosDbgPrintf("S evt (enabled)\n"); |
470 | 471 |
} else { |
... | ... | |
541 | 542 |
} |
542 | 543 |
// activate S |
543 | 544 |
aosDbgPrintf("enabling S\n"); |
544 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_ON);
|
|
545 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_ON); |
|
545 | 546 |
#if (AMIROOS_CFG_SSSP_STACK_START == true) |
546 | 547 |
// proceed immediately |
547 | 548 |
stage = STAGE_3_2; |
... | ... | |
573 | 574 |
eventmask &= ~(eventListenerTimeout.events); |
574 | 575 |
// activate S |
575 | 576 |
aosDbgPrintf("enabling S\n"); |
576 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_ON);
|
|
577 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_ON); |
|
577 | 578 |
#if (AMIROOS_CFG_SSSP_STACK_START == true) |
578 | 579 |
// proceed |
579 | 580 |
stage = STAGE_3_2; |
... | ... | |
629 | 630 |
if (eventmask & eventListenerDelay.events) { |
630 | 631 |
// activate UP |
631 | 632 |
aosDbgPrintf("enabling UP\n"); |
632 |
apalControlGpioSet(&moduleSsspGpioUp, APAL_GPIO_ON);
|
|
633 |
apalControlGpioSet(&moduleSsspGpioUP, APAL_GPIO_ON);
|
|
633 | 634 |
// deactivate S |
634 | 635 |
aosDbgPrintf("disabling S\n"); |
635 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
636 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
636 | 637 |
// explicitely clear timeout event flag |
637 | 638 |
chEvtWaitAnyTimeout(eventListenerTimeout.events, TIME_IMMEDIATE); |
638 | 639 |
eventmask &= ~(eventListenerTimeout.events); |
... | ... | |
712 | 713 |
} |
713 | 714 |
|
714 | 715 |
// if an IO event was received (DN signal) |
715 |
if ((eventmask & _eventListenerIO.events) && (ioflags & MODULE_SSSP_EVENTFLAGS_DN)) {
|
|
716 |
if ((eventmask & _eventListenerGPIO.events) && (ioflags & MODULE_SSSP_EVENTFLAG_DN)) {
|
|
716 | 717 |
aosDbgPrintf("DN evt\n"); |
717 | 718 |
// reset timeout timer |
718 | 719 |
chVTReset(&timerTimeout); |
... | ... | |
737 | 738 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
738 | 739 |
// activate UP |
739 | 740 |
aosDbgPrintf("enabling UP\n"); |
740 |
apalControlGpioSet(&moduleSsspGpioUp, APAL_GPIO_ON);
|
|
741 |
apalControlGpioSet(&moduleSsspGpioUP, APAL_GPIO_ON);
|
|
741 | 742 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
742 | 743 |
// deactivate S |
743 | 744 |
aosDbgPrintf("disabling S\n"); |
744 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
745 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
745 | 746 |
// reset the timeout timer |
746 | 747 |
chVTSet(&timerTimeout, chTimeUS2I(AOS_SYSTEM_SSSP_TIMEOUT), _ssspTimerCallback, &eventSourceTimeout); |
747 | 748 |
chEvtWaitAnyTimeout(eventListenerTimeout.events, TIME_IMMEDIATE); |
... | ... | |
787 | 788 |
aos.sssp.stage = AOS_SSSP_STARTUP_3_4; |
788 | 789 |
|
789 | 790 |
// if an IO event was received (S signal) |
790 |
if ((eventmask & _eventListenerIO.events) && (ioflags & MODULE_SSSP_EVENTFLAGS_SYNC)) {
|
|
791 |
if ((eventmask & _eventListenerGPIO.events) && (ioflags & MODULE_SSSP_EVENTFLAG_S)) {
|
|
791 | 792 |
// reset the timeout timer |
792 | 793 |
chVTReset(&timerTimeout); |
793 | 794 |
chEvtWaitAnyTimeout(eventListenerTimeout.events, TIME_IMMEDIATE); |
... | ... | |
843 | 844 |
|
844 | 845 |
// deactivate S |
845 | 846 |
aosDbgPrintf("disabling SYNC\n"); |
846 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
847 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
847 | 848 |
// invalidate module ID |
848 | 849 |
aos.sssp.moduleId = 0; |
849 | 850 |
|
850 | 851 |
// if an IO event was received (S signal) |
851 |
if ((eventmask & _eventListenerIO.events) && (ioflags & MODULE_SSSP_EVENTFLAGS_SYNC)) {
|
|
852 |
if ((eventmask & _eventListenerGPIO.events) && (ioflags & MODULE_SSSP_EVENTFLAG_S)) {
|
|
852 | 853 |
aosDbgPrintf("sequence aborted\n"); |
853 | 854 |
// exit the sequence |
854 | 855 |
flags.loop = false; |
... | ... | |
886 | 887 |
// reset all control signals |
887 | 888 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
888 | 889 |
aosDbgPrintf("disabling UP\n"); |
889 |
apalControlGpioSet(&moduleSsspGpioUp, APAL_GPIO_OFF);
|
|
890 |
apalControlGpioSet(&moduleSsspGpioUP, APAL_GPIO_OFF);
|
|
890 | 891 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
891 | 892 |
aosDbgPrintf("disabling S\n"); |
892 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
893 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
893 | 894 |
aosSysGetUptime(&uptime); |
894 | 895 |
aosDbgPrintf("done\t%04ums\n", (uint32_t)(uptime / MICROSECONDS_PER_MILLISECOND)); |
895 | 896 |
|
... | ... | |
905 | 906 |
// local variables |
906 | 907 |
eventmask_t eventmask = 0; |
907 | 908 |
eventflags_t eventflags = 0; |
908 |
eventflags_t ioeventflagsmask = AMIROOS_CFG_MAIN_LOOP_IOEVENT_MASK;
|
|
909 |
eventflags_t gpioeventflagsmask = AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK;
|
|
909 | 910 |
aos_shutdown_t shutdown = AOS_SHUTDOWN_NONE; |
910 | 911 |
#if defined(AMIROOS_CFG_MAIN_EXTRA_THREAD_VARIABLES) |
911 | 912 |
AMIROOS_CFG_MAIN_EXTRA_THREAD_VARIABLES |
... | ... | |
977 | 978 |
|
978 | 979 |
/* event associations */ |
979 | 980 |
#if (AMIROOS_CFG_SSSP_ENABLE == true) |
980 |
ioeventflagsmask |= MODULE_SSSP_EVENTFLAGS_PD | MODULE_SSSP_EVENTFLAGS_SYNC;
|
|
981 |
gpioeventflagsmask |= MODULE_SSSP_EVENTFLAG_PD | MODULE_SSSP_EVENTFLAG_S;
|
|
981 | 982 |
#if (AMIROOS_CFG_SSSP_STACK_START != true) |
982 |
ioeventflagsmask |= MODULE_SSSP_EVENTFLAGS_DN;
|
|
983 |
gpioeventflagsmask |= MODULE_SSSP_EVENTFLAG_DN;
|
|
983 | 984 |
#endif /* (AMIROOS_CFG_SSSP_STACK_START != true) */ |
984 | 985 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
985 |
ioeventflagsmask |= MODULE_SSSP_EVENTFLAGS_UP;
|
|
986 |
gpioeventflagsmask |= MODULE_SSSP_EVENTFLAG_UP;
|
|
986 | 987 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
987 | 988 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
988 |
if (ioeventflagsmask != 0) { |
|
989 |
chEvtRegisterMaskWithFlags(&aos.events.io, &_eventListenerIO, IOEVENT_MASK, ioeventflagsmask);
|
|
989 |
if (gpioeventflagsmask != 0) {
|
|
990 |
chEvtRegisterMaskWithFlags(&aos.events.gpio, &_eventListenerGPIO, GPIOEVENT_MASK, gpioeventflagsmask);
|
|
990 | 991 |
} |
991 | 992 |
chEvtRegisterMask(&aos.events.os, &_eventListenerOS, OSEVENT_MASK); |
992 | 993 |
|
... | ... | |
1073 | 1074 |
|
1074 | 1075 |
#if (AMIROOS_CFG_SSSP_ENABLE == true) |
1075 | 1076 |
/* SSSP startup OS synchronization phase (end of startup stage 2) */ |
1076 |
while ((shutdown == AOS_SHUTDOWN_NONE) && (eventmask = aosSysSsspStartupOsInitSyncCheck(&_eventListenerIO)) != 0) { |
|
1077 |
while ((shutdown == AOS_SHUTDOWN_NONE) && (eventmask = aosSysSsspStartupOsInitSyncCheck(&_eventListenerGPIO)) != 0) {
|
|
1077 | 1078 |
/* |
1078 | 1079 |
* This code is executed if the received event was not about the SYS_SYNC control signal. |
1079 | 1080 |
* The returned event could be caused by any listener (not only the argument). |
1080 | 1081 |
*/ |
1081 |
// IO event |
|
1082 |
if (eventmask & _eventListenerIO.events) { |
|
1083 |
eventflags = chEvtGetAndClearFlags(&_eventListenerIO); |
|
1082 |
// GPIO event
|
|
1083 |
if (eventmask & _eventListenerGPIO.events) {
|
|
1084 |
eventflags = chEvtGetAndClearFlags(&_eventListenerGPIO);
|
|
1084 | 1085 |
// PD event |
1085 |
if (eventflags & MODULE_SSSP_EVENTFLAGS_PD) {
|
|
1086 |
if (eventflags & MODULE_SSSP_EVENTFLAG_PD) { |
|
1086 | 1087 |
shutdown = AOS_SHUTDOWN_PASSIVE; |
1087 | 1088 |
} else { |
1088 | 1089 |
#if defined(MODULE_SSSP_STARTUP_2_2_IOEVENT_HOOK) |
... | ... | |
1225 | 1226 |
#endif /* defined(AMIROOS_CFG_MAIN_LOOP_HOOK_0) */ |
1226 | 1227 |
|
1227 | 1228 |
switch (eventmask) { |
1228 |
// if this was an I/O event
|
|
1229 |
case IOEVENT_MASK: |
|
1229 |
// if this was an GPIO event
|
|
1230 |
case GPIOEVENT_MASK:
|
|
1230 | 1231 |
// evaluate flags |
1231 |
eventflags = chEvtGetAndClearFlags(&_eventListenerIO); |
|
1232 |
eventflags = chEvtGetAndClearFlags(&_eventListenerGPIO);
|
|
1232 | 1233 |
#if (AMIROOS_CFG_SSSP_ENABLE == true) |
1233 | 1234 |
// PD event |
1234 |
if (eventflags & MODULE_SSSP_EVENTFLAGS_PD) {
|
|
1235 |
if (eventflags & MODULE_SSSP_EVENTFLAG_PD) { |
|
1235 | 1236 |
shutdown = AOS_SHUTDOWN_PASSIVE; |
1236 | 1237 |
} |
1237 | 1238 |
// all other events |
1238 |
#if defined(MODULE_MAIN_LOOP_IO_EVENT)
|
|
1239 |
#if defined(MODULE_MAIN_LOOP_GPIOEVENT)
|
|
1239 | 1240 |
else { |
1240 |
MODULE_MAIN_LOOP_IO_EVENT(eventflags);
|
|
1241 |
MODULE_MAIN_LOOP_GPIOEVENT(eventflags);
|
|
1241 | 1242 |
} |
1242 |
#endif /* defined(MODULE_MAIN_LOOP_IO_EVENT) */
|
|
1243 |
#endif /* defined(MODULE_MAIN_LOOP_GPIOEVENT) */
|
|
1243 | 1244 |
#else /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
1244 |
#if defined(MODULE_MAIN_LOOP_IO_EVENT)
|
|
1245 |
MODULE_MAIN_LOOP_IO_EVENT(eventflags);
|
|
1246 |
#endif /* defined(MODULE_MAIN_LOOP_IO_EVENT) */
|
|
1245 |
#if defined(MODULE_MAIN_LOOP_GPIOEVENT)
|
|
1246 |
MODULE_MAIN_LOOP_GPIOEVENT(eventflags);
|
|
1247 |
#endif /* defined(MODULE_MAIN_LOOP_GPIOEVENT) */
|
|
1247 | 1248 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
1248 | 1249 |
break; |
1249 | 1250 |
|
core/src/aos_system.c | ||
---|---|---|
661 | 661 |
* |
662 | 662 |
* @param[in] args Pointer to the GPIO line identifier. |
663 | 663 |
*/ |
664 |
static void _extiCallback(void* args)
|
|
664 |
static void _gpioCallback(void* args)
|
|
665 | 665 |
{ |
666 | 666 |
aosDbgCheck((args != NULL) && (*((ioline_t*)args) != PAL_NOLINE) && (PAL_PAD(*((ioline_t*)args)) < sizeof(eventflags_t) * 8)); |
667 | 667 |
|
668 | 668 |
chSysLockFromISR(); |
669 |
chEvtBroadcastFlagsI(&aos.events.io, AOS_IOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
669 |
chEvtBroadcastFlagsI(&aos.events.gpio, AOS_GPIOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
670 | 670 |
chSysUnlockFromISR(); |
671 | 671 |
|
672 | 672 |
return; |
... | ... | |
690 | 690 |
// if the system is in operation phase |
691 | 691 |
if (aos.sssp.stage == AOS_SSSP_OPERATION) { |
692 | 692 |
// read signal S |
693 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
693 |
apalControlGpioGet(&moduleSsspGpioS, &s_state); |
|
694 | 694 |
// if S was toggled from on to off |
695 | 695 |
if (s_state == APAL_GPIO_OFF) { |
696 | 696 |
// get current uptime |
... | ... | |
710 | 710 |
} |
711 | 711 |
} |
712 | 712 |
// broadcast event |
713 |
chEvtBroadcastFlagsI(&aos.events.io, AOS_IOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
713 |
chEvtBroadcastFlagsI(&aos.events.gpio, AOS_GPIOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
714 | 714 |
chSysUnlockFromISR(); |
715 | 715 |
|
716 | 716 |
return; |
... | ... | |
755 | 755 |
|
756 | 756 |
chSysLockFromISR(); |
757 | 757 |
// toggle and read signal S |
758 |
apalGpioToggle(moduleSsspGpioSync.gpio);
|
|
759 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
758 |
apalGpioToggle(moduleSsspGpioS.gpio); |
|
759 |
apalControlGpioGet(&moduleSsspGpioS, &s_state); |
|
760 | 760 |
// if S was toggled from off to on |
761 | 761 |
if (s_state == APAL_GPIO_ON) { |
762 | 762 |
// reconfigure the timer precisely, because the logically falling edge (next interrupt) snychronizes the system time |
... | ... | |
817 | 817 |
aos.sssp.moduleId = 0; |
818 | 818 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
819 | 819 |
aosIOStreamInit(&aos.iostream); |
820 |
chEvtObjectInit(&aos.events.io); |
|
820 |
chEvtObjectInit(&aos.events.gpio);
|
|
821 | 821 |
chEvtObjectInit(&aos.events.os); |
822 | 822 |
|
823 | 823 |
/* interrupt setup */ |
824 | 824 |
#if (AMIROOS_CFG_SSSP_ENABLE == true) |
825 | 825 |
// PD signal |
826 |
palSetLineCallback(moduleSsspGpioPd.gpio->line, _extiCallback, &moduleSsspGpioPd.gpio->line);
|
|
827 |
palEnableLineEvent(moduleSsspGpioPd.gpio->line, APAL2CH_EDGE(moduleSsspGpioPd.meta.edge));
|
|
826 |
palSetLineCallback(moduleSsspGpioPD.gpio->line, _gpioCallback, &moduleSsspGpioPD.gpio->line);
|
|
827 |
palEnableLineEvent(moduleSsspGpioPD.gpio->line, APAL2CH_EDGE(moduleSsspGpioPD.meta.edge));
|
|
828 | 828 |
// SYNC signal |
829 | 829 |
#if (AMIROOS_CFG_SSSP_MASTER == true) |
830 |
palSetLineCallback(moduleSsspGpioSync.gpio->line, _extiCallback, &moduleSsspGpioSync.gpio->line);
|
|
830 |
palSetLineCallback(moduleSsspGpioS.gpio->line, _gpioCallback, &moduleSsspGpioS.gpio->line);
|
|
831 | 831 |
#else /* (AMIROOS_CFG_SSSP_MASTER == true) */ |
832 |
palSetLineCallback(moduleSsspGpioSync.gpio->line, _signalSyncCallback, &moduleSsspGpioSync.gpio->line);
|
|
832 |
palSetLineCallback(moduleSsspGpioS.gpio->line, _signalSyncCallback, &moduleSsspGpioS.gpio->line);
|
|
833 | 833 |
#endif /* (AMIROOS_CFG_SSSP_MASTER == true) */ |
834 |
palEnableLineEvent(moduleSsspGpioSync.gpio->line, APAL2CH_EDGE(moduleSsspGpioSync.meta.edge));
|
|
834 |
palEnableLineEvent(moduleSsspGpioS.gpio->line, APAL2CH_EDGE(moduleSsspGpioS.meta.edge));
|
|
835 | 835 |
#if (AMIROOS_CFG_SSSP_STACK_START != true) |
836 | 836 |
// DN signal |
837 |
palSetLineCallback(moduleSsspGpioDn.gpio->line, _extiCallback, &moduleSsspGpioDn.gpio->line);
|
|
838 |
palEnableLineEvent(moduleSsspGpioDn.gpio->line, APAL2CH_EDGE(moduleSsspGpioDn.meta.edge));
|
|
837 |
palSetLineCallback(moduleSsspGpioDN.gpio->line, _gpioCallback, &moduleSsspGpioDN.gpio->line);
|
|
838 |
palEnableLineEvent(moduleSsspGpioDN.gpio->line, APAL2CH_EDGE(moduleSsspGpioDN.meta.edge));
|
|
839 | 839 |
#endif /* (AMIROOS_CFG_SSSP_STACK_START != true) */ |
840 | 840 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
841 | 841 |
// UP signal |
842 |
palSetLineCallback(moduleSsspGpioUp.gpio->line, _extiCallback, &moduleSsspGpioUp.gpio->line);
|
|
843 |
palEnableLineEvent(moduleSsspGpioUp.gpio->line, APAL2CH_EDGE(moduleSsspGpioUp.meta.edge));
|
|
842 |
palSetLineCallback(moduleSsspGpioUP.gpio->line, _gpioCallback, &moduleSsspGpioUP.gpio->line);
|
|
843 |
palEnableLineEvent(moduleSsspGpioUP.gpio->line, APAL2CH_EDGE(moduleSsspGpioUP.meta.edge));
|
|
844 | 844 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
845 | 845 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
846 | 846 |
|
... | ... | |
926 | 926 |
aos.sssp.stage = AOS_SSSP_STARTUP_2_2; |
927 | 927 |
|
928 | 928 |
// deactivate the sync signal to indicate that the module is ready (SSSPv1 stage 2.1 of startup phase) |
929 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
929 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
930 | 930 |
|
931 | 931 |
// wait for any event to occur (do not apply any filter in order not to miss any event) |
932 | 932 |
m = chEvtWaitOne(ALL_EVENTS); |
933 | 933 |
f = chEvtGetAndClearFlags(syncEvtListener); |
934 |
apalControlGpioGet(&moduleSsspGpioSync, &s);
|
|
934 |
apalControlGpioGet(&moduleSsspGpioS, &s); |
|
935 | 935 |
|
936 | 936 |
// if the event was a system event, |
937 | 937 |
// and it was fired because of the SysSync control signal, |
938 | 938 |
// and the SysSync control signal has been deactivated |
939 | 939 |
if (m & syncEvtListener->events && |
940 |
f == MODULE_SSSP_EVENTFLAGS_SYNC &&
|
|
940 |
f == MODULE_SSSP_EVENTFLAG_S &&
|
|
941 | 941 |
s == APAL_GPIO_OFF) { |
942 | 942 |
chSysLock(); |
943 | 943 |
// start the uptime counter |
... | ... | |
1030 | 1030 |
chSysLock(); |
1031 | 1031 |
// activate the SYS_PD control signal only, if this module initiated the shutdown |
1032 | 1032 |
if (shutdown != AOS_SHUTDOWN_PASSIVE) { |
1033 |
apalControlGpioSet(&moduleSsspGpioPd, APAL_GPIO_ON);
|
|
1033 |
apalControlGpioSet(&moduleSsspGpioPD, APAL_GPIO_ON);
|
|
1034 | 1034 |
} |
1035 | 1035 |
// activate the SYS_SYNC signal |
1036 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_ON);
|
|
1036 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_ON); |
|
1037 | 1037 |
chSysUnlock(); |
1038 | 1038 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
1039 | 1039 |
|
... | ... | |
1152 | 1152 |
* |
1153 | 1153 |
* @return Pointer to the callback function. |
1154 | 1154 |
*/ |
1155 |
palcallback_t aosSysGetStdExtiCallback(void)
|
|
1155 |
palcallback_t aosSysGetStdGpioCallback(void)
|
|
1156 | 1156 |
{ |
1157 |
return _extiCallback;
|
|
1157 |
return _gpioCallback;
|
|
1158 | 1158 |
} |
1159 | 1159 |
|
1160 | 1160 |
/** @} */ |
modules/DiWheelDrive_1-1/aosconf.h | ||
---|---|---|
80 | 80 |
#endif /* !defined(OS_CFG_PROFILE) */ |
81 | 81 |
|
82 | 82 |
/** |
83 |
* @brief Mask for the control thread to listen to certain IO events. |
|
83 |
* @brief Mask for the control thread to listen to certain GPIO events.
|
|
84 | 84 |
* @note Any mandatory events (e.g. for SSSP) are enabled implicitely despite this configuration. |
85 | 85 |
*/ |
86 |
#if !defined(OS_CFG_MAIN_LOOP_IOEVENT_MASK)
|
|
87 |
#define AMIROOS_CFG_MAIN_LOOP_IOEVENT_MASK 0
|
|
88 |
#else /* !defined(OS_CFG_MAIN_LOOP_IOEVENT_MASK) */
|
|
89 |
#define AMIROOS_CFG_MAIN_LOOP_IOEVENT_MASK OS_CFG_MAIN_LOOP_IOEVENT_MASK
|
|
90 |
#endif /* !defined(OS_CFG_MAIN_LOOP_IOEVENT_MASK) */
|
|
86 |
#if !defined(OS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK)
|
|
87 |
#define AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK 0
|
|
88 |
#else /* !defined(OS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK) */
|
|
89 |
#define AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK OS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK
|
|
90 |
#endif /* !defined(OS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK) */
|
|
91 | 91 |
|
92 | 92 |
/** |
93 | 93 |
* @brief Timeout value when waiting for events in the main loop in microseconds. |
modules/DiWheelDrive_1-1/module.h | ||
---|---|---|
242 | 242 |
/** |
243 | 243 |
* @brief Event flag to be set on a SYS_SYNC interrupt. |
244 | 244 |
*/ |
245 |
#define MODULE_OS_IOEVENTFLAGS_SYSSYNC AOS_IOEVENT_FLAG(PAL_PAD(LINE_SYS_INT_N))
|
|
245 |
#define MODULE_OS_GPIOEVENTFLAG_SYSSYNC AOS_GPIOEVENT_FLAG(PAL_PAD(LINE_SYS_INT_N))
|
|
246 | 246 |
|
247 | 247 |
/** |
248 | 248 |
* @brief Event flag to be set on a SYS_WARMRST interrupt. |
249 | 249 |
*/ |
250 |
#define MODULE_OS_IOEVENTFLAGS_SYSWARMRST AOS_IOEVENT_FLAG(PAL_PAD(LINE_SYS_WARMRST_N))
|
|
250 |
#define MODULE_OS_GPIOEVENTFLAG_SYSWARMRST AOS_GPIOEVENT_FLAG(PAL_PAD(LINE_SYS_WARMRST_N))
|
|
251 | 251 |
|
252 | 252 |
/** |
253 | 253 |
* @brief Event flag to be set on a PATH_DCSTAT interrupt. |
254 | 254 |
*/ |