diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2009-10-12 23:35:59 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-10-23 17:05:53 -0500 |
commit | f43efa8a5f24f2aab71f829082cc02a272268986 (patch) | |
tree | 3947897237b13880d172e4aaa116cc5792d4b115 /include/data-connection.h | |
parent | 0faa8b3c42533578b5b6ed4d3de0cb25ba24cb1d (diff) | |
download | ofono-f43efa8a5f24f2aab71f829082cc02a272268986.tar.bz2 |
Add GPRS support
This commit implements the GPRS context setup and teardown according to
doc/dataconnectionmanager-api.txt
One issue with the AT implementation of the api is that "Powered" (a
read-write property) can be set independently of "Attached" (read-only
property) and remain set when "Attached" is clear. The semantics would
be that the network doesn't have resources to let the modem attach,
but the modem waits for the resources to become available and then
attaches. On AT the modem is in this state only when executing +CGATT,
so currently the code will rerun +CGATT as soon as the previous one
returns with error, probably starving other commands. A possible
workaround would be for "Powered" to flip back to False after the modem
fails to attach once, or give up on having separate properties.
Alternatively we could re-try to attach periodically but on one modem
I've tried +CGATT fails after about 1 minute (that's the Calypso) and
on another only about 0.5s (Nokia phones with AT emulation).
When "Powered" is set and "RoamingAllowed" is clear and we manage to
attach and find that we're roaming, ofono resets "Powered".
We may want to catch the user trying to dial *99***1# which is the
backwards compatibility quirk for old modems (same way ofono parses
USSD strings).
Diffstat (limited to 'include/data-connection.h')
-rw-r--r-- | include/data-connection.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/data-connection.h b/include/data-connection.h new file mode 100644 index 00000000..24b68a84 --- /dev/null +++ b/include/data-connection.h @@ -0,0 +1,89 @@ +/* + * + * oFono - Open Source Telephony + * + * Copyright (C) 2008-2009 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_DATA_CONNECTION_H +#define __OFONO_DATA_CONNECTION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <ofono/types.h> + +struct ofono_data_connection; + +typedef void (*ofono_data_connection_cb_t)(const struct ofono_error *error, + void *data); + +typedef void (*ofono_data_connection_alloc_cb_t)( + const struct ofono_error *error, + struct ofono_data_context *ctx, + void *data); + +struct ofono_data_connection_driver { + const char *name; + int (*probe)(struct ofono_data_connection *dc, unsigned int vendor, + void *data); + void (*remove)(struct ofono_data_connection *dc); + void (*set_attached)(struct ofono_data_connection *dc, + int attached, ofono_data_connection_cb_t cb, + void *data); + void (*set_active)(struct ofono_data_connection *dc, unsigned id, + int active, ofono_data_connection_cb_t cb, + void *data); + void (*set_active_all)(struct ofono_data_connection *dc, + int active, ofono_data_connection_cb_t cb, + void *data); + void (*create_context)(struct ofono_data_connection *dc, + ofono_data_connection_alloc_cb_t cb, + void *data); + void (*remove_context)(struct ofono_data_connection *dc, unsigned id, + ofono_data_connection_cb_t cb, void *data); +}; + +void ofono_data_connection_notify(struct ofono_data_connection *dc, + struct ofono_data_context *ctx); +void ofono_data_connection_deactivated(struct ofono_data_connection *dc, + unsigned id); +void ofono_data_connection_detached(struct ofono_data_connection *dc); +void ofono_data_netreg_status_notify(struct ofono_data_connection *dc, + int status, int lac, int ci, int tech); + +int ofono_data_connection_driver_register( + const struct ofono_data_connection_driver *d); +void ofono_data_connection_driver_unregister( + const struct ofono_data_connection_driver *d); + +struct ofono_data_connection *ofono_data_connection_create( + struct ofono_modem *modem, unsigned int vendor, + const char *driver, void *data); +void ofono_data_connection_register(struct ofono_data_connection *dc); +void ofono_data_connection_remove(struct ofono_data_connection *dc); + +void ofono_data_connection_set_data(struct ofono_data_connection *dc, + void *data); +void *ofono_data_connection_get_data(struct ofono_data_connection *dc); + +#ifdef __cplusplus +} +#endif + +#endif /* __OFONO_DATA_CONNECTION_H */ |