summaryrefslogtreecommitdiffstats
path: root/sys/dvb/camsession.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dvb/camsession.h')
-rw-r--r--sys/dvb/camsession.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/sys/dvb/camsession.h b/sys/dvb/camsession.h
new file mode 100644
index 00000000..7b9ac54b
--- /dev/null
+++ b/sys/dvb/camsession.h
@@ -0,0 +1,96 @@
+/*
+ * camsession.h - GStreamer CAM (EN50221) Session Layer
+ * Copyright (C) 2007 Alessandro Decina
+ *
+ * Authors:
+ * Alessandro Decina <alessandro@nnva.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef CAM_SESSION_H
+#define CAM_SESSION_H
+
+#include "cam.h"
+#include "camtransport.h"
+
+#define CAM_SL(obj) ((CamSL *) obj)
+#define CAM_SL_SESSION(obj) ((CamSLSession *) obj)
+
+typedef struct _CamSL CamSL;
+typedef struct _CamSLSession CamSLSession;
+
+typedef enum
+{
+ CAM_SL_SESSION_STATE_IDLE,
+ CAM_SL_SESSION_STATE_OPENING,
+ CAM_SL_SESSION_STATE_ACTIVE,
+ CAM_SL_SESSION_STATE_CLOSING
+} CamSLSessionState;
+
+typedef enum
+{
+ CAM_SL_RESOURCE_STATUS_OPEN = 0x00,
+ CAM_SL_RESOURCE_STATUS_NOT_FOUND = 0xF0,
+ CAM_SL_RESOURCE_STATUS_UNAVAILABLE = 0xF1,
+ CAM_SL_RESOURCE_STATUS_INVALID_VERSION = 0xF2,
+ CAM_SL_RESOURCE_STATUS_BUSY = 0xF3
+} CamSLResourceStatus;
+
+struct _CamSL
+{
+ CamTL *tl;
+
+ GHashTable *sessions;
+ guint session_ids;
+
+ /* callbacks */
+ CamReturn (*open_session_request) (CamSL *sl, CamSLSession *session,
+ CamSLResourceStatus *status);
+ CamReturn (*session_opened) (CamSL *sl, CamSLSession *session);
+ CamReturn (*session_closed) (CamSL *sl, CamSLSession *session);
+ CamReturn (*session_data) (CamSL *sl, CamSLSession *session,
+ guint8 *data, guint length);
+
+ gpointer user_data;
+};
+
+struct _CamSLSession
+{
+ CamSL *sl;
+ CamTLConnection *connection;
+
+ guint resource_id;
+ guint16 session_nb;
+
+ CamSLSessionState state;
+
+ gpointer user_data;
+};
+
+CamSL *cam_sl_new (CamTL *transport);
+void cam_sl_destroy (CamSL *sl);
+
+CamReturn cam_sl_create_session (CamSL *sl, CamTLConnection *connection,
+ guint resource_id, CamSLSession **session);
+CamReturn cam_sl_session_close (CamSLSession *session);
+
+void cam_sl_calc_buffer_size (CamSL *sl,
+ guint body_length, guint *buffer_size, guint *offset);
+CamReturn cam_sl_session_write (CamSLSession *session,
+ guint8 *buffe, guint buffer_size, guint body_length);
+
+#endif /* CAM_SESSION_H */