From c205b740d4e793354493c4a2663e45670255453c Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Tue, 16 Oct 2007 17:38:05 +0000 Subject: sys/dvb/: Integrate SoC work done by Alessandro for the Freevo project. Original commit message from CVS: patch by: Alessandro Decina * sys/dvb/Makefile.am: * sys/dvb/cam.c: * sys/dvb/cam.h: * sys/dvb/camapplication.c: * sys/dvb/camapplication.h: * sys/dvb/camapplicationinfo.c: * sys/dvb/camapplicationinfo.h: * sys/dvb/camconditionalaccess.c: * sys/dvb/camconditionalaccess.h: * sys/dvb/camdevice.c: * sys/dvb/camdevice.h: * sys/dvb/camresourcemanager.c: * sys/dvb/camresourcemanager.h: * sys/dvb/camsession.c: * sys/dvb/camsession.h: * sys/dvb/camswclient.c: * sys/dvb/camswclient.h: * sys/dvb/camtransport.c: * sys/dvb/camtransport.h: * sys/dvb/camutils.c: * sys/dvb/camutils.h: * sys/dvb/dvbbasebin.c: * sys/dvb/dvbbasebin.h: * sys/dvb/gstdvb.c: * sys/dvb/gstdvbsrc.c: * sys/dvb/gstdvbsrc.h: Integrate SoC work done by Alessandro for the Freevo project. Adds cam support to the dvb stack in GStreamer and a new element (actually a bin) called dvbbasebin that integrates dvbsrc and mpegtsparse to a) handle decryption and b) allow acquiring multiple channels on same transponder without knowing pid numbers. --- sys/dvb/camtransport.h | 115 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 sys/dvb/camtransport.h (limited to 'sys/dvb/camtransport.h') diff --git a/sys/dvb/camtransport.h b/sys/dvb/camtransport.h new file mode 100644 index 00000000..570b966c --- /dev/null +++ b/sys/dvb/camtransport.h @@ -0,0 +1,115 @@ +/* + * camtransport.h - GStreamer CAM (EN50221) transport layer + * Copyright (C) 2007 Alessandro Decina + * + * Authors: + * Alessandro Decina + * + * 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_TRANSPORT_H +#define CAM_TRANSPORT_H + +#include +#include "cam.h" +#include "camutils.h" + +#define HOST_BUFFER_SIZE 1024 + +#define CAM_TL(obj) ((CamTL *) obj) +#define CAM_TL_CONNECTION(obj) ((CamTLConnection *) obj) + +typedef struct _CamTL CamTL; +typedef struct _CamTLPrivate CamTLPrivate; + +typedef struct _CamTLConnection CamTLConnection; +typedef struct _CamTLConnectionPrivate CamTLConnectionPrivate; + +typedef enum +{ + CAM_TL_CONNECTION_STATE_CLOSED, + CAM_TL_CONNECTION_STATE_IN_CREATION, + CAM_TL_CONNECTION_STATE_OPEN, + CAM_TL_CONNECTION_STATE_IN_DELETION +} CamTLConnectionState; + +struct _CamTL +{ + int fd; + guint connection_ids; + + GHashTable *connections; + + guint expected_tpdus; + + /* buffer containing module data */ + guint8 buffer [HOST_BUFFER_SIZE]; + /* number of bytes written in the buffer */ + guint buffer_size; + /* index pointing to the first byte of a TPDU's body */ + guint8 *body; + /* length of the body part */ + guint body_length; + + /* callbacks */ + void (*request_connection) (CamTL *tl, CamTLConnection *connection); + void (*connection_created) (CamTL *tl, CamTLConnection *connection); + void (*connection_deleted) (CamTL *tl, CamTLConnection *connection); + CamReturn (*connection_data) (CamTL *tl, CamTLConnection *connection, + guint8 *data, guint length); + + /* used by the upper layer to extend this layer */ + gpointer user_data; +}; + +struct _CamTLConnection +{ + CamTL *tl; + + guint8 slot; + guint id; + CamTLConnectionState state; + /* TRUE if the last status byte was 0x80, FALSE otherwise */ + gboolean has_data; + /* NCAS 1.0 sometimes reports that it has data even if it doesn't. After + * MAX_EMPTY_DATA times that we don't get any data we assume that there's + * actually no data. + */ + guint empty_data; + /* timer restarted every time the connection is polled */ + GTimer *last_poll; + + gpointer user_data; +}; + +CamTL *cam_tl_new (int cam_device_fd); +void cam_tl_destroy (CamTL *tl); + +CamReturn cam_tl_create_connection (CamTL *tl, + guint8 slot, CamTLConnection **connnection); +CamReturn cam_tl_connection_delete (CamTLConnection *connection); + +void cam_tl_calc_buffer_size (CamTL *tl, + guint body_length, guint *buffer_size, guint *offset); + +CamReturn cam_tl_connection_write (CamTLConnection *connection, + guint8 *data, guint buffer_size, guint body_length); + +CamReturn cam_tl_connection_poll (CamTLConnection *connection, gboolean force); +CamReturn cam_tl_read_all (CamTL *tl, gboolean poll); + +#endif /* CAM_TRANSPORT_H */ -- cgit v1.2.1