src/nmtSlave.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
/*
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
     2
  This file is part of CanFestival, a library implementing CanOpen
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
     3
  Stack.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     4
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
     5
  Copyright (C): Edouard TISSERANT and Francis DUPIN
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     6
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
     7
  See COPYING file for copyrights details.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     8
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
     9
  This library is free software; you can redistribute it and/or
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    10
  modify it under the terms of the GNU Lesser General Public
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    11
  License as published by the Free Software Foundation; either
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    12
  version 2.1 of the License, or (at your option) any later version.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    13
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    14
  This library is distributed in the hope that it will be useful,
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    15
  but WITHOUT ANY WARRANTY; without even the implied warranty of
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    16
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    17
  Lesser General Public License for more details.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    18
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    19
  You should have received a copy of the GNU Lesser General Public
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    20
  License along with this library; if not, write to the Free Software
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    21
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    22
  USA
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    23
*/
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    24
/*!
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    25
** @file   nmtSlave.c
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    26
** @author Edouard TISSERANT and Francis DUPIN
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    27
** @date   Tue Jun  5 08:50:53 2007
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    28
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    29
** @brief
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    30
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    31
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    32
*/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    33
#include "nmtSlave.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    34
#include "states.h"
150
d2fc5d5f8a36 Some win32 fixes following yesterday's API changes.
etisserant
parents: 149
diff changeset
    35
#include "canfestival.h"
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    36
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    37
/*!
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    38
** put the slave in the state wanted by the master
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    39
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    40
** @param d
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    41
** @param m
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    42
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    43
void proceedNMTstateChange(CO_Data* d, Message *m)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    44
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    45
  if( d->nodeState == Pre_operational ||
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    46
      d->nodeState == Operational ||
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    47
      d->nodeState == Stopped ) {
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    48
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    49
    MSG_WAR(0x3400, "NMT received. for node :  ", (*m).data[1]);
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    50
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
    51
    /* Check if this NMT-message is for this node */
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
    52
    /* byte 1 = 0 : all the nodes are concerned (broadcast) */
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    53
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    54
    if( ( (*m).data[1] == 0 ) || ( (*m).data[1] == *d->bDeviceNodeId ) ){
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    55
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
    56
      switch( (*m).data[0]){ /* command specifier (cs) */
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    57
      case NMT_Start_Node:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    58
        if ( (d->nodeState == Pre_operational) || (d->nodeState == Stopped) )
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    59
          setState(d,Operational);
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    60
        break;
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    61
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    62
      case NMT_Stop_Node:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    63
        if ( d->nodeState == Pre_operational ||
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    64
             d->nodeState == Operational )
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    65
          setState(d,Stopped);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    66
        break;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    67
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    68
      case NMT_Enter_PreOperational:
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    69
        if ( d->nodeState == Operational ||
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    70
             d->nodeState == Stopped )
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    71
          setState(d,Pre_operational);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    72
        break;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    73
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    74
      case NMT_Reset_Node:
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    75
        setState(d,Initialisation);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    76
        break;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    77
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    78
      case NMT_Reset_Comunication:
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    79
        setState(d,Initialisation);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    80
        break;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    81
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
    82
      }/* end switch */
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    83
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
    84
    }/* end if( ( (*m).data[1] == 0 ) || ( (*m).data[1] ==
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    85
        bDeviceNodeId ) ) */
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    86
  }
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    87
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    88
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    89
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    90
/*!
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    91
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    92
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    93
** @param d
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    94
**
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    95
** @return
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
    96
**/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    97
UNS8 slaveSendBootUp(CO_Data* d)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    98
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    99
  Message m;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
   100
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   101
  MSG_WAR(0x3407, "Send a Boot-Up msg ", 0);
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
   102
215
f49e5a6b7804 Manual and Documentation finish
nico
parents: 208
diff changeset
   103
  /* message configuration */
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   104
  m.cob_id.w = NODE_GUARD << 7 | *d->bDeviceNodeId;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   105
  m.rtr = NOT_A_REQUEST;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   106
  m.len = 1;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   107
  m.data[0] = 0x00;
208
05d95c45b388 Manual convertion -> latex -> pdf
nico
parents: 150
diff changeset
   108
149
fe50ada8020b Changes in the API:
etisserant
parents: 71
diff changeset
   109
  return canSend(d->canHandle,&m);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   110
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   111