Andrew Boyson / web

Dependents:   oldheating gps motorhome heating

clock/http-clock-html.c

Committer:
andrewboyson
Date:
2019-03-23
Revision:
77:4689596a2f3f
Parent:
73:4e769dbbf9f2
Child:
87:c51478679090

File content as of revision 77:4689596a2f3f:

#include <time.h>

#include         "http.h"
#include         "page.h"
#include "page-derived.h"
#include  "http-server.h"
#include          "clk.h"
#include          "rtc.h"
#include       "clkutc.h"
#include       "clkgov.h"
#include         "scan.h"
#include    "ntpclient.h"

void HttpClockHtml()
{
    HttpOk("text/html; charset=UTF-8", "no-cache", NULL, NULL);
    PageAddHeader(PageSite, "Clock", "settings.css", "clock.js");
    PageAddNav(CLOCK_PAGE);
    PageAddH1(PageSite, "Clock");
    
    PageAddH2("Status");
    PageAddAjaxLed("RTC is set"           , "ajax-rtc-set"    );
    PageAddAjaxLed("Clock is set"         , "ajax-clock-set"  );
    PageAddAjaxLed("External source is ok", "ajax-source-ok"  );
    PageAddAjaxLed("Time synchronised"    , "ajax-time-locked");
    PageAddAjaxLed("Rate synchronised"    , "ajax-rate-locked");
    
    PageAddH2("Server UTC time");
    HttpAddText("<div id='ajax-date-utc'></div>\r\n");

    PageAddH2("Server local time");
    HttpAddText("<div id='ajax-date-pc'></div>\r\n");
    
    PageAddH2("Server - PC (ms)");
    HttpAddText("<div id='ajax-date-diff'></div>\r\n");    
    
    PageAddH2("UTC");
    PageAddAjaxInputToggle("Enable epoch change"      ,    "ajax-leap-enable"  , "chg-clock-leap-enable" );
    PageAddAjaxInputToggle("Direction of next epoch"  ,    "ajax-leap-forward" , "chg-clock-leap-forward");
    PageAddAjaxInput      ("Year next epoch starts"   , 4, "ajax-leap-year"    , "set-clock-leap-year"   );
    PageAddAjaxInput      ("Month next epoch starts"  , 4, "ajax-leap-month"   , "set-clock-leap-month"  );
    PageAddAjaxInput      ("Current era offset"       , 4, "ajax-leap-count"   , "set-clock-leap-count"  );

    HttpAddText("<div><button type='button' onclick='DisplayLeap()'>Display Leap</button></div>\r\n");
    
    HttpAddText("<div>The leap seconds list is available from <a href='https://www.ietf.org/timezones/data/leap-seconds.list' target='_blank'>ietf</a></div>\r\n");
        
    PageAddH2("Governer");
    PageAddAjaxInput("Ppb",                      5, "ajax-ppb"                                , "ppb"           );
    PageAddInputInt ("Ppb divisor",              5, ClkGovFreqDivisor               , "/clock", "ppbdivisor"    );
    PageAddInputInt ("Ppb max change",           5, ClkGovFreqChangeMaxPpb          , "/clock", "ppbmaxchange"  );
    PageAddInputInt ("Ppb synced limit",         5, ClkGovFreqSyncedLimPpb          , "/clock", "syncedlimitppb");
    PageAddInputInt ("Ppb synced hysteresis",    5, ClkGovFreqSyncedHysPpb          , "/clock", "syncedhysppb"  );

    PageAddInputInt ("Offset divisor",           5, ClkGovSlewDivisor               , "/clock", "slewdivisor"   );
    PageAddInputInt ("Offset max (ms)",          5, ClkGovSlewChangeMaxMs           , "/clock", "slewmax"       );
    PageAddInputInt ("Offset synced limit (ms)", 5, ClkGovSlewSyncedLimNs / 1000000 , "/clock", "syncedlimitns" );
    PageAddInputInt ("Offset synced hys (ms)",   5, ClkGovSlewSyncedHysNs / 1000000 , "/clock", "syncedhysns"   );
    PageAddInputInt ("Offset reset limit (s)",   5, ClkGovSlewOffsetMaxSecs         , "/clock", "maxoffsetsecs" );
    
    if (ClkGovTrace) PageAddInputButton("Trace gov is on",  "turn off", "/clock", "clockgovtrace");
    else             PageAddInputButton("Trace gov is off", "turn on" , "/clock", "clockgovtrace");

    PageAddH2("NTP");
    PageAddInputText("Server url",           5, NtpClientQueryServerName,          "/clock", "ntpserver"    );
    PageAddInputInt ("Initial interval (s)", 5, NtpClientQueryInitialInterval,     "/clock", "clockinitial" );
    PageAddInputInt ("Normal interval (m)",  5, NtpClientQueryNormalInterval / 60, "/clock", "clocknormal"  );
    PageAddInputInt ("Retry interval (s)",   5, NtpClientQueryRetryInterval,       "/clock", "clockretry"   );
    PageAddInputInt ("Offset (ms)",          5, NtpClientReplyOffsetMs,            "/clock", "clockoffset"  );
    PageAddInputInt ("Max delay (ms)",       5, NtpClientReplyMaxDelayMs,          "/clock", "clockmaxdelay");

    PageAddH2("Scan times");
    PageAddAjaxLabelled("Program cycles avg", "ajax-scan-avg");
    PageAddAjaxLabelled("Program cycles max", "ajax-scan-max");
    PageAddAjaxLabelled("Program cycles min", "ajax-scan-min");

    PageAddH2("Ajax");
    HttpAddText("<code id='ajax-headers'></code>\r\n");
    HttpAddText("<code id='ajax-response'></code>\r\n");

    PageAddEnd();
}