examples/TestMasterSlave/Master.c
author etisserant
Mon, 02 Jul 2007 18:22:58 +0200
changeset 236 905677ed00f3
parent 201 2966cd34162a
child 284 24bf3d692993
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
/*
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 "Master.h"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    24
#include "Slave.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
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    27
/*****************************************************************************/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    28
void TestMaster_heartbeatError(UNS8 heartbeatID)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    29
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    30
	eprintf("TestMaster_heartbeatError %d\n", heartbeatID);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    31
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    32
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    33
/********************************************************
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    34
 * ConfigureSlaveNode is responsible to
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    35
 *  - setup master RPDO 1 to receive TPDO 1 from id 2
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    36
 *  - setup master RPDO 2 to receive TPDO 2 from id 2
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    37
 ********************************************************/
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    38
void TestMaster_initialisation()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    39
{
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    40
	UNS32 PDO1_COBID = 0x0182; 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    41
	UNS32 PDO2_COBID = 0x0282;
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    42
	UNS8 size = sizeof(UNS32); 
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    43
	
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    44
	eprintf("TestMaster_initialisation\n");
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    45
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    46
	/*****************************************
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    47
	 * Define RPDOs to match slave ID=2 TPDOs*
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    48
	 *****************************************/
175
e255529b6f7d Added writeLocalDict and readLocalDict, that have to be called from application instead of getODEntry and setODEntry. Fix potential endianization problem.
etisserant
parents: 172
diff changeset
    49
	writeLocalDict( &TestMaster_Data, /*CO_Data* d*/
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    50
			0x1400, /*UNS16 index*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    51
			0x01, /*UNS8 subind*/ 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    52
			&PDO1_COBID, /*void * pSourceData,*/ 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    53
			&size, /* UNS8 * pExpectedSize*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    54
			RW);  /* UNS8 checkAccess */
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    55
			
175
e255529b6f7d Added writeLocalDict and readLocalDict, that have to be called from application instead of getODEntry and setODEntry. Fix potential endianization problem.
etisserant
parents: 172
diff changeset
    56
	writeLocalDict( &TestMaster_Data, /*CO_Data* d*/
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    57
			0x1401, /*UNS16 index*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    58
			0x01, /*UNS8 subind*/ 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    59
			&PDO2_COBID, /*void * pSourceData,*/ 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    60
			&size, /* UNS8 * pExpectedSize*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    61
			RW);  /* UNS8 checkAccess */
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    62
}
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    63
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    64
// Step counts number of times ConfigureSlaveNode is called
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    65
static init_step = 0;
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    66
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    67
/*Froward declaration*/
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    68
static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId);
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    69
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    70
/**/
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    71
static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    72
{
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    73
	UNS32 abortCode;	
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    74
	if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    75
		eprintf("Master : Failed in initializing slave %2.2x, step %d, AbortCode :%4.4x \n", nodeId, init_step, abortCode);
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    76
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    77
	/* Finalise last SDO transfer with this node */
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    78
	closeSDOtransfer(&TestMaster_Data, nodeId, SDO_CLIENT);
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    79
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    80
	ConfigureSlaveNode(d, nodeId);
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    81
}
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    82
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    83
/********************************************************
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    84
 * ConfigureSlaveNode is responsible to
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    85
 *  - setup slave TPDO 1 transmit time
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    86
 *  - setup slave TPDO 2 transmit time
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    87
 *  - switch to operational mode
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    88
 *  - send NMT to slave
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    89
 ********************************************************
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    90
 * This an example of :
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    91
 * Network Dictionary Access (SDO) with Callback 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    92
 * Slave node state change request (NMT) 
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    93
 ********************************************************
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    94
 * This is called first by TestMaster_preOperational
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    95
 * then it called again each time a SDO exchange is
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    96
 * finished.
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    97
 ********************************************************/
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
    98
 
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
    99
static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId)
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   100
{
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   101
	/* Master configure heartbeat producer time at 1000 ms 
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   102
	 * for slave node-id 0x02 by DCF concise */
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   103
	 
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   104
	UNS8 Transmission_Type = 0x01;
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   105
	UNS32 abortCode;
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   106
	UNS8 res;
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   107
	eprintf("Master : ConfigureSlaveNode %2.2x\n", nodeId);
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   108
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   109
	switch(++init_step){
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   110
		case 1: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   111
			eprintf("Master : set slave %2.2x TPDO 1 transmit type\n", nodeId);
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   112
			res = writeNetworkDictCallBack (d, /*CO_Data* d*/
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   113
					nodeId, /*UNS8 nodeId*/
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   114
					0x1800, /*UNS16 index*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   115
					0x02, /*UNS8 subindex*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   116
					1, /*UNS8 count*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   117
					0, /*UNS8 dataType*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   118
					&Transmission_Type,/*void *data*/
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   119
					CheckSDOAndContinue); /*SDOCallback_t Callback*/
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   120
					break;
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   121
		
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   122
		case 2:	/*Second step*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   123
			eprintf("Master : set slave %2.2x TPDO 2 transmit type\n", nodeId);
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   124
			writeNetworkDictCallBack (d, /*CO_Data* d*/
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   125
					nodeId, /*UNS8 nodeId*/
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   126
					0x1801, /*UNS16 index*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   127
					0x02, /*UNS16 index*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   128
					1, /*UNS8 count*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   129
					0, /*UNS8 dataType*/
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   130
					&Transmission_Type,/*void *data*/
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   131
					CheckSDOAndContinue); /*SDOCallback_t Callback*/
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   132
					break;
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   133
		case 3: 
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   134
		
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   135
		/****************************** START *******************************/
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   136
		
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   137
			/* Put the master in operational mode */
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   138
			setState(d, Operational);
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   139
		 
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   140
			/* Ask slave node to go in operational mode */
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   141
			masterSendNMTstateChange (d, nodeId, NMT_Start_Node);
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   142
			
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   143
	}
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   144
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   145
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   146
void TestMaster_preOperational()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   147
{
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   148
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   149
	eprintf("TestMaster_preOperational\n");
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   150
	ConfigureSlaveNode(&TestMaster_Data, 0x02);
154
1b3165f2d17d Implemented writeNetworkDictCallBack test in TestMasterSlave example. Fixed callback assignement race condition in sdo.c.
etisserant
parents: 149
diff changeset
   151
	
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   152
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   153
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   154
void TestMaster_operational()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   155
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   156
	eprintf("TestMaster_operational\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   157
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   158
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   159
void TestMaster_stopped()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   160
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   161
	eprintf("TestMaster_stopped\n");
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   162
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   163
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   164
void TestMaster_post_sync()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   165
{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   166
	eprintf("TestMaster_post_sync\n");
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   167
	eprintf("Master: %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
   168
		MasterMap1,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   169
		MasterMap2,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   170
		MasterMap3, 
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   171
		MasterMap4,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   172
		MasterMap5,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   173
		MasterMap6,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   174
		MasterMap7,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   175
		MasterMap8,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   176
		MasterMap9,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   177
		MasterMap10,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   178
		MasterMap11,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   179
		MasterMap12,
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   180
		MasterMap13);
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   181
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   182
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   183
char query_result = 0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   184
char waiting_answer = 0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   185
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   186
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   187
static void CheckSDO(CO_Data* d, UNS8 nodeId)
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   188
{
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   189
	UNS32 abortCode;	
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   190
	if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   191
		eprintf("Master : Failed in changing Slave's transmit type AbortCode :%4.4x \n", abortCode);
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   192
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   193
	/* Finalise last SDO transfer with this node */
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   194
	closeSDOtransfer(&TestMaster_Data, nodeId, SDO_CLIENT);
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   195
}
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   196
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   197
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   198
static int MasterSyncCount = 0;
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   199
void TestMaster_post_TPDO()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   200
{
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   201
	eprintf("TestMaster_post_TPDO MasterSyncCount = %d \n", MasterSyncCount);
179
763b6d32c1a6 Master configure slave's heartbeat producer time by concise DCF.
greg
parents: 175
diff changeset
   202
//
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   203
//	{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   204
//		char zero = 0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   205
//		if(MasterMap4 > 0x80){
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   206
//			writeNetworkDict (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   207
//				&TestMaster_Data,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   208
//				TestSlave_Data->bDeviceNodeId,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   209
//				0x2002,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   210
//				0x00,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   211
//				1,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   212
//				0,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   213
//				&zero); 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   214
//		}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   215
//	}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   216
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   217
#if 0
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   218
	if(waiting_answer){
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   219
		UNS32 abortCode;			
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   220
		UNS8 size;			
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   221
		switch(getReadResultNetworkDict (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   222
			&TestMaster_Data, 
201
2966cd34162a Boolean variable mapped in PDO
greg
parents: 179
diff changeset
   223
			0x02,
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   224
			&query_result,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   225
			&size,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   226
			&abortCode))
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   227
		{
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   228
			case SDO_FINISHED:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   229
				/* Do something with result here !!*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   230
				eprintf("Got SDO answer (0x2002, 0x00), %d %d\n",query_result,size);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   231
			case SDO_ABORTED_RCV:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   232
			case SDO_ABORTED_INTERNAL:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   233
			case SDO_RESET:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   234
				waiting_answer = 0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   235
				closeSDOtransfer(
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   236
					&TestMaster_Data,
201
2966cd34162a Boolean variable mapped in PDO
greg
parents: 179
diff changeset
   237
					0x02,
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   238
					SDO_CLIENT);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   239
			break;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   240
			case SDO_DOWNLOAD_IN_PROGRESS:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   241
			case SDO_UPLOAD_IN_PROGRESS:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   242
			break;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   243
		}
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   244
	}else if(MasterSyncCount % 10 == 0){
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   245
		readNetworkDict (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   246
			&TestMaster_Data,
201
2966cd34162a Boolean variable mapped in PDO
greg
parents: 179
diff changeset
   247
			0x02,
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   248
			0x2002,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   249
			0x00,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   250
			0);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   251
		waiting_answer = 1;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   252
	}
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   253
#endif	
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   254
	if(MasterSyncCount % 17 == 0){
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   255
		eprintf("Master : Ask RTR PDO (0x1402)\n");
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   256
		sendPDOrequest(&TestMaster_Data, 0x1402 );
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   257
		sendPDOrequest(&TestMaster_Data, 0x1403 );
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   258
	}
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   259
	if(MasterSyncCount % 50 == 0){
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   260
		eprintf("Master : Change slave's transmit type to 0xFF\n");
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   261
		UNS8 transmitiontype = 0xFF;
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   262
		writeNetworkDictCallBack (&TestMaster_Data, /*CO_Data* d*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   263
					2, /*UNS8 nodeId*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   264
					0x1802, /*UNS16 index*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   265
					0x02, /*UNS16 index*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   266
					1, /*UNS8 count*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   267
					0, /*UNS8 dataType*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   268
					&transmitiontype,/*void *data*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   269
					CheckSDO); /*SDOCallback_t Callback*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   270
	}
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   271
	if(MasterSyncCount % 50 == 25){
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   272
		eprintf("Master : Change slave's transmit type to 0x00\n");
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   273
		UNS8 transmitiontype = 0x00;
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   274
		writeNetworkDictCallBack (&TestMaster_Data, /*CO_Data* d*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   275
					2, /*UNS8 nodeId*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   276
					0x1802, /*UNS16 index*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   277
					0x02, /*UNS16 index*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   278
					1, /*UNS8 count*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   279
					0, /*UNS8 dataType*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   280
					&transmitiontype,/*void *data*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   281
					CheckSDO); /*SDOCallback_t Callback*/
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   282
	}
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   283
	MasterSyncCount++;
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 201
diff changeset
   284
}