examples/TestMasterSlave/Master.c
changeset 179 763b6d32c1a6
parent 175 e255529b6f7d
child 201 2966cd34162a
equal deleted inserted replaced
178:01d81faa3350 179:763b6d32c1a6
    38 void TestMaster_initialisation()
    38 void TestMaster_initialisation()
    39 {
    39 {
    40 	UNS32 PDO1_COBID = 0x0182; 
    40 	UNS32 PDO1_COBID = 0x0182; 
    41 	UNS32 PDO2_COBID = 0x0282;
    41 	UNS32 PDO2_COBID = 0x0282;
    42 	UNS8 size = sizeof(UNS32); 
    42 	UNS8 size = sizeof(UNS32); 
    43 
    43 	
    44 	eprintf("TestMaster_initialisation\n");
    44 	eprintf("TestMaster_initialisation\n");
    45 
    45 
    46 	/*****************************************
    46 	/*****************************************
    47 	 * Define RPDOs to match slave ID=2 TPDOs*
    47 	 * Define RPDOs to match slave ID=2 TPDOs*
    48 	 *****************************************/
    48 	 *****************************************/
    59 			&PDO2_COBID, /*void * pSourceData,*/ 
    59 			&PDO2_COBID, /*void * pSourceData,*/ 
    60 			&size, /* UNS8 * pExpectedSize*/
    60 			&size, /* UNS8 * pExpectedSize*/
    61 			RW);  /* UNS8 checkAccess */
    61 			RW);  /* UNS8 checkAccess */
    62 }
    62 }
    63 
    63 
       
    64 // Step counts number of times ConfigureSlaveNode is called
       
    65 static init_step = 0;
       
    66 
       
    67 /*Froward declaration*/
       
    68 static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId);
       
    69 
       
    70 /**/
       
    71 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
       
    72 {
       
    73 	UNS32 abortCode;	
       
    74 	if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
       
    75 		eprintf("Master : Failed in initializing slave %2.2x, step %d, AbortCode :%4.4x \n", nodeId, init_step, abortCode);
       
    76 
       
    77 	/* Finalise last SDO transfer with this node */
       
    78 	closeSDOtransfer(&TestMaster_Data, nodeId, SDO_CLIENT);
       
    79 
       
    80 	ConfigureSlaveNode(d, nodeId);
       
    81 }
       
    82 
    64 /********************************************************
    83 /********************************************************
    65  * ConfigureSlaveNode is responsible to
    84  * ConfigureSlaveNode is responsible to
    66  *  - setup slave TPDO 1 transmit time
    85  *  - setup slave TPDO 1 transmit time
    67  *  - setup slave TPDO 2 transmit time
    86  *  - setup slave TPDO 2 transmit time
    68  *  - switch to operational mode
    87  *  - switch to operational mode
    74  ********************************************************
    93  ********************************************************
    75  * This is called first by TestMaster_preOperational
    94  * This is called first by TestMaster_preOperational
    76  * then it called again each time a SDO exchange is
    95  * then it called again each time a SDO exchange is
    77  * finished.
    96  * finished.
    78  ********************************************************/
    97  ********************************************************/
       
    98  
    79 static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId)
    99 static void ConfigureSlaveNode(CO_Data* d, UNS8 nodeId)
    80 {
   100 {
    81 	// Step counts number of times ConfigureSlaveNode is called
   101 	/* Master configure heartbeat producer time at 1000 ms 
    82 	static step = 1;
   102 	 * for slave node-id 0x02 by DCF concise */
    83 	
   103 	 
    84 	UNS8 Transmission_Type = 0x01; 
   104 	UNS8 Transmission_Type = 0x01;
    85 	UNS32 abortCode;
   105 	UNS32 abortCode;
    86 	UNS8 res;
   106 	UNS8 res;
    87 	eprintf("Master : ConfigureSlaveNode %2.2x\n", nodeId);
   107 	eprintf("Master : ConfigureSlaveNode %2.2x\n", nodeId);
    88 
   108 
    89 	switch(step++){
   109 	switch(++init_step){
    90 		case 1: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/
   110 		case 1: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/
    91 			eprintf("Master : set slave %2.2x TPDO 1 transmit type\n", nodeId);
   111 			eprintf("Master : set slave %2.2x TPDO 1 transmit type\n", nodeId);
    92 			res = writeNetworkDictCallBack (d, /*CO_Data* d*/
   112 			res = writeNetworkDictCallBack (d, /*CO_Data* d*/
    93 					*TestSlave_Data.bDeviceNodeId, /*UNS8 nodeId*/
   113 					nodeId, /*UNS8 nodeId*/
    94 					0x1800, /*UNS16 index*/
   114 					0x1800, /*UNS16 index*/
    95 					0x02, /*UNS8 subindex*/
   115 					0x02, /*UNS8 subindex*/
    96 					1, /*UNS8 count*/
   116 					1, /*UNS8 count*/
    97 					0, /*UNS8 dataType*/
   117 					0, /*UNS8 dataType*/
    98 					&Transmission_Type,/*void *data*/
   118 					&Transmission_Type,/*void *data*/
    99 					ConfigureSlaveNode); /*SDOCallback_t Callback*/			break;
   119 					CheckSDOAndContinue); /*SDOCallback_t Callback*/
       
   120 					break;
       
   121 		
   100 		case 2:	/*Second step*/
   122 		case 2:	/*Second step*/
   101 			/*check and warn for previous slave OD access error*/
       
   102 			if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
       
   103 				eprintf("Master : Couldn't set slave %2.2x TPDO 1 transmit type. AbortCode :%4.4x \n", nodeId, abortCode);
       
   104 
       
   105 			/* Finalise last SDO transfer with this node */
       
   106 			closeSDOtransfer(&TestMaster_Data,
       
   107 					*TestSlave_Data.bDeviceNodeId,
       
   108 					SDO_CLIENT);
       
   109 					
       
   110 			/*Setup Slave's TPDO 1 to be transmitted on SYNC*/
       
   111 			eprintf("Master : set slave %2.2x TPDO 2 transmit type\n", nodeId);
   123 			eprintf("Master : set slave %2.2x TPDO 2 transmit type\n", nodeId);
   112 			writeNetworkDictCallBack (d, /*CO_Data* d*/
   124 			writeNetworkDictCallBack (d, /*CO_Data* d*/
   113 					*TestSlave_Data.bDeviceNodeId, /*UNS8 nodeId*/
   125 					nodeId, /*UNS8 nodeId*/
   114 					0x1801, /*UNS16 index*/
   126 					0x1801, /*UNS16 index*/
   115 					0x02, /*UNS16 index*/
   127 					0x02, /*UNS16 index*/
   116 					1, /*UNS8 count*/
   128 					1, /*UNS8 count*/
   117 					0, /*UNS8 dataType*/
   129 					0, /*UNS8 dataType*/
   118 					&Transmission_Type,/*void *data*/
   130 					&Transmission_Type,/*void *data*/
   119 					ConfigureSlaveNode); /*SDOCallback_t Callback*/
   131 					CheckSDOAndContinue); /*SDOCallback_t Callback*/
   120 			break;
   132 					break;
   121 		case 3: /*Last step*/
   133 		case 3: 
   122 			/*check and warn for previous slave OD access error*/
   134 		
   123 			if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
   135 		/****************************** START *******************************/
   124 				eprintf("Master : Couldn't set slave %2.2x TPDO 2 transmit type. AbortCode :%4.4x \n", nodeId, abortCode);
   136 		
   125 
       
   126 			/* Finalise last SDO transfer with this node */
       
   127 			closeSDOtransfer(&TestMaster_Data,
       
   128 					*TestSlave_Data.bDeviceNodeId,
       
   129 					SDO_CLIENT);
       
   130 
       
   131 			/* Put the master in operational mode */
   137 			/* Put the master in operational mode */
   132 			setState(d, Operational);
   138 			setState(d, Operational);
   133 			  
   139 		 
   134 			/* Ask slave node to go in operational mode */
   140 			/* Ask slave node to go in operational mode */
   135 			masterSendNMTstateChange (d, nodeId, NMT_Start_Node);
   141 			masterSendNMTstateChange (d, nodeId, NMT_Start_Node);
       
   142 			
   136 	}
   143 	}
   137 			
       
   138 }
   144 }
   139 
   145 
   140 void TestMaster_preOperational()
   146 void TestMaster_preOperational()
   141 {
   147 {
   142 
   148 
   143 	eprintf("TestMaster_preOperational\n");
   149 	eprintf("TestMaster_preOperational\n");
   144 	ConfigureSlaveNode(&TestMaster_Data, 2);
   150 	ConfigureSlaveNode(&TestMaster_Data, 0x02);
   145 	
   151 	
   146 }
   152 }
   147 
   153 
   148 void TestMaster_operational()
   154 void TestMaster_operational()
   149 {
   155 {
   165 char waiting_answer = 0;
   171 char waiting_answer = 0;
   166 
   172 
   167 void TestMaster_post_TPDO()
   173 void TestMaster_post_TPDO()
   168 {
   174 {
   169 	eprintf("TestMaster_post_TPDO\n");
   175 	eprintf("TestMaster_post_TPDO\n");
   170 
   176 //
   171 //	{
   177 //	{
   172 //		char zero = 0;
   178 //		char zero = 0;
   173 //		if(MasterMap4 > 0x80){
   179 //		if(MasterMap4 > 0x80){
   174 //			writeNetworkDict (
   180 //			writeNetworkDict (
   175 //				&TestMaster_Data,
   181 //				&TestMaster_Data,
   215 			0x2002,
   221 			0x2002,
   216 			0x00,
   222 			0x00,
   217 			0);
   223 			0);
   218 		waiting_answer = 1;
   224 		waiting_answer = 1;
   219 	}
   225 	}
   220 		
   226 }
   221 }