summaryrefslogtreecommitdiff
path: root/include/modem.h
blob: 9b12cfad71314b309ce9e5a753641b4daaf216ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 *
 *  oFono - Open Source Telephony
 *
 *  Copyright (C) 2008-2011  Intel Corporation. All rights reserved.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef __OFONO_MODEM_H
#define __OFONO_MODEM_H

#ifdef __cplusplus
extern "C" {
#endif

#include <ofono/types.h>

struct ofono_modem;
struct ofono_gprs;
struct ofono_sim;
struct ofono_voicecall;

enum ofono_modem_type {
	OFONO_MODEM_TYPE_HARDWARE = 0,
	OFONO_MODEM_TYPE_HFP,
	OFONO_MODEM_TYPE_SAP,
	OFONO_MODEM_TYPE_TEST,
};

typedef void (*ofono_modem_online_cb_t)(const struct ofono_error *error,
					void *data);

typedef ofono_bool_t (*ofono_modem_compare_cb_t)(struct ofono_modem *modem,
							void *user_data);

struct ofono_modem_driver {
	const char *name;
	enum ofono_modem_type modem_type;

	/* Detect existence of device and initialize any device-specific data
	 * structures */
	int (*probe)(struct ofono_modem *modem);

	/* Destroy data structures allocated during probe and cleanup */
	void (*remove)(struct ofono_modem *modem);

	/* Power up device */
	int (*enable)(struct ofono_modem *modem);

	/* Power down device */
	int (*disable)(struct ofono_modem *modem);

	/* Enable or disable cellular radio */
	void (*set_online)(struct ofono_modem *modem, ofono_bool_t online,
				ofono_modem_online_cb_t callback, void *data);

	/* Populate the atoms available without SIM / Locked SIM */
	void (*pre_sim)(struct ofono_modem *modem);

	/* Populate the atoms that are available with SIM / Unlocked SIM*/
	void (*post_sim)(struct ofono_modem *modem);

	/* Populate the atoms available online */
	void (*post_online)(struct ofono_modem *modem);
};

void ofono_modem_add_interface(struct ofono_modem *modem,
				const char *interface);
void ofono_modem_remove_interface(struct ofono_modem *modem,
					const char *interface);

const char *ofono_modem_get_path(struct ofono_modem *modem);
struct ofono_sim *ofono_modem_get_sim(struct ofono_modem *modem);
struct ofono_gprs *ofono_modem_get_gprs(struct ofono_modem *modem);
struct ofono_voicecall *ofono_modem_get_voicecall(struct ofono_modem *modem);

void ofono_modem_set_data(struct ofono_modem *modem, void *data);
void *ofono_modem_get_data(struct ofono_modem *modem);

struct ofono_modem *ofono_modem_create(const char *name, const char *type);
int ofono_modem_register(struct ofono_modem *modem);

ofono_bool_t ofono_modem_is_registered(struct ofono_modem *modem);
void ofono_modem_remove(struct ofono_modem *modem);

void ofono_modem_reset(struct ofono_modem *modem);

void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered);
ofono_bool_t ofono_modem_get_powered(struct ofono_modem *modem);

ofono_bool_t ofono_modem_get_online(struct ofono_modem *modem);

ofono_bool_t ofono_modem_get_emergency_mode(struct ofono_modem *modem);

void ofono_modem_set_name(struct ofono_modem *modem, const char *name);
void ofono_modem_set_driver(struct ofono_modem *modem, const char *type);

int ofono_modem_set_string(struct ofono_modem *modem,
				const char *key, const char *value);
const char *ofono_modem_get_string(struct ofono_modem *modem, const char *key);

int ofono_modem_set_integer(struct ofono_modem *modem,
				const char *key, int value);
int ofono_modem_get_integer(struct ofono_modem *modem, const char *key);

int ofono_modem_set_boolean(struct ofono_modem *modem,
				const char *key, ofono_bool_t value);
ofono_bool_t ofono_modem_get_boolean(struct ofono_modem *modem,
					const char *key);

int ofono_modem_driver_register(const struct ofono_modem_driver *);
void ofono_modem_driver_unregister(const struct ofono_modem_driver *);

struct ofono_modem *ofono_modem_find(ofono_modem_compare_cb_t func,
					void *user_data);

void ofono_modem_set_powered_timeout_hint(struct ofono_modem *modem,
							unsigned int seconds);

#ifdef __cplusplus
}
#endif

#endif /* __OFONO_MODEM_H */