Revision 4ea18a07 src/urt_node.c

View differences:

src/urt_node.c
37 37
/* LOCAL VARIABLES                                                            */
38 38
/******************************************************************************/
39 39

  
40
urt_node_t localNode;
41
static  URT_THREAD_MEMORY(_node_thread, AMIROOS_CFG_SHELL_STACKSIZE); //TODO: not here
42

  
43 40
/******************************************************************************/
44 41
/* LOCAL FUNCTIONS                                                            */
45 42
/******************************************************************************/
......
51 48
 */
52 49
void _main(void* arg)
53 50
{
51
  urt_node_t* localNode = (urt_node_t*)arg;
54 52
  urt_osEventMask_t mask;
55 53
  urt_osEventFlags_t flag = 0;
56
  urtEventRegister(urtCoreGetEvtSource(), &localNode.listener, mask, flag);
57
  if (localNode.setupcallback != NULL)
54
  urtEventRegister(urtCoreGetEvtSource(), &(localNode->listener), mask, flag);
55
  if (localNode->setupcallback != NULL)
58 56
  {
59
    mask = localNode.setupcallback(&localNode, arg);
57
    mask = localNode->setupcallback(localNode, localNode->setupparams);
60 58
    if (mask == urtCoreGetEventMask())
61 59
    {
62 60
        urtCoreStopNodes(URT_STATUS_NODE_INVALEVTMASK);
......
64 62
  }
65 63
  else
66 64
  {
67
     mask = ALL_EVENTS;
65
     mask = URT_EVENTMASK_ALL;
68 66
  }
69 67

  
70 68
  if (urtCoreGetStatus() == URT_STATUS_OK)
......
77 75
    urt_osEventMask_t temp = urtEventWait(mask, URT_EVENT_WAIT_ONE, URT_DELAY_INFINITE);
78 76
    if (temp == urtCoreGetEventMask())
79 77
    {
80
      localNode.loopcallback(&localNode, mask, arg);
78
      localNode->loopcallback(localNode, mask, localNode->loopparams);
81 79
      #if (URT_CFG_PUBSUB_PROFILING || URT_CFG_RPC_PROFILING)
82
        localNode.loops++;
80
        localNode->loops++;
83 81
      #endif /* URT_CFG_PUBSUB_PROFILING || URT_CFG_RPC_PROFILING */
84 82
      if (mask == urtCoreGetEventMask())
85 83
      {
......
88 86
    }
89 87
  }
90 88

  
91
  if (localNode.shutdowncallback)
89
  if (localNode->shutdowncallback)
92 90
  {
93
    localNode.shutdowncallback(&localNode, urtCoreGetStatus(), arg);
91
    localNode->shutdowncallback(localNode, urtCoreGetStatus(), localNode->shutdownparams);
94 92
  }
95
  urtEventUnregister(urtCoreGetEvtSource(), &localNode.listener);
93
  urtEventUnregister(urtCoreGetEvtSource(), &localNode->listener);
96 94

  
97
  urt_osThread_t* threadToTerminate = localNode.thread;
95
  urt_osThread_t* threadToTerminate = localNode->thread;
98 96
  while (threadToTerminate->children != NULL || threadToTerminate->sibling != NULL)
99 97
  {
100 98
    if (threadToTerminate->children != NULL)
......
104 102
  }
105 103
  urtThreadTerminate(&threadToTerminate, URT_THREAD_TERMINATE_REQUEST);
106 104

  
107
  urt_osThread_t* threadToJoin = localNode.thread;
105
  urt_osThread_t* threadToJoin = localNode->thread;
108 106
  while (threadToJoin->children != NULL || threadToJoin->sibling != NULL)
109 107
  {
110 108
    if (threadToJoin->children != NULL)
......
140 138
 *                            Must be NULL if no shutdown callback is specified.
141 139
 *                            May be NULL if the specified shutdown callback does not expect parameters.
142 140
 */
143
void urtNodeInit(urt_node_t* node, urt_osThread_t* thread, urt_osThreadPrio_t prio, urt_nodeSetupCallback_t* setupcallback,
144
                 void* setupparams, urt_nodeLoopCallback_t* loopcallback, void* loopparams,
145
                 urt_nodeShutdownCallback_t* shutdowncallback, void* shutdownparams)
141
void urtNodeInit(urt_node_t* node, urt_osThread_t* thread, urt_osThreadPrio_t prio, urt_nodeSetupCallback_t setupcallback,
142
                 void* setupparams, urt_nodeLoopCallback_t loopcallback, void* loopparams,
143
                 urt_nodeShutdownCallback_t shutdowncallback, void* shutdownparams)
146 144
{
147 145
  urtDebugAssert(node != NULL);
148 146
  urtDebugAssert(thread == NULL);
......
150 148
    urtDebugAssert(setupparams == NULL);
151 149

  
152 150
  node->next = NULL;
153
  node->thread = urtThreadInit(_node_thread, sizeof(_node_thread), prio, _main, setupparams);
151
  node->thread = urtThreadInit(thread, sizeof(thread), prio, _main, node);
154 152
  node->setupcallback = setupcallback;
155 153
  node->setupparams = setupparams;
156 154
  node->loopcallback = loopcallback;
......
168 166
    urt_node_t* nodeCore = urtCoreGetNodes();
169 167
    nodeCore = node;
170 168
  urtMutexUnlock(mutexTemp);
171
  localNode = *node;
172 169
  return;
173 170
}

Also available in: Unified diff