summaryrefslogtreecommitdiffstats
path: root/gisi/modem.h
diff options
context:
space:
mode:
authorAki Niemi <aki.niemi@nokia.com>2010-11-14 18:23:32 +0200
committerAki Niemi <aki.niemi@nokia.com>2010-12-22 17:13:46 +0200
commitb8e30c153e15720a2412fcdd793e47847674f4cd (patch)
treef802ed943cfb1d713849a921691bb4bc07ba2075 /gisi/modem.h
parent42ff2b6d17ffdbe300545040d223c2d5f6d8559e (diff)
downloadofono-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.h81
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
}