#define DEFAULT_SERVICE 1
+struct _channel_history {
+ int service_id[2];
+ unsigned int idx;
+};
+
/**
* The Storage structure to used by tv related functions and events.
*/
/**< Stores service id if tune to locked channel was succeeded. */
int viewing_locked_channel;
+ /**< Stores previous service id. */
+ struct _channel_history history;
/**< The function pointer to pass tv signal event */
void (*signal_cb)(void *data, int is_signal);
(TvServiceEpgCallback) _tv_epg_event_cb, request);
if (r != TVS_ERROR_OK) {
_ERR("failed to get epg get current program : %d", service_id);
- free(request);
return -1;
}
if (channel_info)
channel_list = eina_list_append(channel_list,
channel_info);
- free(tvs_data);
}
}
+ tv_service_free_channel_list(tvs_list);
+
return channel_list;
}
if (channel_info)
channel_list = eina_list_append(channel_list,
channel_info);
- free(tvs_data);
}
}
+ tv_service_free_channel_list(tvs_list);
+
return channel_list;
}
if (channel_info)
channel_list = eina_list_append(channel_list,
channel_info);
- free(tvs_data);
}
free:
- if (tvs_list)
- g_list_free(tvs_list);
+ tv_service_free_channel_list(tvs_list);
g_list_foreach(filter, (GFunc) _tv_channel_free_filter, NULL);
g_list_free(filter);
free(data);
}
-void _tv_channel_add_history(int service_id)
+static void _tv_channel_add_history(int service_id)
{
char buf[128];
+ g_tv_info.history.service_id[g_tv_info.history.idx++ % 2]
+ = service_id;
+
snprintf(buf, sizeof(buf), "%d", service_id);
app_contents_recent_add(CONTENTS_CHANNEL, buf);
}
+static int _tv_channel_get_history(void)
+{
+ int service_id;
+
+ service_id = g_tv_info.history.service_id[g_tv_info.history.idx % 2];
+
+ return service_id;
+}
+
/**
* Tunes to specific channel with service id.
*
}
/**
+ * Tunes to previously viewed channel.
+ *
+ * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
+ */
+int tv_channel_tune_prev_channel(void)
+{
+ int service_id;
+ int r;
+
+ if (!g_tv_info.live_svc) {
+ _ERR("failed to get live service");
+ return -1;
+ }
+
+ service_id = _tv_channel_get_history();
+ if (service_id < 1) {
+ _ERR("no previous channel");
+ return -1;
+ }
+
+ r = tv_service_live_tune(g_tv_info.live_svc, service_id);
+ if (r != TVS_ERROR_OK) {
+ _ERR("failed to set service");
+ return -1;
+ }
+
+ _tv_channel_add_history(service_id);
+
+ g_tv_info.viewing_locked_channel = -1;
+
+ return 0;
+}
+
+/**
* Tunes to specific channel with major and minor.
*
* @param service_id The channel id
TvServiceChannel *tvs_data;
int r;
+ if (!g_tv_info.live_svc) {
+ _ERR("failed to get live service");
+ return -1;
+ }
+
if (major > 0 && major < MAJOR_MAX) {
filter_node = _tv_channel_get_filter(
TV_SERVICE_CHANNEL_DATA_MAJOR_NUMBER,
if (r == TVS_ERROR_OK)
g_tv_info.viewing_locked_channel = -1;
- g_list_foreach(tvs_list, (GFunc) g_free, NULL);
- g_list_free(tvs_list);
+ tv_service_free_channel_list(tvs_list);
free:
g_list_foreach(filter, (GFunc) _tv_channel_free_filter, NULL);
}
/**
- * Tunes to next channel.
- *
- * Note that deleted channels and service channels will skipped.
- *
- * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
- */
-int tv_channel_next(void)
-{
- TvServiceAntenna antenna_type;
- int service_id, r;
-
- if (!g_tv_info.live_svc) {
- _ERR("failed to get live service");
- return -1;
- }
-
- r = tv_service_live_get_antenna_type(g_tv_info.live_svc, &antenna_type);
- if (r < 0) {
- _ERR("failed to get antenna type");
- return -1;
- }
-
- r = tv_service_live_tune_up(g_tv_info.live_svc,
- TV_SERVICE_CHANNEL_MODE_DIGITAL_ANALOG, antenna_type);
- if (r < 0) {
- _ERR("failed to tune up");
- return -1;
- }
-
- g_tv_info.viewing_locked_channel = -1;
-
- r = tv_service_live_get_service_id(g_tv_info.live_svc, &service_id);
- if (r < 0) {
- _ERR("failed to get service id");
- return -1;
- }
-
- _tv_channel_add_history(service_id);
-
- return 0;
-}
-
-/**
- * Tunes to previous channel.
- *
- * Note that deleted channels and service channels will skipped.
- *
- * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
- */
-int tv_channel_prev(void)
-{
- TvServiceAntenna antenna_type;
- int service_id, r;
-
- if (!g_tv_info.live_svc) {
- _ERR("failed to get live service");
- return -1;
- }
-
- r = tv_service_live_get_antenna_type(g_tv_info.live_svc, &antenna_type);
- if (r < 0) {
- _ERR("failed to get antenna type");
- return -1;
- }
-
- r = tv_service_live_tune_down(g_tv_info.live_svc,
- TV_SERVICE_CHANNEL_MODE_DIGITAL_ANALOG, antenna_type);
- if (r < 0) {
- _ERR("failed to tune down");
- return -1;
- }
-
- g_tv_info.viewing_locked_channel = -1;
-
- r = tv_service_live_get_service_id(g_tv_info.live_svc, &service_id);
- if (r < 0) {
- _ERR("failed to get service id");
- return -1;
- }
-
- _tv_channel_add_history(service_id);
-
- return 0;
-}
-
-/**
* Sets the channel's favorite status.
*
* @param service_id The channel id
goto err;
}
+ /*
r = tv_service_epg_create(&g_tv_info.epg_svc);
if (r != TVS_ERROR_OK) {
_ERR("failed to create epg service");
goto err;
}
+ */
+
+ memset(&g_tv_info.history, 0, sizeof(g_tv_info.history));
return 0;
err:
if (r != TVS_ERROR_OK) {
_ERR("failed to create live service");
goto err;
- } else {
- return 1;
}
+
+ r = tv_service_live_register_callback(g_tv_info.live_svc,
+ _tv_service_event_cb, NULL);
+ if (r != TVS_ERROR_OK) {
+ _ERR("failed to register live callback");
+ goto err;
+ }
+
+ return 1;
}
r = tv_service_live_tune_resume(g_tv_info.live_svc);