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_ */