From b8e30c153e15720a2412fcdd793e47847674f4cd Mon Sep 17 00:00:00 2001 From: Aki Niemi Date: Sun, 14 Nov 2010 18:23:32 +0200 Subject: 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. --- gisi/modem.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 8 deletions(-) (limited to 'gisi/modem.h') 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 +#include + +#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 } -- cgit v1.2.3