ts2phc: Ignore pulses with invalid time stamps.
The API to obtain the time stamp of a PPS source indicates the validity of the returned value. However, the current code does not ever test the validity information in any way. This patch lets the clients ignore PPS values that lack a valid time stamp. Signed-off-by: Richard Cochran <richardcochran@gmail.com>
This commit is contained in:
		
							parent
							
								
									70c32043a5
								
							
						
					
					
						commit
						1335db3bde
					
				| @ -7,6 +7,7 @@ | ||||
| #include <errno.h> | ||||
| #include <linux/ptp_clock.h> | ||||
| #include <poll.h> | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/ioctl.h> | ||||
| @ -50,7 +51,7 @@ struct ts2phc_slave_array { | ||||
| 
 | ||||
| struct ts2phc_source_timestamp { | ||||
| 	struct timespec ts; | ||||
| 	int valid; | ||||
| 	bool valid; | ||||
| }; | ||||
| 
 | ||||
| enum extts_result { | ||||
| @ -269,6 +270,11 @@ static int ts2phc_slave_event(struct ts2phc_slave *slave, | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!source_ts.valid) { | ||||
| 		pr_debug("%s ignoring invalid master time stamp", slave->name); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	adj = servo_sample(slave->servo, offset, extts_ts, | ||||
| 			   SAMPLE_WEIGHT, &slave->state); | ||||
| 
 | ||||
| @ -398,7 +404,7 @@ int ts2phc_slave_poll(struct ts2phc_master *master) | ||||
| { | ||||
| 	struct ts2phc_source_timestamp source_ts; | ||||
| 	unsigned int i; | ||||
| 	int cnt; | ||||
| 	int cnt, err; | ||||
| 
 | ||||
| 	if (ts2phc_slave_array_create()) { | ||||
| 		return -1; | ||||
| @ -416,7 +422,8 @@ int ts2phc_slave_poll(struct ts2phc_master *master) | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	source_ts.valid = ts2phc_master_getppstime(master, &source_ts.ts); | ||||
| 	err = ts2phc_master_getppstime(master, &source_ts.ts); | ||||
| 	source_ts.valid = err ? false : true; | ||||
| 
 | ||||
| 	for (i = 0; i < ts2phc_n_slaves; i++) { | ||||
| 		if (polling_array.pfd[i].revents & (POLLIN|POLLPRI)) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user