uterm: monitor: add "dev_flags" field to event-structure
Instead of using different types we now use flags. This is more appropriate and will allow us more easily to add new flags. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
89e84aa78c
commit
9015f3107d
@ -203,6 +203,7 @@ static void app_seat_video_event(struct uterm_video *video,
|
||||
static int app_seat_add_video(struct app_seat *seat,
|
||||
struct app_video **out,
|
||||
unsigned int type,
|
||||
unsigned int flags,
|
||||
const char *node)
|
||||
{
|
||||
int ret;
|
||||
@ -210,14 +211,13 @@ static int app_seat_add_video(struct app_seat *seat,
|
||||
struct app_video *vid;
|
||||
|
||||
if (seat->conf->fbdev) {
|
||||
if (type != UTERM_MONITOR_FBDEV &&
|
||||
type != UTERM_MONITOR_FBDEV_DRM) {
|
||||
if (type != UTERM_MONITOR_FBDEV) {
|
||||
log_info("ignoring video device %s on seat %s as it is not an fbdev device",
|
||||
node, seat->name);
|
||||
return -ERANGE;
|
||||
}
|
||||
} else {
|
||||
if (type == UTERM_MONITOR_FBDEV_DRM) {
|
||||
} else if (type == UTERM_MONITOR_FBDEV) {
|
||||
if (flags & UTERM_MONITOR_DRM_BACKED) {
|
||||
log_info("ignoring video device %s on seat %s as it is a DRM-fbdev device",
|
||||
node, seat->name);
|
||||
return -ERANGE;
|
||||
@ -328,8 +328,8 @@ static void app_monitor_event(struct uterm_monitor *mon,
|
||||
switch (ev->dev_type) {
|
||||
case UTERM_MONITOR_DRM:
|
||||
case UTERM_MONITOR_FBDEV:
|
||||
case UTERM_MONITOR_FBDEV_DRM:
|
||||
ret = app_seat_add_video(seat, &vid, ev->dev_type,
|
||||
ev->dev_flags,
|
||||
ev->dev_node);
|
||||
if (ret)
|
||||
return;
|
||||
@ -350,7 +350,6 @@ static void app_monitor_event(struct uterm_monitor *mon,
|
||||
switch (ev->dev_type) {
|
||||
case UTERM_MONITOR_DRM:
|
||||
case UTERM_MONITOR_FBDEV:
|
||||
case UTERM_MONITOR_FBDEV_DRM:
|
||||
if (ev->dev_data)
|
||||
app_seat_remove_video(seat, ev->dev_data);
|
||||
break;
|
||||
@ -369,7 +368,6 @@ static void app_monitor_event(struct uterm_monitor *mon,
|
||||
switch (ev->dev_type) {
|
||||
case UTERM_MONITOR_DRM:
|
||||
case UTERM_MONITOR_FBDEV:
|
||||
case UTERM_MONITOR_FBDEV_DRM:
|
||||
vid = ev->dev_data;
|
||||
if (!vid)
|
||||
return;
|
||||
|
@ -397,10 +397,13 @@ enum uterm_monitor_event_type {
|
||||
enum uterm_monitor_dev_type {
|
||||
UTERM_MONITOR_DRM,
|
||||
UTERM_MONITOR_FBDEV,
|
||||
UTERM_MONITOR_FBDEV_DRM,
|
||||
UTERM_MONITOR_INPUT,
|
||||
};
|
||||
|
||||
enum uterm_monitor_dev_flag {
|
||||
UTERM_MONITOR_DRM_BACKED = 0x01,
|
||||
};
|
||||
|
||||
struct uterm_monitor_event {
|
||||
unsigned int type;
|
||||
|
||||
@ -410,6 +413,7 @@ struct uterm_monitor_event {
|
||||
|
||||
struct uterm_monitor_dev *dev;
|
||||
unsigned int dev_type;
|
||||
unsigned int dev_flags;
|
||||
const char *dev_node;
|
||||
void *dev_data;
|
||||
};
|
||||
|
@ -55,6 +55,7 @@ struct uterm_monitor_dev {
|
||||
struct shl_dlist list;
|
||||
struct uterm_monitor_seat *seat;
|
||||
unsigned int type;
|
||||
unsigned int flags;
|
||||
char *node;
|
||||
void *data;
|
||||
};
|
||||
@ -212,6 +213,7 @@ static void monitor_sd_deinit(struct uterm_monitor *mon)
|
||||
|
||||
static void seat_new_dev(struct uterm_monitor_seat *seat,
|
||||
unsigned int type,
|
||||
unsigned int flags,
|
||||
const char *node)
|
||||
{
|
||||
struct uterm_monitor_dev *dev;
|
||||
@ -223,6 +225,7 @@ static void seat_new_dev(struct uterm_monitor_seat *seat,
|
||||
memset(dev, 0, sizeof(*dev));
|
||||
dev->seat = seat;
|
||||
dev->type = type;
|
||||
dev->flags = flags;
|
||||
|
||||
dev->node = strdup(node);
|
||||
if (!dev->node)
|
||||
@ -237,6 +240,7 @@ static void seat_new_dev(struct uterm_monitor_seat *seat,
|
||||
ev.seat_data = dev->seat->data;
|
||||
ev.dev = dev;
|
||||
ev.dev_type = dev->type;
|
||||
ev.dev_flags = dev->flags;
|
||||
ev.dev_node = dev->node;
|
||||
ev.dev_data = dev->data;
|
||||
dev->seat->mon->cb(dev->seat->mon, &ev, dev->seat->mon->data);
|
||||
@ -263,6 +267,7 @@ static void seat_free_dev(struct uterm_monitor_dev *dev)
|
||||
ev.seat_data = dev->seat->data;
|
||||
ev.dev = dev;
|
||||
ev.dev_type = dev->type;
|
||||
ev.dev_flags = dev->flags;
|
||||
ev.dev_node = dev->node;
|
||||
ev.dev_data = dev->data;
|
||||
dev->seat->mon->cb(dev->seat->mon, &ev, dev->seat->mon->data);
|
||||
@ -451,7 +456,7 @@ static void monitor_udev_add(struct uterm_monitor *mon,
|
||||
const char *sname, *subs, *node, *name, *sysname;
|
||||
struct shl_dlist *iter;
|
||||
struct uterm_monitor_seat *seat;
|
||||
unsigned int type;
|
||||
unsigned int type, flags;
|
||||
int id;
|
||||
struct udev_device *p;
|
||||
|
||||
@ -490,6 +495,7 @@ static void monitor_udev_add(struct uterm_monitor *mon,
|
||||
}
|
||||
sname = udev_device_get_property_value(dev, "ID_SEAT");
|
||||
type = UTERM_MONITOR_DRM;
|
||||
flags = 0;
|
||||
} else if (!strcmp(subs, "graphics")) {
|
||||
#ifdef BUILD_ENABLE_MULTI_SEAT
|
||||
if (udev_device_has_tag(dev, "seat") != 1) {
|
||||
@ -503,10 +509,10 @@ static void monitor_udev_add(struct uterm_monitor *mon,
|
||||
return;
|
||||
}
|
||||
sname = udev_device_get_property_value(dev, "ID_SEAT");
|
||||
type = UTERM_MONITOR_FBDEV;
|
||||
flags = 0;
|
||||
if (is_drm_fbdev(node))
|
||||
type = UTERM_MONITOR_FBDEV_DRM;
|
||||
else
|
||||
type = UTERM_MONITOR_FBDEV;
|
||||
flags |= UTERM_MONITOR_DRM_BACKED;
|
||||
} else if (!strcmp(subs, "input")) {
|
||||
sysname = udev_device_get_sysname(dev);
|
||||
if (!sysname || strncmp(sysname, "event", 5)) {
|
||||
@ -527,6 +533,7 @@ static void monitor_udev_add(struct uterm_monitor *mon,
|
||||
#endif
|
||||
sname = udev_device_get_property_value(p, "ID_SEAT");
|
||||
type = UTERM_MONITOR_INPUT;
|
||||
flags = 0;
|
||||
} else {
|
||||
log_debug("adding device with unknown subsystem %s (%s)",
|
||||
subs, name);
|
||||
@ -550,7 +557,7 @@ static void monitor_udev_add(struct uterm_monitor *mon,
|
||||
return;
|
||||
}
|
||||
|
||||
seat_new_dev(seat, type, node);
|
||||
seat_new_dev(seat, type, flags, node);
|
||||
}
|
||||
|
||||
static void monitor_udev_remove(struct uterm_monitor *mon,
|
||||
|
Loading…
x
Reference in New Issue
Block a user