diff options
author | Aki Niemi <aki.niemi@nokia.com> | 2010-11-14 18:23:32 +0200 |
---|---|---|
committer | Aki Niemi <aki.niemi@nokia.com> | 2010-12-22 17:13:46 +0200 |
commit | b8e30c153e15720a2412fcdd793e47847674f4cd (patch) | |
tree | f802ed943cfb1d713849a921691bb4bc07ba2075 /gisi/modem.h | |
parent | 42ff2b6d17ffdbe300545040d223c2d5f6d8559e (diff) | |
download | ofono-b8e30c153e15720a2412fcdd793e47847674f4cd.tar.bz2 |
gisi: Redesign ISI message processing
This new modem API supercedes the old client and server APIs. It
properly queues resource subscriptions and version queries, as well as
caches reachability status for a given resource.
Also, this is a complete redesign of ISI message handling, adding
another layer of abstraction to multiplexing operations to a given
modem resource.
Diffstat (limited to 'gisi/modem.h')
-rw-r--r-- | gisi/modem.h | 81 |
1 files changed, 73 insertions, 8 deletions
diff --git a/gisi/modem.h b/gisi/modem.h index bf7286d7..50f1f05b 100644 --- a/gisi/modem.h +++ b/gisi/modem.h @@ -23,22 +23,87 @@ #define __GISI_MODEM_H #include <stdint.h> +#include <glib/gtypes.h> + +#include "phonet.h" +#include "message.h" #ifdef __cplusplus extern "C" { #endif -typedef void (*GIsiDebugFunc) (const void *restrict data, size_t len, - void *opaque); - +struct _GIsiModem; typedef struct _GIsiModem GIsiModem; -static inline unsigned g_isi_modem_index(GIsiModem *m) -{ - return (uintptr_t)m; -} +struct _GIsiPending; +typedef struct _GIsiPending GIsiPending; + +typedef void (*GIsiNotifyFunc)(const GIsiMessage *msg, void *opaque); + +GIsiModem *g_isi_modem_create(unsigned index); +GIsiModem *g_isi_modem_create_by_name(const char *name); +void g_isi_modem_destroy(GIsiModem *modem); +unsigned g_isi_modem_index(GIsiModem *modem); +void g_isi_modem_set_debug(GIsiModem *modem, GIsiNotifyFunc notify, + void *opaque); + +GIsiPending *g_isi_request_send(GIsiModem *modem, uint8_t resource, + const void *__restrict buf, size_t len, + unsigned timeout, GIsiNotifyFunc notify, + void *data, GDestroyNotify destroy); + +GIsiPending *g_isi_request_vsend(GIsiModem *modem, uint8_t resource, + const struct iovec *__restrict iov, + size_t iovlen, unsigned timeout, + GIsiNotifyFunc notify, void *data, + GDestroyNotify destroy); + +GIsiPending *g_isi_request_sendto(GIsiModem *modem, struct sockaddr_pn *dst, + const void *__restrict buf, size_t len, + unsigned timeout, GIsiNotifyFunc notify, + void *data, GDestroyNotify destroy); + +GIsiPending *g_isi_request_vsendto(GIsiModem *modem, struct sockaddr_pn *dst, + const struct iovec *__restrict iov, + size_t iovlen, unsigned timeout, + GIsiNotifyFunc notify, void *data, + GDestroyNotify destroy); + +int g_isi_modem_sendto(GIsiModem *modem, struct sockaddr_pn *dst, + const void *__restrict buf, size_t len); + +int g_isi_modem_vsendto(GIsiModem *modem, struct sockaddr_pn *dst, + const struct iovec *__restrict iov, + size_t iovlen); + +uint8_t g_isi_request_utid(GIsiPending *resp); + +GIsiPending *g_isi_ind_subscribe(GIsiModem *modem, uint8_t resource, + uint8_t type, GIsiNotifyFunc notify, + void *data, GDestroyNotify destroy); + +GIsiPending *g_isi_ntf_subscribe(GIsiModem *modem, uint8_t resource, + uint8_t type, GIsiNotifyFunc notify, + void *data, GDestroyNotify destroy); + +GIsiPending *g_isi_service_bind(GIsiModem *modem, uint8_t resource, + uint8_t type, GIsiNotifyFunc notify, + void *data, GDestroyNotify destroy); + +int g_isi_response_send(GIsiModem *modem, const GIsiMessage *req, + const void *__restrict buf, size_t len); + +int g_isi_response_vsend(GIsiModem *modem, const GIsiMessage *req, + const struct iovec *__restrict iov, + size_t iovlen); + +GIsiPending *g_isi_pending_from_msg(const GIsiMessage *msg); + +void g_isi_pending_remove(GIsiPending *operation); -GIsiModem *g_isi_modem_by_name(const char *name); +GIsiPending *g_isi_resource_ping(GIsiModem *modem, uint8_t resource, + GIsiNotifyFunc notify, void *data, + GDestroyNotify destroy); #ifdef __cplusplus } |