www.pudn.com > tvctrl.rar > channeldb.h
#ifndef _CHANNELDB_H_
#define _CHANNELDB_H_
//1、 台名表:
typedef struct tagTVINFO
{
int tvid;/* 频道名称统一标识号,>0是由台名下载时服务端指定,<0时由用户自定义,0未定义*/
int type_id;//台分类类型;
char name[24];/*电视台或频道名称*/
}TVINFO,*PTVINFO;
//2、 台类型表:
typedef struct tagTVTYPE
{
int type_id; // 台名分类ID
int sortindex; // 排序索引
int flags; // 标识位使用
char type_name[32] ; // 台名字分类名
}TVTYPE,*PTVTYPE ;
//3、 频道号对照表(数组下标为显示给用户的频道号,由用户定义或搜台时默认):
//short db_channelIDTable[MAX_CHANNEL_LEN];//元素的值对应频道表中索引;
//4、 频道表:
typedef struct tagLocalChannelRecord
{
short channelid; //显示给用户的频道号,由用户定义或搜台时默认;
short nameid; // 在台名表中的索引号;
short physInfo; // 物理频道信息索引,由type_id确定具体指向的表,
int tvtype; //:2;/*0,模拟电视,1、数字电视,2功能*/
int isTiming; //:1; //定时不定时;
int needpwd; //:1; //TRUE为加密,FALSE为免费;加密不加密;不加密即免费
int haveEPG; //:1; //是否包含EPG等
int contenttype; //:11; //业务类型;
int rangetype; /*覆盖范围(中央与省、市、县(区)、乡(街道),0xXXXXXXXX,每个字节代表一类,四个字节刚好代表四级);*/
int udefine; //用户定义类型(喜爱程度,热点频道等、删除不删除)
}LocalChannelRecord,*PlocalChannelRecord;
//5、 模拟电视物理信息表:ATVChannelInfo结构定义;
//6、 数字电视物理信息表,参见DTVChannelInfo结构定义;
//7、 功能电视物理信息表:对应配置文件中的功能列表;
/*
九、 EPG数据库:
*/
//1、/* 节目播放信息表结构,对应每个电视台 */
typedef struct tagEPGRecord
{
unsigned short programid; //在节目表中的索引;
unsigned short con_time ; //持续时间(秒);
unsigned short tvid; //频道名称统一标识号,与电视台表中的tvid相匹配
unsigned short chapter; //第几集;
time_t playtime; //播放时间
char *infoindex; //节目描述,字符统一存放,从文件或网络装载时是偏移量,应加上基址;
}EPGRECORD, *PEPGRECORD;
/* 节目表结构 */
typedef struct tagProgramRecord
{
int programid; //节目ID,唯一标识每个节目,各电视台共用;
char *name; //节目名称,变长,字符统一存放,从文件或网络装载时是偏移量,应加上基址;
short maintype; //大类(连续剧...对应在节目类型表中的索引)
short subtype; //小类(总集数...或对应节目类型表中的索引)
//char *infoindex; //节目描述,字符统一存放,从文件或网络装载时是偏移量,应加上基址;
}PROGRAMRECORD, *PPROGRAMRECORD;
/* 节目类型表结构 */
typedef struct tagTypeRecord
{
int type_id; //大类,小类
char type_name[32]; //类型名称
}TYPERECORD, *PTYPERECORD;
/* 完整Epg数据记录 */
/*
使用以下结构获取数据时,结构项"descbuf"指向调用者分配的缓冲区,
"descbuf_size"为指向的缓冲区大小,调用"GetEpgDetailRec()"后,数据被装载到"descbuf"
指向的缓冲区,若实际大小超过"descbuf_size",数据会被自动截短。
注意: 若用户不想获取"描述信息",请将"descbuf"设为"NULL"
*/
typedef struct tagEpgDetailRec
{
char name[64] ; //节目名称
time_t playtime; //播放时间
unsigned short programid; //在节目表中的索引;
unsigned short con_time ; //持续时间(秒);
unsigned short tvid; //频道名称统一标识号,与电视台表中的tvid相匹配
unsigned short chapter; //第几集;
short maintype; //大类(连续剧...对应在节目类型表中的索引)
short subtype; //小类(总集数...或对应节目类型表中的索引)
char maintypename[32] ; //大类名称(非连续剧)
char subtypename[32] ; //小类名称(非连续剧)
int istimer;
char *descbuf ; //指向存放描述信息缓冲区
int descbuf_size ; //存放描述信息缓冲区的大小
}EpgDetailRec_t, *pEpgDetailRec_t ;
#ifdef __cplusplus
extern "C" {
#endif
/*
七、 数据库管理模块:
*/
//1、
int InitChannelDB(void);//初始化频道数据库;
//2、
int CloseChannelDB(void);//关闭频道数据库;
//3、
int UpdateChannelDB(void);//更新频道数据库;
int UpdateChannelDBEx(int issave);//更新频道数据库扩展
//4、
int EmptyChannelDB(int tvtype) ; //清空频道数据库
//4.1
int NetRefreshChannelDB(int tvtype, int sync) ; //从过程服务器刷新数据库
//4.2
int NetUpdateChannelDB(int tvtype, int sync) ; //使用本地数据更新过程服务器
/*filter:输入需要过滤的条件;
mask:过滤的选项:*/
#define FILTER_MASK_UDEFINE 0x00000001
#define FILTER_MASK_TIME 0x00000002
#define FILTER_MASK_RANGE 0x00000004
#define FILTER_MASK_PWD 0x00000008
#define FILTER_MASK_EPG 0x00000010
#define FILTER_MASK_CONTENT 0x00000020
#define FILTER_MASK_FREQ 0x00000040
#define FILTER_MASK_NAME 0x00000080
#define FILTER_MASK_STREAM 0x00000100
#define FILTER_MASK_FAVORITE 0x00000200
#define FILTER_MASK_ALL_ATV 0x00000400 /* 模拟电视所有数据 */
#define FILTER_MASK_ALL_DTV 0x00000800 /* 数字电视所有数据 */
#define FILTER_MASK_ALL_FTV 0x00001000 /* 功能电视所有数据 */
#define FILTER_MASK_REVERSE 0x10000000
/*result:返回的搜索结果,数组中元素为频道号;.
Return:过滤后的result总数*/
int FilterChannelDB(LocalChannelRecord * filter,int mask,int **result);
//5、
LocalChannelRecord *GetChannelLogicInfo(int channelid);//取得指定频道的信息;
//6、
TVChannelInfo * GetChannelPhysInfo(int channelid);//取得指定频道的物理信息;
//7、
char * GetChannelName(int channelid);//取得指定频道的名称;
//8、
void SetChannelName(int channelid,char * newname);//设置指定频道的名称;
//9、
void SetChannelPhysInfo(int channelid, TVChannelInfo * info);//设置指定频道的物理信息;
//10、
void SetChannelLogicInfo(int channelid, LocalChannelRecord * info);//设置指定频道的逻辑信息;
//11、
int AddChannel(char * name, TVChannelInfo* phys, LocalChannelRecord* logic);
/*增加频道,name:新频道的名称,可以为NULL;
phys:频道物理信息;
logic:频道逻辑信息可以为NULL,返回:0:成功,其它:出错;*/
#define ADDCHANNEL_FLGAS_AUTOMATCH 0x0001 // 自动匹配
#define ADDCHANNEL_FLGAS_USEOLDCHANNELID 0x0002 // 当自动匹配时,若频道数据库中有相同频道号数据,
#define ADDCHANNEL_FLGAS_TEST 0x0100 // 尝试数据写入(假写)
// 则选用老的频道号
// 找到匹配项时返回老的频道号
int AddChannelEx(char * name, TVChannelInfo* phys, LocalChannelRecord* logic, int flags);
//12、
int DelChannel(int channelid);//删除指定频道;
//设置频道的TvId
int SetChannelTvId(int channelid, int tvid) ;
//获取频道的TvId
int GetChannelTvId(int channelid, int *ptvid) ;
//获取TvId对应的频道Id(存在多个频道对就一个TvId的情况)
/*
tvid(INPUT) 要查找的tvid
pchannelid(OUTPUT) 存放channelid的数组
maxitems(INPUT) 存放channelid的数组的最大长度
pnums(OUTPUT) 实际取到的项
*/
int GetTvChannelId(int tvid, int *pchannelid, int maxitems, int *pnums) ;
/* 频道互换 */
/*
channelid0 要交换的第1个频道的频道号
channelid1 要交换的第2个频道的频道号
*/
int ChannelSwap(int channelid0, int channelid1) ;
/* 设置/取得当前频道 */
int GetCurrentChannelId() ;
int SetCurrentChannelId(int channelid) ;
/* 频道类型的数据管理,新加入 */
/*
名称 ID 使用的标识位
全部 1 0X00000001
喜爱 2 0X00000002
体育 3 0X00000004
影视 4 0X00000008
新闻 5 0X00000010
儿童 6 0X00000020
音乐 7 0X00000040
教育 8 0X00000080
文艺 9 0X00000100
我的分类 10 0X00000200
*/
#define CHANNELTYPE_ALL 0X00000001 // 全部
#define CHANNELTYPE_FAVORITE 0X00000002 // 喜爱
#define CHANNELTYPE_SPORT 0X00000004 // 体育
#define CHANNELTYPE_FILM 0X00000008 // 影视
#define CHANNELTYPE_NEWS 0X00000010 // 新闻
#define CHANNELTYPE_CHILDREN 0X00000020 // 儿童
#define CHANNELTYPE_MUSIC 0X00000040 // 音乐
#define CHANNELTYPE_EDUCATION 0X00000080 // 教育
#define CHANNELTYPE_LITERATURE 0X00000100 // 文艺
#define CHANNELTYPE_MYTYPE 0X00000200 // 我的分类
#define CHANNELTYPE_DELETE 0X00000400 //add by hejian 2005.11.03频道被删除(此处是指本频道在使用频道加减键换台时将被略过,但是当你输入台号进行换台时,还是能进入本频道,这就是这里所指的"删除"的定义)
/* 初始化频道类型数据库 */
int InitChannelTypeDB() ;
/* 关闭频道类型数据库 */
int CloseChannelTypeDB() ;
/* 更新频道类型数据库 */
int UpdateChannelTypeDB() ;
/* 清空频道类型数据库 */
int EmptyChannelTypeDB() ;
/* 从过程服务器刷新数据库 */
int NetRefreshChannelTypeDB(int tvtype, int sync) ;
/* 使用本地数据更新过程服务器 */
int NetUpdateChannelTypeDB(int tvtype, int sync) ;
/* 增加频道类型,返回分配给其的台名分类ID(>0) */
int AddChannelType(TVTYPE *tvtype) ;
/* 删除频道分配类型,成功返回0 */
int DelChannelType(int type_id) ;
/* 修改频道分配类型,成功返回0 */
int ModifyChannelType(TVTYPE *tvtype) ;
/* 取得频道类型的总数 */
int GetChannelTypeNums() ;
/* 取得频道类型表中的第“n”条记录(已排序),索引从0开始 */
int GetChannelTypeRec(int sortindex, TVTYPE *tvtype) ;
/* 更改排序,成功则返回0 */
int ModifyChannelTypeSort(int srcIndex, int destIndex) ;
/* 频道名称数据管理,新加入 */
/* 初始化频道名称数据库 */
int InitChannelNameDB() ;
/* 关闭频道名称数据库 */
int CloseChannelNameDB() ;
/* 更新频道名称数据库 */
int UpdateChannelNameDB() ;
/* 清空频道名称数据库 */
int EmptyChannelNameDB() ;
/* 从过程服务器刷新数据库 */
int NetRefreshChannelNameDB(int tvtype, int sync) ;
/* 使用本地数据更新过程服务器 */
int NetUpdateChannelNameDB(int tvtype, int sync) ;
/* 增加频道名记录,返回分配给其的台名ID(>0) */
int AddChannelName(TVINFO *tvinfo) ;
/* 删除频道名记录,成功返回0 */
int DelChannelName(int tvid) ;
/* 修改频道名记录,成功返回0 */
int ModifyChannelName(TVINFO *tvinfo) ;
/* 取得频道名的总数 */
int GetChannelNameNums() ;
/* 取得频道名表中的第“n”条记录,索引从0开始 */
int GetChannelNameRec(int index, TVINFO *tvinfo) ;
/* 按照TvId取得完整的TVINFO信息 */
int GetChannelByTvId(int tvid, TVINFO *tvinfo) ;
//13、
int InitEPGDB(void);//初始化EPG数据库;
//14、
int CloseEPGDB(void);//关闭EPG数据库;
//14.1
int UpdateEPGDB(void);//更新EPG数据库(注意CloseEPGDB()并不更新EPG数据库)
//14.2
int EmptyEPGDB(void);//清空EPG数据库
//14.3
int NetRefreshEPGDB(int tvtype, int sync);//刷新从远程数据库服务器
//14.4
int NetUpdateEPGDB(int tvtype, int sync);//刷新从远程数据库服务器
//14.5
int IsEPGDBRefreshNecessarily() ;//判断是否有必要刷新EPG数据库,
//有必要返回值>0;无必要返回0;数据库未初始化返回值<0
//15、
/*过滤EPG信息:
starttime:起始时间,0忽略;
endtime:终止时间0忽略;
tvid:电视台ID,0为未定义;
mainkind:大类,0忽略;
subkind:小类,0忽略;
Timer:1定时、-1未定时,0忽略;
title: 对节目名进行查找,NULL或""将被忽略
desc: 对节目描述进行查找,NULL或""将被忽略
Result:返回结果对应节目播放信息表中的数组下标(playid);
Return:Result中的结果数*/
int FilterEPGDB(time_t starttime,time_t endtime,int tvid,int mainkind,int subkind,int Timer,
char *title, char *desc,
int **result);
/*
扩展过滤EPG信息:
flags: 用于EPG中一些属性的控制
*/
#define FEPGDB_FLAGS_HOT 0x0001
int FilterEPGDBEx(time_t starttime,time_t endtime,int tvid,int mainkind,int subkind,int Timer,
char *title, char *desc, int flags,
int **result);
//16、
int AddEPGTypeRecord(char * type_name); //增加大类或小类;
//17、
void DelEPGTypeRecord(int type_id); //删除大类或小类;
//18、
int ModifyEPGTypeRecord(TYPERECORD *progtype);//修改大类或小类名称;
//19、
/*增加节目
char* name; 节目名称
short maintype; 大类(连续剧...对应在节目类型表中的索引)
short subtype; 小类(总集数...或对应节目类型表中的索引)
char * info; 节目描述字符串,
返回:节目在节目表中的索引;*/
int AddEPGProgram(char * name,short maintype,short subtype) ;
//20、
void DelEPGProgram(int programid);//删除节目表中节目,programid:节目表中的索引;
//21、
int ModifyEPGProgram(int programid,char * name,short maintype,short subtype);/*修改EPG节目信息表,programid:节目表中的索引*/
//22、
int AddEPGPlay(int programid,int tvid,time_t starttime,int conttime,char * info); /*增加EPG播放节目信息,programid:节目表中的索引,返回在播放表中的索引*/
//23、
void DelEPGPlay(int playid); /*删除EPG播放节目信息,playid:播放的索引*/
//24、
/* Timer:1定时、-1未定时,0忽略;*/
int ModifyEPGPlay(int playid,int tvid,time_t starttime,int conttime,char * info, int Timer); /*修改EPG播放节目信息,playid:播放的索引*/
/* 扩展 */
#define FEPGDB_FLAGS_HOT_SET 0x0001
#define FEPGDB_FLAGS_HOT_RESET 0x0100
int ModifyEPGPlayEx(int playid,int tvid,time_t starttime,int conttime,char * info, int Timer, int flags); /*修改EPG播放节目信息,playid:播放的索引*/
//25、
char * GetEPGProgramDesc(int playid); /*获取EPG节目的详细信息,playid:播放表中的索引*/
//26、
int GetEpgDetailRec(int playid, EpgDetailRec_t *detail) ; /* 依据playid 取得完整的记录信息,返回值0表示正确 */
//节目类型管理
/* 初始化节目类型数据库 */
int InitEPGTypeRecordDB() ;
/* 关闭节目类型数据库 */
int CloseEPGTypeRecordDB() ;
/* 更新节目类型数据库 */
int UpdateEPGTypeRecordDB() ;
/* 清空节目类型数据库 */
int EmptyEPGTypeRecordDB(void) ;
/* 网络更新节目类型数据库 */
int NetRefreshEPGTypeRecordDB(int tvtype, int sync) ;
/* 本地数据更新到远程数据库 */
int NetUpdateEPGTypeRecordDB(int tvtype, int sync) ;
/* 节目类型数据库的记录总数 */
int GetEPGTypeRecordNums() ;
/* 按照索引(索引号从0开始)在节目类型数据库中取得完整的节目类型记录 */
int GetEPGTypeRecordRec(int index, TYPERECORD *epgtype) ;
/* 按节目类型id取得完整的节目类型记录 */
int GetEPGTypeRecord(int type_id, TYPERECORD *epgtype) ;
#ifdef __cplusplus
}
#endif
#endif /* end #ifndef _CHANNELDB_H_ */