This commit adds functionality to increase the sync and pdelay request intervals once gptp synchronization has been achieved. This is useful while running Automotive Profile where the network is usually static. Here, we are assuming that the gPTP synchronization is achieved whenever the last 'n' offsets calculated using the Sync messages are below a certain threshold. Both, the number of offsets to consider and the offset threshold are configurable. In order to support the interval update, a new clock servo state CLOCK_SERVO_STABLE has been added. The clock will transition to this state whenever the above condition is satisfied. When this transition occurs, the slave will send an "interval request" signaling message asking the master to change the sync interval. It will also update the pdelay request interval locally. Four new config options have been added to provide this functionality: - servo_offset_threshold: All the offset values being considered should be below this value. - servo_num_offset_values: number of previously received offset values to consider. - operLogSyncInterval: slave will ask the master to switch to this interval for sending sync messages when the offset stabilizes. - operLogPdelayReqInterval: the slave will set this interval for pdelay request messages when the offset stabilizes. Signed-off-by: Vedang Patel <vedang.patel@intel.com>
52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
/**
|
|
* @file servo_private.h
|
|
* @note Copyright (C) 2011 Richard Cochran <richardcochran@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
#ifndef HAVE_SERVO_PRIVATE_H
|
|
#define HAVE_SERVO_PRIVATE_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "contain.h"
|
|
#include "servo.h"
|
|
|
|
struct servo {
|
|
double max_frequency;
|
|
double step_threshold;
|
|
double first_step_threshold;
|
|
int first_update;
|
|
int64_t offset_threshold;
|
|
int num_offset_values;
|
|
int curr_offset_values;
|
|
|
|
void (*destroy)(struct servo *servo);
|
|
|
|
double (*sample)(struct servo *servo,
|
|
int64_t offset, uint64_t local_ts, double weight,
|
|
enum servo_state *state);
|
|
|
|
void (*sync_interval)(struct servo *servo, double interval);
|
|
|
|
void (*reset)(struct servo *servo);
|
|
|
|
double (*rate_ratio)(struct servo *servo);
|
|
|
|
void (*leap)(struct servo *servo, int leap);
|
|
};
|
|
|
|
#endif
|