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