#include "project.h" #if 0 #define FS_FILE_FLAGS_HEADER_INCLUDED 0x01 #define FS_FILE_FLAGS_HEADER_PERSISTENT 0x02 #define FS_FILE_FLAGS_HEADER_HTTPVER_1_1 0x04 #define FS_FILE_FLAGS_SSI 0x08 #endif static char html_buf[8192]; static uint32_t make_alarm (void) { uint64_t abs = ref_get(); EPOCH e, ad; double ra, lra; UTC u; ST l; char buf[128]; PTB_INIT (html_buf); PTB_ADD ("\n"); PTB_ADD ("\n"); PTB_ADD ("
\n"); PTB_ADD ("

Alarm

\n"); u = time_epoch_to_utc (alarm); utc_to_str (buf, &u); ra = time_utc_to_ra (u); lra = ra_normalize (ra + gps_lon); l = time_ra_to_st (lra); PTB_ADD ("
\n");

  e = ref_decompose (abs);
  ad = time_epoch_sub (alarm, e);

  if (ad.s >= 0) {
    unsigned d, h, m, s;
    s = ad.s;
    m = s / 60;
    s -= m * 60;
    h = m / 60;
    m -= h * 60;
    d = h / 24;
    h -= d * 24;

    PTB_ADD (" in %d days, %02d:%02d:%02d\n", d, h, m, s);
  }

  PTB_ADD (" UTC: %s\n", buf);
  PTB_ADD (" RA:                  %sf\n", fd1 (ra, 0, 1, 9));
  PTB_ADD ("
\n"); PTB_ADD ("\n"); PTB_ADD ("\n", fd1 (lra, 0, 1, 9)); PTB_ADD ("\n", l.hour, l.minute, l.second, l.nanosecond / 1000); PTB_ADD ("
LRA:
LST:
\n"); PTB_ADD ("\n"); PTB_ADD ("\n"); return PTB_LEN; } static uint32_t make_index (void) { uint64_t abs = ref_get(); EPOCH e, ad; double ra, lra; UTC u; ST l; char buf[128]; PTB_INIT (html_buf); PTB_ADD ("\n"); PTB_ADD ("\n"); PTB_ADD ("\n"); PTB_ADD ("
\n"); PTB_ADD ("

Now

\n"); e = ref_decompose (abs); u = time_epoch_to_utc (e); utc_to_str (buf, &u); ra = time_utc_to_ra (u); lra = ra + gps_lon; l = time_ra_to_st (lra); PTB_ADD ("
\n");
  PTB_ADD (" UTC: %s\n", buf);
  PTB_ADD (" RA:                  %s\n", fd1 (ra, 0, 1, 9));
  PTB_ADD (" LRA:                 %s\n", fd1 (lra, 0, 1, 9));
  PTB_ADD (" LST:                 %02d:%02d:%02d.%06d\n", l.hour, l.minute, l.second, l.nanosecond / 1000);
  PTB_ADD ("
\n"); PTB_ADD ("\n"); PTB_ADD ("

Alarm

\n"); u = time_epoch_to_utc (alarm); utc_to_str (buf, &u); ra = time_utc_to_ra (u); lra = ra_normalize (ra + gps_lon); l = time_ra_to_st (lra); PTB_ADD ("
\n");

  ad = time_epoch_sub (alarm, e);

  if (ad.s >= 0) {
    unsigned d, h, m, s;
    s = ad.s;
    m = s / 60;
    s -= m * 60;
    h = m / 60;
    m -= h * 60;
    d = h / 24;
    h -= d * 24;

    PTB_ADD (" in %d days, %02d:%02d:%02d\n", d, h, m, s);
  }

  PTB_ADD (" UTC: %s\n", buf);
  PTB_ADD (" RA:                  %s\n", fd1 (ra, 0, 1, 9));
  PTB_ADD (" LRA:                 %s\n", fd1 (lra, 0, 1, 9));
  PTB_ADD (" LST:                 %02d:%02d:%02d.%06d\n", l.hour, l.minute, l.second, l.nanosecond / 1000);
  PTB_ADD ("
\n"); PTB_ADD ("
\n"); PTB_ADD ("

GPS

\n"); PTB_ADD ("
\n");
  PTB_ADD ("%s\n", gps_info);
  PTB_ADD (" %s\n", gps_pos);
  PTB_ADD (" %s\n", gps_svin_info);
  PTB_ADD ("\n");

  PTB_ADD ("%s", gps_svinfo);
  PTB_ADD ("
\n"); PTB_ADD ("\n"); PTB_ADD ("\n"); return PTB_LEN; } static int cgi_set_lra (double lra) { uint64_t abs = ref_get(); EPOCH e = ref_decompose (abs); double ra = ra_normalize (lra - gps_lon); alarm = time_ra_to_next_epoch (e, ra); return 0; } static int cgi_set_lst (char *lst_str) { double ra = 0; char *a2, *a3; char *s = NULL, *m = NULL, *h = NULL; unsigned i = 0; printf ("set lst = %s\n", lst_str); a2 = index (lst_str, ':'); if (!a2) { h = NULL; m = NULL; s = lst_str; } else { a2++; a3 = index (a2, ':'); if (!a3) { m = lst_str; s = a2; } else { a3++; h = lst_str; m = a2; s = a3; } } ra = atof (s); if (h) i += atoi (h); i *= 60; if (m) i += atoi (m); i *= 60; ra += (double) i; ra /= 240.; return cgi_set_lra (ra); } static char *uri_unescape (char *c) { char *ret = c, *ptr; for (ptr = c; *c; ++c, ++ptr) { if (*c != '%') { *ptr = *c; continue; } if (!c[1] || !c[2]) break; *ptr = (xtoi (c[1]) << 4) | xtoi (c[2]); c += 2; } * ptr = 0; return ret; } static const char *cgi_set_handler (int idx, int num_params, char *params[], char *values[]) { do { if (num_params != 1)break; if (!strcmp (params[0], "lra")) { if (cgi_set_lra (atof (values[0]))) break; } else if (!strcmp (params[0], "lst")) { if (cgi_set_lst (uri_unescape (values[0]))) break; } else break; return "/index.html"; } while (0); return "/error.html"; } int fs_open_custom (struct fs_file *file, const char *name) { if (!strcmp (name, "/index.html")) { file->data = (const char *)html_buf; file->len = make_index(); } else if (!strcmp (name, "/alarm.html")) { file->data = (const char *)html_buf; file->len = make_alarm(); } else if (!strcmp (name, "/meteotime.dat")) { file->data = (const char *)meteotime_data; file->len = sizeof (meteotime_data); } else if (!strcmp (name, "/ephemeris.dat")) { file->data = (const char *)ephemeris; file->len = sizeof (ephemeris); } else { printf ("looking for url=%s, found nothing\n", name); return 0; } file->index = file->len; file->pextension = NULL; file->flags = 0; return 1; } void fs_close_custom (struct fs_file *file) { } static tCGI cgi_handlers[] = {{"/alarm_set.cgi", cgi_set_handler}}; void cgi_init (void) { http_set_cgi_handlers (cgi_handlers, sizeof (cgi_handlers) / sizeof (cgi_handlers[0])); }