en50221.c File Reference

Include dependency graph for en50221.c:


Data Structures

struct  system_ids_t
struct  date_time_t
struct  mmi_t

Defines

#define HLCI_WAIT_CAM_READY   0
#define CAM_PROG_MAX   MAX_PROGRAMS
#define SIZE_INDICATOR   0x80
#define MAX_TPDU_SIZE   2048
#define MAX_TPDU_DATA   (MAX_TPDU_SIZE - 4)
#define DATA_INDICATOR   0x80
#define T_SB   0x80
#define T_RCV   0x81
#define T_CREATE_TC   0x82
#define T_CTC_REPLY   0x83
#define T_DELETE_TC   0x84
#define T_DTC_REPLY   0x85
#define T_REQUEST_TC   0x86
#define T_NEW_TC   0x87
#define T_TC_ERROR   0x88
#define T_DATA_LAST   0xA0
#define T_DATA_MORE   0xA1
#define CAM_READ_TIMEOUT   3500
#define ST_SESSION_NUMBER   0x90
#define ST_OPEN_SESSION_REQUEST   0x91
#define ST_OPEN_SESSION_RESPONSE   0x92
#define ST_CREATE_SESSION   0x93
#define ST_CREATE_SESSION_RESPONSE   0x94
#define ST_CLOSE_SESSION_REQUEST   0x95
#define ST_CLOSE_SESSION_RESPONSE   0x96
#define SS_OK   0x00
#define SS_NOT_ALLOCATED   0xF0
#define RI_RESOURCE_MANAGER   0x00010041
#define RI_APPLICATION_INFORMATION   0x00020041
#define RI_CONDITIONAL_ACCESS_SUPPORT   0x00030041
#define RI_HOST_CONTROL   0x00200041
#define RI_DATE_TIME   0x00240041
#define RI_MMI   0x00400041
#define AOT_NONE   0x000000
#define AOT_PROFILE_ENQ   0x9F8010
#define AOT_PROFILE   0x9F8011
#define AOT_PROFILE_CHANGE   0x9F8012
#define AOT_APPLICATION_INFO_ENQ   0x9F8020
#define AOT_APPLICATION_INFO   0x9F8021
#define AOT_ENTER_MENU   0x9F8022
#define AOT_CA_INFO_ENQ   0x9F8030
#define AOT_CA_INFO   0x9F8031
#define AOT_CA_PMT   0x9F8032
#define AOT_CA_PMT_REPLY   0x9F8033
#define AOT_TUNE   0x9F8400
#define AOT_REPLACE   0x9F8401
#define AOT_CLEAR_REPLACE   0x9F8402
#define AOT_ASK_RELEASE   0x9F8403
#define AOT_DATE_TIME_ENQ   0x9F8440
#define AOT_DATE_TIME   0x9F8441
#define AOT_CLOSE_MMI   0x9F8800
#define AOT_DISPLAY_CONTROL   0x9F8801
#define AOT_DISPLAY_REPLY   0x9F8802
#define AOT_TEXT_LAST   0x9F8803
#define AOT_TEXT_MORE   0x9F8804
#define AOT_KEYPAD_CONTROL   0x9F8805
#define AOT_KEYPRESS   0x9F8806
#define AOT_ENQ   0x9F8807
#define AOT_ANSW   0x9F8808
#define AOT_MENU_LAST   0x9F8809
#define AOT_MENU_MORE   0x9F880A
#define AOT_MENU_ANSW   0x9F880B
#define AOT_LIST_LAST   0x9F880C
#define AOT_LIST_MORE   0x9F880D
#define AOT_SUBTITLE_SEGMENT_LAST   0x9F880E
#define AOT_SUBTITLE_SEGMENT_MORE   0x9F880F
#define AOT_DISPLAY_MESSAGE   0x9F8810
#define AOT_SCENE_END_MARK   0x9F8811
#define AOT_SCENE_DONE   0x9F8812
#define AOT_SCENE_CONTROL   0x9F8813
#define AOT_SUBTITLE_DOWNLOAD_LAST   0x9F8814
#define AOT_SUBTITLE_DOWNLOAD_MORE   0x9F8815
#define AOT_FLUSH_DOWNLOAD   0x9F8816
#define AOT_DOWNLOAD_REPLY   0x9F8817
#define AOT_COMMS_CMD   0x9F8C00
#define AOT_CONNECTION_DESCRIPTOR   0x9F8C01
#define AOT_COMMS_REPLY   0x9F8C02
#define AOT_COMMS_SEND_LAST   0x9F8C03
#define AOT_COMMS_SEND_MORE   0x9F8C04
#define AOT_COMMS_RCV_LAST   0x9F8C05
#define AOT_COMMS_RCV_MORE   0x9F8C06
#define MAX_CASYSTEM_IDS   16
#define DEC2BCD(d)   (((d / 10) << 4) + (d % 10))
#define DCC_SET_MMI_MODE   0x01
#define DCC_DISPLAY_CHARACTER_TABLE_LIST   0x02
#define DCC_INPUT_CHARACTER_TABLE_LIST   0x03
#define DCC_OVERLAY_GRAPHICS_CHARACTERISTICS   0x04
#define DCC_FULL_SCREEN_GRAPHICS_CHARACTERISTICS   0x05
#define MM_HIGH_LEVEL   0x01
#define MM_LOW_LEVEL_OVERLAY_GRAPHICS   0x02
#define MM_LOW_LEVEL_FULL_SCREEN_GRAPHICS   0x03
#define DRI_MMI_MODE_ACK   0x01
#define DRI_LIST_DISPLAY_CHARACTER_TABLES   0x02
#define DRI_LIST_INPUT_CHARACTER_TABLES   0x03
#define DRI_LIST_GRAPHIC_OVERLAY_CHARACTERISTICS   0x04
#define DRI_LIST_FULL_SCREEN_GRAPHIC_CHARACTERISTICS   0x05
#define DRI_UNKNOWN_DISPLAY_CONTROL_CMD   0xF0
#define DRI_UNKNOWN_MMI_MODE   0xF1
#define DRI_UNKNOWN_CHARACTER_TABLE   0xF2
#define EF_BLIND   0x01
#define AI_CANCEL   0x00
#define AI_ANSWER   0x01
#define GET_FIELD(x)
#define MAX_TC_RETRIES   20

Functions

static void ResourceManagerOpen (access_t *p_access, int i_session_id)
static void ApplicationInformationOpen (access_t *p_access, int i_session_id)
static void ConditionalAccessOpen (access_t *p_access, int i_session_id)
static void DateTimeOpen (access_t *p_access, int i_session_id)
static void MMIOpen (access_t *p_access, int i_session_id)
static char * dvbsi_to_utf8 (char *psz_instring, size_t i_length)
static uint8_t * GetLength (uint8_t *p_data, int *pi_length)
static uint8_t * SetLength (uint8_t *p_data, int i_length)
static void Dump (bool b_outgoing, uint8_t *p_data, int i_size)
static int TPDUSend (access_t *p_access, uint8_t i_slot, uint8_t i_tag, const uint8_t *p_content, int i_length)
static int TPDURecv (access_t *p_access, uint8_t i_slot, uint8_t *pi_tag, uint8_t *p_data, int *pi_size)
static int ResourceIdToInt (uint8_t *p_data)
static int SPDUSend (access_t *p_access, int i_session_id, uint8_t *p_data, int i_size)
static void SessionOpen (access_t *p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size)
static void SessionCreateResponse (access_t *p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size)
static void SessionSendClose (access_t *p_access, int i_session_id)
static void SessionClose (access_t *p_access, int i_session_id)
static void SPDUHandle (access_t *p_access, uint8_t i_slot, uint8_t *p_spdu, int i_size)
static int APDUGetTag (const uint8_t *p_apdu, int i_size)
static uint8_t * APDUGetLength (uint8_t *p_apdu, int *pi_size)
static int APDUSend (access_t *p_access, int i_session_id, int i_tag, uint8_t *p_data, int i_size)
static void ResourceManagerHandle (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static void ApplicationInformationEnterMenu (access_t *p_access, int i_session_id)
static void ApplicationInformationHandle (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static bool CheckSystemID (system_ids_t *p_ids, uint16_t i_id)
static bool CAPMTNeedsDescrambling (dvbpsi_pmt_t *p_pmt)
static int GetCADSize (system_ids_t *p_ids, dvbpsi_descriptor_t *p_dr)
static uint8_t * CAPMTHeader (system_ids_t *p_ids, uint8_t i_list_mgt, uint16_t i_program_number, uint8_t i_version, int i_size, dvbpsi_descriptor_t *p_dr, uint8_t i_cmd)
static uint8_t * CAPMTES (system_ids_t *p_ids, uint8_t *p_capmt, int i_capmt_size, uint8_t i_type, uint16_t i_pid, int i_size, dvbpsi_descriptor_t *p_dr, uint8_t i_cmd)
static uint8_t * CAPMTBuild (access_t *p_access, int i_session_id, dvbpsi_pmt_t *p_pmt, uint8_t i_list_mgt, uint8_t i_cmd, int *pi_capmt_size)
static void CAPMTFirst (access_t *p_access, int i_session_id, dvbpsi_pmt_t *p_pmt)
static void CAPMTAdd (access_t *p_access, int i_session_id, dvbpsi_pmt_t *p_pmt)
static void CAPMTUpdate (access_t *p_access, int i_session_id, dvbpsi_pmt_t *p_pmt)
static void CAPMTDelete (access_t *p_access, int i_session_id, dvbpsi_pmt_t *p_pmt)
static void ConditionalAccessHandle (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static void ConditionalAccessClose (access_t *p_access, int i_session_id)
static void DateTimeSend (access_t *p_access, int i_session_id)
static void DateTimeHandle (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static void DateTimeManage (access_t *p_access, int i_session_id)
static void DateTimeClose (access_t *p_access, int i_session_id)
static void MMISendObject (access_t *p_access, int i_session_id, en50221_mmi_object_t *p_object)
static void MMISendClose (access_t *p_access, int i_session_id)
static void MMIDisplayReply (access_t *p_access, int i_session_id)
static char * MMIGetText (access_t *p_access, uint8_t **pp_apdu, int *pi_size)
static void MMIHandleEnq (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static void MMIHandleMenu (access_t *p_access, int i_session_id, int i_tag, uint8_t *p_apdu, int i_size)
static void MMIHandle (access_t *p_access, int i_session_id, uint8_t *p_apdu, int i_size)
static void MMIClose (access_t *p_access, int i_session_id)
static int InitSlot (access_t *p_access, int i_slot)
int en50221_Init (access_t *p_access)
int en50221_Poll (access_t *p_access)
int en50221_SetCAPMT (access_t *p_access, dvbpsi_pmt_t *p_pmt)
int en50221_OpenMMI (access_t *p_access, int i_slot)
int en50221_CloseMMI (access_t *p_access, int i_slot)
en50221_mmi_object_ten50221_GetMMIObject (access_t *p_access, int i_slot)
void en50221_SendMMIObject (access_t *p_access, int i_slot, en50221_mmi_object_t *p_object)
void en50221_End (access_t *p_access)
static void * FixUTF8 (char *p)

Define Documentation

#define AI_ANSWER   0x01

#define AI_CANCEL   0x00

#define AOT_ANSW   0x9F8808

#define AOT_APPLICATION_INFO   0x9F8021

#define AOT_APPLICATION_INFO_ENQ   0x9F8020

#define AOT_ASK_RELEASE   0x9F8403

#define AOT_CA_INFO   0x9F8031

#define AOT_CA_INFO_ENQ   0x9F8030

#define AOT_CA_PMT   0x9F8032

#define AOT_CA_PMT_REPLY   0x9F8033

#define AOT_CLEAR_REPLACE   0x9F8402

#define AOT_CLOSE_MMI   0x9F8800

#define AOT_COMMS_CMD   0x9F8C00

#define AOT_COMMS_RCV_LAST   0x9F8C05

#define AOT_COMMS_RCV_MORE   0x9F8C06

#define AOT_COMMS_REPLY   0x9F8C02

#define AOT_COMMS_SEND_LAST   0x9F8C03

#define AOT_COMMS_SEND_MORE   0x9F8C04

#define AOT_CONNECTION_DESCRIPTOR   0x9F8C01

#define AOT_DATE_TIME   0x9F8441

#define AOT_DATE_TIME_ENQ   0x9F8440

#define AOT_DISPLAY_CONTROL   0x9F8801

#define AOT_DISPLAY_MESSAGE   0x9F8810

#define AOT_DISPLAY_REPLY   0x9F8802

#define AOT_DOWNLOAD_REPLY   0x9F8817

#define AOT_ENQ   0x9F8807

#define AOT_ENTER_MENU   0x9F8022

#define AOT_FLUSH_DOWNLOAD   0x9F8816

#define AOT_KEYPAD_CONTROL   0x9F8805

#define AOT_KEYPRESS   0x9F8806

#define AOT_LIST_LAST   0x9F880C

#define AOT_LIST_MORE   0x9F880D

#define AOT_MENU_ANSW   0x9F880B

#define AOT_MENU_LAST   0x9F8809

#define AOT_MENU_MORE   0x9F880A

#define AOT_NONE   0x000000

#define AOT_PROFILE   0x9F8011

#define AOT_PROFILE_CHANGE   0x9F8012

#define AOT_PROFILE_ENQ   0x9F8010

#define AOT_REPLACE   0x9F8401

#define AOT_SCENE_CONTROL   0x9F8813

#define AOT_SCENE_DONE   0x9F8812

#define AOT_SCENE_END_MARK   0x9F8811

#define AOT_SUBTITLE_DOWNLOAD_LAST   0x9F8814

#define AOT_SUBTITLE_DOWNLOAD_MORE   0x9F8815

#define AOT_SUBTITLE_SEGMENT_LAST   0x9F880E

#define AOT_SUBTITLE_SEGMENT_MORE   0x9F880F

#define AOT_TEXT_LAST   0x9F8803

#define AOT_TEXT_MORE   0x9F8804

#define AOT_TUNE   0x9F8400

#define CAM_PROG_MAX   MAX_PROGRAMS

#define CAM_READ_TIMEOUT   3500

#define DATA_INDICATOR   0x80

#define DCC_DISPLAY_CHARACTER_TABLE_LIST   0x02

#define DCC_FULL_SCREEN_GRAPHICS_CHARACTERISTICS   0x05

#define DCC_INPUT_CHARACTER_TABLE_LIST   0x03

#define DCC_OVERLAY_GRAPHICS_CHARACTERISTICS   0x04

#define DCC_SET_MMI_MODE   0x01

#define DEC2BCD (  )     (((d / 10) << 4) + (d % 10))

#define DRI_LIST_DISPLAY_CHARACTER_TABLES   0x02

#define DRI_LIST_FULL_SCREEN_GRAPHIC_CHARACTERISTICS   0x05

#define DRI_LIST_GRAPHIC_OVERLAY_CHARACTERISTICS   0x04

#define DRI_LIST_INPUT_CHARACTER_TABLES   0x03

#define DRI_MMI_MODE_ACK   0x01

#define DRI_UNKNOWN_CHARACTER_TABLE   0xF2

#define DRI_UNKNOWN_DISPLAY_CONTROL_CMD   0xF0

#define DRI_UNKNOWN_MMI_MODE   0xF1

#define EF_BLIND   0x01

#define GET_FIELD (  ) 

Value:

if ( l > 0 )                                                        \
        {                                                                   \
            p_mmi->last_object.u.menu.psz_##x                               \
                            = MMIGetText( p_access, &d, &l );               \
            msg_Dbg( p_access, "MMI " STRINGIFY( x ) ": %s",                \
                     p_mmi->last_object.u.menu.psz_##x );                   \
        }

#define HLCI_WAIT_CAM_READY   0

#define MAX_CASYSTEM_IDS   16

#define MAX_TC_RETRIES   20

#define MAX_TPDU_DATA   (MAX_TPDU_SIZE - 4)

#define MAX_TPDU_SIZE   2048

#define MM_HIGH_LEVEL   0x01

#define MM_LOW_LEVEL_FULL_SCREEN_GRAPHICS   0x03

#define MM_LOW_LEVEL_OVERLAY_GRAPHICS   0x02

#define RI_APPLICATION_INFORMATION   0x00020041

#define RI_CONDITIONAL_ACCESS_SUPPORT   0x00030041

#define RI_DATE_TIME   0x00240041

#define RI_HOST_CONTROL   0x00200041

#define RI_MMI   0x00400041

#define RI_RESOURCE_MANAGER   0x00010041

#define SIZE_INDICATOR   0x80

#define SS_NOT_ALLOCATED   0xF0

#define SS_OK   0x00

#define ST_CLOSE_SESSION_REQUEST   0x95

#define ST_CLOSE_SESSION_RESPONSE   0x96

#define ST_CREATE_SESSION   0x93

#define ST_CREATE_SESSION_RESPONSE   0x94

#define ST_OPEN_SESSION_REQUEST   0x91

#define ST_OPEN_SESSION_RESPONSE   0x92

#define ST_SESSION_NUMBER   0x90

#define T_CREATE_TC   0x82

#define T_CTC_REPLY   0x83

#define T_DATA_LAST   0xA0

#define T_DATA_MORE   0xA1

#define T_DELETE_TC   0x84

#define T_DTC_REPLY   0x85

#define T_NEW_TC   0x87

#define T_RCV   0x81

#define T_REQUEST_TC   0x86

#define T_SB   0x80

#define T_TC_ERROR   0x88


Function Documentation

static uint8_t* APDUGetLength ( uint8_t *  p_apdu,
int *  pi_size 
) [static]

static int APDUGetTag ( const uint8_t *  p_apdu,
int  i_size 
) [static]

static int APDUSend ( access_t p_access,
int  i_session_id,
int  i_tag,
uint8_t *  p_data,
int  i_size 
) [static]

static void ApplicationInformationEnterMenu ( access_t p_access,
int  i_session_id 
) [static]

static void ApplicationInformationHandle ( access_t p_access,
int  i_session_id,
uint8_t *  p_apdu,
int  i_size 
) [static]

static void ApplicationInformationOpen ( access_t p_access,
int  i_session_id 
) [static]

static void CAPMTAdd ( access_t p_access,
int  i_session_id,
dvbpsi_pmt_t *  p_pmt 
) [static]

static uint8_t* CAPMTBuild ( access_t p_access,
int  i_session_id,
dvbpsi_pmt_t *  p_pmt,
uint8_t  i_list_mgt,
uint8_t  i_cmd,
int *  pi_capmt_size 
) [static]

static void CAPMTDelete ( access_t p_access,
int  i_session_id,
dvbpsi_pmt_t *  p_pmt 
) [static]

static uint8_t* CAPMTES ( system_ids_t p_ids,
uint8_t *  p_capmt,
int  i_capmt_size,
uint8_t  i_type,
uint16_t  i_pid,
int  i_size,
dvbpsi_descriptor_t *  p_dr,
uint8_t  i_cmd 
) [static]

static void CAPMTFirst ( access_t p_access,
int  i_session_id,
dvbpsi_pmt_t *  p_pmt 
) [static]

static uint8_t* CAPMTHeader ( system_ids_t p_ids,
uint8_t  i_list_mgt,
uint16_t  i_program_number,
uint8_t  i_version,
int  i_size,
dvbpsi_descriptor_t *  p_dr,
uint8_t  i_cmd 
) [static]

static bool CAPMTNeedsDescrambling ( dvbpsi_pmt_t *  p_pmt  )  [static]

static void CAPMTUpdate ( access_t p_access,
int  i_session_id,
dvbpsi_pmt_t *  p_pmt 
) [static]

static bool CheckSystemID ( system_ids_t p_ids,
uint16_t  i_id 
) [static]

static void ConditionalAccessClose ( access_t p_access,
int  i_session_id 
) [static]

static void ConditionalAccessHandle ( access_t p_access,
int  i_session_id,
uint8_t *  p_apdu,
int  i_size 
) [static]

static void ConditionalAccessOpen ( access_t p_access,
int  i_session_id 
) [static]

static void DateTimeClose ( access_t p_access,
int  i_session_id 
) [static]

static void DateTimeHandle ( access_t p_access,
int  i_session_id,
uint8_t *  p_apdu,
int  i_size 
) [static]

static void DateTimeManage ( access_t p_access,
int  i_session_id 
) [static]

static void DateTimeOpen ( access_t p_access,
int  i_session_id 
) [static]

static void DateTimeSend ( access_t p_access,
int  i_session_id 
) [static]

static void Dump ( bool  b_outgoing,
uint8_t *  p_data,
int  i_size 
) [static]

static char * dvbsi_to_utf8 ( char *  psz_instring,
size_t  i_length 
) [static]

int en50221_CloseMMI ( access_t p_access,
int  i_slot 
)

void en50221_End ( access_t p_access  ) 

en50221_mmi_object_t* en50221_GetMMIObject ( access_t p_access,
int  i_slot 
)

int en50221_Init ( access_t p_access  ) 

int en50221_OpenMMI ( access_t p_access,
int  i_slot 
)

int en50221_Poll ( access_t p_access  ) 

void en50221_SendMMIObject ( access_t p_access,
int  i_slot,
en50221_mmi_object_t p_object 
)

int en50221_SetCAPMT ( access_t p_access,
dvbpsi_pmt_t *  p_pmt 
)

static void* FixUTF8