8 #include <netinet/in.h>
11 #include <sys/ioctl.h>
13 #include <sys/socket.h>
16 #include <sys/types.h>
44 #define VTXDIR "/var/vtx"
46 #define DEC(N) dec << setw(N) << setfill('0')
47 #define HEX(N) hex << setw(N) << setfill('0')
49 #define MAXSECSIZE 4096
52 enum {LNB=0,DIS,ROTOR,TRANS,CHAN,BOU,SAT,PICS,SWI,NTW};
53 static const int nums[]={LNB,DIS,ROTOR,TRANS,CHAN,BOU,SAT,PICS,SWI,NTW};
54 static const int maxs[]={ 32, 32, 32, 512,16384,512,100, 50, 10, 100};
56 #define MAX_TRANS_CHAN 1024
58 enum{DVB_ORIG=0, DVB_NOKIA, DVB_XML, DVB_SATCO};
60 typedef struct frontend_stat_s{
69 extern uint8_t hamtab[256];
70 extern uint8_t invtab[256];
73 typedef struct mag_struct_ {
79 uint8_t pagebuf[25*40];
101 struct dvb_diseqc_master_cmd dcmd;
102 fe_sec_tone_mode_t tone;
103 fe_sec_voltage_t voltage;
105 struct dmx_pes_filter_params pesFilterParamsV;
106 struct dmx_pes_filter_params pesFilterParamsA;
107 struct dmx_pes_filter_params pesFilterParamsP;
108 struct dmx_pes_filter_params pesFilterParamsTT;
109 struct dvb_frontend_parameters front_param;
113 uint32_t transponder_freq;
114 char transponder_pol;
115 uint32_t transponder_srate;
120 uint32_t ber, uncorrected_blocks;
121 uint16_t snr, signal;
125 struct DiSEqC *diseqcs;
126 struct Rotor *rotors;
127 struct Transponder *tps;
128 struct Channel *chans;
129 struct Bouquet *bouqs;
131 struct Picture *pics;
133 struct Network *ntws;
140 magazin_t magazin[MAX_MAG];
184 DVB(char *a, char *b) {
202 void use_osd(int fd = -1){
206 sprintf(dvn,OSD_DEV,adapter,fd);
207 fdvb = open(dvn, O_RDWR);
210 cerr << dvn << " for OSD" << endl;
212 } else perror("osd");
213 osd.Open(80, 500, 640, 540, 2, 0, 2);
214 osd.SetColor(0, 0, 0, 0, 255);
215 osd.SetColor(1, 240, 240, 240, 255);
219 void set_vtxdir(char *newname){
220 if (!newname) return;
221 if (vtxdir) free(vtxdir);
222 vtxdir = (char *) malloc(sizeof(char)*(strlen(newname)+1));
224 strncpy(vtxdir, newname, strlen(newname));
233 if (no_open) return -1;
242 void enable_DVR_other(){
252 void init(char *a="/dev/video0", char *b="/dev/vbi0",int adapt=0,
256 inline void init(char *a, char *b){
261 int check_frontend();
263 void set_apid(ushort apid);
264 void set_vpid(ushort vpid);
265 void set_pcrpid(ushort vpid);
266 void set_ttpid(ushort ttpid);
267 int set_apid_fd(ushort apid, int fd);
268 int set_vpid_fd(ushort vpid, int fd);
269 int set_ttpid_fd(ushort ttpid, int fd);
270 int set_pcrpid_fd(ushort pcrpid, int fd);
271 int set_otherpid_fd(ushort otherpid, int fd);
274 int set_lnb(int dis);
275 void set_diseqc_nb(int nr);
277 void get_front(void);
279 void scan_pf_eit(int chnr,
280 int (*callback)(uint8_t *data, int l, int pnr,
281 int c_n, uint8_t *t));
283 void scan_pf_eit(Channel *chan,
284 int (*callback)(uint8_t *data, int l, int pnr,
285 int c_n, uint8_t *t));
286 void scan_pf_eit(int chnr);
289 int search_in_TP(Transponder &tp, int show=1, int verbose=0);
290 int search_in_TP(uint16_t tpid, uint16_t satid, int show=1,
292 int scan_TP(uint16_t tpid, uint16_t satid, int timeout=-1, int verbose=0);
294 int GetSection(uint8_t *buf,
295 uint16_t PID, uint8_t TID, uint16_t TIDExt,
296 uint16_t FilterTIDExt,
297 uint8_t secnum, uint8_t &msecnum);
298 int GetSection(uint8_t *buf,
299 uint16_t PID, uint8_t *filter, uint8_t *mask,
300 uint8_t secnum, uint8_t &msecnum);
301 int GetSection(uint8_t *buf, ushort PID, uint8_t sec,
302 uint8_t secnum, uint8_t &msecnum);
303 int SetFilter(uint16_t pid, uint8_t *filter,
305 uint32_t timeout, uint32_t flags);
306 uint16_t SetFilter(uint16_t pid, uint16_t section, uint16_t mode);
307 int CloseFilter(int h);
310 void bar2(int x, int y, int w, int h, int val, int col1, int col2);
312 int SetTP(unsigned int, unsigned int);
314 int scan_all_tps(void);
315 int scan_lnb(struct Lnb &);
316 int scan_cable(Sat &sat);
317 int scan_sat(struct Sat &);
318 int scan_tp(struct Transponder &);
320 int AddLNB(int id, int t, uint l1, uint l2, uint sl,
321 int dnr, int dis, int sw);
322 int AddSat(Sat &sat);
323 int AddSat(int satid, unsigned int lnbid, char *name, uint fmin, uint fmax);
324 int AddTP(Transponder &tp);
325 int AddChannel(Channel &chan);
326 int parse_descriptor(Channel *chan, uint8_t *data, int length);
327 int parse_pmt(Channel *chan, uint8_t *data);
328 int parse_pat(Channel *chan, uint8_t *data);
330 int check_pids(Channel *chan);
331 void check_all_pids();
332 void scan_sdt(Channel *chan);
333 int scan_sdts(int *chs, int n);
335 int channel_num(void) {
339 int channel_change(int n) {
342 int SetChannel(uint16_t, uint16_t, uint16_t, uint16_t);
343 int SetChannel(Channel *chan, char* apref=NULL, uint16_t *apidp=NULL,
344 uint16_t *vpidp=NULL) ;
345 int SetChannel(int chnr, char *apref=NULL, uint16_t *apidp=NULL,
346 uint16_t *vpidp=NULL);
347 int GetChannel(int chnr, struct channel *);
348 int NumChannel(void) {
351 int tune_it(struct dvb_frontend_parameters *qpsk);
352 void find_satid(Channel &chan);
353 int check_input_format(istream &ins);
354 void read_original(istream &ins);
355 int get_all_progs(uint16_t *progbuf, uint16_t *pnrbuf, int length);
356 uint16_t find_pnr(uint16_t vpid, uint16_t apid);
357 int get_pids(uint16_t prog_pid, uint16_t *vpid, uint16_t *apids,
358 uint16_t *ttpid, uint8_t *apids_name=NULL);
359 void AddECM(Channel *chan, uint8_t *data, int length);
360 int check_ecm(Channel *chan);
361 void add_vtx_line(magazin_t *mag, int line, uint8_t *data, int pnr);
363 friend ostream &operator<<(ostream &stream, DVB &x);
364 friend istream &operator>>(istream &stream, DVB &x);
368 #define NOKIA_MAX_SAT 4
374 int diseqc[NOKIA_MAX_SAT];
375 char sat_names[NOKIA_MAX_SAT][MAXNAM+1];
376 int satid[NOKIA_MAX_SAT];
383 friend istream &operator>>(istream &stream, nokiaconv &x);
386 #define XML_MAX_SAT 4
392 int diseqc[XML_MAX_SAT];
393 char sat_names[XML_MAX_SAT][MAXNAM+1];
394 int satid[XML_MAX_SAT];
400 int read_stream(istream &ins, int nchan);
401 int read_desc(istream &ins, int nchan);
402 int read_serv(istream &ins, int ctp, int csat);
403 int read_trans(istream &ins, int satid);
404 int read_sat(istream &ins, int satid = -1);
405 int skip_tag(istream &ins, char *tag);
406 int read_iso639(istream &ins, int nchan, int apids);
408 friend istream &operator>>(istream &stream, xmlconv &x);
413 #define SATCO_MAX_SAT 10
423 friend istream &operator>>(istream &stream, satcoconv &x);
426 void hdump(uint8_t *buf, int n);
427 int get_dvbrc(char *path, DVB &dv, int dev, int len);
428 int set_dvbrc(char *path, DVB &dv, int dev, int len);
429 void dvb2txt(char *out, char *in, int len);
430 int set_sfront(int fdf, uint32_t freq, uint32_t pol, uint32_t sr , int snum, fe_code_rate_t fec);
431 void set_pes_filt(int fd,uint16_t pes_pid);
432 void set_diseqc(int fdf, int snum, fe_sec_voltage_t v, fe_sec_tone_mode_t t);
433 int tune(int fdf, uint32_t freq, uint32_t sr, fe_code_rate_t fec);
434 int set_sfront(int fdf, uint32_t freq, uint32_t pol, uint32_t sr , int snum,
438 struct in_addr getaddress (const char *name);
439 int tcp_client_connect(const char *hostname, int sckt);
440 int udp_client_connect(const char *filename);
441 void client_send_msg(int fd, uint8_t *msg, int size);
442 int chck_frontend (int fefd, frontend_stat *festat);
444 uint8_t deham(uint8_t x, uint8_t y);