This is an example of how to use TV Service's interface to get information of channel list.
#include <glib-object.h>
#include <stdlib.h>
#include <stdio.h>
#include <glib.h>
#include <string.h>
#include <glib/gprintf.h>
#include "tv_service_logger.h"
GValue g_value_filter[10];
void print_usage(char *argv)
{
g_printf ("%s -s {service_id}\n",argv);
g_printf ("{i.e}%s -s 1 \n",argv);
g_printf ("%s -l {channel_mode} {antenna_type} -f {filter1} {filter2} ...\n",argv);
g_printf ("channel_mode:{0:all},{1:digital},{2:analog},{3:digital & analog},{4:favorite},{5:all digital & analog}\n");
g_printf ("antenna_type:{0:air},{1:cable},{2:all}\n");
g_printf ("filter: {atrribute_type} {value} {match_type} \n");
g_printf ("{i.e}%s -l 0 2 \n",argv);
g_printf ("{i.e}%s -l 0 2 -f 6 1 1 (list added channels)\n",argv);
g_printf ("{i.e}%s -l 0 2 -f 6 1 1 5 SBC 1 (channel name equal \'SBC\' and added)\n",argv);
g_printf ("{i.e}%s -l 0 2 -f 3 50 1 4 2 1 (major number equal 50 and minor number equal 2)\n",argv);
g_printf ("{i.e}%s -l 0 2 -f 5 KB 5 (channel name begin with \'KB\')\n",argv);
g_printf ("{i.e}%s -l 0 2 -f 3 1 5 (major number begin with \'1\')\n",argv);
}
{
g_printf (
"%5ld"" | ", tvs_data->
major);
g_printf (
"%5ld"" | ", tvs_data->
minor);
g_printf (
"%5ld"" | ", tvs_data->
vpid);
g_printf (
"%5ld"" | ", tvs_data->
apid);
g_printf (
"%d"" | ", tvs_data->
locked);
g_printf (
"%d"" | ", tvs_data->
favorite);
g_printf ("\n");
}
gint tv_serivce_get_service(gint service_id)
{
gint rc = 0;
g_printf("service id is %d\n",service_id);
g_printf("tv_service_get_channel error %d\n",rc);
return rc;
}
else{
g_printf("Serv ID|Fre|Ser Type|Cha Type|Sou ID|Pro Num|Str ID|Maj|Min|Vid Pid|Aud Pid|Loc|Rem|fav|Pro Name|Mod Type|Ant Mode|Vid Type|Aud Type\n");
print_service(&tvs_data);
}
g_printf("#tv_service_get_service test end#\n");
return rc;
}
gint tv_serivce_get_service_list(gint channel_mode, gint antenna_type, GList* filter)
{
gint rc = 0;
GList *tvs_list = NULL;
gint index = 0;
if (filter) {
g_printf("get filter, call tv_service_get_channel_list_ex \n");
} else {
}
g_printf("tv_service_get_channel_list is error %d\n",rc);
return rc;
} else{
if (g_list_length(tvs_list) == 0) {
g_printf("can not get right data \n");
} else {
g_printf("Serv ID|Fre|Ser Type|Cha Type|Sou ID|Pro Num|Str ID|Maj|Min|Vid Pid|Aud Pid|Loc|Rem|fav|Pro Name|Mod Type|Ant Mode|Vid Type|Aud Type\n");
for(index = 0; index < g_list_length(tvs_list); index++)
{
if(p_tvs_data == NULL)
{
TVS_LOGE("p_tvs_data is NULL\n");
return -1;
} else{
print_service(p_tvs_data);
}
}
}
}
g_list_free(tvs_list);
tvs_list = NULL;
g_printf("#tv_service_get_service_list test end#\n");
return rc;
}
GList* get_channel_filter(int argc, char **argv)
{
GList *filter = NULL;
int arg_num = 5;
int g_value_index = 0;
int attr = 0;
int match_type = 0;
g_printf("argc = %d \n", argc);
while ((arg_num + 2) < argc) {
GValue *g_value = &g_value_filter[g_value_index];
attr = atoi(argv[arg_num]);
match_type = atoi(argv[arg_num+2]);
g_printf("read filter, arg_num[%d]\n", arg_num);
g_printf("filter attribute wrong [%d] \n", attr);
return NULL;
}
g_printf("filter match type wrong [%d] \n", match_type);
return NULL;
}
g_printf(
"get filter, attribute[%d], match_type[%d]\n", filter_node->
attribute, filter_node->
match_type);
g_value_init (g_value, G_TYPE_STRING);
g_value_set_string(g_value, argv[arg_num+1]);
g_printf ("get filter string[%s]\n", g_value_get_string (g_value));
} else {
g_value_init (g_value, G_TYPE_INT);
g_value_set_int(g_value, atoi(argv[arg_num+1]));
g_printf ("get filter int[%d]\n", g_value_get_int (g_value));
}
filter_node->
value = g_value;
filter = g_list_append (filter,(gpointer)filter_node);
arg_num = arg_num + 3;
g_value_index ++;
}
return filter;
}
int main(int argc, char **argv)
{
gint rc = 0;
gint service_id = -1;
gint channel_mode = -2;
gint antenna_type = -2;
{
g_printf("tv_service_channel_info_create error %d\n",rc);
return rc;
}
if (argc == 3 && !g_strcmp0(argv[1], "-s")) {
service_id = atoi(argv[2]);
g_printf("service_id is %d\n",service_id);
rc = tv_serivce_get_service(service_id);
g_printf("tv_serivce_get_service is error %d\n",rc);
return rc;
} else {
g_printf("tv_serivce_get_service is ok\n");
}
} else if(argc > 3 && !g_strcmp0(argv[1], "-l")){
GList *filter = NULL;
channel_mode = atoi(argv[2]);
antenna_type = atoi(argv[3]);
g_printf("get channel_mode:%d,antenna_type:%d\n",channel_mode,antenna_type);
if (argc > 4) {
if (!g_strcmp0(argv[4], "-f")) {
filter = get_channel_filter(argc, argv);
if (!filter) {
g_printf("fail to get filter \n");
return -1;
}
} else {
print_usage(argv[0]);
return 0;
}
}
rc = tv_serivce_get_service_list(channel_mode, antenna_type, filter);
g_printf("tv_serivce_get_service_list is error %d\n",rc);
return rc;
} else {
g_printf("tv_serivce_get_service_list is ok\n");
}
g_list_free_full (filter, g_free);
} else {
print_usage(argv[0]);
return 0;
}
return 0;
}