array(), 'selected' => array());
$nmealist['options'][0] = 'All';
$nmealist['options'][1] = 'RMC';
$nmealist['options'][2] = 'GGA';
$nmealist['options'][4] = 'GLL';
$nmealist['options'][8] = 'ZDA or ZDG';
if(!$pconfig['nmea'])
array_push($nmealist['selected'], 0);
foreach($nmealist['options'] as $val => $opt) {
if($pconfig['nmea'] & $val)
array_push($nmealist['selected'], $val);
}
return($nmealist);
}
$closehead = false;
$pconfig = &$config['ntpd']['gps'];
$pgtitle = array(gettext("Services"), gettext("NTP GPS"));
$shortcut_section = "ntp";
include("head.inc");
$tab_array = array();
$tab_array[] = array(gettext("NTP"), false, "services_ntpd.php");
$tab_array[] = array(gettext("Serial GPS"), true, "services_ntpd_gps.php");
$tab_array[] = array(gettext("PPS"), false, "services_ntpd_pps.php");
display_top_tabs($tab_array);
require_once('classes/Form.class.php');
$form = new Form;
$section = new Form_Section('NTP Serial GPS Configuration');
$section->addInput(new Form_StaticText(
'Notes',
'A GPS connected via a serial port may be used as a reference clock for NTP. If the GPS also supports PPS and is properly configured, ' .
'and connected, that GPS may also be used as a Pulse Per Second clock reference. NOTE: A USB GPS may work, but is not recommended due to USB bus timing issues.' . '
' .
'For the best results, NTP should have at least three sources of time. So it is best to configure at least 2 servers under ' .
'Services > NTP' .
' to minimize clock drift if the GPS data is not valid over time. Otherwise ntpd may only use values from the unsynchronized local clock when providing time to clients.'
));
$gpstypes = array('Custom', 'Default', 'Generic', 'Garmin', 'MediaTek', 'SiRF', 'U-Blox', 'SureGPS');
$section->addInput(new Form_Select(
'gpstype',
'GPS',
$pconfig['type'],
array_combine($gpstypes, $gpstypes)
))->setHelp('This option allows you to select a predefined configuration. ' .
'Default is the configuration of pfSense 2.1 and earlier (not recommended). Select Generic if your GPS is not listed.' . '
' .
'The predefined configurations assume your GPS has already been set to NMEA mode.');
$serialports = glob("/dev/cua?[0-9]{,.[0-9]}", GLOB_BRACE);
if (!empty($serialports)) {
$splist = array();
foreach ($serialports as $port) {
$shortport = substr($port,5);
$splist[$shortport] = $shortport;
}
$section->addInput(new Form_Select(
'gpsport',
'Serial port',
$pconfig['port'],
$splist
))->setHelp('All serial ports are listed, be sure to pick the port with the GPS attached. ');
$section->addInput(new Form_Select(
'gpsspeed',
null,
$pconfig['speed'],
[0 => '4800', 15 => '9600', 32 => '19200', 48 => '38400', 64 => '57600', 80 => '115200']
))->setHelp('A higher baud rate is generally only helpful if the GPS is sending too many sentences. ' .
'It is recommended to configure the GPS to send only one sentence at a baud rate of 4800 or 9600.');
}
$nmealist = build_nmea_list();
$section->addInput(new Form_Select(
'gpsnmea',
'NMEA Sentences',
$nmealist['selected'],
$nmealist['options'],
true
))->setHelp('By default NTP will listen for all supported NMEA sentences. One or more sentences to listen for may be specified.');
$section->addInput(new Form_Input(
'gpsfudge1',
'Fudge time 1',
'text',
$pconfig['fudge1']
))->setHelp('Fudge time 1 is used to specify the GPS PPS signal offset (default: 0.0).');
$section->addInput(new Form_Input(
'gpsfudge2',
'Fudge time 2',
'text',
$pconfig['fudge2']
))->setHelp('Fudge time 2 is used to specify the GPS time offset (default: 0.0).');
$section->addInput(new Form_Input(
'gpsstratum',
'Stratum (0-16)',
'text',
$pconfig['stratum']
))->setHelp('This may be used to change the GPS Clock stratum (default: 0). This may be useful if, for some reason, you want ntpd to prefer a different clock');
$section->addInput(new Form_Checkbox(
'gpsprefer',
'Flags',
'NTP should prefer this clock (default: enabled).',
!$pconfig['prefer']
));
$section->addInput(new Form_Checkbox(
'gpsselect',
null,
'NTP should not use this clock, it will be displayed for reference only (default: disabled).',
$pconfig['noselect']
));
$section->addInput(new Form_Checkbox(
'gpsflag1',
null,
'Enable PPS signal processing (default: enabled).',
$pconfig['flag1']
));
$section->addInput(new Form_Checkbox(
'gpsflag2',
null,
'Enable falling edge PPS signal processing (default: rising edge).',
$pconfig['flag2']
));
$section->addInput(new Form_Checkbox(
'gpsflag3',
null,
'Enable kernel PPS clock discipline (default: enabled).',
$pconfig['flag3']
));
$section->addInput(new Form_Checkbox(
'gpsflag4',
null,
'Obscure location in timestamp (default: unobscured).',
$pconfig['flag4']
));
$section->addInput(new Form_Checkbox(
'gpssubsec',
null,
'Log the sub-second fraction of the received time stamp (default: Not logged).',
$pconfig['subsec']
))->setHelp('Enabling this will rapidly fill the log, but is useful for tuning Fudge time 2.');
$section->addInput(new Form_Input(
'gpsrefid',
'Clock ID',
'text',
$pconfig['refid'],
['placeholder' => '1 to 4 characters']
))->setHelp('This may be used to change the GPS Clock ID (default: GPS).');
// Statistics logging section
$btnadvgps = new Form_Button(
'btnadvgps',
'Advanced'
);
$btnadvgps->removeClass('btn-primary')->addClass('btn-default btn-sm');
$section->addInput(new Form_StaticText(
'GPS Initialization',
$btnadvgps . ' ' . 'Show GPS Initialization commands'
));
$section->addInput(new Form_Textarea(
'gpsinitcmd',
null,
$pconfig['initcmd']
))->setHelp('Commands entered here will be sent to the GPS during initialization. Please read and understand your GPS documentation before making any changes here');
$group = new Form_Group('NMEA Checksum Calculator');
$group->add(new Form_Input(
'nmeastring',
null
));
$btncalc = new Form_Button(
'btncalc',
'Calculate'
);
$btncalc->removeClass('btn-primary')->addClass('btn-success btn-sm');
$group->add($btncalc);
$group->add(new Form_Input(
'result',
null,
'text',
null,
['placeholder' => 'Result']
));
$group->setHelp('Enter the text between "$" and "*" of a NMEA command string:');
$group->addClass('calculator');
$section->add($group);
$form->add($section);
print($form);
?>