コード例 #1
0
ファイル: gui_play.c プロジェクト: yujifei/Guess
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();
}
コード例 #2
0
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);
    }
  }
}
コード例 #3
0
ファイル: dvb_svc.c プロジェクト: github188/1521
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);
    }
  }
}