void gui_play_game() { unsigned int current_input = get_input(); int state; if(!current_input) { do_bad_input(); return; } if(!not_guessed(current_input)) { do_pro_duplicate(current_input); return; } regist_guessed(current_input); state = compare(random_num, current_input); current_times++; gtk_image_set_from_pixbuf(GTK_IMAGE(image), picture_buf[current_times-1]); if(100 == state) do_win(current_input); else if(current_times < 8) do_missed(state, current_input); else do_time_out(); }
static void dvb_process_filter(service_t *p_svc) { dvb_svc_data_t *p_svc_data = (dvb_svc_data_t *)p_svc->get_data_buffer(p_svc); dvb_priv_t *p_priv = p_svc_data->p_this->p_data; class_handle_t q_handle = p_priv->q_handle; dvb_section_t *p_sec = NULL; u8 *p_data = NULL; u16 i = 0; u32 data_len = 0; RET_CODE ret = 0; u16 sec_id = 0; u16 sec_num = 0; u32 cur_ticks = mtos_ticks_get(); u32 sr = 0; sec_num = get_simple_queue_len(q_handle, p_svc_data->using_queue); for(i = 0; i < sec_num; i ++) { pop_simple_queue(q_handle, p_svc_data->using_queue, &sec_id); p_sec = p_priv->p_sec + sec_id; //MT_ASSERT(p_sec->pti_handle != NULL); if(p_sec->dmx_handle == 0xffff) { MT_ASSERT(0); } MT_ASSERT(sec_id == p_sec->id); //ret = pti_dev_get_data(p_priv->p_pti_dev, p_sec->pti_handle, &data_block); ret = dmx_si_chan_get_data(p_priv->p_dmx_dev, p_sec->dmx_handle, &p_data, &data_len); /*our chip just support 12 bytes filer. if need to filter the additional bytes more than 12 bytes we use external soft filter*/ if((SUCCESS == ret)&&(TRUE == p_sec->b_filter_external)) { ret = external_soft_filter(p_sec, p_data, data_len); } if(SUCCESS == ret) //a filter ready { if (data_len > (4 * KBYTES)) { OS_PRINTF("warning-->>data len invaild %d, req pid[0x%x], dmx[0x%x]\n", data_len, p_sec->pid, p_sec->dmx_handle); data_len = 4 * KBYTES; //MT_ASSERT(0); } if (p_priv->table_map[p_sec->table_map_index].request_mode == DATA_MULTI) { p_sec->p_buffer = p_priv->p_data_buffer + p_sec->buf_id * DATA_BUFFER_SIZE; mtos_critical_enter(&sr); memcpy(p_sec->p_buffer, p_data, data_len); mtos_critical_exit(sr); } else { p_sec->p_buffer = p_data; } if(p_sec->direct_data) { os_msg_t msg = {0}; msg.content = DVB_ONE_SEC_FOUND; OS_PRINTF("DVB_ONE_SEC_FOUND %x\n", p_sec->table_id); msg.para1 = (u32)p_sec; msg.para2 = data_len; process_departed_sec(p_svc, p_sec); p_svc->notify(p_svc, &msg); } else if(!p_sec->crc_enable || (p_sec->crc_enable && check_sec_crc(p_priv, p_sec))) { //do parse p_priv->table_map[p_sec->table_map_index].parse(p_svc, p_sec); process_departed_sec(p_svc, p_sec); } else //check crc fail { do_time_out(p_svc, p_sec); } } else if((cur_ticks - p_sec->start_ticks)*10 > p_sec->timeout) //time out { do_time_out(p_svc, p_sec); p_sec->start_ticks = cur_ticks; } else { //push it back to using push_simple_queue(q_handle, p_svc_data->using_queue, sec_id); } } }
static void dvb_process_filter(service_t *p_svc) { dvb_svc_data_t *p_svc_data = (dvb_svc_data_t *)p_svc->get_data_buffer(p_svc); dvb_priv_t *p_priv = p_svc_data->p_this->p_data; class_handle_t q_handle = p_priv->q_handle; dvb_section_t *p_sec = NULL; u16 i = 0; pti_data_block_t data_block = {0}; RET_CODE ret = 0; u16 sec_id = 0; u16 sec_num = 0; u32 cur_ticks = mtos_ticks_get(); sec_num = get_simple_queue_len(q_handle, p_svc_data->using_queue); for(i = 0; i < sec_num; i ++) { pop_simple_queue(q_handle, p_svc_data->using_queue, &sec_id); p_sec = p_priv->p_sec + sec_id; //MT_ASSERT(p_sec->pti_handle != NULL); if(p_sec->pti_handle == NULL) { MT_ASSERT(0); } MT_ASSERT(sec_id == p_sec->id); ret = pti_dev_get_data(p_priv->p_pti_dev, p_sec->pti_handle, &data_block); /*our chip just support 12 bytes filer. if need to filter the additional bytes more than 12 bytes we use external soft filter*/ if((SUCCESS == ret)&&(TRUE == p_sec->b_filter_external)) { ret = external_soft_filter(p_sec, &data_block); } if(SUCCESS == ret) //a filter ready { p_sec->p_buffer = data_block.p_data; if(p_sec->direct_data) { os_msg_t msg = {0}; msg.content = DVB_ONE_SEC_FOUND; msg.para1 = (u32)p_sec; msg.para2 = data_block.len; process_departed_sec(p_svc, p_sec); p_svc->notify(p_svc, &msg); continue; } else if(!p_sec->crc_enable || (p_sec->crc_enable && check_sec_crc(p_priv, p_sec))) { //do parse p_priv->table_map[p_sec->table_map_index].parse(p_svc, p_sec); process_departed_sec(p_svc, p_sec); continue; } else //check crc fail { //do_time_out(p_svc, p_sec); //if software crc fail, retry it. } } if((cur_ticks - p_sec->start_ticks)*10 > p_sec->timeout) //time out { do_time_out(p_svc, p_sec); p_sec->start_ticks = cur_ticks; } else { //push it back to using push_simple_queue(q_handle, p_svc_data->using_queue, sec_id); } } }