1c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann/*
2c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
3c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  BlueZ - Bluetooth protocol stack for Linux
4c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
59184e2eeb7b97371c6b83b747c8984e2340d2b47Marcel Holtmann *  Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
6c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
7c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
8c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  This program is free software; you can redistribute it and/or modify
9c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  it under the terms of the GNU General Public License as published by
10c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  the Free Software Foundation; either version 2 of the License, or
11c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  (at your option) any later version.
12c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
13c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  This program is distributed in the hope that it will be useful,
14c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  GNU General Public License for more details.
17c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
18c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  You should have received a copy of the GNU General Public License
19c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  along with this program; if not, write to the Free Software
20c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann *
22c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann */
23c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann
24c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann#ifdef HAVE_CONFIG_H
25c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann#include <config.h>
26c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann#endif
27c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann
28c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann#include <errno.h>
29c97480f11bdfdc3cbb867b8127074bcb6b047024Marcel Holtmann
3060202f31c998cc68c14f57c91e4b40d2c39f95f2Claudio Takahasi#include <bluetooth/bluetooth.h>
319491a544f622e40453265c30f24ce44a61440cc1Claudio Takahasi
32ba4e3484118a69f49772b7e8dba9d8a02f8dff61Marcel Holtmann#include <gdbus.h>
333eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg
3429efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann#include "plugin.h"
35e891f7df6225c758da0d95f7554c6cc67f72f31eGustavo F. Padovan#include "log.h"
3674b978057e7b3f8cad2952c0fe50a17a118339adMarcel Holtmann#include "manager.h"
373eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg
382ce4523624b67b48da037beceffe5710144850ecMarcel Holtmannstatic GKeyFile *load_config_file(const char *file)
392ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann{
402ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	GKeyFile *keyfile;
412ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	GError *err = NULL;
422ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
432ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	keyfile = g_key_file_new();
442ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
452ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	if (!g_key_file_load_from_file(keyfile, file, 0, &err)) {
462ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann		error("Parsing %s failed: %s", file, err->message);
472ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann		g_error_free(err);
482ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann		g_key_file_free(keyfile);
492ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann		return NULL;
502ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	}
512ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
522ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	return keyfile;
532ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann}
542ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
55c74f11481aabe51612c7200e1e3ab91f7f1c4abbMarcel Holtmannstatic DBusConnection *connection;
56c74f11481aabe51612c7200e1e3ab91f7f1c4abbMarcel Holtmann
5729efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmannstatic int input_init(void)
58c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann{
592ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	GKeyFile *config;
602ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
61b81980264b744de5dda6f8e5cca15c4b829c64d9Claudio Takahasi	connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
62b81980264b744de5dda6f8e5cca15c4b829c64d9Claudio Takahasi	if (connection == NULL)
6329efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann		return -EIO;
643eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg
652ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann	config = load_config_file(CONFIGDIR "/input.conf");
662ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
67b81980264b744de5dda6f8e5cca15c4b829c64d9Claudio Takahasi	if (input_manager_init(connection, config) < 0) {
68b81980264b744de5dda6f8e5cca15c4b829c64d9Claudio Takahasi		dbus_connection_unref(connection);
6929efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann		return -EIO;
703eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg	}
713eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg
72aacac39879203869ff190be2df7a6f0556ced060Marcel Holtmann	if (config)
73aacac39879203869ff190be2df7a6f0556ced060Marcel Holtmann		g_key_file_free(config);
742ce4523624b67b48da037beceffe5710144850ecMarcel Holtmann
7529efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann	return 0;
7629efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann}
773eb0a5cd951b680c89f92bce6dddce2da2539af0Johan Hedberg
7829efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmannstatic void input_exit(void)
7929efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann{
8029efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann	input_manager_exit();
81c74f11481aabe51612c7200e1e3ab91f7f1c4abbMarcel Holtmann
82b81980264b744de5dda6f8e5cca15c4b829c64d9Claudio Takahasi	dbus_connection_unref(connection);
83c761480865c6b65e370e2bba750c86c226a7fc3fMarcel Holtmann}
8429efa57d5a27b0cf5997381053be9cc48b2c2e80Marcel Holtmann
85e050cc3d1458116cad6f4182c81ba7d31949857cAlok BarsodeBLUETOOTH_PLUGIN_DEFINE(input, VERSION,
862f28c39a63e19e41598af8088c5677859364bc04Alok Barsode			BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, input_init, input_exit)
87