seat->conf->xkb_options,
keymap,
seat->conf->xkb_repeat_delay,
- seat->conf->xkb_repeat_rate);
+ seat->conf->xkb_repeat_rate,
+ log_llog, NULL);
free(keymap);
if (ret)
#include "eloop.h"
#include "shl_dlist.h"
#include "shl_hook.h"
-#include "shl_log.h"
+#include "shl_llog.h"
#include "shl_misc.h"
#include "uterm_input.h"
#include "uterm_input_internal.h"
-#define LOG_SUBSYSTEM "input"
+#define LLOG_SUBSYSTEM "uterm_input"
/* How many longs are needed to hold \n bits. */
#define NLONGS(n) (((n) + LONG_BIT - 1) / LONG_BIT)
int i;
if (mask & (EV_HUP | EV_ERR)) {
- log_debug("EOF on %s", dev->node);
+ llog_debug(dev->input, "EOF on %s", dev->node);
input_free_dev(dev);
return;
}
if (len < 0) {
if (errno == EWOULDBLOCK)
break;
- log_warn("reading from %s failed (%d): %m",
- dev->node, errno);
+ llog_warn(dev->input, "reading from %s failed (%d): %m",
+ dev->node, errno);
input_free_dev(dev);
} else if (len == 0) {
- log_debug("EOF on %s", dev->node);
+ llog_debug(dev->input, "EOF on %s", dev->node);
input_free_dev(dev);
} else if (len % sizeof(*ev)) {
- log_warn("invalid input_event on %s", dev->node);
+ llog_warn(dev->input, "invalid input_event on %s",
+ dev->node);
} else {
n = len / sizeof(*ev);
for (i = 0; i < n; i++)
dev->rfd = open(dev->node, O_CLOEXEC | O_NONBLOCK | O_RDWR);
if (dev->rfd < 0) {
- log_warn("cannot open device %s (%d): %m", dev->node, errno);
+ llog_warn(dev->input, "cannot open device %s (%d): %m",
+ dev->node, errno);
return -EFAULT;
}
goto err_kbd;
}
- log_debug("new device %s", node);
+ llog_debug(input, "new device %s", node);
shl_dlist_link(&input->devices, &dev->list);
return;
static void input_free_dev(struct uterm_input_dev *dev)
{
- log_debug("free device %s", dev->node);
+ llog_debug(dev->input, "free device %s", dev->node);
input_sleep_dev(dev);
shl_dlist_unlink(&dev->list);
uxkb_dev_destroy(dev);
const char *options,
const char *keymap,
unsigned int repeat_delay,
- unsigned int repeat_rate)
+ unsigned int repeat_rate,
+ uterm_input_log_t log,
+ void *log_data)
{
struct uterm_input *input;
int ret;
return -ENOMEM;
memset(input, 0, sizeof(*input));
input->ref = 1;
+ input->llog = log;
+ input->llog_data = log_data;
input->eloop = eloop;
input->repeat_delay = repeat_delay;
input->repeat_rate = repeat_rate;
if (ret)
goto err_hook;
- log_debug("new object %p", input);
+ llog_debug(input, "new object %p", input);
ev_eloop_ref(input->eloop);
*out = input;
return 0;
if (!input || !input->ref || --input->ref)
return;
- log_debug("free object %p", input);
+ llog_debug(input, "free object %p", input);
while (input->devices.next != &input->devices) {
dev = shl_dlist_entry(input->devices.next,
* We go over the possible capabilities and return a mask of enum
* uterm_input_device_capability's.
*/
-static unsigned int probe_device_capabilities(const char *node)
+static unsigned int probe_device_capabilities(struct uterm_input *input,
+ const char *node)
{
int i, fd, ret;
unsigned int capabilities = 0;
return capabilities;
err_ioctl:
- log_warn("cannot probe capabilities of device %s (%d): %m",
- node, errno);
+ llog_warn(input, "cannot probe capabilities of device %s (%d): %m",
+ node, errno);
close(fd);
return 0;
}
if (!input || !node)
return;
- capabilities = probe_device_capabilities(node);
+ capabilities = probe_device_capabilities(input, node);
if (!(capabilities & UTERM_DEVICE_HAS_KEYS)) {
- log_debug("ignoring non-useful device %s", node);
+ llog_debug(input, "ignoring non-useful device %s", node);
return;
}
if (input->awake != 0)
return;
- log_debug("going to sleep");
+ llog_debug(input, "going to sleep");
shl_dlist_for_each(iter, &input->devices) {
dev = shl_dlist_entry(iter,
if (input->awake != 1)
return;
- log_debug("wakeing up");
+ llog_debug(input, "wakeing up");
shl_dlist_for_each_safe(iter, tmp, &input->devices) {
dev = shl_dlist_entry(iter,
struct uterm_input;
+typedef void (*uterm_input_log_t) (void *data,
+ const char *file,
+ int line,
+ const char *func,
+ const char *subs,
+ unsigned int sev,
+ const char *format,
+ va_list args);
+
/* keep in sync with shl_xkb_mods */
enum uterm_input_modifier {
UTERM_SHIFT_MASK = (1 << 0),
int uterm_input_new(struct uterm_input **out, struct ev_eloop *eloop,
const char *model, const char *layout, const char *variant,
const char *options, const char *keymap,
- unsigned int repeat_delay, unsigned int repeat_rate);
+ unsigned int repeat_delay, unsigned int repeat_rate,
+ uterm_input_log_t log, void *log_data);
void uterm_input_ref(struct uterm_input *input);
void uterm_input_unref(struct uterm_input *input);
/*
* uterm - Linux User-Space Terminal
*
- * Copyright (c) 2011-2012 David Herrmann <dh.herrmann@googlemail.com>
+ * Copyright (c) 2011-2013 David Herrmann <dh.herrmann@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files
#include <xkbcommon/xkbcommon-keysyms.h>
#include "eloop.h"
#include "shl_dlist.h"
+#include "shl_llog.h"
#include "shl_misc.h"
#include "uterm_input.h"
struct uterm_input {
unsigned long ref;
+ llog_submit_t llog;
+ void *llog_data;
struct ev_eloop *eloop;
int awake;
unsigned int repeat_rate;
#include <unistd.h>
#include <xkbcommon/xkbcommon.h>
#include "shl_hook.h"
-#include "shl_log.h"
+#include "shl_llog.h"
#include "shl_misc.h"
#include "uterm_input.h"
#include "uterm_input_internal.h"
-#define LOG_SUBSYSTEM "input_uxkb"
+#define LLOG_SUBSYSTEM "uterm_input_uxkb"
extern const char _binary_src_uterm_input_fallback_xkb_bin_start[];
extern const char _binary_src_uterm_input_fallback_xkb_bin_end[];
input->ctx = xkb_context_new(0);
if (!input->ctx) {
- log_error("cannot create XKB context");
+ llog_error(input, "cannot create XKB context");
return -ENOMEM;
}
input->keymap = xkb_keymap_new_from_string(input->ctx,
keymap, XKB_KEYMAP_FORMAT_TEXT_V1, 0);
if (input->keymap) {
- log_debug("new keyboard description from memory");
+ llog_debug(input,
+ "new keyboard description from memory");
return 0;
}
- log_warn("cannot parse keymap, reverting to rmlvo");
+ llog_warn(input, "cannot parse keymap, reverting to rmlvo");
}
input->keymap = xkb_keymap_new_from_names(input->ctx, &rmlvo, 0);
if (!input->keymap) {
- log_warn("failed to create keymap (%s, %s, %s, %s), "
- "reverting to default system keymap",
+ llog_warn(input, "failed to create keymap (%s, %s, %s, %s), "
+ "reverting to default system keymap",
model, layout, variant, options);
rmlvo.model = "";
input->keymap = xkb_keymap_new_from_names(input->ctx,
&rmlvo, 0);
if (!input->keymap) {
- log_warn("failed to create XKB default keymap, "
- "reverting to built-in fallback");
+ llog_warn(input, "failed to create XKB default keymap, "
+ "reverting to built-in fallback");
input->keymap = xkb_keymap_new_from_string(input->ctx,
fallback, XKB_KEYMAP_FORMAT_TEXT_V1, 0);
if (!input->keymap) {
- log_error("cannot create fallback keymap");
+ llog_error(input,
+ "cannot create fallback keymap");
ret = -EFAULT;
goto err_ctx;
}
}
- log_debug("new fallback keyboard description");
+ llog_debug(input, "new fallback keyboard description");
} else {
- log_debug("new keyboard description (%s, %s, %s, %s)",
- model, layout, variant, options);
+ llog_debug(input, "new keyboard description (%s, %s, %s, %s)",
+ model, layout, variant, options);
}
return 0;
dev->state = xkb_state_new(dev->input->keymap);
if (!dev->state) {
- log_error("cannot create XKB state");
+ llog_error(dev->input, "cannot create XKB state");
ret = -ENOMEM;
goto err_timer;
}
ret = write(dev->rfd, events, sizeof(events));
if (ret != sizeof(events))
- log_warning("cannot update LED state (%d): %m", errno);
+ llog_warning(dev->input, "cannot update LED state (%d): %m",
+ errno);
}
static inline int uxkb_dev_resize_event(struct uterm_input_dev *dev, size_t s)
tmp = realloc(dev->event.keysyms,
sizeof(uint32_t) * s);
if (!tmp) {
- log_warning("cannot reallocate keysym buffer");
+ llog_warning(dev->input,
+ "cannot reallocate keysym buffer");
return -ENOKEY;
}
dev->event.keysyms = tmp;
tmp = realloc(dev->event.codepoints,
sizeof(uint32_t) * s);
if (!tmp) {
- log_warning("cannot reallocate codepoints buffer");
+ llog_warning(dev->input,
+ "cannot reallocate codepoints buffer");
return -ENOKEY;
}
dev->event.codepoints = tmp;
tmp = realloc(dev->repeat_event.keysyms,
sizeof(uint32_t) * s);
if (!tmp) {
- log_warning("cannot reallocate keysym buffer");
+ llog_warning(dev->input,
+ "cannot reallocate keysym buffer");
return -ENOKEY;
}
dev->repeat_event.keysyms = tmp;
tmp = realloc(dev->repeat_event.codepoints,
sizeof(uint32_t) * s);
if (!tmp) {
- log_warning("cannot reallocate codepoints buffer");
+ llog_warning(dev->input,
+ "cannot reallocate codepoints buffer");
return -ENOKEY;
}
dev->repeat_event.codepoints = tmp;
ioctl(dev->rfd, EVIOCGKEY(sizeof(dev->key_state_bits)),
dev->key_state_bits);
if (errno)
- log_warn("failed to save keyboard state (%d): %m", errno);
+ llog_warn(dev->input, "failed to save keyboard state (%d): %m",
+ errno);
}
void uxkb_dev_wake_up(struct uterm_input_dev *dev)
errno = 0;
ioctl(dev->rfd, EVIOCGKEY(sizeof(cur_bits)), cur_bits);
if (errno) {
- log_warn("failed to get current keyboard state (%d): %m",
- errno);
+ llog_warn(dev->input,
+ "failed to get current keyboard state (%d): %m",
+ errno);
return;
}
input_conf.xkb_variant,
input_conf.xkb_options,
keymap,
- 0, 0);
+ 0, 0, log_llog, NULL);
if (ret)
return;
ret = uterm_input_register_cb(input, input_arrived, NULL);
if (ret)
goto err_exit;
- ret = uterm_input_new(&input, eloop, "", "", "", "", "", 0, 0);
+ ret = uterm_input_new(&input, eloop, "", "", "", "", "", 0, 0,
+ log_llog, NULL);
if (ret)
goto err_vtm;