src/lifegrd.c
author etisserant
Mon, 02 Jul 2007 18:22:58 +0200
changeset 236 905677ed00f3
parent 215 f49e5a6b7804
child 343 118c1cabd0b0
permissions -rw-r--r--
Full preliminary implementation of TPDO transmit type:
- SYNC (N) (1-240)
- RTR only + SYNC (252)
- RTR only (253)
- EVENT, with timer and inhibit time (254 and 255)

User app have to call sendPDOevent(d) to eventually signal mapped data changes.
Callbacks added to 0x140N, TPDO comm parameters for on the fly timers values change.
TestMasterSlave updated.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     1
/*
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     2
  This file is part of CanFestival, a library implementing CanOpen
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     3
  Stack.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     4
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     5
  Copyright (C): Edouard TISSERANT and Francis DUPIN
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     6
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     7
  See COPYING file for copyrights details.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     8
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
     9
  This library is free software; you can redistribute it and/or
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    10
  modify it under the terms of the GNU Lesser General Public
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    11
  License as published by the Free Software Foundation; either
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    12
  version 2.1 of the License, or (at your option) any later version.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    13
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    14
  This library is distributed in the hope that it will be useful,
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    15
  but WITHOUT ANY WARRANTY; without even the implied warranty of
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    16
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    17
  Lesser General Public License for more details.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    18
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    19
  You should have received a copy of the GNU Lesser General Public
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    20
  License along with this library; if not, write to the Free Software
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    21
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    22
  USA
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    23
*/
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    24
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    25
/*!
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 207
diff changeset
    26
** @file   lifegrd.c
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    27
** @author Edouard TISSERANT
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    28
** @date   Mon Jun  4 17:19:24 2007
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    29
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    30
** @brief
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    31
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    32
**
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    33
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    34
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    35
#include <data.h>
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    36
#include "lifegrd.h"
149
fe50ada8020b Changes in the API:
etisserant
parents: 71
diff changeset
    37
#include "canfestival.h"
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    38
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 207
diff changeset
    39
53
73bc47a0db55 Add prototypes
frdupin
parents: 0
diff changeset
    40
void ConsumerHearbeatAlarm(CO_Data* d, UNS32 id);
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    41
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 207
diff changeset
    42
53
73bc47a0db55 Add prototypes
frdupin
parents: 0
diff changeset
    43
void ProducerHearbeatAlarm(CO_Data* d, UNS32 id);
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    44
185
d529e20c323c correction of lifegrd compilation warning
greg
parents: 177
diff changeset
    45
UNS32 OnHearbeatProducerUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex);
53
73bc47a0db55 Add prototypes
frdupin
parents: 0
diff changeset
    46
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    47
/*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    48
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    49
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    50
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    51
** @param nodeId
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    52
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    53
** @return
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    54
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    55
e_nodeState getNodeState (CO_Data* d, UNS8 nodeId)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    56
{
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    57
  e_nodeState networkNodeState = d->NMTable[nodeId];
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    58
  return networkNodeState;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    59
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    60
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 207
diff changeset
    61
/*! 
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 207
diff changeset
    62
** The Consumer Timer Callback
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    63
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    64
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    65
** @param id
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    66
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    67
void ConsumerHearbeatAlarm(CO_Data* d, UNS32 id)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    68
{
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    69
  /*MSG_WAR(0x00, "ConsumerHearbeatAlarm", 0x00);*/
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    70
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    71
  /*! call heartbeat error with NodeId */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    72
  (*d->heartbeatError)((UNS8)( ((d->ConsumerHeartbeatEntries[id]) & (UNS32)0x00FF0000) >> (UNS8)16 ));
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    73
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    74
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    75
/*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    76
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    77
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    78
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    79
** @param m
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    80
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    81
void proceedNODE_GUARD(CO_Data* d, Message* m )
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    82
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    83
  UNS8 nodeId = (UNS8) GET_NODE_ID((*m));
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    84
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    85
  if((m->rtr == 1) )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    86
    /*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    87
    ** Notice that only the master can have sent this
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    88
    ** node guarding request
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    89
    */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    90
    {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    91
      /*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    92
      ** Receiving a NMT NodeGuarding (request of the state by the
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    93
      ** master)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    94
      ** Only answer to the NMT NodeGuarding request, the master is
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    95
      ** not checked (not implemented)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    96
      */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    97
      if (nodeId == *d->bDeviceNodeId )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    98
        {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
    99
          Message msg;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   100
          msg.cob_id.w = *d->bDeviceNodeId + 0x700;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   101
          msg.len = (UNS8)0x01;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   102
          msg.rtr = 0;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   103
          msg.data[0] = d->nodeState;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   104
          if (d->toggle)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   105
            {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   106
              msg.data[0] |= 0x80 ;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   107
              d->toggle = 0 ;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   108
            }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   109
          else
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   110
            d->toggle = 1 ;
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   111
          /* send the nodeguard response. */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   112
          MSG_WAR(0x3130, "Sending NMT Nodeguard to master, state: ", d->nodeState);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   113
          canSend(d->canHandle,&msg );
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   114
        }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   115
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   116
    }else{ /* Not a request CAN */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   117
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   118
      MSG_WAR(0x3110, "Received NMT nodeId : ", nodeId);
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   119
      /* the slave's state receievd is stored in the NMTable */
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   120
      /* The state is stored on 7 bit */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   121
      d->NMTable[nodeId] = (e_nodeState) ((*m).data[0] & 0x7F) ;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   122
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   123
      /* Boot-Up frame reception */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   124
      if ( d->NMTable[nodeId] == Initialisation)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   125
        {
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   126
          /*
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   127
          ** The device send the boot-up message (Initialisation)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   128
          ** to indicate the master that it is entered in
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   129
          ** pre_operational mode
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   130
          ** Because the  device enter automaticaly in pre_operational
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   131
          ** mode,
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   132
          ** the pre_operational mode is stored
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   133
          ** NMTable[bus_id][nodeId] = Pre_operational
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   134
          */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   135
          MSG_WAR(0x3100, "The NMT is a bootup from node : ", nodeId);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   136
        }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   137
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   138
      if( d->NMTable[nodeId] != Unknown_state ) {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   139
        UNS8 index, ConsummerHeartBeat_nodeId ;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   140
        for( index = (UNS8)0x00; index < *d->ConsumerHeartbeatCount; index++ )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   141
          {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   142
            ConsummerHeartBeat_nodeId = (UNS8)( ((d->ConsumerHeartbeatEntries[index]) & (UNS32)0x00FF0000) >> (UNS8)16 );
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   143
            if ( nodeId == ConsummerHeartBeat_nodeId )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   144
              {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   145
                TIMEVAL time = ( (d->ConsumerHeartbeatEntries[index]) & (UNS32)0x0000FFFF ) ;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   146
                /* Renew alarm for next heartbeat. */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   147
                DelAlarm(d->ConsumerHeartBeatTimers[index]);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   148
                d->ConsumerHeartBeatTimers[index] = SetAlarm(d, index, &ConsumerHearbeatAlarm, MS_TO_TIMEVAL(time), 0);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   149
              }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   150
          }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   151
      }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   152
    }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   153
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   154
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   155
/*! The Consumer Timer Callback
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   156
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   157
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   158
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   159
** @param id
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   160
**/
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   161
void ProducerHearbeatAlarm(CO_Data* d, UNS32 id)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   162
{
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   163
  if(*d->ProducerHeartBeatTime)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   164
    {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   165
      Message msg;
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   166
      /* Time expired, the heartbeat must be sent immediately
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   167
      ** generate the correct node-id: this is done by the offset 1792
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   168
      ** (decimal) and additionaly
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   169
      ** the node-id of this device.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   170
      */
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   171
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   172
      msg.cob_id.w = *d->bDeviceNodeId + 0x700;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   173
      msg.len = (UNS8)0x01;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   174
      msg.rtr = 0;
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   175
      msg.data[0] = d->nodeState; /* No toggle for heartbeat !*/
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   176
      /* send the heartbeat */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   177
      MSG_WAR(0x3130, "Producing heartbeat: ", d->nodeState);
149
fe50ada8020b Changes in the API:
etisserant
parents: 71
diff changeset
   178
      canSend(d->canHandle,&msg );
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   179
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   180
    }else{
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   181
      d->ProducerHeartBeatTimer = DelAlarm(d->ProducerHeartBeatTimer);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   182
    }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   183
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   184
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   185
/*! This is called when Index 0x1017 is updated.
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   186
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   187
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   188
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   189
** @param unsused_indextable
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   190
** @param unsused_bSubindex
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   191
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   192
** @return
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   193
**/
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   194
UNS32 OnHeartbeatProducerUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   195
{
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   196
  heartbeatStop(d);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   197
  heartbeatInit(d);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   198
  return 0;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   199
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   200
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   201
/*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   202
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   203
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   204
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   205
**/
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   206
void heartbeatInit(CO_Data* d)
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   207
{
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   208
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   209
  UNS8 index; /* Index to scan the table of heartbeat consumers */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   210
  RegisterSetODentryCallBack(d, 0x1017, 0x00, &OnHeartbeatProducerUpdate);
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   211
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   212
  d->toggle = 0;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   213
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   214
  for( index = (UNS8)0x00; index < *d->ConsumerHeartbeatCount; index++ )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   215
    {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   216
      TIMEVAL time = (UNS16) ( (d->ConsumerHeartbeatEntries[index]) & (UNS32)0x0000FFFF ) ;
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   217
      /* MSG_WAR(0x3121, "should_time : ", should_time ) ; */
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   218
      if ( time )
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   219
        {
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   220
          d->ConsumerHeartBeatTimers[index] = SetAlarm(d, index, &ConsumerHearbeatAlarm, MS_TO_TIMEVAL(time), 0);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   221
        }
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   222
    }
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   223
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   224
  if ( *d->ProducerHeartBeatTime )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   225
    {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   226
      TIMEVAL time = *d->ProducerHeartBeatTime;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   227
      d->ProducerHeartBeatTimer = SetAlarm(d, 0, &ProducerHearbeatAlarm, MS_TO_TIMEVAL(time), MS_TO_TIMEVAL(time));
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   228
    }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   229
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   230
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   231
/*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   232
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   233
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   234
** @param d
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   235
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   236
void heartbeatStop(CO_Data* d)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   237
{
207
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   238
  UNS8 index;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   239
  for( index = (UNS8)0x00; index < *d->ConsumerHeartbeatCount; index++ )
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   240
    {
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   241
      d->ConsumerHeartBeatTimers[index + 1] = DelAlarm(d->ConsumerHeartBeatTimers[index + 1]);;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   242
    }
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   243
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   244
  d->ProducerHeartBeatTimer = DelAlarm(d->ProducerHeartBeatTimer);;
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   245
}
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   246
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   247
/*!
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   248
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   249
**
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   250
** @param heartbeatID
b6572d0336c3 First doxygen implementation
nico
parents: 185
diff changeset
   251
**/
149
fe50ada8020b Changes in the API:
etisserant
parents: 71
diff changeset
   252
void _heartbeatError(UNS8 heartbeatID){}