📄 mosaic.c
字号:
/*
* File: mosaicapp.c
* Contains:
* the file of mosaic application.
*
* Author:
* stone
*
* CVS control words:
*
* $Id: mosaic.c,v 1.8 2006/03/08 06:41:05 jli Exp $
*
* Last checked in:
* $Date: 2006/03/08 06:41:05 $
*
* History:
* $Log: mosaic.c,v $
* Revision 1.8 2006/03/08 06:41:05 jli
* add ca error display
*
* Revision 1.7 2006/02/10 09:30:34 wjbai
* Add the ca macro MEDIAGUARD_CA.
*
* Revision 1.6 2006/01/20 06:15:17 syan
* no message
*
* Revision 1.5 2006/01/18 07:56:01 syan
* no message
*
* Revision 1.4 2005/12/20 09:03:00 hwxiao
* no message
*
* Revision 1.3 2005/08/16 07:55:11 wjbai
* update for ca
*
* Revision 1.2 2005/07/04 07:03:09 hwxiao
* no message
*
*
*/
#include <stdio.h>
#include <string.h>
#include "stddefs.h"
#include "stcommon.h"
#include "modules.h"
#include "mosaic.h"
#include "appltype.h"
#include "app_vol.h"
#include "app_ca_error.h"
#include "vid.h"
extern mosaic_node_t *mosaic_tree_data_t;
extern mosaic_data_t *mosaic_node_data;
/*extern cell_data_t *current_active_cell_info;*/
extern semaphore_t *connect_ok;
extern uint8_t mosaic_pmt[1024];
extern component_t ms_audio_component;
extern service_t ms_service;
extern ms_eitpf_event_t ms_eitpf_event[2];
extern int16_t ms_pre_eitpf_version_number;
/*extern ms_dbg_info_t ms_dbg_info[500];
extern int16_t ms_app_index, ms_total_num;*/
uint8_t ms_info_pf_state = 0;
#ifdef MEDIAGUARD_CA
TMGAPIOperator ms_net_operator, ms_net_opi[MS_MAX_OPERATOR];
int32_t ms_actual_operator = 0;
#endif
db_mosaic_service_list_t ms_list;
time_date_t ms_cur_offer_time;
void mosaic_ss_callback(uint32_t event, void *context);
#if 0
ui_logical_palette_t *g_mosaic_palette = NULL;
#endif
int mosaic_app(int argc, char *argv[])
{
cell_data_t *current_active_cell_info,*new_active_cell_info;
cell_node_ident_t cell_node_identify;
page_node_ident_t page_node_identify;
cell_node_t *tag_cell_node;
page_node_t *tag_page_node;
clock_t wait_for_any_key;
uint8_t timer_expired_num = 5;
ui_rect_t rect, window_rect;
uint8_t h_alignment, v_alignment, f_color, b_color;
time_date_t ms_current_time;
char current_time_str[30];
int16_t i;
app_message_t *msg, message;
app_timer_t *timer;
db_service_t svc;
info_dis_area_data_t *tag_info_area;
error_t error;
int32_t max_operator = MS_MAX_OPERATOR;
/*dbg_mem_trace();
dbg_mem_check_set(0);*/
window_rect.x = VOL_MOSAIC_RECT_X;
window_rect.y = VOL_MOSAIC_RECT_Y;
window_rect.w = VOL_MOSAIC_RECT_W;
window_rect.h = VOL_MOSAIC_RECT_H;
ui_clear_full_area();
ss_stop_running_service();
ui_load_background_display(res_string(RES_STRING_MOSAIC_SEARCHING));
/*display front panel digital*/
error = db_make_app_service_by_service_type(global_db_client, &svc, DVB_MOSAIC_SERVICE_TYPE);
if(error != SUCCESS)
fp_drv_display_characters('C', '1', '2', '1');
else
{
fp_display_prog_num(svc.bgctv_logical_channel_number);
}
timer = NULL;
/***************/
/* Original VK_HOME_PAGE handling begin */
ss_service_notification(SS_NTF_ENTER_MOSAIC_STATE, NULL);
APP_TRACE("mosaic_test\n");
/*get and parse the mosaic data*/
error = mosaic_test();
if(error == ERROR_MOSAIC_NO_SIGNAL)
{
/*ui_load_background_display(res_string(RES_STRING_MOSAIC_NO_INFO));*/
STVID_DisableOutputWindow(/*VIDHndl*/VID_ViewPortHandle);
ui_clear_full_area();
ui_message_box(MESSAGEBOX_POS_X, MESSAGEBOX_POS_Y, UI_IDCANCEL,
UI_BLACK_COLOR, g_menu_small_panel_id,
RES_PICTURE_PROMPT_BG_ID,
res_string(RES_STRING_MOSAIC_NO_INFO),
TIMER_ONCE, ST_GetClocksPerSecond()*20);
ss_service_notification(SS_NTF_EXIT_MOSAIC_STATE, NULL);
/*dbg_mem_check_set(1);*/
app_exit();
}
#ifdef MEDIAGUARD_CA
/*get the CA offers*/
error = ca_get_operator_info(ms_net_opi, max_operator, &ms_actual_operator);
for(i=0;i<ms_actual_operator;i++)
{
ms_net_operator = ms_net_opi[i];
if(ms_net_opi[i].OPI == BGCTV_OPI)
break;
}
#endif
error = sys_get_current_time(&ms_cur_offer_time);
/**/app_ca_display_enable(false);
APP_TRACE("mosaic_test over\n");
if(connect_ok == NULL)
connect_ok = semaphore_create_fifo_timeout(0);
ss_register_callback(mosaic_ss_callback, SS_EV_GENERIC_CALLBACK);
current_active_cell_info = NULL;
app_register_message_filter(app_message_filter_callback);
/*add by xhw, change the palette*/
ui_clear_full_area();
#if 0
g_mosaic_palette = mosaic_palette_create();
#endif
ms_list.service = ext_mem_allocate(DB_MAX_MOSAIC_SERVICE_SUPPORTED*sizeof(db_mosaic_service_t));
ms_list.service_number = 0;
error = db_query_mosaic_service_list(&ms_list);
page_node_identify.page_id = mosaic_node_data -> default_page_id;
cell_node_identify.page_id = mosaic_node_data -> default_page_id/*0*/;
cell_node_identify.cell_id = mosaic_node_data -> default_cell_id/*0*/;
error = mosaic_find_page_node(mosaic_tree_data_t,
page_node_identify,
&tag_page_node);
error = mosaic_find_cell_node(mosaic_tree_data_t,
cell_node_identify,
&tag_cell_node);
/*enter the default page*/
error = ms_enter_new_page(tag_page_node, tag_cell_node);
current_active_cell_info = tag_cell_node -> cell_data;
/*focus the default cell*/
ms_draw_focus(current_active_cell_info->x, current_active_cell_info->y,
current_active_cell_info->w, current_active_cell_info->h);
error = ms_display_current_cell_info(current_active_cell_info);
error = ms_play_cell_audio(current_active_cell_info);
/* Original VK_HOME_PAGE handling end */
timer = app_timer_create( TIMER_REPEAT, ST_GetClocksPerSecond() * 5 );
if( !timer )
DB_TRACE("[dtv], timer create failed!\n");
if(timer)
app_timer_start(timer);
while(1)
{
wait_for_any_key = time_plus (time_now() , ST_GetClocksPerSecond() * 5);
msg = app_get_message(&wait_for_any_key);
if(msg == NULL)
{
if(current_active_cell_info != NULL)
{
error = ms_get_event_info(current_active_cell_info, 0);
if(ms_pre_eitpf_version_number != ms_eitpf_event[0].version_number)
{
ms_reset_version_number();
error = ms_event_info_display(current_active_cell_info, 0);
ms_info_pf_state = 0;
continue;
}
else
{
APP_TRACE(" mosaic EIT P/F info have not change \n");
continue;
}
continue;
}
continue;
}/**/
message = *msg;
app_release_message(msg);
switch(message.event)
{
case EV_SYS_APP_EXIT:
error = mosaic_app_exit(current_active_cell_info);
app_exit();
break;
case EV_SYS_APP_TIMER_EXPIRED:
page_node_identify.page_id = current_active_cell_info->page_id;
error = mosaic_find_page_node(mosaic_tree_data_t,
page_node_identify,
&tag_page_node);
for(i=0;i<(tag_page_node->page_data ->info_dis_area_num);i++)
{
if(tag_page_node -> page_data -> info_position[ i ].dis_type == 0x02)
break;
}
error = ms_find_info_area(tag_page_node -> page_data -> info_position[i].data_list,
&tag_info_area);
if(error != SUCCESS)
break;
/* updated display the current time on the screen */
rect.x = tag_info_area->text_frame.x;
rect.y = tag_info_area->text_frame.y;
rect.w = tag_info_area->text_frame.w;
rect.h = tag_info_area->text_frame.h;
if(rect.h < 24)
rect.h = 24;
h_alignment = ms_get_display_alignment(tag_info_area->text_frame.h_alignment);
v_alignment = ms_get_display_alignment(tag_info_area->text_frame.v_alignment);
f_color = mosaic_get_color_index(tag_info_area->text_frame.foreground_color);
b_color = mosaic_get_color_index(tag_info_area->text_frame.background_color);
if( timer_expired_num == 5 )
{
if( sys_get_current_time ( &ms_current_time ) != ERROR_SYS_ILLEGAL_TIME )
{
memset( current_time_str, 0, 30 );
sprintf(current_time_str, "%02d:%02d",
ms_current_time . tm_hour,
ms_current_time . tm_min );
ms_ui_clear_area(rect.x, rect.y, rect.w, rect.h);
ms_STWTK_DynamicTextInRect(hitune_ui_draw_get_context(),
rect.x,
rect.y,
rect.w,
rect.h,
current_time_str,
0, 0,
h_alignment, v_alignment,
f_color,
b_color);
timer_expired_num = 0;
}
}
timer_expired_num ++;
if(current_active_cell_info != NULL)
{
error = ms_get_event_info(current_active_cell_info, 0);
if(ms_pre_eitpf_version_number != ms_eitpf_event[0].version_number)
{
ms_reset_version_number();
error = ms_event_info_display(current_active_cell_info, 0);
ms_info_pf_state = 0;
}
else
{
APP_TRACE(" mosaic EIT P/F info have not change \n");
}
}/**/
break;
case EV_SYS_KEYBOARD:
APP_TRACE("[MOSAIC] key[%d]\n", message.wparam);
switch(message.wparam)
{
case VK_HOME_PAGE:
case VK_EXIT:
case VK_FP_MENU:
error = mosaic_app_exit(current_active_cell_info);
/*dbg_dump_partition_status(kernel_partition);*/
APP_TRACE("\n mosaic_test_exit \n");
app_exit();
break;
case VK_OK:
case VK_FP_OK:
error = ms_cell_nav_link(current_active_cell_info,
0,
0,
VK_OK,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
if(error == FALSE)
{
error = ms_enter_cell_possible_link(current_active_cell_info);
}
/*APP_TRACE("VK_OK have been exit\n");*/
break;
case VK_RETURN:
ms_cell_nav_link(current_active_cell_info,
0,
0,
VK_RETURN,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
/*APP_TRACE("VK_RETURN have been exit\n");*/
break;
case VK_PROGRAM_NEXT:
ms_cell_nav_link(current_active_cell_info,
0,
0,
VK_PROGRAM_NEXT,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
/*APP_TRACE("VK_PROGRAM_NEXT have been exit\n");*/
break;
case VK_PROGRAM_PREV:
ms_cell_nav_link(current_active_cell_info,
0,
0,
VK_PROGRAM_PREV,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
/*APP_TRACE("VK_PROGRAM_PREV have been exit\n");*/
break;
case VK_UP:
case VK_FP_UP:/*North*/
if((current_active_cell_info->nav_data.common_directions_bitmap & 0x80) == 0x80)
{
ms_cell_nav(current_active_cell_info,
current_active_cell_info->nav_data.n_page_id,
current_active_cell_info->nav_data.n_cell_id,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
}
break;
case VK_DOWN:
case VK_FP_DOWN:/*South*/
if((current_active_cell_info->nav_data.common_directions_bitmap & 0x08) == 0x08)
{
ms_cell_nav(current_active_cell_info,
current_active_cell_info->nav_data.s_page_id,
current_active_cell_info->nav_data.s_cell_id,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
}
break;
case VK_LEFT:
case VK_FP_LEFT:/*West*/
if((current_active_cell_info->nav_data.common_directions_bitmap & 0x02) == 0x02)
{
ms_cell_nav(current_active_cell_info,
current_active_cell_info->nav_data.w_page_id,
current_active_cell_info->nav_data.w_cell_id,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
}
break;
case VK_RIGHT:
case VK_FP_RIGHT:/*East*/
if((current_active_cell_info->nav_data.common_directions_bitmap & 0x20) == 0x20)
{
ms_cell_nav(current_active_cell_info,
current_active_cell_info->nav_data.e_page_id,
current_active_cell_info->nav_data.e_cell_id,
&new_active_cell_info);
current_active_cell_info = new_active_cell_info;
}
break;
case VK_INFO:
if(ms_info_pf_state == 0)
ms_info_pf_state = 1;
else
ms_info_pf_state = 0;
ms_event_info_display (current_active_cell_info, ms_info_pf_state);
break;
/*voice control*/
case VK_MUTE:
vol_window(VOL_MUTE, MOSAIC_VOL_TYPE, window_rect);
break;
case VK_VOLUME_PREV:
vol_window(VOL_DECREASE, MOSAIC_VOL_TYPE, window_rect);
break;
case VK_VOLUME_NEXT:
vol_window(VOL_INCREASE, MOSAIC_VOL_TYPE, window_rect);
break;
case VK_RED:
/*{
FILE *stream;
char list[30];
int16_t numwriten = 0;
APP_TRACE("\n ###### VK_RED is be pressed ***** \n");
if((stream = fopen("hpfile","w")) == NULL)
{
APP_TRACE("\n can not open this file ***** \n");
}
else
{
APP_TRACE("\n ###### ***** \n");
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
numwriten = fwrite(list, sizeof(char), 25, stream);
APP_TRACE("\n num[%d] has been write to the file\n", numwriten);
}
fclose(stream);
}*/
break;
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -