static xosd *osd;
+typedef uint64_t timestamp_t;
+static timestamp_t now;
+
+/*** Options ***/
+
static int num_lines = 4;
static char *font_name = "-bitstream-bitstream vera sans-bold-r-normal-*-*-320-*-*-p-*-*";
static char *default_color = "green";
static char *default_outline_color = "black";
+static int default_duration = 1000;
+static int default_min_duration = 1000;
-typedef uint64_t timestamp_t;
-static timestamp_t now;
+static const char short_opts[] = "c:d:f:l:m:o:";
+
+static const struct option long_opts[] = {
+ { "color", required_argument, NULL, 'c' },
+ { "duration", required_argument, NULL, 'd' },
+ { "font", required_argument, NULL, 'f' },
+ { "lines", required_argument, NULL, 'l' },
+ { "min-duration", required_argument, NULL, 'm' },
+ { "outline-color", required_argument, NULL, 'o' },
+ { NULL, 0, NULL, 0 },
+};
+
+static void NONRET
+usage(void)
+{
+ fprintf(stderr, "Usage: osdd <options>\n\n\
+Options:\n\
+-c, --color=<c>\t\tDefault color (#rgb, #rrggbb or a name from rgb.txt)\n\
+-d, --duration=<ms>\tDefault message duration in milliseconds\n\
+-f, --font=<f>\t\tFont to use for the OSD\n\
+-l, --lines=<n>\t\tNumber of lines of the OSD\n\
+-m, --min-duration=<ms>\tDefault minimum message duration in milliseconds\n\
+-o, --outline-color=<c>\tDefault outline color\n\
+");
+ exit(1);
+}
+
+static void
+parse_opts(int argc, char **argv)
+{
+ int opt;
+ while ((opt = getopt_long(argc, argv, short_opts, long_opts, NULL)) >= 0)
+ switch (opt)
+ {
+ case 'c':
+ default_color = optarg;
+ break;
+ case 'd':
+ default_duration = atoi(optarg);
+ break;
+ case 'f':
+ font_name = optarg;
+ break;
+ case 'l':
+ num_lines = atoi(optarg);
+ if (num_lines < 1)
+ usage();
+ break;
+ case 'm':
+ default_min_duration = atoi(optarg);
+ break;
+ case 'o':
+ default_outline_color = optarg;
+ break;
+ default:
+ usage();
+ }
+
+ if (optind < argc)
+ usage();
+}
/*** Displaying of messages ***/
static void
display_msg(struct msg *msg)
{
- msg->min_light = msg->max_light = now + 1000;
+ DBG("## Displaying message\n");
+ msg->min_light = now + default_min_duration;
+ msg->max_light = now + default_duration;
xosd_set_colour(osd, default_color);
xosd_set_outline_colour(osd, default_outline_color);
key = "";
val = line;
}
+ DBG("\t%s:%s\n", key, val);
if (!key[0])
{
xosd_set_colour(osd, val);
else if (!strcmp(key, "outline-color"))
xosd_set_outline_colour(osd, val);
+ else
+ DBG("\tPARSE ERROR\n");
line = nl;
}
static void
hide_msg(struct msg *msg)
{
+ DBG("## Hiding message\n");
for (int i=0; i<num_lines; i++)
xosd_display(osd, i, XOSD_string, "");
xosd_hide(osd);
static void
enqueue_msg(unsigned char *buf, int len)
{
- DBG("[%.*s]\n", len, buf);
+ DBG("Received: [%.*s]\n", len, buf);
if (!len || buf[len-1] != '\n')
return;
}
}
-/*** Options ***/
-
-static const char short_opts[] = "c:f:l:o:";
-
-static const struct option long_opts[] = {
- { "color", required_argument, NULL, 'c' },
- { "font", required_argument, NULL, 'f' },
- { "lines", required_argument, NULL, 'l' },
- { "outline-color", required_argument, NULL, 'o' },
- { NULL, 0, NULL, 0 },
-};
-
-static void NONRET
-usage(void)
-{
- fprintf(stderr, "Usage: osdd <options>\n\n\
-Options:\n\
--c, --color=<c>\t\tDefault color (#rgb, #rrggbb or a name from rgb.txt)\n\
--f, --font=<f>\t\tFont to use for the OSD\n\
--l, --lines=<n>\t\tNumber of lines of the OSD\n\
--o, --outline-color=<c>\tDefault outline color\n\
-");
- exit(1);
-}
-
-static void
-parse_opts(int argc, char **argv)
-{
- int opt;
- while ((opt = getopt_long(argc, argv, short_opts, long_opts, NULL)) >= 0)
- switch (opt)
- {
- case 'c':
- default_color = optarg;
- break;
- case 'f':
- font_name = optarg;
- break;
- case 'l':
- num_lines = atoi(optarg);
- if (num_lines < 1)
- usage();
- break;
- case 'o':
- default_outline_color = optarg;
- break;
- default:
- usage();
- }
-
- if (optind < argc)
- usage();
-}
-
/*** Main loop ***/
int
}
}
- DBG("Waiting for %d ms\n", (int)(wait_until - now));
+ DBG("... waiting for %d ms\n", (int)(wait_until - now));
poll(&pfd, 1, wait_until - now);
if (pfd.revents & POLLIN)
{