main.c revision cdb1b7c3435688bc6f30a3953f1152247ec51b95
1e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann/*
2e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
3e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  BlueZ - Bluetooth protocol stack for Linux
4e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
5e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  Copyright (C) 2004-2007  Marcel Holtmann <marcel@holtmann.org>
6e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
7e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
8e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  This program is free software; you can redistribute it and/or modify
9e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  it under the terms of the GNU General Public License as published by
10e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  the Free Software Foundation; either version 2 of the License, or
11e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  (at your option) any later version.
12e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
13e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  This program is distributed in the hope that it will be useful,
14e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  GNU General Public License for more details.
17e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
18e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  You should have received a copy of the GNU General Public License
19e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  along with this program; if not, write to the Free Software
20e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann *
22e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann */
23e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
24e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#ifdef HAVE_CONFIG_H
25e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#include <config.h>
26e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#endif
27e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
28cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi#include <stdlib.h>
29e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#include <string.h>
30e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#include <signal.h>
31cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi#include <glib.h>
32e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
33e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann#include "logging.h"
34cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi#include "dbus.h"
35e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
366dc594dbea588a7285dff7eac35d1c0c3fca206dMarcel Holtmann#include "manager.h"
376dc594dbea588a7285dff7eac35d1c0c3fca206dMarcel Holtmann
38cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasistatic GMainLoop *main_loop;
39cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
40e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmannstatic void sig_term(int sig)
41e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann{
42cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	g_main_loop_quit(main_loop);
43e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann}
44e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
45e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmannint main(int argc, char *argv[])
46e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann{
47cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	DBusConnection *conn;
48e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	struct sigaction sa;
49e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
50e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	start_logging("serial", "Bluetooth Serial Port daemon");
51e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
52e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	memset(&sa, 0, sizeof(sa));
53e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sa.sa_flags = SA_NOCLDSTOP;
54e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sa.sa_handler = sig_term;
55e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sigaction(SIGTERM, &sa, NULL);
56e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sigaction(SIGINT,  &sa, NULL);
57e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
58e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sa.sa_handler = SIG_IGN;
59e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sigaction(SIGCHLD, &sa, NULL);
60e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	sigaction(SIGPIPE, &sa, NULL);
61e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
62e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	enable_debug();
63e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
64cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	main_loop = g_main_loop_new(NULL, FALSE);
65cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
66cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	conn = dbus_bus_system_setup_with_main_loop(NULL, NULL, NULL);
67cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	if (!conn) {
68cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		g_main_loop_unref(main_loop);
69cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		exit(EXIT_FAILURE);
70cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	}
71cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
72cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	if (serial_init(conn) < 0) {
73cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		dbus_connection_unref(conn);
74cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		g_main_loop_unref(main_loop);
75cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		exit(EXIT_FAILURE);
76cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	}
77cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
78cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	if (argc > 1 && !strcmp(argv[1], "-s"))
79cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi		register_external_service(conn, "serial", "Serial service", "");
80cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
81cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	g_main_loop_run(main_loop);
82cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
83cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	serial_exit();
84cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
85cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	dbus_connection_unref(conn);
86cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
87cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi	g_main_loop_unref(main_loop);
88cdb1b7c3435688bc6f30a3953f1152247ec51b95Claudio Takahasi
89e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	info("Exit");
90e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
91e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	stop_logging();
92e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann
93e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann	return 0;
94e6fe40e5e92a6942869a2fc7e7cb210d18da3929Marcel Holtmann}
95