FireBirdLib - Topfield TMS PVR TAP Programming Library
HDD_EncodeRECHeader.c
Go to the documentation of this file.
1#include <string.h>
2#include "FBLib_rec.h"
3
4void setWord(void *buffer, word Data, bool BigEndian)
5{
7
8 byte *p;
9
10 p = (byte*)buffer;
11 if(BigEndian)
12 {
13 p[0] = Data >> 8;
14 p[1] = Data & 0xff;
15 }
16 else
17 {
18 p[0] = Data & 0xff;
19 p[1] = Data >> 8;
20 }
21
22 TRACEEXIT();
23}
24
25void setDword(void *buffer, dword Data, bool BigEndian)
26{
27 TRACEENTER();
28
29 byte *p;
30
31 p = (byte*)buffer;
32 if(BigEndian)
33 {
34 p[0] = Data >> 24;
35 p[1] = (Data >> 16) & 0xff;
36 p[2] = (Data >> 8) & 0xff;
37 p[3] = Data & 0xff;
38 }
39 else
40 {
41 p[3] = Data >> 24;
42 p[2] = (Data >> 16) & 0xff;
43 p[1] = (Data >> 8) & 0xff;
44 p[0] = Data & 0xff;
45 }
46
47 TRACEEXIT();
48}
49
50void EncodeExtInfo(byte *Buffer, dword p, tRECHeaderInfo *RECHeaderInfo, bool BigEndian)
51{
52 TRACEENTER();
53
54 //The extended info structure is identical on all Toppies
55 setWord(&Buffer[p + 0x0000], RECHeaderInfo->ExtEventServiceID , BigEndian);
56 setWord(&Buffer[p + 0x0002], RECHeaderInfo->ExtEventTextLength, BigEndian);
57 setDword(&Buffer[p + 0x0004], RECHeaderInfo->ExtEventEventID, BigEndian);
58 Buffer[p + 0x0408] = RECHeaderInfo->ExtEventNrItemizedPairs;
59 memcpy(&Buffer[p + 0x0409], RECHeaderInfo->ExtEventUnknown1, 3);
60
61 if(RECHeaderInfo->ExtEventNrItemizedPairs == 0)
62 {
63 memcpy(&Buffer[p + 0x0008], RECHeaderInfo->ExtEventText, RECHeaderInfo->ExtEventTextLength);
64 }
65 else
66 {
67 char *pStart, *pEnd, *pItems, *pInfo;
68
69 //Find the border between the itemized data and the description
70 pStart = RECHeaderInfo->ExtEventText;
71 pEnd = pStart + RECHeaderInfo->ExtEventTextLength;
72 pItems = pStart;
73 while((*pItems != 0) && (pItems < pEnd))
74 {
75 pItems++;
76 }
77 if(pItems != pEnd) pItems++;
78
79 pInfo = &Buffer[p + 0x0008];
80 memcpy(pInfo, pItems, pEnd - pItems + 1);
81 pInfo += (pEnd - pItems + 1);
82 memcpy(pInfo, pStart, pItems - pStart + 1);
83 }
84
85 TRACEEXIT();
86}
87
88void HDD_EncodeRECHeader_ST_S(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
89{
90 TRACEENTER();
91
92 dword p;
93 word w;
94 byte EventTextLength;
95
96 //Header
97 p = 0;
98 Buffer[p + 0x0000] = 0x54;
99 Buffer[p + 0x0001] = 0x46;
100 Buffer[p + 0x0002] = 0x72;
101 Buffer[p + 0x0003] = 0x63;
102
103 Buffer[p + 0x0004] = 0x50;
104 Buffer[p + 0x0005] = 0x00;
105
106 memcpy(&Buffer[p + 0x0006], RECHeaderInfo->HeaderUnknown2, 2);
107 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, TRUE);
108 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, TRUE);
109 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, TRUE);
110
111 //Service Info
112 p = 0x000e;
113 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
114 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
115
116 w = (RECHeaderInfo->SITPIdx << 6) |
117 (RECHeaderInfo->SITunerNum << 4) |
118 (RECHeaderInfo->SISkipFlag << 3) |
119 (RECHeaderInfo->SILockFlag << 2) |
120 (RECHeaderInfo->SICASFlag << 1) |
121 RECHeaderInfo->SIDelFlag;
122 setWord(&Buffer[p + 0x0002], w, TRUE);
123
124 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, TRUE);
125 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, TRUE);
126 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, TRUE);
127 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, TRUE);
128 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, TRUE);
129 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
130
131 //Transponder Info
132 p = 0x0034;
133 Buffer[p + 0x0000] = RECHeaderInfo->TPSatIndex;
134 Buffer[p + 0x0001] = (RECHeaderInfo->TPPolarization << 7) | (RECHeaderInfo->TPMode << 4);
135
136 memcpy(&Buffer[p + 0x0002], RECHeaderInfo->TPUnknown3, 2);
137 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, TRUE);
138 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPSymbolRate, TRUE);
139 setWord(&Buffer[p + 0x000a], RECHeaderInfo->TPTSID, TRUE);
140 memcpy(&Buffer[p + 0x000c], RECHeaderInfo->TPUnknown5, 2);
141 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPOriginalNetworkID, TRUE);
142
143 //Event Info
144 p = 0x0044;
145 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
146 Buffer[p + 0x0002] = (int)(RECHeaderInfo->EventDuration / 60);
147 Buffer[p + 0x0003] = RECHeaderInfo->EventDuration % 60;
148 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, TRUE);
149 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, TRUE);
150 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, TRUE);
151 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
152 EventTextLength = strlen(RECHeaderInfo->EventEventName);
153 Buffer[p + 0x0011] = EventTextLength;
154 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
155 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
156 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
157 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, TRUE);
158 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 14);
159
160 //Extended Event Info
161 p = 0x0168;
162 EncodeExtInfo(Buffer, p, RECHeaderInfo, TRUE);
163
164 //Crypt Info
165 p = 0x0574;
166 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
167 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
168
169 //Bookmarks
170 p = 0x0578;
171 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
172 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, TRUE);
173
174 TRACEEXIT();
175}
176
177void HDD_EncodeRECHeader_ST_T(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
178{
179 TRACEENTER();
180
181 dword p;
182 word Flags;
183 byte EventTextLength;
184
185 //Header
186 p = 0;
187 Buffer[p + 0x0000] = 0x54;
188 Buffer[p + 0x0001] = 0x46;
189 Buffer[p + 0x0002] = 0x72;
190 Buffer[p + 0x0003] = 0x63;
191
192 Buffer[p + 0x0004] = 0x50;
193 Buffer[p + 0x0005] = 0x00;
194
195 memcpy(&Buffer[p + 0x0006], RECHeaderInfo->HeaderUnknown2, 2);
196 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, TRUE);
197 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, TRUE);
198 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, TRUE);
199
200 //Service Info
201 p = 0x000e;
202 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
203 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
204
205 Flags = (RECHeaderInfo->SITPIdx << 6) |
206 (RECHeaderInfo->SITunerNum << 4) |
207 (RECHeaderInfo->SISkipFlag << 3) |
208 (RECHeaderInfo->SILockFlag << 2) |
209 (RECHeaderInfo->SICASFlag << 1) |
210 RECHeaderInfo->SIDelFlag;
211 setWord(&Buffer[p + 0x0002], Flags, TRUE);
212
213 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, TRUE);
214 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, TRUE);
215 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, TRUE);
216 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, TRUE);
217 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, TRUE);
218 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
219
220 //Transponder Info
221 p = 0x0034;
222 setWord(&Buffer[p + 0x0000], RECHeaderInfo->TPChannelNumber, TRUE);
223 Buffer[p + 0x0002] = RECHeaderInfo->TPBandwidth;
224 Buffer[p + 0x0003] = RECHeaderInfo->TPUnknown2;
225 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, TRUE);
226 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPTSID, TRUE);
227 Buffer[p + 0x000a] = RECHeaderInfo->TPLPHPStream;
228 Buffer[p + 0x000b] = RECHeaderInfo->TPUnknown4;
229 setWord(&Buffer[p + 0x000c], RECHeaderInfo->TPOriginalNetworkID, TRUE);
230 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPNetworkID, TRUE);
231
232 //Event Info
233 p = 0x0044;
234 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
235 Buffer[p + 0x0002] = (int)(RECHeaderInfo->EventDuration / 60);
236 Buffer[p + 0x0003] = RECHeaderInfo->EventDuration % 60;
237 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, TRUE);
238 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, TRUE);
239 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, TRUE);
240 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
241 EventTextLength = strlen(RECHeaderInfo->EventEventName);
242 Buffer[p + 0x0011] = EventTextLength;
243 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
244 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
245 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
246 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, TRUE);
247 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 14);
248
249 //Extended Event Info
250 p = 0x0168;
251 EncodeExtInfo(Buffer, p, RECHeaderInfo, TRUE);
252
253 //Crypt Info
254 p = 0x0574;
255 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
256 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
257
258 //Bookmarks
259 p = 0x0578;
260 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
261 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, TRUE);
262
263 TRACEEXIT();
264}
265
266void HDD_EncodeRECHeader_ST_C(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
267{
268 TRACEENTER();
269
270 dword p;
271 word Flags;
272 byte EventTextLength;
273
274 //Header
275 p = 0;
276 Buffer[p + 0x0000] = 0x54;
277 Buffer[p + 0x0001] = 0x46;
278 Buffer[p + 0x0002] = 0x72;
279 Buffer[p + 0x0003] = 0x63;
280
281 Buffer[p + 0x0004] = 0x50;
282 Buffer[p + 0x0005] = 0x00;
283
284 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
285 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, TRUE);
286 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, TRUE);
287 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, TRUE);
288
289 //Service Info
290 p = 0x000e;
291 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
292 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
293
294 Flags = (RECHeaderInfo->SITPIdx >> 6) |
295 (RECHeaderInfo->SITunerNum << 4) |
296 (RECHeaderInfo->SIDelFlag << 3) |
297 (RECHeaderInfo->SICASFlag << 2) |
298 (RECHeaderInfo->SILockFlag << 1) |
299 RECHeaderInfo->SISkipFlag;
300 setWord(&Buffer[p + 0x0002], Flags, TRUE);
301
302 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, TRUE);
303 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, TRUE);
304 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, TRUE);
305 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, TRUE);
306 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, TRUE);
307 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
308
309 //Transponder Info
310 p = 0x0034;
311 setDword(&Buffer[p + 0x0000], RECHeaderInfo->TPFrequency, TRUE);
312 setWord(&Buffer[p + 0x0004], RECHeaderInfo->TPSymbolRate, TRUE);
313 setWord(&Buffer[p + 0x0006], RECHeaderInfo->TPTSID, TRUE);
314 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPOriginalNetworkID, TRUE);
315 Buffer[p + 10] = RECHeaderInfo->TPModulation;
316 Buffer[p + 11] = RECHeaderInfo->TPUnknown6;
317
318 //Event Info
319 p = 0x0040;
320 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
321 Buffer[p + 0x0002] = (int)(RECHeaderInfo->EventDuration / 60);
322 Buffer[p + 0x0003] = RECHeaderInfo->EventDuration % 60;
323 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, TRUE);
324 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, TRUE);
325 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, TRUE);
326 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
327 EventTextLength = strlen(RECHeaderInfo->EventEventName);
328 Buffer[p + 0x0011] = EventTextLength;
329 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
330 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
331 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
332 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, TRUE);
333 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 14);
334
335 //Extended Event Info
336 p = 0x0164;
337 EncodeExtInfo(Buffer, p, RECHeaderInfo, TRUE);
338
339 //Crypt Info
340 p = 0x0570;
341 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
342 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
343
344 //Bookmarks
345 p = 0x0574;
346 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
347 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, TRUE);
348
349 TRACEEXIT();
350}
351
352void HDD_EncodeRECHeader_ST_T5700(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
353{
354 TRACEENTER();
355
356 dword p;
357 word Flags;
358 byte EventTextLength;
359
360 //Header
361 p = 0;
362 Buffer[p + 0x0000] = 0x54;
363 Buffer[p + 0x0001] = 0x46;
364 Buffer[p + 0x0002] = 0x72;
365 Buffer[p + 0x0003] = 0x63;
366
367 Buffer[p + 0x0004] = 0x50;
368 Buffer[p + 0x0005] = 0x00;
369
370 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
371 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, TRUE);
372 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, TRUE);
373 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, TRUE);
374
375 //Service Info
376 p = 0x000e;
377 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
378 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
379
380 Flags = (RECHeaderInfo->SITPIdx << 6) |
381 (RECHeaderInfo->SITunerNum << 4) |
382 (RECHeaderInfo->SIDelFlag << 3) |
383 (RECHeaderInfo->SICASFlag << 2) |
384 (RECHeaderInfo->SILockFlag << 1) |
385 RECHeaderInfo->SISkipFlag;
386 setWord(&Buffer[p + 0x0002], Flags, TRUE);
387
388 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, TRUE);
389 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, TRUE);
390 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, TRUE);
391 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, TRUE);
392 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, TRUE);
393 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
394
395 //Transponder Info
396 p = 0x0034;
397 setWord(&Buffer[p + 0x0000], RECHeaderInfo->TPChannelNumber, TRUE);
398 Buffer[p + 0x0002] = RECHeaderInfo->TPBandwidth;
399 Buffer[p + 0x0003] = RECHeaderInfo->TPUnknown2;
400 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, TRUE);
401 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPTSID, TRUE);
402 Buffer[p + 0x000a] = RECHeaderInfo->TPLPHPStream;
403 Buffer[p + 0x000b] = RECHeaderInfo->TPUnknown4;
404 setWord(&Buffer[p + 0x000c], RECHeaderInfo->TPOriginalNetworkID, TRUE);
405 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPNetworkID, TRUE);
406 memcpy(&Buffer[p + 0x0010], RECHeaderInfo->TPUnknown7, 8);
407
408 //Event Info
409 p = 0x004c;
410 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
411 Buffer[p + 0x0002] = (int)(RECHeaderInfo->EventDuration / 60);
412 Buffer[p + 0x0003] = RECHeaderInfo->EventDuration % 60;
413 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, TRUE);
414 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, TRUE);
415 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, TRUE);
416 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
417 EventTextLength = strlen(RECHeaderInfo->EventEventName);
418 Buffer[p + 0x0011] = EventTextLength;
419 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
420 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
421 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
422 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, TRUE);
423 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 14);
424
425 //Extended Event Info
426 p = 0x0170;
427 EncodeExtInfo(Buffer, p, RECHeaderInfo, TRUE);
428
429 //Crypt Info
430 p = 0x057c;
431 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
432 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
433
434 //Bookmarks
435 p = 0x0580;
436 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
437 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, TRUE);
438
439 TRACEEXIT();
440}
441
442void HDD_EncodeRECHeader_ST_T5800(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
443{
444 TRACEENTER();
445
446 dword p;
447 word Flags;
448 byte EventTextLength;
449
450 //Header
451 p = 0;
452 Buffer[p + 0x0000] = 0x54;
453 Buffer[p + 0x0001] = 0x46;
454 Buffer[p + 0x0002] = 0x72;
455 Buffer[p + 0x0003] = 0x63;
456
457 Buffer[p + 0x0004] = 0x50;
458 Buffer[p + 0x0005] = 0x10;
459
460 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
461 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, TRUE);
462 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, TRUE);
463 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, TRUE);
464
465 //Service Info
466 p = 0x000e;
467 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
468 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
469
470 Flags = (RECHeaderInfo->SITPIdx << 6) |
471 (RECHeaderInfo->SITunerNum << 4) |
472 (RECHeaderInfo->SIDelFlag << 3) |
473 (RECHeaderInfo->SICASFlag << 2) |
474 (RECHeaderInfo->SILockFlag << 1) |
475 RECHeaderInfo->SISkipFlag;
476 setWord(&Buffer[p + 0x0002], Flags, TRUE);
477
478 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, TRUE);
479 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, TRUE);
480 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, TRUE);
481 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, TRUE);
482 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, TRUE);
483 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 28);
484
485 //Transponder Info
486 p = 0x0038;
487 setWord(&Buffer[p + 0x0000], RECHeaderInfo->TPChannelNumber, TRUE);
488 Buffer[p + 0x0002] = RECHeaderInfo->TPBandwidth;
489 Buffer[p + 0x0003] = RECHeaderInfo->TPUnknown2;
490 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, TRUE);
491 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPTSID, TRUE);
492 Buffer[p + 0x000a] = RECHeaderInfo->TPLPHPStream;
493 Buffer[p + 0x000b] = RECHeaderInfo->TPUnknown4;
494 setWord(&Buffer[p + 0x000c], RECHeaderInfo->TPOriginalNetworkID, TRUE);
495 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPNetworkID, TRUE);
496
497
498 //Event Info
499 p = 0x0048;
500 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
501 Buffer[p + 0x0002] = (int)(RECHeaderInfo->EventDuration / 60);
502 Buffer[p + 0x0003] = RECHeaderInfo->EventDuration % 60;
503 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, TRUE);
504 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, TRUE);
505 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, TRUE);
506 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
507 EventTextLength = strlen(RECHeaderInfo->EventEventName);
508 Buffer[p + 0x0011] = EventTextLength;
509 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
510 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
511 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
512 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, TRUE);
513 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 10);
514
515 //Extended Event Info
516 p = 0x016c;
517 EncodeExtInfo(Buffer, p, RECHeaderInfo, TRUE);
518
519 //Crypt Info
520 p = 0x0578;
521 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
522 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
523
524 //Bookmarks
525 p = 0x057c;
526 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
527 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, TRUE);
528
529 TRACEEXIT();
530}
531
532void HDD_EncodeRECHeader_ST_TMSS(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
533{
534 TRACEENTER();
535
536 dword p;
537 word Flags;
538 byte EventTextLength;
539
540 //Header
541 p = 0;
542 Buffer[p + 0x0000] = 0x54;
543 Buffer[p + 0x0001] = 0x46;
544 Buffer[p + 0x0002] = 0x72;
545 Buffer[p + 0x0003] = 0x63;
546
547 Buffer[p + 0x0004] = 0x00;
548 Buffer[p + 0x0005] = 0x80;
549
550 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
551 setDword(&Buffer[p + 0x0008], RECHeaderInfo->HeaderStartTime, FALSE);
552 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderDuration, FALSE);
553 setWord(&Buffer[p + 0x000e], RECHeaderInfo->HeaderDurationSec, FALSE);
554 Buffer[p + 0x0010] = (RECHeaderInfo->HeaderFlags & 0xfc) | (RECHeaderInfo->CryptFlag & 0x03);
555 Buffer[p + 0x0011] = (RECHeaderInfo->HeaderFlags2 & 0x3f) | (RECHeaderInfo->HeaderCopyFlag ? 0x80 : 0x00) | (RECHeaderInfo->HeaderTSFlag ? 0x40 : 0x00);
556 memcpy(&Buffer[p + 0x0012], RECHeaderInfo->HeaderUnknown4, 10);
557
558 //Service Info
559 p = 0x001c;
560 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
561 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
562
563 Flags = (RECHeaderInfo->SISkipFlag << 15) |
564 (RECHeaderInfo->SILockFlag << 14) |
565 (RECHeaderInfo->SICASFlag << 13) |
566 (RECHeaderInfo->SIDelFlag << 12) |
567 (RECHeaderInfo->SITunerNum << 10) |
568 RECHeaderInfo->SITPIdx;
569 setWord(&Buffer[p +0x0002], Flags, FALSE);
570
571 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, FALSE);
572 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, FALSE);
573 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, FALSE);
574 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, FALSE);
575 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, FALSE);
576
577 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
578
579 Buffer[p + 0x0026] = RECHeaderInfo->SIVideoStreamType;
580 Buffer[p + 0x0027] = RECHeaderInfo->SIAudioStreamType;
581
582 //Event Info
583 p = 0x0044;
584 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
585 Buffer[p + 0x0003] = (int)(RECHeaderInfo->EventDuration / 60);
586 Buffer[p + 0x0002] = RECHeaderInfo->EventDuration % 60;
587 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, FALSE);
588 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, FALSE);
589 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, FALSE);
590 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
591 EventTextLength = strlen(RECHeaderInfo->EventEventName);
592 Buffer[p + 0x0011] = EventTextLength;
593 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
594 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
595 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 273 - EventTextLength);
596
597 //Extended Event Info
598 p = 0x0168;
599 EncodeExtInfo(Buffer, p, RECHeaderInfo, FALSE);
600
601 //Transponder info
602 p = 0x0574;
603 Buffer[p + 0x0000] = RECHeaderInfo->TPSatIndex;
604
605 Flags = (RECHeaderInfo->TPPilot << 11) |
606 (RECHeaderInfo->TPFEC << 7) |
607 (RECHeaderInfo->TPModulation << 5) |
608 (RECHeaderInfo->TPSystem << 4) |
609 (RECHeaderInfo->TPMode << 1) |
610 RECHeaderInfo->TPPolarization;
611 setWord(&Buffer[p + 0x0001], Flags, FALSE);
612
613 Buffer[p + 0x0003] = RECHeaderInfo->TPUnknown2;
614
615 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, FALSE);
616 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPSymbolRate, FALSE);
617 setWord(&Buffer[p + 0x000a], RECHeaderInfo->TPTSID, FALSE);
618 setWord(&Buffer[p + 0x000c], RECHeaderInfo->TPNetworkID, FALSE);
619 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPOriginalNetworkID, FALSE);
620
621 //Crypt Info: see header flags
622
623 //Bookmarks
624 p = 0x0584;
625 setDword(&Buffer[p + 0x0000], RECHeaderInfo->NrBookmarks, FALSE);
626 memcpy(&Buffer[p + 0x0004], RECHeaderInfo->Bookmark, 177 * sizeof(dword));
627 setDword(&Buffer[p + 0x02c8], RECHeaderInfo->Resume, FALSE);
628
629 TRACEEXIT();
630}
631
632void HDD_EncodeRECHeader_ST_TMST(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
633{
634 TRACEENTER();
635
636 dword p;
637 word Flags;
638 byte EventTextLength;
639
640 //Header
641 p = 0;
642 Buffer[p + 0x0000] = 0x54;
643 Buffer[p + 0x0001] = 0x46;
644 Buffer[p + 0x0002] = 0x72;
645 Buffer[p + 0x0003] = 0x63;
646
647 Buffer[p + 0x0004] = 0x00;
648 Buffer[p + 0x0005] = 0x80;
649
650 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
651 setDword(&Buffer[p + 0x0008], RECHeaderInfo->HeaderStartTime, FALSE);
652 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderDuration, FALSE);
653 setWord(&Buffer[p + 0x000e], RECHeaderInfo->HeaderDurationSec, FALSE);
654 Buffer[p + 0x0010] = (RECHeaderInfo->HeaderFlags & 0xfc) | (RECHeaderInfo->CryptFlag & 0x03);
655 Buffer[p + 0x0011] = (RECHeaderInfo->HeaderFlags2 & 0x3f) | (RECHeaderInfo->HeaderCopyFlag ? 0x80 : 0x00) | (RECHeaderInfo->HeaderTSFlag ? 0x40 : 0x00);
656 memcpy(&Buffer[p + 0x0012], RECHeaderInfo->HeaderUnknown4, 10);
657
658 //Service Info
659 p = 0x001c;
660 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
661 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
662
663 Flags = (RECHeaderInfo->SISkipFlag << 15) |
664 (RECHeaderInfo->SILockFlag << 14) |
665 (RECHeaderInfo->SICASFlag << 13) |
666 (RECHeaderInfo->SIDelFlag << 12) |
667 (RECHeaderInfo->SITunerNum << 10) |
668 RECHeaderInfo->SITPIdx;
669 setWord(&Buffer[p +0x0002], Flags, FALSE);
670
671 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, FALSE);
672 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, FALSE);
673 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, FALSE);
674 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, FALSE);
675 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, FALSE);
676
677 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
678
679 Buffer[p + 0x0026] = RECHeaderInfo->SIVideoStreamType;
680 Buffer[p + 0x0027] = RECHeaderInfo->SIAudioStreamType;
681
682 //Event Info
683 p = 0x0044;
684 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
685 Buffer[p + 0x0003] = (int)(RECHeaderInfo->EventDuration / 60);
686 Buffer[p + 0x0002] = RECHeaderInfo->EventDuration % 60;
687 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, FALSE);
688 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, FALSE);
689 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, FALSE);
690 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
691 EventTextLength = strlen(RECHeaderInfo->EventEventName);
692 Buffer[p + 0x0011] = EventTextLength;
693 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
694 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
695 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 273 - EventTextLength);
696
697 //Extended Event Info
698 p = 0x0168;
699 EncodeExtInfo(Buffer, p, RECHeaderInfo, FALSE);
700
701 //Transponder info
702 p = 0x0574;
703 Buffer[p + 0x0000] = RECHeaderInfo->TPSatIndex;
704 Buffer[p + 0x0001] = RECHeaderInfo->TPChannelNumber;
705 Buffer[p + 0x0002] = RECHeaderInfo->TPBandwidth;
706 Buffer[p + 0x0003] = RECHeaderInfo->TPUnknown2;
707 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, FALSE);
708 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPTSID, FALSE);
709 Buffer[p + 0x000a] = RECHeaderInfo->TPLPHPStream;
710 Buffer[p + 0x000b] = RECHeaderInfo->TPUnknown4;
711 setWord(&Buffer[p + 0x000c], RECHeaderInfo->TPOriginalNetworkID, FALSE);
712 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPNetworkID, FALSE);
713
714 //Crypt Info: see header flags
715
716 //Bookmarks
717 p = 0x0584;
718 setDword(&Buffer[p + 0x0000], RECHeaderInfo->NrBookmarks, FALSE);
719 memcpy(&Buffer[p + 0x0004], RECHeaderInfo->Bookmark, 177 * sizeof(dword));
720 setDword(&Buffer[p + 0x02c8], RECHeaderInfo->Resume, FALSE);
721
722 TRACEEXIT();
723}
724
725void HDD_EncodeRECHeader_ST_TMSC(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
726{
727 TRACEENTER();
728
729 dword p;
730 word Flags;
731 byte EventTextLength;
732
733 //Header
734 p = 0;
735 Buffer[p + 0x0000] = 0x54;
736 Buffer[p + 0x0001] = 0x46;
737 Buffer[p + 0x0002] = 0x72;
738 Buffer[p + 0x0003] = 0x63;
739
740 Buffer[p + 0x0004] = 0x00;
741 Buffer[p + 0x0005] = 0x80;
742
743 memcpy(&Buffer[p + 6], RECHeaderInfo->HeaderUnknown2, 2);
744 setDword(&Buffer[p + 0x0008], RECHeaderInfo->HeaderStartTime, FALSE);
745 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderDuration, FALSE);
746 setWord(&Buffer[p + 0x000e], RECHeaderInfo->HeaderDurationSec, FALSE);
747 Buffer[p + 0x0010] = (RECHeaderInfo->HeaderFlags & 0xfc) | (RECHeaderInfo->CryptFlag & 0x03);
748 Buffer[p + 0x0011] = (RECHeaderInfo->HeaderFlags2 & 0x3f) | (RECHeaderInfo->HeaderCopyFlag ? 0x80 : 0x00) | (RECHeaderInfo->HeaderTSFlag ? 0x40 : 0x00);
749 memcpy(&Buffer[p + 0x0012], RECHeaderInfo->HeaderUnknown4, 10);
750
751 //Service Info
752 p = 0x001c;
753 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
754 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
755
756 Flags = (RECHeaderInfo->SISkipFlag << 15) |
757 (RECHeaderInfo->SILockFlag << 14) |
758 (RECHeaderInfo->SICASFlag << 13) |
759 (RECHeaderInfo->SIDelFlag << 12) |
760 (RECHeaderInfo->SITunerNum << 10) |
761 RECHeaderInfo->SITPIdx;
762 setWord(&Buffer[p +0x0002], Flags, FALSE);
763
764 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, FALSE);
765 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, FALSE);
766 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, FALSE);
767 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, FALSE);
768 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, FALSE);
769
770 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 24);
771
772 Buffer[p + 0x0026] = RECHeaderInfo->SIVideoStreamType;
773 Buffer[p + 0x0027] = RECHeaderInfo->SIAudioStreamType;
774
775 //Event Info
776 p = 0x0044;
777 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
778 Buffer[p + 0x0003] = (int)(RECHeaderInfo->EventDuration / 60);
779 Buffer[p + 0x0002] = RECHeaderInfo->EventDuration % 60;
780 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, FALSE);
781 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, FALSE);
782 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, FALSE);
783 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
784 EventTextLength = strlen(RECHeaderInfo->EventEventName);
785 Buffer[p + 0x0011] = EventTextLength;
786 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
787 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
788 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 273 - EventTextLength);
789
790 //Extended Event Info
791 p = 0x0168;
792 EncodeExtInfo(Buffer, p, RECHeaderInfo, FALSE);
793
794 //Transponder info
795 p = 0x0574;
796 setDword(&Buffer[p + 0x0000], RECHeaderInfo->TPFrequency << 8, FALSE);
797 setWord(&Buffer[p + 0x0004], RECHeaderInfo->TPSymbolRate, FALSE);
798 setWord(&Buffer[p + 0x0006], RECHeaderInfo->TPTSID, FALSE);
799 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPOriginalNetworkID, FALSE);
800 Buffer[p + 0x000a] = RECHeaderInfo->TPModulation;
801 Buffer[p + 0x000b] = RECHeaderInfo->TPUnknown6;
802
803 //Crypt Info: see header flags
804
805 //Bookmarks
806 p = 0x0580;
807 setDword(&Buffer[p + 0x0000], RECHeaderInfo->NrBookmarks, FALSE);
808 memcpy(&Buffer[p + 0x0004], RECHeaderInfo->Bookmark, 177 * sizeof(dword));
809 setDword(&Buffer[p + 0x02c8], RECHeaderInfo->Resume, FALSE);
810
811 TRACEEXIT();
812}
813
814void HDD_EncodeRECHeader_ST_TF7k7HDPVR(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
815{
816 TRACEENTER();
817
818 dword p;
819 word w;
820 byte EventTextLength;
821
822 //Header
823 p = 0x4d0;
824 Buffer[p + 0x0000] = 0x54;
825 Buffer[p + 0x0001] = 0x46;
826 Buffer[p + 0x0002] = 0x72;
827 Buffer[p + 0x0003] = 0x63;
828
829 Buffer[p + 0x0004] = 0x50;
830 Buffer[p + 0x0005] = 0x00;
831
832 memcpy(&Buffer[p + 0x0006], RECHeaderInfo->HeaderUnknown2, 2);
833 setWord(&Buffer[p + 0x0008], RECHeaderInfo->HeaderDuration, FALSE);
834 setWord(&Buffer[p + 0x000a], RECHeaderInfo->HeaderSvcNumber, FALSE);
835 setWord(&Buffer[p + 0x000c], RECHeaderInfo->HeaderSvcType, FALSE);
836
837 //Service Info
838 p = 0x04de;
839 Buffer[p + 0x0000] = RECHeaderInfo->SISatIndex;
840 Buffer[p + 0x0001] = RECHeaderInfo->SIServiceType;
841
842 w = RECHeaderInfo->SITPIdx |
843 (RECHeaderInfo->SITunerNum << 10) |
844 (RECHeaderInfo->SISkipFlag << 12) |
845 (RECHeaderInfo->SILockFlag << 13) |
846 (RECHeaderInfo->SICASFlag << 14) |
847 (RECHeaderInfo->SIDelFlag << 15);
848 setWord(&Buffer[p + 0x0002], w, FALSE);
849
850 setWord(&Buffer[p + 0x0004], RECHeaderInfo->SIServiceID, FALSE);
851 setWord(&Buffer[p + 0x0006], RECHeaderInfo->SIPMTPID, FALSE);
852 setWord(&Buffer[p + 0x0008], RECHeaderInfo->SIPCRPID, FALSE);
853 setWord(&Buffer[p + 0x000a], RECHeaderInfo->SIVideoPID, FALSE);
854 setWord(&Buffer[p + 0x000c], RECHeaderInfo->SIAudioPID, FALSE);
855 strncpy(&Buffer[p + 0x000e], RECHeaderInfo->SISvcName, 28);
856
857 //Transponder Info
858 p = 0x0508;
859 Buffer[p + 0x0000] = RECHeaderInfo->TPSatIndex;
860 Buffer[p + 0x0001] = RECHeaderInfo->TPFlags2 | RECHeaderInfo->TPPolarization | (RECHeaderInfo->TPMode << 1);
861
862 memcpy(&Buffer[p + 0x0002], RECHeaderInfo->TPUnknown3, 2);
863 setDword(&Buffer[p + 0x0004], RECHeaderInfo->TPFrequency, FALSE);
864 setWord(&Buffer[p + 0x0008], RECHeaderInfo->TPSymbolRate, FALSE);
865 setWord(&Buffer[p + 0x000a], RECHeaderInfo->TPTSID, FALSE);
866 memcpy(&Buffer[p + 0x000c], RECHeaderInfo->TPUnknown5, 2);
867 setWord(&Buffer[p + 0x000e], RECHeaderInfo->TPOriginalNetworkID, FALSE);
868
869 //Event Info
870 p = 0x0518;
871 memcpy(&Buffer[p], RECHeaderInfo->EventUnknown1, 2);
872 Buffer[p + 0x0003] = (int)(RECHeaderInfo->EventDuration / 60);
873 Buffer[p + 0x0002] = RECHeaderInfo->EventDuration % 60;
874 setDword(&Buffer[p + 0x0004], RECHeaderInfo->EventEventID, FALSE);
875 setDword(&Buffer[p + 0x0008], RECHeaderInfo->EventStartTime, FALSE);
876 setDword(&Buffer[p + 0x000c], RECHeaderInfo->EventEndTime, FALSE);
877 Buffer[p + 0x0010] = RECHeaderInfo->EventRunningStatus;
878 EventTextLength = strlen(RECHeaderInfo->EventEventName);
879 Buffer[p + 0x0011] = EventTextLength;
880 Buffer[p + 0x0012] = RECHeaderInfo->EventParentalRate;
881 strncpy(&Buffer[p + 0x0013], RECHeaderInfo->EventEventName, EventTextLength);
882 strncpy(&Buffer[p + 0x0013 + EventTextLength], RECHeaderInfo->EventEventDescription, 257 - EventTextLength);
883 setWord(&Buffer[p + 0x0114], RECHeaderInfo->EventServiceID, FALSE);
884 memcpy(&Buffer[p + 0x0116], RECHeaderInfo->EventUnknown2, 14);
885
886 //Extended Event Info
887 p = 0x063c;
888 EncodeExtInfo(Buffer, p, RECHeaderInfo, FALSE);
889
890 //Crypt Info
891 p = 0x0a48;
892 Buffer[p + 0x0000] = RECHeaderInfo->CryptFlag;
893 memcpy(&Buffer[p + 0x0001], RECHeaderInfo->CryptUnknown2, 3);
894
895 //Bookmarks
896 p = 0x0a4c;
897 memcpy(&Buffer[p + 0x0000], RECHeaderInfo->Bookmark, 64 * sizeof(dword));
898 setDword(&Buffer[p + 0x0100], RECHeaderInfo->Resume, FALSE);
899
900 TRACEEXIT();
901}
902
903bool HDD_EncodeRECHeader(byte *Buffer, tRECHeaderInfo *RECHeaderInfo, SYSTEM_TYPE SystemType)
904{
905 TRACEENTER();
906
907 bool ret;
908
909 if(SystemType == ST_UNKNOWN) SystemType = GetSystemType();
910
911 memset(Buffer, 0, 8192);
912 ret = TRUE;
913 switch(SystemType)
914 {
915 case ST_UNKNOWN: ret = FALSE; break;
916 case ST_S: HDD_EncodeRECHeader_ST_S(Buffer, RECHeaderInfo); break;
917 case ST_T: HDD_EncodeRECHeader_ST_T(Buffer, RECHeaderInfo); break;
918 case ST_C: HDD_EncodeRECHeader_ST_C(Buffer, RECHeaderInfo); break;
919 case ST_T5700: HDD_EncodeRECHeader_ST_T5700(Buffer, RECHeaderInfo); break;
920 case ST_TMSS: HDD_EncodeRECHeader_ST_TMSS(Buffer, RECHeaderInfo); break;
921 case ST_TMST: HDD_EncodeRECHeader_ST_TMST(Buffer, RECHeaderInfo); break;
922 case ST_TMSC: HDD_EncodeRECHeader_ST_TMSC(Buffer, RECHeaderInfo); break;
923 case ST_T5800: HDD_EncodeRECHeader_ST_T5800(Buffer, RECHeaderInfo); break;
924 case ST_ST: ret = FALSE; break;
925 case ST_CT: ret = FALSE; break;
926 case ST_TF7k7HDPVR: HDD_EncodeRECHeader_ST_TF7k7HDPVR(Buffer, RECHeaderInfo); break;
927 case ST_NRTYPES: ret = FALSE; break;
928 }
929
930 TRACEEXIT();
931 return ret;
932}
void EncodeExtInfo(byte *Buffer, dword p, tRECHeaderInfo *RECHeaderInfo, bool BigEndian)
void HDD_EncodeRECHeader_ST_TMSC(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_TF7k7HDPVR(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void setWord(void *buffer, word Data, bool BigEndian)
void HDD_EncodeRECHeader_ST_C(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_TMST(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void setDword(void *buffer, dword Data, bool BigEndian)
void HDD_EncodeRECHeader_ST_T5700(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_T5800(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_T(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_S(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
void HDD_EncodeRECHeader_ST_TMSS(byte *Buffer, tRECHeaderInfo *RECHeaderInfo)
bool HDD_EncodeRECHeader(byte *Buffer, tRECHeaderInfo *RECHeaderInfo, SYSTEM_TYPE SystemType)
SYSTEM_TYPE GetSystemType(void)
Definition: GetSystemType.c:3
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
SYSTEM_TYPE
Definition: libFireBird.h:66
@ ST_CT
Definition: libFireBird.h:77
@ ST_T
Definition: libFireBird.h:69
@ ST_TMSC
Definition: libFireBird.h:74
@ ST_UNKNOWN
Definition: libFireBird.h:67
@ ST_T5700
Definition: libFireBird.h:71
@ ST_TMST
Definition: libFireBird.h:73
@ ST_T5800
Definition: libFireBird.h:75
@ ST_TMSS
Definition: libFireBird.h:72
@ ST_ST
Definition: libFireBird.h:76
@ ST_NRTYPES
Definition: libFireBird.h:79
@ ST_TF7k7HDPVR
Definition: libFireBird.h:78
@ ST_S
Definition: libFireBird.h:68
@ ST_C
Definition: libFireBird.h:70
char EventEventName[273]
Definition: libFireBird.h:2367
byte SIAudioStreamType
Definition: libFireBird.h:2335
byte TPUnknown7[8]
Definition: libFireBird.h:2359
dword EventStartTime
Definition: libFireBird.h:2363
char EventEventDescription[273]
Definition: libFireBird.h:2368
byte TPUnknown3[2]
Definition: libFireBird.h:2355
word ExtEventServiceID
Definition: libFireBird.h:2373
byte EventUnknown2[14]
Definition: libFireBird.h:2371
dword ExtEventEventID
Definition: libFireBird.h:2374
byte TPUnknown5[2]
Definition: libFireBird.h:2357
byte ExtEventNrItemizedPairs
Definition: libFireBird.h:2378
byte ExtEventUnknown1[3]
Definition: libFireBird.h:2379
dword Bookmark[177]
Definition: libFireBird.h:2385
char ExtEventText[1024]
Definition: libFireBird.h:2376
byte SIVideoStreamType
Definition: libFireBird.h:2334
dword HeaderStartTime
Definition: libFireBird.h:2307
word HeaderDurationSec
Definition: libFireBird.h:2309
word ExtEventTextLength
Definition: libFireBird.h:2375
byte HeaderUnknown4[10]
Definition: libFireBird.h:2318
word TPOriginalNetworkID
Definition: libFireBird.h:2351
char SISvcName[28]
Definition: libFireBird.h:2333
byte HeaderUnknown2[2]
Definition: libFireBird.h:2317
byte CryptUnknown2[3]
Definition: libFireBird.h:2382
byte EventRunningStatus
Definition: libFireBird.h:2365
byte EventParentalRate
Definition: libFireBird.h:2366
byte EventUnknown1[2]
Definition: libFireBird.h:2370