/* Scan callbacks */ void on_scan_activate (GtkWidget * widget, gpointer data) { Netinfo *scan = data; GtkEntry *entry_host; gchar *text; g_return_if_fail (scan != NULL); if (scan->running) { scan_stop (scan); } else { if (netinfo_validate_host (scan)) { entry_host = GTK_ENTRY ( gtk_bin_get_child (GTK_BIN (scan->host))); text = g_strdup (gtk_entry_get_text (entry_host)); gn_combo_history_add (scan->history, text); g_free (text); scan_do (scan); } } }
static SPIBoolean switch_callback (const AccessibleKeystroke *key, void *user_data) { static SPIBoolean is_down = FALSE; if (key->type == SPI_KEY_RELEASED) { g_print ("switch up\n"); is_down = FALSE; scan_stop (key->timestamp); } else if (!is_down) { g_print ("switch down\n"); is_down = TRUE; scan_start (key->timestamp); } /* catch the first, ignore the rest (will repeat) until keyrelease */ return FALSE; }
static void scan_state_machine(void *p_handle) { scan_priv_t *p_scan_priv = (scan_priv_t *)p_handle; scan_policy_t *p_scan_policy = p_scan_priv->p_policy; scan_data_t *p_scan_data = p_scan_priv->p_priv_data; find_tp_ret_t ret = FIND_SUC; class_handle_t nc_handle = class_get_handle_by_id(NC_CLASS_ID); event_t evt = {0}; // State machine switch(p_scan_data->state) { case SCAN_IDLE: break; case SCAN_GET_TP: // Get current tp information //log_perf(LOG_AP_SCAN, PERF_GET_TP_BEGIN,0,0); //log_perf(LOG_AP_SCAN, PERF_GET_ONETP_BEGIN,0,0); ret = p_scan_policy->get_tp_info(p_scan_policy->p_priv_data, &p_scan_data->p_rt_data->find_tp); if(FIND_SUC == ret) //found new tp { log_perf(LOG_AP_SCAN, PERF_GET_TP_END, p_scan_data->p_rt_data->find_tp.channel_info.frequency,0); p_scan_data->state = SCAN_LOCK_TP; } else if(FIND_DONE == ret) { log_perf(LOG_AP_SCAN, PERF_END,0,0); p_scan_data->state = SCAN_FINISHED; } else if(FIND_BUSY == ret) { //waiting.... } else { //what's happend? UFO? MT_ASSERT(0); } break; case SCAN_LOCK_TP: //Set current tp information log_perf(LOG_AP_SCAN,PERF_DO_LOCK, 0, 0); nc_set_tp(nc_handle, p_scan_data->p_nc_svc, &p_scan_data->p_rt_data->find_tp); p_scan_data->p_rt_data->job_dbg_info.spend_ticks = mtos_ticks_get(); //reset parameter init_para(p_scan_data); memcpy(&p_scan_data->p_rt_data->result.tp_info, &p_scan_data->p_rt_data->find_tp, sizeof(nc_channel_info_t)); //Wait new the lock status of recently set tp p_scan_data->state = SCAN_WAIT_TP_LOCK; break; case SCAN_WAIT_TP_LOCK: break; case SCAN_FINISHED: OS_PRINTF("scan state: SCAN_FINISHED\n"); log_perf(LOG_AP_SCAN, 100, 0, 0); scan_stop(p_scan_priv); evt.id = SCAN_EVT_FINISHED; evt.data1 = 0; ap_frm_send_evt_to_ui(APP_SCAN, &evt); p_scan_data->state = SCAN_IDLE; nvod_mosaic_buf_reset(class_get_handle_by_id(NVOD_MOSAIC_CLASS_ID)); break; case SCAN_SCANING: if(p_scan_data->p_rt_data->pending_job == 0) { RET_CODE ret = SUCCESS; /* MT_ASSERT(p_scan_data->p_rt_data->job_dbg_info.pat_num == 0); MT_ASSERT(p_scan_data->p_rt_data->job_dbg_info.sdt_num == 0); MT_ASSERT(p_scan_data->p_rt_data->job_dbg_info.pmt_num == 0); MT_ASSERT(p_scan_data->p_rt_data->job_dbg_info.video_packet_num == 0); MT_ASSERT(p_scan_data->p_rt_data->job_dbg_info.nit_num == 0); */ log_perf(LOG_AP_SCAN,PERF_SAVE_DB_START,PROG_DB,0); p_scan_data->p_rt_data->result.pg_num = p_scan_data->p_rt_data->cur_pg_offset; ret = p_scan_policy->on_tp_done(p_scan_policy->p_priv_data, &p_scan_data->p_rt_data->result); log_perf(LOG_AP_SCAN,PERF_SAVE_DB_DONE,PROG_DB,0); if(ret == SUCCESS) { log_perf(LOG_AP_SCAN, PERF_GET_ONETP_END,0,0); p_scan_data->state = SCAN_GET_TP; log_perf(LOG_AP_SCAN, PERF_GET_TP_BEGIN,0,0); log_perf(LOG_AP_SCAN, PERF_GET_ONETP_BEGIN,0,0); } else { //Database is full or some error, break scan p_scan_data->state = SCAN_IDLE; } } #if 0 //for specified bouquet id #else else if(p_scan_data->p_rt_data->bat_multi_mode) { if(mtos_ticks_get() - p_scan_data->p_rt_data->start_bat_tickets > 100*2) { scan_free_bat(p_scan_priv); } } #endif /* //for debug else { if(mtos_ticks_get() - p_scan_data->p_rt_data->job_dbg_info.spend_ticks > 100*2) { job_dbg_info_t *p_dbg = &p_scan_data->p_rt_data->job_dbg_info; SCAN_DBG("pending job %d, nit %d, pat %d, pmt %d, sdt %d, v %d\n", p_scan_data->p_rt_data->pending_job, p_dbg->nit_num, p_dbg->pat_num, p_dbg->pmt_num, p_dbg->sdt_num, p_dbg->video_packet_num); } } */ break; default: break; } }