dvb.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:7k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * dvb.h : functions to control a DVB card under Linux with v4l2
  3.  *****************************************************************************
  4.  * Copyright (C) 1998-2005 the VideoLAN team
  5.  *
  6.  * Authors: Johan Bilien <jobi@via.ecp.fr>
  7.  *          Jean-Paul Saman <jpsaman _at_ videolan _dot_ org>
  8.  *          Christopher Ross <chris@tebibyte.org>
  9.  *          Christophe Massiot <massiot@via.ecp.fr>
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA    02111, USA.
  24.  *****************************************************************************/
  25. #include "scan.h"
  26. /*****************************************************************************
  27.  * Devices location
  28.  *****************************************************************************/
  29. #define DMX      "/dev/dvb/adapter%d/demux%d"
  30. #define FRONTEND "/dev/dvb/adapter%d/frontend%d"
  31. #define DVR      "/dev/dvb/adapter%d/dvr%d"
  32. #define CA       "/dev/dvb/adapter%d/ca%d"
  33. /*****************************************************************************
  34.  * Local structures
  35.  *****************************************************************************/
  36. typedef struct demux_handle_t
  37. {
  38.     int i_pid;
  39.     int i_handle;
  40.     int i_type;
  41. } demux_handle_t;
  42. typedef struct frontend_t frontend_t;
  43. typedef struct
  44. {
  45.     int i_snr;              /**< Signal Noise ratio */
  46.     int i_ber;              /**< Bitrate error ratio */
  47.     int i_signal_strenth;   /**< Signal strength */
  48. } frontend_statistic_t;
  49. typedef struct
  50. {
  51.     bool b_has_signal;
  52.     bool b_has_carrier;
  53.     bool b_has_lock;
  54. } frontend_status_t;
  55. typedef struct en50221_session_t
  56. {
  57.     int i_slot;
  58.     int i_resource_id;
  59.     void (* pf_handle)( access_t *, int, uint8_t *, int );
  60.     void (* pf_close)( access_t *, int );
  61.     void (* pf_manage)( access_t *, int );
  62.     void *p_sys;
  63. } en50221_session_t;
  64. #define EN50221_MMI_NONE 0
  65. #define EN50221_MMI_ENQ 1
  66. #define EN50221_MMI_ANSW 2
  67. #define EN50221_MMI_MENU 3
  68. #define EN50221_MMI_MENU_ANSW 4
  69. #define EN50221_MMI_LIST 5
  70. typedef struct en50221_mmi_object_t
  71. {
  72.     int i_object_type;
  73.     union
  74.     {
  75.         struct
  76.         {
  77.             bool b_blind;
  78.             char *psz_text;
  79.         } enq;
  80.         struct
  81.         {
  82.             bool b_ok;
  83.             char *psz_answ;
  84.         } answ;
  85.         struct
  86.         {
  87.             char *psz_title, *psz_subtitle, *psz_bottom;
  88.             char **ppsz_choices;
  89.             int i_choices;
  90.         } menu; /* menu and list are the same */
  91.         struct
  92.         {
  93.             int i_choice;
  94.         } menu_answ;
  95.     } u;
  96. } en50221_mmi_object_t;
  97. static __inline__ void en50221_MMIFree( en50221_mmi_object_t *p_object )
  98. {
  99.     int i;
  100.     switch ( p_object->i_object_type )
  101.     {
  102.     case EN50221_MMI_ENQ:
  103.         FREENULL( p_object->u.enq.psz_text );
  104.         break;
  105.     case EN50221_MMI_ANSW:
  106.         if ( p_object->u.answ.b_ok )
  107.         {
  108.             FREENULL( p_object->u.answ.psz_answ );
  109.         }
  110.         break;
  111.     case EN50221_MMI_MENU:
  112.     case EN50221_MMI_LIST:
  113.         FREENULL( p_object->u.menu.psz_title );
  114.         FREENULL( p_object->u.menu.psz_subtitle );
  115.         FREENULL( p_object->u.menu.psz_bottom );
  116.         for ( i = 0; i < p_object->u.menu.i_choices; i++ )
  117.         {
  118.             FREENULL( p_object->u.menu.ppsz_choices[i] );
  119.         }
  120.         FREENULL( p_object->u.menu.ppsz_choices );
  121.         break;
  122.     default:
  123.         break;
  124.     }
  125. }
  126. #define MAX_DEMUX 256
  127. #define MAX_CI_SLOTS 16
  128. #define MAX_SESSIONS 32
  129. #define MAX_PROGRAMS 24
  130. struct access_sys_t
  131. {
  132.     int i_handle, i_frontend_handle;
  133.     demux_handle_t p_demux_handles[MAX_DEMUX];
  134.     frontend_t *p_frontend;
  135.     bool b_budget_mode;
  136.     bool b_scan_mode;
  137.     /* CA management */
  138.     int i_ca_handle;
  139.     int i_ca_type;
  140.     int i_nb_slots;
  141.     bool pb_active_slot[MAX_CI_SLOTS];
  142.     bool pb_tc_has_data[MAX_CI_SLOTS];
  143.     bool pb_slot_mmi_expected[MAX_CI_SLOTS];
  144.     bool pb_slot_mmi_undisplayed[MAX_CI_SLOTS];
  145.     en50221_session_t p_sessions[MAX_SESSIONS];
  146.     mtime_t i_ca_timeout, i_ca_next_event, i_frontend_timeout;
  147.     dvbpsi_pmt_t *pp_selected_programs[MAX_PROGRAMS];
  148.     int i_selected_programs;
  149.     /* */
  150.     int i_read_once;
  151.     int i_stat_counter;
  152. #ifdef ENABLE_HTTPD
  153.     /* Local HTTP server */
  154.     httpd_host_t        *p_httpd_host;
  155.     httpd_file_sys_t    *p_httpd_file;
  156.     httpd_redirect_t    *p_httpd_redir;
  157.     vlc_mutex_t         httpd_mutex;
  158.     vlc_cond_t          httpd_cond;
  159.     mtime_t             i_httpd_timeout;
  160.     bool          b_request_frontend_info, b_request_mmi_info;
  161.     char                *psz_frontend_info, *psz_mmi_info;
  162.     char                *psz_request;
  163. #endif
  164.     /* Scan */
  165.     scan_t scan;
  166. };
  167. #define VIDEO0_TYPE     1
  168. #define AUDIO0_TYPE     2
  169. #define TELETEXT0_TYPE  3
  170. #define SUBTITLE0_TYPE  4
  171. #define PCR0_TYPE       5
  172. #define TYPE_INTERVAL   5
  173. #define OTHER_TYPE     21
  174. /*****************************************************************************
  175.  * Prototypes
  176.  *****************************************************************************/
  177. int  FrontendOpen( access_t * );
  178. void FrontendPoll( access_t *p_access );
  179. int  FrontendSet( access_t * );
  180. void FrontendClose( access_t * );
  181. #ifdef ENABLE_HTTPD
  182. void FrontendStatus( access_t * );
  183. #endif
  184. int  FrontendGetStatistic( access_t *, frontend_statistic_t * );
  185. void FrontendGetStatus( access_t *, frontend_status_t * );
  186. int  FrontendGetScanParameter( access_t *, scan_parameter_t * );
  187. int DMXSetFilter( access_t *, int i_pid, int * pi_fd, int i_type );
  188. int DMXUnsetFilter( access_t *, int i_fd );
  189. int  DVROpen( access_t * );
  190. void DVRClose( access_t * );
  191. int  CAMOpen( access_t * );
  192. int  CAMPoll( access_t * );
  193. int  CAMSet( access_t *, dvbpsi_pmt_t * );
  194. void CAMClose( access_t * );
  195. #ifdef ENABLE_HTTPD
  196. void CAMStatus( access_t * );
  197. #endif
  198. int en50221_Init( access_t * );
  199. int en50221_Poll( access_t * );
  200. int en50221_SetCAPMT( access_t *, dvbpsi_pmt_t * );
  201. int en50221_OpenMMI( access_t * p_access, int i_slot );
  202. int en50221_CloseMMI( access_t * p_access, int i_slot );
  203. en50221_mmi_object_t *en50221_GetMMIObject( access_t * p_access,
  204.                                                 int i_slot );
  205. void en50221_SendMMIObject( access_t * p_access, int i_slot,
  206.                                 en50221_mmi_object_t *p_object );
  207. void en50221_End( access_t * );
  208. char *dvbsi_to_utf8( char *psz_instring, size_t i_length );
  209. #ifdef ENABLE_HTTPD
  210. int HTTPOpen( access_t *p_access );
  211. void HTTPClose( access_t *p_access );
  212. char *HTTPExtractValue( char *psz_uri, const char *psz_name,
  213.                             char *psz_value, int i_value_max );
  214. #endif
  215. /*****************************************************************************
  216.  * Hacks
  217.  *****************************************************************************/
  218. #define STRINGIFY( z )   UGLY_KLUDGE( z )
  219. #define UGLY_KLUDGE( z ) #z