examples/TestMasterSlave/Master.c
changeset 343 118c1cabd0b0
parent 284 24bf3d692993
child 344 da65cf699839
equal deleted inserted replaced
342:66f007300c10 343:118c1cabd0b0
   141 			masterSendNMTstateChange (d, nodeId, NMT_Start_Node);
   141 			masterSendNMTstateChange (d, nodeId, NMT_Start_Node);
   142 			
   142 			
   143 	}
   143 	}
   144 }
   144 }
   145 
   145 
       
   146 #ifdef CO_ENABLE_LSS
       
   147 static void ConfigureLSSNode(CO_Data* d);
       
   148 UNS8 init_step_LSS=1;
       
   149 
       
   150 static void CheckLSSAndContinue(CO_Data* d, UNS8 command)
       
   151 {
       
   152 	UNS32 dat1;
       
   153 	UNS8 dat2;
       
   154 	printf("CheckLSS->");
       
   155 	if(getConfigResultNetworkNode (d, command, &dat1, &dat2) != LSS_FINISHED){
       
   156 		if(command==LSS_IDENT_NON_CONF_SLAVE){
       
   157 			eprintf("Master : There are not no-configured slaves in the net\n", command);
       
   158 			return;
       
   159 		}
       
   160 		else{
       
   161 			eprintf("Master : Failed in LSS comand %d.  Trying again\n", command);
       
   162 		}
       
   163 	}
       
   164 	else
       
   165 	{
       
   166 		init_step_LSS++;
       
   167 	
       
   168 		switch(command){
       
   169 		case LSS_CONF_NODE_ID:
       
   170    			switch(dat1){
       
   171    				case 0: printf("Node ID change succesful\n");break;
       
   172    				case 1: printf("Node ID change error:out of range\n");break;
       
   173    				case 0xFF:printf("Node ID change error:specific error\n");break;
       
   174    				default:break;
       
   175    			}
       
   176    			break;
       
   177    		case LSS_CONF_BIT_TIMING:
       
   178    			switch(dat1){
       
   179    				case 0: printf("Baud rate change succesful\n");break;
       
   180    				case 1: printf("Baud rate change error: change baud rate not supported\n");break;
       
   181    				case 0xFF:printf("Baud rate change error:specific error\n");break;
       
   182    				default:break;
       
   183    			}
       
   184    			break;
       
   185    		case LSS_CONF_STORE:
       
   186    			switch(dat1){
       
   187    				case 0: printf("Store configuration succesful\n");break;
       
   188    				case 1: printf("Store configuration error:not supported\n");break;
       
   189    				case 0xFF:printf("Store configuration error:specific error\n");break;
       
   190    				default:break;
       
   191    			}
       
   192    			break;
       
   193 		case LSS_SM_SELECTIVE_RESP:
       
   194    			printf("Slave in CONFIGURATION mode\n");
       
   195    			break;
       
   196    		case LSS_IDENT_SLAVE:
       
   197    			printf("node identified\n");
       
   198    			break;
       
   199    		case LSS_IDENT_NON_CONF_SLAVE:
       
   200    			printf("non-configured remote slave in the net\n");
       
   201    			break;
       
   202    		case LSS_INQ_VENDOR_ID:
       
   203    			printf("Slave VendorID %x\n", dat1);
       
   204    			break;
       
   205    		case LSS_INQ_PRODUCT_CODE:
       
   206    			printf("Slave Product Code %x\n", dat1);
       
   207    			break;
       
   208    		case LSS_INQ_REV_NUMBER:
       
   209    			printf("Slave Revision Number %x\n", dat1);
       
   210    			break;
       
   211    		case LSS_INQ_SERIAL_NUMBER:
       
   212    			printf("Slave Serial Number %x\n", dat1);
       
   213    			break;
       
   214    		case LSS_INQ_NODE_ID:
       
   215    			printf("Slave nodeid %x\n", dat1);
       
   216    			break;
       
   217 		}
       
   218 	}
       
   219 
       
   220 	printf("\n");
       
   221 	ConfigureLSSNode(d);
       
   222 }
       
   223 
       
   224 
       
   225 struct timeval master_prev_time,master_current_time;
       
   226 static void ConfigureLSSNode(CO_Data* d)
       
   227 {
       
   228 	UNS32 Vendor_ID=0x12345678;
       
   229 	UNS32 Product_Code=0x90123456;
       
   230 	UNS32 Revision_Number=0x78901234;
       
   231 	UNS32 Serial_Number=0x56789012;
       
   232 	UNS32 Revision_Number_high=0x78901240;
       
   233 	UNS32 Revision_Number_low=0x78901230;
       
   234 	UNS32 Serial_Number_high=0x56789020;
       
   235 	UNS32 Serial_Number_low=0x56789010;
       
   236 	UNS8 NodeID=0x02;
       
   237 	UNS8 Baud_Table=0;
       
   238 	UNS8 Baud_BitTiming=3;
       
   239 	UNS16 Switch_delay=1;
       
   240 	UNS8 LSS_mode=LSS_WAITING_MODE;
       
   241 	UNS8 res;
       
   242 	eprintf("ConfigureLSSNode-> ");
       
   243 
       
   244 	switch(init_step_LSS){
       
   245 		case 1:	/* LSS=>identify non-configured remote slave */
       
   246 			eprintf("LSS=>identify non-configured remote slave\n");
       
   247 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_IDENT_REMOTE_NON_CONF,0,0,CheckLSSAndContinue);
       
   248 			break;
       
   249 		case 2:	/* LSS=>identify node */
       
   250 			eprintf("LSS=>identify node\n");
       
   251 			res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_VENDOR,&Vendor_ID,0);
       
   252 			res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_PRODUCT,&Product_Code,0);
       
   253 			res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_REV_LOW,&Revision_Number_low,0);
       
   254 			res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_REV_HIGH,&Revision_Number_high,0);
       
   255 			res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_SERIAL_LOW,&Serial_Number_low,0);
       
   256 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_IDENT_REMOTE_SERIAL_HIGH,&Serial_Number_high,0,CheckLSSAndContinue);
       
   257 			break;
       
   258 		case 3: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/
       
   259 			eprintf("LSS=>put in configuration mode\n");
       
   260 			res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_VENDOR,&Vendor_ID,0);
       
   261 			res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_PRODUCT,&Product_Code,0);
       
   262 			res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_REVISION,&Revision_Number,0);
       
   263 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_SM_SELECTIVE_SERIAL,&Serial_Number,0,CheckLSSAndContinue);
       
   264 			break;
       
   265 		case 4:	/* LSS=>inquire nodeID */
       
   266 			eprintf("LSS=>inquire nodeID\n");
       
   267 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_NODE_ID,0,0,CheckLSSAndContinue);
       
   268 			break;
       
   269 		case 5:	/* LSS=>inquire VendorID */
       
   270 			eprintf("LSS=>inquire VendorID\n");
       
   271 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_VENDOR_ID,0,0,CheckLSSAndContinue);
       
   272 			break;
       
   273 		case 6:	/* LSS=>inquire Product code */
       
   274 			eprintf("LSS=>inquire Product code\n");
       
   275 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_PRODUCT_CODE,0,0,CheckLSSAndContinue);
       
   276 			break;
       
   277 		case 7:	/* LSS=>inquire Revision Number */
       
   278 			eprintf("LSS=>inquire Revision Number\n");
       
   279 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_REV_NUMBER,0,0,CheckLSSAndContinue);
       
   280 			break;
       
   281 		case 8:	/* LSS=>inquire Serial Number */
       
   282 			eprintf("LSS=>inquire Serial Number\n");
       
   283 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_SERIAL_NUMBER,0,0,CheckLSSAndContinue);
       
   284 			break;
       
   285 		case 9:	/* LSS=>change the nodeID */
       
   286 			eprintf("LSS=>change the nodeId\n");
       
   287 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_NODE_ID,&NodeID,0,CheckLSSAndContinue);
       
   288 			break;
       
   289 		case 10:	/* LSS=>change the Baud rate */
       
   290 			eprintf("LSS=>change the Baud rate\n");
       
   291 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_BIT_TIMING,&Baud_Table,&Baud_BitTiming,CheckLSSAndContinue);
       
   292 			break;
       
   293 		case 11:
       
   294 			eprintf("LSS=>Activate Bit Timing\n");
       
   295 			res=configNetworkNode(&TestMaster_Data,LSS_CONF_ACT_BIT_TIMING,&Switch_delay,0);
       
   296 			/*no break;*/
       
   297 			init_step_LSS++;
       
   298 		case 12:
       
   299 			/*LSS=>store configuration*/
       
   300 			/* It will fail the first time (time out) due to the switch delay */
       
   301 			/* It will fail the second time because it is not implemented in the slave */
       
   302 			eprintf("LSS=>store configuration\n");
       
   303 			res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_STORE,0,0,CheckLSSAndContinue);
       
   304 			break;
       
   305 		case 13: /* LSS=>put in operation mod */
       
   306 			eprintf("LSS=>put in operation mode\n");
       
   307 			res=configNetworkNode(&TestMaster_Data,LSS_SM_GLOBAL,&LSS_mode,0);
       
   308 			break;
       
   309 	}
       
   310 }
       
   311 #endif
       
   312 
   146 void TestMaster_preOperational()
   313 void TestMaster_preOperational()
   147 {
   314 {
   148 
       
   149 	eprintf("TestMaster_preOperational\n");
   315 	eprintf("TestMaster_preOperational\n");
   150 	ConfigureSlaveNode(&TestMaster_Data, 0x02);
   316 #ifdef CO_ENABLE_LSS
   151 	
   317 	/* Ask slave node to go in stop mode */
       
   318 	masterSendNMTstateChange (&TestMaster_Data, 0, NMT_Stop_Node);
       
   319 	ConfigureLSSNode(&TestMaster_Data);
       
   320 #endif
   152 }
   321 }
   153 
   322 
   154 void TestMaster_operational()
   323 void TestMaster_operational()
   155 {
   324 {
   156 	eprintf("TestMaster_operational\n");
   325 	eprintf("TestMaster_operational\n");
   284 					&transmitiontype,/*void *data*/
   453 					&transmitiontype,/*void *data*/
   285 					CheckSDO); /*SDOCallback_t Callback*/
   454 					CheckSDO); /*SDOCallback_t Callback*/
   286 	}
   455 	}
   287 	MasterSyncCount++;
   456 	MasterSyncCount++;
   288 }
   457 }
       
   458 
       
   459 void TestMaster_post_SlaveBootup(UNS8 nodeid)
       
   460 {
       
   461 	eprintf("TestMaster_post_SlaveBootup %x\n", nodeid);
       
   462 	ConfigureSlaveNode(&TestMaster_Data, nodeid);
       
   463 }
       
   464