examples/TestMasterSlave/Slave.c
author fbeaulier
Tue, 16 Aug 2011 14:15:52 +0200
changeset 663 70fc3603e36f
parent 381 854c43cdc24a
permissions -rw-r--r--
timers_unix.c : remove sigint and sigterm catch
sdo : Allow multiple servers
The sdo transfer struct is not anymore referenced by server's node id but by
client or server number in the OD. Node id is not relevant in SDO transfert.
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     1
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     2
This file is part of CanFestival, a library implementing CanOpen Stack. 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     3
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     4
Copyright (C): Edouard TISSERANT and Francis DUPIN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     5
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     6
See COPYING file for copyrights details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     7
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     8
This library is free software; you can redistribute it and/or
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     9
modify it under the terms of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    10
License as published by the Free Software Foundation; either
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    11
version 2.1 of the License, or (at your option) any later version.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    12
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    13
This library is distributed in the hope that it will be useful,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    14
but WITHOUT ANY WARRANTY; without even the implied warranty of
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    16
Lesser General Public License for more details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    17
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    18
You should have received a copy of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    19
License along with this library; if not, write to the Free Software
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    21
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    22
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    23
#include "Slave.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    24
#include "Master.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    25
#include "TestMasterSlave.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    26
343
118c1cabd0b0 Primary LSS support, thanks to Jorge Berzosa.
etisserant
parents: 296
diff changeset
    27
extern s_BOARD SlaveBoard;
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    28
/*****************************************************************************/
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    29
void TestSlave_heartbeatError(CO_Data* d, UNS8 heartbeatID)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    30
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    31
	eprintf("TestSlave_heartbeatError %d\n", heartbeatID);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    32
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    33
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    34
void TestSlave_initialisation(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    35
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    36
	eprintf("TestSlave_initialisation\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    37
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    38
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    39
void TestSlave_preOperational(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    40
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    41
	eprintf("TestSlave_preOperational\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    42
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    43
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    44
void TestSlave_operational(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    45
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    46
	eprintf("TestSlave_operational\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    47
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    48
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    49
void TestSlave_stopped(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    50
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    51
	eprintf("TestSlave_stopped\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    52
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    53
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    54
void TestSlave_post_sync(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    55
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    56
      eprintf("TestSlave_post_sync\n");
201
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    57
      
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    58
      SlaveMap1=1;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    59
      SlaveMap2=1;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    60
      SlaveMap3=0;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    61
      SlaveMap4=0;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    62
      SlaveMap5=1;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    63
      SlaveMap6=0;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    64
      SlaveMap7=1;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    65
      SlaveMap8=0;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    66
      SlaveMap9=16;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    67
      SlaveMap10 = 0xff00ff00;
2966cd34162a Boolean variable mapped in PDO
greg
parents: 172
diff changeset
    68
      SlaveMap11 = 0xabcd;
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    69
      SlaveMap12 += SlaveMap12 > 0x80 ? 0 : 1;
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    70
      eprintf("Slave: %d %d %d %d %d %d %d %d %d %x %x %d %d \n",
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    71
      	SlaveMap1, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    72
      	SlaveMap2, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    73
      	SlaveMap3, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    74
      	SlaveMap4, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    75
      	SlaveMap5, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    76
      	SlaveMap6, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    77
      	SlaveMap7, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    78
      	SlaveMap8, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    79
      	SlaveMap9, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    80
      	SlaveMap10,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    81
      	SlaveMap11, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    82
      	SlaveMap12,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    83
      	SlaveMap13);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    84
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    85
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    86
void TestSlave_post_TPDO(CO_Data* d)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    87
{
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
    88
        SlaveMap13 += 1;
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    89
	eprintf("TestSlave_post_TPDO\n");
284
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    90
	
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    91
	/* send an error and recover inmediately every 12 cycles */
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    92
	if(SlaveMap13 % 12 == 0)
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    93
	{
296
03f2b8b8cb0b Solved a small bug in emcy.c (errRegMask was always '1' in EMCY_setError.
luis
parents: 284
diff changeset
    94
		EMCY_setError(&TestSlave_Data, 0x4200, 0x08, 0x0000);
284
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    95
		EMCY_errorRecovered(&TestSlave_Data, 0x4200);
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
    96
	}
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    97
}
161
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
    98
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
    99
void TestSlave_storeODSubIndex(CO_Data* d, UNS16 wIndex, UNS8 bSubindex)
161
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   100
{
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   101
	/*TODO : 
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   102
	 * - call getODEntry for index and subindex, 
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   103
	 * - save content to file, database, flash, nvram, ...
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   104
	 * 
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   105
	 * To ease flash organisation, index of variable to store
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   106
	 * can be established by scanning d->objdict[d->ObjdictSize]
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   107
	 * for variables to store.
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   108
	 * 
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   109
	 * */
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   110
	eprintf("TestSlave_storeODSubIndex : %4.4x %2.2x\n", wIndex,  bSubindex);
c4908cc776a9 SetODEntry now call CO_data->storeODSubEntry(Index,SubIndex) for variables to be Stored (when column Save==True in GUI)
etisserant
parents: 149
diff changeset
   111
}
284
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
   112
378
d2abf6c8c27b As requested long ago, added CoData* parameter to all this applications callback, let application designer use identical callback for multiple nodes, and reduce source code length.
etisserant
parents: 343
diff changeset
   113
void TestSlave_post_emcy(CO_Data* d, UNS8 nodeID, UNS16 errCode, UNS8 errReg)
284
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
   114
{
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
   115
	eprintf("Slave received EMCY message. Node: %2.2x  ErrorCode: %4.4x  ErrorRegister: %2.2x\n", nodeID, errCode, errReg);
24bf3d692993 Implemented EMCY objects.
luis
parents: 236
diff changeset
   116
}