]> err.no Git - mapper/blob - src/maemo-osso.c
Start to rewrite the GPS system to support location information from multiple sources.
[mapper] / src / maemo-osso.c
1 /*
2  * This file is part of mapper
3  *
4  * Copyright (C) 2007 Kaj-Michael Lang
5  * Copyright (C) 2006-2007 John Costigan.
6  *
7  * POI and GPS-Info code originally written by Cezary Jackiewicz.
8  *
9  * Default map data provided by http://www.openstreetmap.org/
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License along
22  * with this program; if not, write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24  */
25
26 /* 
27  * Maemo hardware specific functions 
28  */
29
30 #include <config.h>
31
32 #include <glib.h>
33 #include <gtk/gtk.h>
34
35 #ifdef WITH_OSSO
36 #include <libosso.h>
37
38 #ifdef WITH_OSSO_IC
39 #include <osso-ic.h>
40 #include <osso-ic-dbus.h>
41 #endif
42
43 #include "map.h"
44 #include "map-download.h"
45 #include "route.h"
46 #include "mapper-types.h"
47 #include "gps.h"
48 #include "settings-gconf.h"
49 #include "settings.h"
50 #include "config-gconf.h"
51 #include "ui-common.h"
52
53 gint
54 dbus_cb_default(const gchar *interface, const gchar *method, GArray *arguments, gpointer data, osso_rpc_t *retval)
55 {
56 if(!strcmp(method, "top_application"))
57         gtk_idle_add((GSourceFunc)window_present, NULL);
58 retval->type = DBUS_TYPE_INVALID;
59
60 return OSSO_OK;
61 }
62
63 void
64 osso_cb_hw_state(osso_hw_state_t * state, gpointer data)
65 {
66 static gboolean _must_save_data = FALSE;
67
68 if (state->system_inactivity_ind) {
69         if (_must_save_data)
70                 _must_save_data = FALSE;
71         else {
72                 if (_gps->io.conn > RCVR_OFF) {
73                         if (gconf_client_get_bool(gconf_client, GCONF_KEY_DISCONNECT_ON_COVER, NULL)) {
74                                 gconf_client_clear_cache(gconf_client);
75                                 gps_conn_set_state(_gps, RCVR_OFF);
76                                 gps_disconnect(_gps);
77                                 track_add(0, FALSE);
78                                 /* Pretend autoroute is in progress to avoid download. */
79                                 if (_autoroute_data.enabled)
80                                         _autoroute_data.in_progress = TRUE;
81                         }
82                 }
83                 if (_curl_sid) {
84                         g_source_remove(_curl_sid);
85                         _curl_sid = 0;
86                 }
87         }
88 } else if (state->save_unsaved_data_ind) {
89         config_save();
90         _must_save_data = TRUE;
91 } else if (state->memory_low_ind) {
92         poi_icon_hash_clear();
93 } else {
94         if (_gps->io.conn == RCVR_OFF && _enable_gps) {
95                 gps_conn_set_state(gps, RCVR_DOWN);
96                 gps_connect_later(gps);
97                 if (_autoroute_data.enabled)
98                         _autoroute_data.in_progress = TRUE;
99         }
100
101         /* Start curl in case there are downloads pending. */
102         if (iap_is_connected() && !_curl_sid)
103                 _curl_sid = g_timeout_add(100, (GSourceFunc)map_download_timeout, NULL);
104 }
105 }
106
107 #else
108
109 void 
110 osso_cb_hw_state(void *state, gpointer data)
111 {
112 }
113
114 #endif