Revision 1a8fb642 core/src/aos_main.cpp

View differences:

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

  

Also available in: Unified diff