libeis: better logging of client bugs

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2020-09-29 15:15:54 +10:00
parent 7318512a89
commit d99d1e8707
4 changed files with 63 additions and 18 deletions

View file

@ -113,6 +113,8 @@ eis_client_connect(struct eis_client *client)
case EIS_CLIENT_STATE_CONNECTING:
break;
default:
log_bug_client(eis_client_get_context(client),
"%s: client already connected\n", __func__);
return;
}

View file

@ -78,18 +78,33 @@ eis_keymap_new(enum eis_keymap_type type, int fd, size_t size)
return eis_keymap_ref(keymap);
}
static inline struct eis *
eis_device_get_context(struct eis_device *device)
{
return eis_client_get_context(eis_device_get_client(device));
}
_public_ void
eis_device_keyboard_set_keymap(struct eis_device *device,
struct eis_keymap *keymap)
{
if (device->state != EIS_DEVICE_STATE_NEW)
if (device->state != EIS_DEVICE_STATE_NEW) {
log_bug_client(eis_device_get_context(device),
"%s: device already (dis)connected\n", __func__);
return;
}
if (device->keymap && !device->keymap->is_client_keymap)
if (device->keymap && !device->keymap->is_client_keymap) {
log_bug_client(eis_device_get_context(device),
"%s: keymap can only be configured once\n", __func__);
return;
}
if (keymap && keymap->assigned)
if (keymap && keymap->assigned) {
log_bug_client(eis_device_get_context(device),
"%s: keymaps cannot be re-used\n", __func__);
return;
}
device->keymap = eis_keymap_unref(device->keymap);
if (keymap) {
@ -129,8 +144,11 @@ OBJECT_IMPLEMENT_GETTER(eis_device, name, const char *);
_public_ void
eis_device_set_name(struct eis_device *device, const char *name)
{
if (device->state != EIS_DEVICE_STATE_NEW)
if (device->state != EIS_DEVICE_STATE_NEW) {
log_bug_client(eis_device_get_context(device),
"%s: device already (dis)connected\n", __func__);
return;
}
free(device->name);
device->name = xstrdup(name);
@ -180,13 +198,19 @@ eis_device_set_client_keymap(struct eis_device *device,
enum eis_keymap_type type,
int keymap_fd, size_t size)
{
if (device->state != EIS_DEVICE_STATE_NEW)
if (device->state != EIS_DEVICE_STATE_NEW) {
log_bug(eis_device_get_context(device),
"%s: device already (dis)connected\n", __func__);
return;
}
_cleanup_eis_keymap_ struct eis_keymap *keymap =
eis_keymap_new(type, keymap_fd, size);
if (!keymap)
if (!keymap) {
log_bug(eis_device_get_context(device),
"%s: keymap creation failed, using NULL keymap\n", __func__);
return;
}
eis_device_keyboard_set_keymap(device, keymap);
keymap->is_client_keymap = true;
@ -249,8 +273,11 @@ int
eis_device_pointer_rel(struct eis_device *device,
double x, double y)
{
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER))
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) {
log_bug_client(eis_device_get_context(device),
"%s: device is not a pointer\n", __func__);
return -EINVAL;
}
if (device->state != EIS_DEVICE_STATE_RESUMED)
return -EINVAL;
@ -264,8 +291,11 @@ int
eis_device_pointer_abs(struct eis_device *device,
double x, double y)
{
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER_ABSOLUTE))
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER_ABSOLUTE)) {
log_bug_client(eis_device_get_context(device),
"%s: device is not an absolute pointer\n", __func__);
return -EINVAL;
}
if (device->state != EIS_DEVICE_STATE_RESUMED)
return -EINVAL;
@ -283,8 +313,11 @@ int
eis_device_pointer_button(struct eis_device *device,
uint32_t button, bool is_press)
{
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER))
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_POINTER)) {
log_bug_client(eis_device_get_context(device),
"%s: device is not a pointer\n", __func__);
return -EINVAL;
}
if (device->state != EIS_DEVICE_STATE_RESUMED)
return -EINVAL;
@ -298,8 +331,11 @@ int
eis_device_keyboard_key(struct eis_device *device,
uint32_t key, bool is_press)
{
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD))
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_KEYBOARD)) {
log_bug_client(eis_device_get_context(device),
"%s: device is not a keyboard\n", __func__);
return -EINVAL;
}
if (device->state != EIS_DEVICE_STATE_RESUMED)
return -EINVAL;
@ -314,8 +350,11 @@ eis_device_touch(struct eis_device *device, uint32_t touchid,
bool is_down, bool is_up,
double x, double y)
{
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH))
if (!eis_device_has_capability(device, EIS_DEVICE_CAP_TOUCH)) {
log_bug_client(eis_device_get_context(device),
"%s: device is not a touch device\n", __func__);
return -EINVAL;
}
if (device->state != EIS_DEVICE_STATE_RESUMED)
return -EINVAL;
@ -333,12 +372,14 @@ eis_device_touch(struct eis_device *device, uint32_t touchid,
_public_ void
eis_device_connect(struct eis_device *device)
{
if (device->state != EIS_DEVICE_STATE_NEW)
if (device->state != EIS_DEVICE_STATE_NEW) {
log_bug_client(eis_device_get_context(device),
"%s: device is already (dis)connected\n", __func__);
return;
}
if (device->capabilities_mask == 0) {
struct eis_client *client = eis_device_get_client(device);
log_bug(eis_client_get_context(client),
log_bug(eis_device_get_context(device),
"Connecting a device without capabilities\n");
eis_device_disconnect(device);
return;

View file

@ -127,9 +127,9 @@ check_event_type(struct eis_event *event,
va_end(args);
if (!rc)
log_bug(eis_event_get_context(event),
"Invalid event type %d passed to %s()\n",
type, function_name);
log_bug_client(eis_event_get_context(event),
"Invalid event type %d passed to %s()\n",
type, function_name);
return rc;
}

View file

@ -277,4 +277,6 @@ eis_log_msg_va(struct eis *eis,
#define log_error(T_, ...) \
eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, __VA_ARGS__)
#define log_bug(T_, ...) \
eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪳 BUG: " __VA_ARGS__)
eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪳 libeis bug: " __VA_ARGS__)
#define log_bug_client(T_, ...) \
eis_log_msg((T_), EIS_LOG_PRIORITY_ERROR, "🪲 Bug: " __VA_ARGS__)