#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 ("\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: %.9f\n", ra); PTB_ADD ("\n"); PTB_ADD ("
\n"); PTB_ADD (" UTC: %s\n", buf); PTB_ADD (" RA: %.9f\n", ra); PTB_ADD (" LRA: %.9f\n", lra); 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 ("
\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: %.9f\n", ra); PTB_ADD (" LRA: %.9f\n", lra); 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 ("
\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) { int len; if (!strcmp (name, "/index.html")) len = make_index(); else if (!strcmp (name, "/alarm.html")) len = make_alarm(); else { printf ("looking for url=%s, found nothing\n", name); return 0; } file->data = (const char *)html_buf; file->len = len; 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])); }