About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / video4linux / extract_xc3028.pl


Based on kernel version 4.7.2. Page generated on 2016-08-22 22:48 EST.

1	#!/usr/bin/perl
2	
3	# Copyright (c) Mauro Carvalho Chehab <mchehab@infradead.org>
4	# Released under GPLv2
5	#
6	# In order to use, you need to:
7	#	1) Download the windows driver with something like:
8	#	Version 2.4
9	#		wget http://www.twinhan.com/files/AW/BDA T/20080303_V1.0.6.7.zip
10	#		or wget http://www.stefanringel.de/pub/20080303_V1.0.6.7.zip
11	#	Version 2.7
12	#		wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip
13	#	2) Extract the files from the zip into the current dir:
14	#		unzip -j 20080303_V1.0.6.7.zip 20080303_v1.0.6.7/UDXTTM6000.sys
15	#		unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys
16	#	3) run the script:
17	#		./extract_xc3028.pl
18	#	4) copy the generated files:
19	#		cp xc3028-v24.fw /lib/firmware
20	#		cp xc3028-v27.fw /lib/firmware
21	
22	#use strict;
23	use IO::Handle;
24	
25	my $debug=0;
26	
27	sub verify ($$)
28	{
29		my ($filename, $hash) = @_;
30		my ($testhash);
31	
32		if (system("which md5sum > /dev/null 2>&1")) {
33			die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n";
34		}
35	
36		open(CMD, "md5sum ".$filename."|");
37		$testhash = <CMD>;
38		$testhash =~ /([a-zA-Z0-9]*)/;
39		$testhash = $1;
40		close CMD;
41			die "Hash of extracted file does not match (found $testhash, expected $hash!\n" if ($testhash ne $hash);
42	}
43	
44	sub get_hunk ($$)
45	{
46		my ($offset, $length) = @_;
47		my ($chunklength, $buf, $rcount, $out);
48	
49		sysseek(INFILE, $offset, SEEK_SET);
50		while ($length > 0) {
51		# Calc chunk size
52			$chunklength = 2048;
53			$chunklength = $length if ($chunklength > $length);
54	
55			$rcount = sysread(INFILE, $buf, $chunklength);
56			die "Ran out of data\n" if ($rcount != $chunklength);
57			$out .= $buf;
58			$length -= $rcount;
59		}
60		return $out;
61	}
62	
63	sub write_le16($)
64	{
65		my $val = shift;
66		my $msb = ($val >> 8) &0xff;
67		my $lsb = $val & 0xff;
68	
69		syswrite(OUTFILE, chr($lsb).chr($msb));
70	}
71	
72	sub write_le32($)
73	{
74		my $val = shift;
75		my $l3 = ($val >> 24) & 0xff;
76		my $l2 = ($val >> 16) & 0xff;
77		my $l1 = ($val >> 8)  & 0xff;
78		my $l0 = $val         & 0xff;
79	
80		syswrite(OUTFILE, chr($l0).chr($l1).chr($l2).chr($l3));
81	}
82	
83	sub write_le64($$)
84	{
85		my $msb_val = shift;
86		my $lsb_val = shift;
87		my $l7 = ($msb_val >> 24) & 0xff;
88		my $l6 = ($msb_val >> 16) & 0xff;
89		my $l5 = ($msb_val >> 8)  & 0xff;
90		my $l4 = $msb_val         & 0xff;
91	
92		my $l3 = ($lsb_val >> 24) & 0xff;
93		my $l2 = ($lsb_val >> 16) & 0xff;
94		my $l1 = ($lsb_val >> 8)  & 0xff;
95		my $l0 = $lsb_val         & 0xff;
96	
97		syswrite(OUTFILE,
98			 chr($l0).chr($l1).chr($l2).chr($l3).
99			 chr($l4).chr($l5).chr($l6).chr($l7));
100	}
101	
102	sub write_hunk($$)
103	{
104		my ($offset, $length) = @_;
105		my $out = get_hunk($offset, $length);
106	
107		printf "(len %d) ",$length if ($debug);
108	
109		for (my $i=0;$i<$length;$i++) {
110			printf "%02x ",ord(substr($out,$i,1)) if ($debug);
111		}
112		printf "\n" if ($debug);
113	
114		syswrite(OUTFILE, $out);
115	}
116	
117	sub write_hunk_fix_endian($$)
118	{
119		my ($offset, $length) = @_;
120		my $out = get_hunk($offset, $length);
121	
122		printf "(len_fix %d) ",$length if ($debug);
123	
124		for (my $i=0;$i<$length;$i++) {
125			printf "%02x ",ord(substr($out,$i,1)) if ($debug);
126		}
127		printf "\n" if ($debug);
128	
129		my $i=0;
130		while ($i<$length) {
131			my $size = ord(substr($out,$i,1))*256+ord(substr($out,$i+1,1));
132			syswrite(OUTFILE, substr($out,$i+1,1));
133			syswrite(OUTFILE, substr($out,$i,1));
134			$i+=2;
135			if ($size>0 && $size <0x8000) {
136				for (my $j=0;$j<$size;$j++) {
137					syswrite(OUTFILE, substr($out,$j+$i,1));
138				}
139				$i+=$size;
140			}
141		}
142	}
143	
144	sub main_firmware_24($$$$)
145	{
146		my $out;
147		my $j=0;
148		my $outfile = shift;
149		my $name    = shift;
150		my $version = shift;
151		my $nr_desc = shift;
152	
153		for ($j = length($name); $j <32; $j++) {
154			$name = $name.chr(0);
155		}
156	
157		open OUTFILE, ">$outfile";
158		syswrite(OUTFILE, $name);
159		write_le16($version);
160		write_le16($nr_desc);
161	
162		#
163		# Firmware 0, type: BASE FW   F8MHZ (0x00000003), id: (0000000000000000), size: 6635
164		#
165	
166		write_le32(0x00000003);			# Type
167		write_le64(0x00000000, 0x00000000);	# ID
168		write_le32(6635);			# Size
169		write_hunk_fix_endian(257752, 6635);
170	
171		#
172		# Firmware 1, type: BASE FW   F8MHZ MTS (0x00000007), id: (0000000000000000), size: 6635
173		#
174	
175		write_le32(0x00000007);			# Type
176		write_le64(0x00000000, 0x00000000);	# ID
177		write_le32(6635);			# Size
178		write_hunk_fix_endian(264392, 6635);
179	
180		#
181		# Firmware 2, type: BASE FW   FM (0x00000401), id: (0000000000000000), size: 6525
182		#
183	
184		write_le32(0x00000401);			# Type
185		write_le64(0x00000000, 0x00000000);	# ID
186		write_le32(6525);			# Size
187		write_hunk_fix_endian(271040, 6525);
188	
189		#
190		# Firmware 3, type: BASE FW   FM INPUT1 (0x00000c01), id: (0000000000000000), size: 6539
191		#
192	
193		write_le32(0x00000c01);			# Type
194		write_le64(0x00000000, 0x00000000);	# ID
195		write_le32(6539);			# Size
196		write_hunk_fix_endian(277568, 6539);
197	
198		#
199		# Firmware 4, type: BASE FW   (0x00000001), id: (0000000000000000), size: 6633
200		#
201	
202		write_le32(0x00000001);			# Type
203		write_le64(0x00000000, 0x00000000);	# ID
204		write_le32(6633);			# Size
205		write_hunk_fix_endian(284120, 6633);
206	
207		#
208		# Firmware 5, type: BASE FW   MTS (0x00000005), id: (0000000000000000), size: 6617
209		#
210	
211		write_le32(0x00000005);			# Type
212		write_le64(0x00000000, 0x00000000);	# ID
213		write_le32(6617);			# Size
214		write_hunk_fix_endian(290760, 6617);
215	
216		#
217		# Firmware 6, type: STD FW    (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
218		#
219	
220		write_le32(0x00000000);			# Type
221		write_le64(0x00000001, 0x00000007);	# ID
222		write_le32(161);			# Size
223		write_hunk_fix_endian(297384, 161);
224	
225		#
226		# Firmware 7, type: STD FW    MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
227		#
228	
229		write_le32(0x00000004);			# Type
230		write_le64(0x00000001, 0x00000007);	# ID
231		write_le32(169);			# Size
232		write_hunk_fix_endian(297552, 169);
233	
234		#
235		# Firmware 8, type: STD FW    (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
236		#
237	
238		write_le32(0x00000000);			# Type
239		write_le64(0x00000002, 0x00000007);	# ID
240		write_le32(161);			# Size
241		write_hunk_fix_endian(297728, 161);
242	
243		#
244		# Firmware 9, type: STD FW    MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
245		#
246	
247		write_le32(0x00000004);			# Type
248		write_le64(0x00000002, 0x00000007);	# ID
249		write_le32(169);			# Size
250		write_hunk_fix_endian(297896, 169);
251	
252		#
253		# Firmware 10, type: STD FW    (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
254		#
255	
256		write_le32(0x00000000);			# Type
257		write_le64(0x00000004, 0x00000007);	# ID
258		write_le32(161);			# Size
259		write_hunk_fix_endian(298072, 161);
260	
261		#
262		# Firmware 11, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
263		#
264	
265		write_le32(0x00000004);			# Type
266		write_le64(0x00000004, 0x00000007);	# ID
267		write_le32(169);			# Size
268		write_hunk_fix_endian(298240, 169);
269	
270		#
271		# Firmware 12, type: STD FW    (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
272		#
273	
274		write_le32(0x00000000);			# Type
275		write_le64(0x00000008, 0x00000007);	# ID
276		write_le32(161);			# Size
277		write_hunk_fix_endian(298416, 161);
278	
279		#
280		# Firmware 13, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
281		#
282	
283		write_le32(0x00000004);			# Type
284		write_le64(0x00000008, 0x00000007);	# ID
285		write_le32(169);			# Size
286		write_hunk_fix_endian(298584, 169);
287	
288		#
289		# Firmware 14, type: STD FW    (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
290		#
291	
292		write_le32(0x00000000);			# Type
293		write_le64(0x00000003, 0x000000e0);	# ID
294		write_le32(161);			# Size
295		write_hunk_fix_endian(298760, 161);
296	
297		#
298		# Firmware 15, type: STD FW    MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
299		#
300	
301		write_le32(0x00000004);			# Type
302		write_le64(0x00000003, 0x000000e0);	# ID
303		write_le32(169);			# Size
304		write_hunk_fix_endian(298928, 169);
305	
306		#
307		# Firmware 16, type: STD FW    (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
308		#
309	
310		write_le32(0x00000000);			# Type
311		write_le64(0x0000000c, 0x000000e0);	# ID
312		write_le32(161);			# Size
313		write_hunk_fix_endian(299104, 161);
314	
315		#
316		# Firmware 17, type: STD FW    MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
317		#
318	
319		write_le32(0x00000004);			# Type
320		write_le64(0x0000000c, 0x000000e0);	# ID
321		write_le32(169);			# Size
322		write_hunk_fix_endian(299272, 169);
323	
324		#
325		# Firmware 18, type: STD FW    (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
326		#
327	
328		write_le32(0x00000000);			# Type
329		write_le64(0x00000000, 0x00200000);	# ID
330		write_le32(161);			# Size
331		write_hunk_fix_endian(299448, 161);
332	
333		#
334		# Firmware 19, type: STD FW    MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
335		#
336	
337		write_le32(0x00000004);			# Type
338		write_le64(0x00000000, 0x00200000);	# ID
339		write_le32(169);			# Size
340		write_hunk_fix_endian(299616, 169);
341	
342		#
343		# Firmware 20, type: STD FW    (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
344		#
345	
346		write_le32(0x00000000);			# Type
347		write_le64(0x00000000, 0x04000000);	# ID
348		write_le32(161);			# Size
349		write_hunk_fix_endian(299792, 161);
350	
351		#
352		# Firmware 21, type: STD FW    MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
353		#
354	
355		write_le32(0x00000004);			# Type
356		write_le64(0x00000000, 0x04000000);	# ID
357		write_le32(169);			# Size
358		write_hunk_fix_endian(299960, 169);
359	
360		#
361		# Firmware 22, type: STD FW    D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
362		#
363	
364		write_le32(0x00010030);			# Type
365		write_le64(0x00000000, 0x00000000);	# ID
366		write_le32(149);			# Size
367		write_hunk_fix_endian(300136, 149);
368	
369		#
370		# Firmware 23, type: STD FW    D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
371		#
372	
373		write_le32(0x00000068);			# Type
374		write_le64(0x00000000, 0x00000000);	# ID
375		write_le32(149);			# Size
376		write_hunk_fix_endian(300296, 149);
377	
378		#
379		# Firmware 24, type: STD FW    D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
380		#
381	
382		write_le32(0x00000070);			# Type
383		write_le64(0x00000000, 0x00000000);	# ID
384		write_le32(149);			# Size
385		write_hunk_fix_endian(300448, 149);
386	
387		#
388		# Firmware 25, type: STD FW    D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
389		#
390	
391		write_le32(0x00000088);			# Type
392		write_le64(0x00000000, 0x00000000);	# ID
393		write_le32(149);			# Size
394		write_hunk_fix_endian(300608, 149);
395	
396		#
397		# Firmware 26, type: STD FW    D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
398		#
399	
400		write_le32(0x00000090);			# Type
401		write_le64(0x00000000, 0x00000000);	# ID
402		write_le32(149);			# Size
403		write_hunk_fix_endian(300760, 149);
404	
405		#
406		# Firmware 27, type: STD FW    D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
407		#
408	
409		write_le32(0x00000108);			# Type
410		write_le64(0x00000000, 0x00000000);	# ID
411		write_le32(149);			# Size
412		write_hunk_fix_endian(300920, 149);
413	
414		#
415		# Firmware 28, type: STD FW    D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
416		#
417	
418		write_le32(0x00000110);			# Type
419		write_le64(0x00000000, 0x00000000);	# ID
420		write_le32(149);			# Size
421		write_hunk_fix_endian(301072, 149);
422	
423		#
424		# Firmware 29, type: STD FW    D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
425		#
426	
427		write_le32(0x00000208);			# Type
428		write_le64(0x00000000, 0x00000000);	# ID
429		write_le32(149);			# Size
430		write_hunk_fix_endian(301232, 149);
431	
432		#
433		# Firmware 30, type: STD FW    D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
434		#
435	
436		write_le32(0x00000210);			# Type
437		write_le64(0x00000000, 0x00000000);	# ID
438		write_le32(149);			# Size
439		write_hunk_fix_endian(301384, 149);
440	
441		#
442		# Firmware 31, type: STD FW    FM (0x00000400), id: (0000000000000000), size: 135
443		#
444	
445		write_le32(0x00000400);			# Type
446		write_le64(0x00000000, 0x00000000);	# ID
447		write_le32(135);			# Size
448		write_hunk_fix_endian(301554, 135);
449	
450		#
451		# Firmware 32, type: STD FW    (0x00000000), id: PAL/I (0000000000000010), size: 161
452		#
453	
454		write_le32(0x00000000);			# Type
455		write_le64(0x00000000, 0x00000010);	# ID
456		write_le32(161);			# Size
457		write_hunk_fix_endian(301688, 161);
458	
459		#
460		# Firmware 33, type: STD FW    MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
461		#
462	
463		write_le32(0x00000004);			# Type
464		write_le64(0x00000000, 0x00000010);	# ID
465		write_le32(169);			# Size
466		write_hunk_fix_endian(301856, 169);
467	
468		#
469		# Firmware 34, type: STD FW    (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
470		#
471	
472		#
473		# Firmware 35, type: STD FW    (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
474		#
475	
476		write_le32(0x00000000);			# Type
477		write_le64(0x0000000c, 0x00400000);	# ID
478		write_le32(161);			# Size
479		write_hunk_fix_endian(302032, 161);
480	
481		#
482		# Firmware 36, type: STD FW    (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
483		#
484	
485		write_le32(0x00000000);			# Type
486		write_le64(0x00000000, 0x00800000);	# ID
487		write_le32(161);			# Size
488		write_hunk_fix_endian(302200, 161);
489	
490		#
491		# Firmware 37, type: STD FW    (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
492		#
493	
494		write_le32(0x00000000);			# Type
495		write_le64(0x00000000, 0x00008000);	# ID
496		write_le32(161);			# Size
497		write_hunk_fix_endian(302368, 161);
498	
499		#
500		# Firmware 38, type: STD FW    LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
501		#
502	
503		write_le32(0x00001000);			# Type
504		write_le64(0x00000000, 0x00008000);	# ID
505		write_le32(161);			# Size
506		write_hunk_fix_endian(302536, 161);
507	
508		#
509		# Firmware 39, type: STD FW    LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
510		#
511	
512		write_le32(0x00003000);			# Type
513		write_le64(0x00000000, 0x00008000);	# ID
514		write_le32(161);			# Size
515		write_hunk_fix_endian(302704, 161);
516	
517		#
518		# Firmware 40, type: STD FW    MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
519		#
520	
521		write_le32(0x00000004);			# Type
522		write_le64(0x00000000, 0x00008000);	# ID
523		write_le32(169);			# Size
524		write_hunk_fix_endian(302872, 169);
525	
526		#
527		# Firmware 41, type: STD FW    (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
528		#
529	
530		write_le32(0x00000000);			# Type
531		write_le64(0x00000000, 0x0000b700);	# ID
532		write_le32(161);			# Size
533		write_hunk_fix_endian(303048, 161);
534	
535		#
536		# Firmware 42, type: STD FW    LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
537		#
538	
539		write_le32(0x00001000);			# Type
540		write_le64(0x00000000, 0x0000b700);	# ID
541		write_le32(161);			# Size
542		write_hunk_fix_endian(303216, 161);
543	
544		#
545		# Firmware 43, type: STD FW    LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
546		#
547	
548		write_le32(0x00003000);			# Type
549		write_le64(0x00000000, 0x0000b700);	# ID
550		write_le32(161);			# Size
551		write_hunk_fix_endian(303384, 161);
552	
553		#
554		# Firmware 44, type: STD FW    (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
555		#
556	
557		write_le32(0x00000000);			# Type
558		write_le64(0x00000000, 0x00002000);	# ID
559		write_le32(161);			# Size
560		write_hunk_fix_endian(303552, 161);
561	
562		#
563		# Firmware 45, type: STD FW    MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
564		#
565	
566		write_le32(0x00000004);			# Type
567		write_le64(0x00000000, 0x0000b700);	# ID
568		write_le32(169);			# Size
569		write_hunk_fix_endian(303720, 169);
570	
571		#
572		# Firmware 46, type: STD FW    MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
573		#
574	
575		write_le32(0x00001004);			# Type
576		write_le64(0x00000000, 0x0000b700);	# ID
577		write_le32(169);			# Size
578		write_hunk_fix_endian(303896, 169);
579	
580		#
581		# Firmware 47, type: STD FW    MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
582		#
583	
584		write_le32(0x00003004);			# Type
585		write_le64(0x00000000, 0x0000b700);	# ID
586		write_le32(169);			# Size
587		write_hunk_fix_endian(304072, 169);
588	
589		#
590		# Firmware 48, type: SCODE FW  HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
591		#
592	
593		write_le32(0x60000000);			# Type
594		write_le64(0x00000000, 0x00000000);	# ID
595		write_le16(3280);			# IF
596		write_le32(192);			# Size
597		write_hunk(309048, 192);
598	
599		#
600		# Firmware 49, type: SCODE FW  HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
601		#
602	
603	#	write_le32(0x60000000);			# Type
604	#	write_le64(0x00000000, 0x00000000);	# ID
605	#	write_le16(3300);			# IF
606	#	write_le32(192);			# Size
607	#	write_hunk(304440, 192);
608	
609		#
610		# Firmware 50, type: SCODE FW  HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
611		#
612	
613		write_le32(0x60000000);			# Type
614		write_le64(0x00000000, 0x00000000);	# ID
615		write_le16(3440);			# IF
616		write_le32(192);			# Size
617		write_hunk(309432, 192);
618	
619		#
620		# Firmware 51, type: SCODE FW  HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
621		#
622	
623		write_le32(0x60000000);			# Type
624		write_le64(0x00000000, 0x00000000);	# ID
625		write_le16(3460);			# IF
626		write_le32(192);			# Size
627		write_hunk(309624, 192);
628	
629		#
630		# Firmware 52, type: SCODE FW  DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
631		#
632	
633		write_le32(0x60210020);			# Type
634		write_le64(0x00000000, 0x00000000);	# ID
635		write_le16(3800);			# IF
636		write_le32(192);			# Size
637		write_hunk(306936, 192);
638	
639		#
640		# Firmware 53, type: SCODE FW  HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
641		#
642	
643		write_le32(0x60000000);			# Type
644		write_le64(0x00000000, 0x00000000);	# ID
645		write_le16(4000);			# IF
646		write_le32(192);			# Size
647		write_hunk(309240, 192);
648	
649		#
650		# Firmware 54, type: SCODE FW  DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
651		#
652	
653		write_le32(0x60410020);			# Type
654		write_le64(0x00000000, 0x00000000);	# ID
655		write_le16(4080);			# IF
656		write_le32(192);			# Size
657		write_hunk(307128, 192);
658	
659		#
660		# Firmware 55, type: SCODE FW  HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
661		#
662	
663		write_le32(0x60000000);			# Type
664		write_le64(0x00000000, 0x00000000);	# ID
665		write_le16(4200);			# IF
666		write_le32(192);			# Size
667		write_hunk(308856, 192);
668	
669		#
670		# Firmware 56, type: SCODE FW  MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
671		#
672	
673		write_le32(0x60008000);			# Type
674		write_le64(0x00000000, 0x00008000);	# ID
675		write_le16(4320);			# IF
676		write_le32(192);			# Size
677		write_hunk(305208, 192);
678	
679		#
680		# Firmware 57, type: SCODE FW  HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
681		#
682	
683		write_le32(0x60000000);			# Type
684		write_le64(0x00000000, 0x00000000);	# ID
685		write_le16(4450);			# IF
686		write_le32(192);			# Size
687		write_hunk(309816, 192);
688	
689		#
690		# Firmware 58, type: SCODE FW  MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
691		#
692	
693		write_le32(0x6002b004);			# Type
694		write_le64(0x00000000, 0x0000b700);	# ID
695		write_le16(4500);			# IF
696		write_le32(192);			# Size
697		write_hunk(304824, 192);
698	
699		#
700		# Firmware 59, type: SCODE FW  LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
701		#
702	
703		write_le32(0x60023000);			# Type
704		write_le64(0x00000000, 0x00008000);	# ID
705		write_le16(4600);			# IF
706		write_le32(192);			# Size
707		write_hunk(305016, 192);
708	
709		#
710		# Firmware 60, type: SCODE FW  DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
711		#
712	
713		write_le32(0x620003e0);			# Type
714		write_le64(0x00000000, 0x00000000);	# ID
715		write_le16(4760);			# IF
716		write_le32(192);			# Size
717		write_hunk(304440, 192);
718	
719		#
720		# Firmware 61, type: SCODE FW  HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
721		#
722	
723		write_le32(0x60000000);			# Type
724		write_le64(0x00000000, 0x00000000);	# ID
725		write_le16(4940);			# IF
726		write_le32(192);			# Size
727		write_hunk(308664, 192);
728	
729		#
730		# Firmware 62, type: SCODE FW  HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
731		#
732	
733		write_le32(0x60000000);			# Type
734		write_le64(0x00000000, 0x00000000);	# ID
735		write_le16(5260);			# IF
736		write_le32(192);			# Size
737		write_hunk(307704, 192);
738	
739		#
740		# Firmware 63, type: SCODE FW  MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
741		#
742	
743		write_le32(0x60008000);			# Type
744		write_le64(0x0000000f, 0x00000007);	# ID
745		write_le16(5320);			# IF
746		write_le32(192);			# Size
747		write_hunk(307896, 192);
748	
749		#
750		# Firmware 64, type: SCODE FW  DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
751		#
752	
753		write_le32(0x65000380);			# Type
754		write_le64(0x00000000, 0x00000000);	# ID
755		write_le16(5400);			# IF
756		write_le32(192);			# Size
757		write_hunk(304248, 192);
758	
759		#
760		# Firmware 65, type: SCODE FW  DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
761		#
762	
763		write_le32(0x60110020);			# Type
764		write_le64(0x00000000, 0x00000000);	# ID
765		write_le16(5580);			# IF
766		write_le32(192);			# Size
767		write_hunk(306744, 192);
768	
769		#
770		# Firmware 66, type: SCODE FW  HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
771		#
772	
773		write_le32(0x60000000);			# Type
774		write_le64(0x00000003, 0x00000007);	# ID
775		write_le16(5640);			# IF
776		write_le32(192);			# Size
777		write_hunk(305592, 192);
778	
779		#
780		# Firmware 67, type: SCODE FW  HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
781		#
782	
783		write_le32(0x60000000);			# Type
784		write_le64(0x0000000c, 0x00000007);	# ID
785		write_le16(5740);			# IF
786		write_le32(192);			# Size
787		write_hunk(305784, 192);
788	
789		#
790		# Firmware 68, type: SCODE FW  HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
791		#
792	
793		write_le32(0x60000000);			# Type
794		write_le64(0x00000000, 0x00000000);	# ID
795		write_le16(5900);			# IF
796		write_le32(192);			# Size
797		write_hunk(307512, 192);
798	
799		#
800		# Firmware 69, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
801		#
802	
803		write_le32(0x60008000);			# Type
804		write_le64(0x0000000c, 0x04c000f0);	# ID
805		write_le16(6000);			# IF
806		write_le32(192);			# Size
807		write_hunk(305576, 192);
808	
809		#
810		# Firmware 70, type: SCODE FW  DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
811		#
812	
813		write_le32(0x68050060);			# Type
814		write_le64(0x00000000, 0x00000000);	# ID
815		write_le16(6200);			# IF
816		write_le32(192);			# Size
817		write_hunk(306552, 192);
818	
819		#
820		# Firmware 71, type: SCODE FW  HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
821		#
822	
823		write_le32(0x60000000);			# Type
824		write_le64(0x00000000, 0x00000010);	# ID
825		write_le16(6240);			# IF
826		write_le32(192);			# Size
827		write_hunk(305400, 192);
828	
829		#
830		# Firmware 72, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
831		#
832	
833		write_le32(0x60008000);			# Type
834		write_le64(0x00000000, 0x00200000);	# ID
835		write_le16(6320);			# IF
836		write_le32(192);			# Size
837		write_hunk(308472, 192);
838	
839		#
840		# Firmware 73, type: SCODE FW  HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
841		#
842	
843		write_le32(0x60000000);			# Type
844		write_le64(0x00000000, 0x00200000);	# ID
845		write_le16(6340);			# IF
846		write_le32(192);			# Size
847		write_hunk(306360, 192);
848	
849		#
850		# Firmware 74, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
851		#
852	
853		write_le32(0x60008000);			# Type
854		write_le64(0x0000000c, 0x044000e0);	# ID
855		write_le16(6500);			# IF
856		write_le32(192);			# Size
857		write_hunk(308280, 192);
858	
859		#
860		# Firmware 75, type: SCODE FW  DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
861		#
862	
863		write_le32(0x60090020);			# Type
864		write_le64(0x00000000, 0x00000000);	# ID
865		write_le16(6580);			# IF
866		write_le32(192);			# Size
867		write_hunk(304632, 192);
868	
869		#
870		# Firmware 76, type: SCODE FW  HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
871		#
872	
873		write_le32(0x60000000);			# Type
874		write_le64(0x00000003, 0x000000e0);	# ID
875		write_le16(6600);			# IF
876		write_le32(192);			# Size
877		write_hunk(306168, 192);
878	
879		#
880		# Firmware 77, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
881		#
882	
883		write_le32(0x60008000);			# Type
884		write_le64(0x00000003, 0x000000e0);	# ID
885		write_le16(6680);			# IF
886		write_le32(192);			# Size
887		write_hunk(308088, 192);
888	
889		#
890		# Firmware 78, type: SCODE FW  DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
891		#
892	
893		write_le32(0x60810020);			# Type
894		write_le64(0x00000000, 0x00000000);	# ID
895		write_le16(8140);			# IF
896		write_le32(192);			# Size
897		write_hunk(307320, 192);
898	
899		#
900		# Firmware 79, type: SCODE FW  HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
901		#
902	
903	#	write_le32(0x60000000);			# Type
904	#	write_le64(0x00000000, 0x00000000);	# ID
905	#	write_le16(8200);			# IF
906	#	write_le32(192);			# Size
907	#	write_hunk(308088, 192);
908	}
909	
910	sub main_firmware_27($$$$)
911	{
912		my $out;
913		my $j=0;
914		my $outfile = shift;
915		my $name    = shift;
916		my $version = shift;
917		my $nr_desc = shift;
918	
919		for ($j = length($name); $j <32; $j++) {
920			$name = $name.chr(0);
921		}
922	
923		open OUTFILE, ">$outfile";
924		syswrite(OUTFILE, $name);
925		write_le16($version);
926		write_le16($nr_desc);
927	
928		#
929		# Firmware 0, type: BASE FW   F8MHZ (0x00000003), id: (0000000000000000), size: 8718
930		#
931	
932		write_le32(0x00000003);			# Type
933		write_le64(0x00000000, 0x00000000);	# ID
934		write_le32(8718);			# Size
935		write_hunk_fix_endian(813432, 8718);
936	
937		#
938		# Firmware 1, type: BASE FW   F8MHZ MTS (0x00000007), id: (0000000000000000), size: 8712
939		#
940	
941		write_le32(0x00000007);			# Type
942		write_le64(0x00000000, 0x00000000);	# ID
943		write_le32(8712);			# Size
944		write_hunk_fix_endian(822152, 8712);
945	
946		#
947		# Firmware 2, type: BASE FW   FM (0x00000401), id: (0000000000000000), size: 8562
948		#
949	
950		write_le32(0x00000401);			# Type
951		write_le64(0x00000000, 0x00000000);	# ID
952		write_le32(8562);			# Size
953		write_hunk_fix_endian(830872, 8562);
954	
955		#
956		# Firmware 3, type: BASE FW   FM INPUT1 (0x00000c01), id: (0000000000000000), size: 8576
957		#
958	
959		write_le32(0x00000c01);			# Type
960		write_le64(0x00000000, 0x00000000);	# ID
961		write_le32(8576);			# Size
962		write_hunk_fix_endian(839440, 8576);
963	
964		#
965		# Firmware 4, type: BASE FW   (0x00000001), id: (0000000000000000), size: 8706
966		#
967	
968		write_le32(0x00000001);			# Type
969		write_le64(0x00000000, 0x00000000);	# ID
970		write_le32(8706);			# Size
971		write_hunk_fix_endian(848024, 8706);
972	
973		#
974		# Firmware 5, type: BASE FW   MTS (0x00000005), id: (0000000000000000), size: 8682
975		#
976	
977		write_le32(0x00000005);			# Type
978		write_le64(0x00000000, 0x00000000);	# ID
979		write_le32(8682);			# Size
980		write_hunk_fix_endian(856736, 8682);
981	
982		#
983		# Firmware 6, type: STD FW    (0x00000000), id: PAL/BG A2/A (0000000100000007), size: 161
984		#
985	
986		write_le32(0x00000000);			# Type
987		write_le64(0x00000001, 0x00000007);	# ID
988		write_le32(161);			# Size
989		write_hunk_fix_endian(865424, 161);
990	
991		#
992		# Firmware 7, type: STD FW    MTS (0x00000004), id: PAL/BG A2/A (0000000100000007), size: 169
993		#
994	
995		write_le32(0x00000004);			# Type
996		write_le64(0x00000001, 0x00000007);	# ID
997		write_le32(169);			# Size
998		write_hunk_fix_endian(865592, 169);
999	
1000		#
1001		# Firmware 8, type: STD FW    (0x00000000), id: PAL/BG A2/B (0000000200000007), size: 161
1002		#
1003	
1004		write_le32(0x00000000);			# Type
1005		write_le64(0x00000002, 0x00000007);	# ID
1006		write_le32(161);			# Size
1007		write_hunk_fix_endian(865424, 161);
1008	
1009		#
1010		# Firmware 9, type: STD FW    MTS (0x00000004), id: PAL/BG A2/B (0000000200000007), size: 169
1011		#
1012	
1013		write_le32(0x00000004);			# Type
1014		write_le64(0x00000002, 0x00000007);	# ID
1015		write_le32(169);			# Size
1016		write_hunk_fix_endian(865592, 169);
1017	
1018		#
1019		# Firmware 10, type: STD FW    (0x00000000), id: PAL/BG NICAM/A (0000000400000007), size: 161
1020		#
1021	
1022		write_le32(0x00000000);			# Type
1023		write_le64(0x00000004, 0x00000007);	# ID
1024		write_le32(161);			# Size
1025		write_hunk_fix_endian(866112, 161);
1026	
1027		#
1028		# Firmware 11, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/A (0000000400000007), size: 169
1029		#
1030	
1031		write_le32(0x00000004);			# Type
1032		write_le64(0x00000004, 0x00000007);	# ID
1033		write_le32(169);			# Size
1034		write_hunk_fix_endian(866280, 169);
1035	
1036		#
1037		# Firmware 12, type: STD FW    (0x00000000), id: PAL/BG NICAM/B (0000000800000007), size: 161
1038		#
1039	
1040		write_le32(0x00000000);			# Type
1041		write_le64(0x00000008, 0x00000007);	# ID
1042		write_le32(161);			# Size
1043		write_hunk_fix_endian(866112, 161);
1044	
1045		#
1046		# Firmware 13, type: STD FW    MTS (0x00000004), id: PAL/BG NICAM/B (0000000800000007), size: 169
1047		#
1048	
1049		write_le32(0x00000004);			# Type
1050		write_le64(0x00000008, 0x00000007);	# ID
1051		write_le32(169);			# Size
1052		write_hunk_fix_endian(866280, 169);
1053	
1054		#
1055		# Firmware 14, type: STD FW    (0x00000000), id: PAL/DK A2 (00000003000000e0), size: 161
1056		#
1057	
1058		write_le32(0x00000000);			# Type
1059		write_le64(0x00000003, 0x000000e0);	# ID
1060		write_le32(161);			# Size
1061		write_hunk_fix_endian(866800, 161);
1062	
1063		#
1064		# Firmware 15, type: STD FW    MTS (0x00000004), id: PAL/DK A2 (00000003000000e0), size: 169
1065		#
1066	
1067		write_le32(0x00000004);			# Type
1068		write_le64(0x00000003, 0x000000e0);	# ID
1069		write_le32(169);			# Size
1070		write_hunk_fix_endian(866968, 169);
1071	
1072		#
1073		# Firmware 16, type: STD FW    (0x00000000), id: PAL/DK NICAM (0000000c000000e0), size: 161
1074		#
1075	
1076		write_le32(0x00000000);			# Type
1077		write_le64(0x0000000c, 0x000000e0);	# ID
1078		write_le32(161);			# Size
1079		write_hunk_fix_endian(867144, 161);
1080	
1081		#
1082		# Firmware 17, type: STD FW    MTS (0x00000004), id: PAL/DK NICAM (0000000c000000e0), size: 169
1083		#
1084	
1085		write_le32(0x00000004);			# Type
1086		write_le64(0x0000000c, 0x000000e0);	# ID
1087		write_le32(169);			# Size
1088		write_hunk_fix_endian(867312, 169);
1089	
1090		#
1091		# Firmware 18, type: STD FW    (0x00000000), id: SECAM/K1 (0000000000200000), size: 161
1092		#
1093	
1094		write_le32(0x00000000);			# Type
1095		write_le64(0x00000000, 0x00200000);	# ID
1096		write_le32(161);			# Size
1097		write_hunk_fix_endian(867488, 161);
1098	
1099		#
1100		# Firmware 19, type: STD FW    MTS (0x00000004), id: SECAM/K1 (0000000000200000), size: 169
1101		#
1102	
1103		write_le32(0x00000004);			# Type
1104		write_le64(0x00000000, 0x00200000);	# ID
1105		write_le32(169);			# Size
1106		write_hunk_fix_endian(867656, 169);
1107	
1108		#
1109		# Firmware 20, type: STD FW    (0x00000000), id: SECAM/K3 (0000000004000000), size: 161
1110		#
1111	
1112		write_le32(0x00000000);			# Type
1113		write_le64(0x00000000, 0x04000000);	# ID
1114		write_le32(161);			# Size
1115		write_hunk_fix_endian(867832, 161);
1116	
1117		#
1118		# Firmware 21, type: STD FW    MTS (0x00000004), id: SECAM/K3 (0000000004000000), size: 169
1119		#
1120	
1121		write_le32(0x00000004);			# Type
1122		write_le64(0x00000000, 0x04000000);	# ID
1123		write_le32(169);			# Size
1124		write_hunk_fix_endian(868000, 169);
1125	
1126		#
1127		# Firmware 22, type: STD FW    D2633 DTV6 ATSC (0x00010030), id: (0000000000000000), size: 149
1128		#
1129	
1130		write_le32(0x00010030);			# Type
1131		write_le64(0x00000000, 0x00000000);	# ID
1132		write_le32(149);			# Size
1133		write_hunk_fix_endian(868176, 149);
1134	
1135		#
1136		# Firmware 23, type: STD FW    D2620 DTV6 QAM (0x00000068), id: (0000000000000000), size: 149
1137		#
1138	
1139		write_le32(0x00000068);			# Type
1140		write_le64(0x00000000, 0x00000000);	# ID
1141		write_le32(149);			# Size
1142		write_hunk_fix_endian(868336, 149);
1143	
1144		#
1145		# Firmware 24, type: STD FW    D2633 DTV6 QAM (0x00000070), id: (0000000000000000), size: 149
1146		#
1147	
1148		write_le32(0x00000070);			# Type
1149		write_le64(0x00000000, 0x00000000);	# ID
1150		write_le32(149);			# Size
1151		write_hunk_fix_endian(868488, 149);
1152	
1153		#
1154		# Firmware 25, type: STD FW    D2620 DTV7 (0x00000088), id: (0000000000000000), size: 149
1155		#
1156	
1157		write_le32(0x00000088);			# Type
1158		write_le64(0x00000000, 0x00000000);	# ID
1159		write_le32(149);			# Size
1160		write_hunk_fix_endian(868648, 149);
1161	
1162		#
1163		# Firmware 26, type: STD FW    D2633 DTV7 (0x00000090), id: (0000000000000000), size: 149
1164		#
1165	
1166		write_le32(0x00000090);			# Type
1167		write_le64(0x00000000, 0x00000000);	# ID
1168		write_le32(149);			# Size
1169		write_hunk_fix_endian(868800, 149);
1170	
1171		#
1172		# Firmware 27, type: STD FW    D2620 DTV78 (0x00000108), id: (0000000000000000), size: 149
1173		#
1174	
1175		write_le32(0x00000108);			# Type
1176		write_le64(0x00000000, 0x00000000);	# ID
1177		write_le32(149);			# Size
1178		write_hunk_fix_endian(868960, 149);
1179	
1180		#
1181		# Firmware 28, type: STD FW    D2633 DTV78 (0x00000110), id: (0000000000000000), size: 149
1182		#
1183	
1184		write_le32(0x00000110);			# Type
1185		write_le64(0x00000000, 0x00000000);	# ID
1186		write_le32(149);			# Size
1187		write_hunk_fix_endian(869112, 149);
1188	
1189		#
1190		# Firmware 29, type: STD FW    D2620 DTV8 (0x00000208), id: (0000000000000000), size: 149
1191		#
1192	
1193		write_le32(0x00000208);			# Type
1194		write_le64(0x00000000, 0x00000000);	# ID
1195		write_le32(149);			# Size
1196		write_hunk_fix_endian(868648, 149);
1197	
1198		#
1199		# Firmware 30, type: STD FW    D2633 DTV8 (0x00000210), id: (0000000000000000), size: 149
1200		#
1201	
1202		write_le32(0x00000210);			# Type
1203		write_le64(0x00000000, 0x00000000);	# ID
1204		write_le32(149);			# Size
1205		write_hunk_fix_endian(868800, 149);
1206	
1207		#
1208		# Firmware 31, type: STD FW    FM (0x00000400), id: (0000000000000000), size: 135
1209		#
1210	
1211		write_le32(0x00000400);			# Type
1212		write_le64(0x00000000, 0x00000000);	# ID
1213		write_le32(135);			# Size
1214		write_hunk_fix_endian(869584, 135);
1215	
1216		#
1217		# Firmware 32, type: STD FW    (0x00000000), id: PAL/I (0000000000000010), size: 161
1218		#
1219	
1220		write_le32(0x00000000);			# Type
1221		write_le64(0x00000000, 0x00000010);	# ID
1222		write_le32(161);			# Size
1223		write_hunk_fix_endian(869728, 161);
1224	
1225		#
1226		# Firmware 33, type: STD FW    MTS (0x00000004), id: PAL/I (0000000000000010), size: 169
1227		#
1228	
1229		write_le32(0x00000004);			# Type
1230		write_le64(0x00000000, 0x00000010);	# ID
1231		write_le32(169);			# Size
1232		write_hunk_fix_endian(869896, 169);
1233	
1234		#
1235		# Firmware 34, type: STD FW    (0x00000000), id: SECAM/L AM (0000001000400000), size: 169
1236		#
1237	
1238		write_le32(0x00000000);			# Type
1239		write_le64(0x00000010, 0x00400000);	# ID
1240		write_le32(169);			# Size
1241		write_hunk_fix_endian(870072, 169);
1242	
1243		#
1244		# Firmware 35, type: STD FW    (0x00000000), id: SECAM/L NICAM (0000000c00400000), size: 161
1245		#
1246	
1247		write_le32(0x00000000);			# Type
1248		write_le64(0x0000000c, 0x00400000);	# ID
1249		write_le32(161);			# Size
1250		write_hunk_fix_endian(870248, 161);
1251	
1252		#
1253		# Firmware 36, type: STD FW    (0x00000000), id: SECAM/Lc (0000000000800000), size: 161
1254		#
1255	
1256		write_le32(0x00000000);			# Type
1257		write_le64(0x00000000, 0x00800000);	# ID
1258		write_le32(161);			# Size
1259		write_hunk_fix_endian(870416, 161);
1260	
1261		#
1262		# Firmware 37, type: STD FW    (0x00000000), id: NTSC/M Kr (0000000000008000), size: 161
1263		#
1264	
1265		write_le32(0x00000000);			# Type
1266		write_le64(0x00000000, 0x00008000);	# ID
1267		write_le32(161);			# Size
1268		write_hunk_fix_endian(870584, 161);
1269	
1270		#
1271		# Firmware 38, type: STD FW    LCD (0x00001000), id: NTSC/M Kr (0000000000008000), size: 161
1272		#
1273	
1274		write_le32(0x00001000);			# Type
1275		write_le64(0x00000000, 0x00008000);	# ID
1276		write_le32(161);			# Size
1277		write_hunk_fix_endian(870752, 161);
1278	
1279		#
1280		# Firmware 39, type: STD FW    LCD NOGD (0x00003000), id: NTSC/M Kr (0000000000008000), size: 161
1281		#
1282	
1283		write_le32(0x00003000);			# Type
1284		write_le64(0x00000000, 0x00008000);	# ID
1285		write_le32(161);			# Size
1286		write_hunk_fix_endian(870920, 161);
1287	
1288		#
1289		# Firmware 40, type: STD FW    MTS (0x00000004), id: NTSC/M Kr (0000000000008000), size: 169
1290		#
1291	
1292		write_le32(0x00000004);			# Type
1293		write_le64(0x00000000, 0x00008000);	# ID
1294		write_le32(169);			# Size
1295		write_hunk_fix_endian(871088, 169);
1296	
1297		#
1298		# Firmware 41, type: STD FW    (0x00000000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1299		#
1300	
1301		write_le32(0x00000000);			# Type
1302		write_le64(0x00000000, 0x0000b700);	# ID
1303		write_le32(161);			# Size
1304		write_hunk_fix_endian(871264, 161);
1305	
1306		#
1307		# Firmware 42, type: STD FW    LCD (0x00001000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1308		#
1309	
1310		write_le32(0x00001000);			# Type
1311		write_le64(0x00000000, 0x0000b700);	# ID
1312		write_le32(161);			# Size
1313		write_hunk_fix_endian(871432, 161);
1314	
1315		#
1316		# Firmware 43, type: STD FW    LCD NOGD (0x00003000), id: NTSC PAL/M PAL/N (000000000000b700), size: 161
1317		#
1318	
1319		write_le32(0x00003000);			# Type
1320		write_le64(0x00000000, 0x0000b700);	# ID
1321		write_le32(161);			# Size
1322		write_hunk_fix_endian(871600, 161);
1323	
1324		#
1325		# Firmware 44, type: STD FW    (0x00000000), id: NTSC/M Jp (0000000000002000), size: 161
1326		#
1327	
1328		write_le32(0x00000000);			# Type
1329		write_le64(0x00000000, 0x00002000);	# ID
1330		write_le32(161);			# Size
1331		write_hunk_fix_endian(871264, 161);
1332	
1333		#
1334		# Firmware 45, type: STD FW    MTS (0x00000004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1335		#
1336	
1337		write_le32(0x00000004);			# Type
1338		write_le64(0x00000000, 0x0000b700);	# ID
1339		write_le32(169);			# Size
1340		write_hunk_fix_endian(871936, 169);
1341	
1342		#
1343		# Firmware 46, type: STD FW    MTS LCD (0x00001004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1344		#
1345	
1346		write_le32(0x00001004);			# Type
1347		write_le64(0x00000000, 0x0000b700);	# ID
1348		write_le32(169);			# Size
1349		write_hunk_fix_endian(872112, 169);
1350	
1351		#
1352		# Firmware 47, type: STD FW    MTS LCD NOGD (0x00003004), id: NTSC PAL/M PAL/N (000000000000b700), size: 169
1353		#
1354	
1355		write_le32(0x00003004);			# Type
1356		write_le64(0x00000000, 0x0000b700);	# ID
1357		write_le32(169);			# Size
1358		write_hunk_fix_endian(872288, 169);
1359	
1360		#
1361		# Firmware 48, type: SCODE FW  HAS IF (0x60000000), IF = 3.28 MHz id: (0000000000000000), size: 192
1362		#
1363	
1364		write_le32(0x60000000);			# Type
1365		write_le64(0x00000000, 0x00000000);	# ID
1366		write_le16(3280);			# IF
1367		write_le32(192);			# Size
1368		write_hunk(811896, 192);
1369	
1370		#
1371		# Firmware 49, type: SCODE FW  HAS IF (0x60000000), IF = 3.30 MHz id: (0000000000000000), size: 192
1372		#
1373	
1374		write_le32(0x60000000);			# Type
1375		write_le64(0x00000000, 0x00000000);	# ID
1376		write_le16(3300);			# IF
1377		write_le32(192);			# Size
1378		write_hunk(813048, 192);
1379	
1380		#
1381		# Firmware 50, type: SCODE FW  HAS IF (0x60000000), IF = 3.44 MHz id: (0000000000000000), size: 192
1382		#
1383	
1384		write_le32(0x60000000);			# Type
1385		write_le64(0x00000000, 0x00000000);	# ID
1386		write_le16(3440);			# IF
1387		write_le32(192);			# Size
1388		write_hunk(812280, 192);
1389	
1390		#
1391		# Firmware 51, type: SCODE FW  HAS IF (0x60000000), IF = 3.46 MHz id: (0000000000000000), size: 192
1392		#
1393	
1394		write_le32(0x60000000);			# Type
1395		write_le64(0x00000000, 0x00000000);	# ID
1396		write_le16(3460);			# IF
1397		write_le32(192);			# Size
1398		write_hunk(812472, 192);
1399	
1400		#
1401		# Firmware 52, type: SCODE FW  DTV6 ATSC OREN36 HAS IF (0x60210020), IF = 3.80 MHz id: (0000000000000000), size: 192
1402		#
1403	
1404		write_le32(0x60210020);			# Type
1405		write_le64(0x00000000, 0x00000000);	# ID
1406		write_le16(3800);			# IF
1407		write_le32(192);			# Size
1408		write_hunk(809784, 192);
1409	
1410		#
1411		# Firmware 53, type: SCODE FW  HAS IF (0x60000000), IF = 4.00 MHz id: (0000000000000000), size: 192
1412		#
1413	
1414		write_le32(0x60000000);			# Type
1415		write_le64(0x00000000, 0x00000000);	# ID
1416		write_le16(4000);			# IF
1417		write_le32(192);			# Size
1418		write_hunk(812088, 192);
1419	
1420		#
1421		# Firmware 54, type: SCODE FW  DTV6 ATSC TOYOTA388 HAS IF (0x60410020), IF = 4.08 MHz id: (0000000000000000), size: 192
1422		#
1423	
1424		write_le32(0x60410020);			# Type
1425		write_le64(0x00000000, 0x00000000);	# ID
1426		write_le16(4080);			# IF
1427		write_le32(192);			# Size
1428		write_hunk(809976, 192);
1429	
1430		#
1431		# Firmware 55, type: SCODE FW  HAS IF (0x60000000), IF = 4.20 MHz id: (0000000000000000), size: 192
1432		#
1433	
1434		write_le32(0x60000000);			# Type
1435		write_le64(0x00000000, 0x00000000);	# ID
1436		write_le16(4200);			# IF
1437		write_le32(192);			# Size
1438		write_hunk(811704, 192);
1439	
1440		#
1441		# Firmware 56, type: SCODE FW  MONO HAS IF (0x60008000), IF = 4.32 MHz id: NTSC/M Kr (0000000000008000), size: 192
1442		#
1443	
1444		write_le32(0x60008000);			# Type
1445		write_le64(0x00000000, 0x00008000);	# ID
1446		write_le16(4320);			# IF
1447		write_le32(192);			# Size
1448		write_hunk(808056, 192);
1449	
1450		#
1451		# Firmware 57, type: SCODE FW  HAS IF (0x60000000), IF = 4.45 MHz id: (0000000000000000), size: 192
1452		#
1453	
1454		write_le32(0x60000000);			# Type
1455		write_le64(0x00000000, 0x00000000);	# ID
1456		write_le16(4450);			# IF
1457		write_le32(192);			# Size
1458		write_hunk(812664, 192);
1459	
1460		#
1461		# Firmware 58, type: SCODE FW  MTS LCD NOGD MONO IF HAS IF (0x6002b004), IF = 4.50 MHz id: NTSC PAL/M PAL/N (000000000000b700), size: 192
1462		#
1463	
1464		write_le32(0x6002b004);			# Type
1465		write_le64(0x00000000, 0x0000b700);	# ID
1466		write_le16(4500);			# IF
1467		write_le32(192);			# Size
1468		write_hunk(807672, 192);
1469	
1470		#
1471		# Firmware 59, type: SCODE FW  LCD NOGD IF HAS IF (0x60023000), IF = 4.60 MHz id: NTSC/M Kr (0000000000008000), size: 192
1472		#
1473	
1474		write_le32(0x60023000);			# Type
1475		write_le64(0x00000000, 0x00008000);	# ID
1476		write_le16(4600);			# IF
1477		write_le32(192);			# Size
1478		write_hunk(807864, 192);
1479	
1480		#
1481		# Firmware 60, type: SCODE FW  DTV6 QAM DTV7 DTV78 DTV8 ZARLINK456 HAS IF (0x620003e0), IF = 4.76 MHz id: (0000000000000000), size: 192
1482		#
1483	
1484		write_le32(0x620003e0);			# Type
1485		write_le64(0x00000000, 0x00000000);	# ID
1486		write_le16(4760);			# IF
1487		write_le32(192);			# Size
1488		write_hunk(807288, 192);
1489	
1490		#
1491		# Firmware 61, type: SCODE FW  HAS IF (0x60000000), IF = 4.94 MHz id: (0000000000000000), size: 192
1492		#
1493	
1494		write_le32(0x60000000);			# Type
1495		write_le64(0x00000000, 0x00000000);	# ID
1496		write_le16(4940);			# IF
1497		write_le32(192);			# Size
1498		write_hunk(811512, 192);
1499	
1500		#
1501		# Firmware 62, type: SCODE FW  HAS IF (0x60000000), IF = 5.26 MHz id: (0000000000000000), size: 192
1502		#
1503	
1504		write_le32(0x60000000);			# Type
1505		write_le64(0x00000000, 0x00000000);	# ID
1506		write_le16(5260);			# IF
1507		write_le32(192);			# Size
1508		write_hunk(810552, 192);
1509	
1510		#
1511		# Firmware 63, type: SCODE FW  MONO HAS IF (0x60008000), IF = 5.32 MHz id: PAL/BG A2 NICAM (0000000f00000007), size: 192
1512		#
1513	
1514		write_le32(0x60008000);			# Type
1515		write_le64(0x0000000f, 0x00000007);	# ID
1516		write_le16(5320);			# IF
1517		write_le32(192);			# Size
1518		write_hunk(810744, 192);
1519	
1520		#
1521		# Firmware 64, type: SCODE FW  DTV7 DTV78 DTV8 DIBCOM52 CHINA HAS IF (0x65000380), IF = 5.40 MHz id: (0000000000000000), size: 192
1522		#
1523	
1524		write_le32(0x65000380);			# Type
1525		write_le64(0x00000000, 0x00000000);	# ID
1526		write_le16(5400);			# IF
1527		write_le32(192);			# Size
1528		write_hunk(807096, 192);
1529	
1530		#
1531		# Firmware 65, type: SCODE FW  DTV6 ATSC OREN538 HAS IF (0x60110020), IF = 5.58 MHz id: (0000000000000000), size: 192
1532		#
1533	
1534		write_le32(0x60110020);			# Type
1535		write_le64(0x00000000, 0x00000000);	# ID
1536		write_le16(5580);			# IF
1537		write_le32(192);			# Size
1538		write_hunk(809592, 192);
1539	
1540		#
1541		# Firmware 66, type: SCODE FW  HAS IF (0x60000000), IF = 5.64 MHz id: PAL/BG A2 (0000000300000007), size: 192
1542		#
1543	
1544		write_le32(0x60000000);			# Type
1545		write_le64(0x00000003, 0x00000007);	# ID
1546		write_le16(5640);			# IF
1547		write_le32(192);			# Size
1548		write_hunk(808440, 192);
1549	
1550		#
1551		# Firmware 67, type: SCODE FW  HAS IF (0x60000000), IF = 5.74 MHz id: PAL/BG NICAM (0000000c00000007), size: 192
1552		#
1553	
1554		write_le32(0x60000000);			# Type
1555		write_le64(0x0000000c, 0x00000007);	# ID
1556		write_le16(5740);			# IF
1557		write_le32(192);			# Size
1558		write_hunk(808632, 192);
1559	
1560		#
1561		# Firmware 68, type: SCODE FW  HAS IF (0x60000000), IF = 5.90 MHz id: (0000000000000000), size: 192
1562		#
1563	
1564		write_le32(0x60000000);			# Type
1565		write_le64(0x00000000, 0x00000000);	# ID
1566		write_le16(5900);			# IF
1567		write_le32(192);			# Size
1568		write_hunk(810360, 192);
1569	
1570		#
1571		# Firmware 69, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.00 MHz id: PAL/DK PAL/I SECAM/K3 SECAM/L SECAM/Lc NICAM (0000000c04c000f0), size: 192
1572		#
1573	
1574		write_le32(0x60008000);			# Type
1575		write_le64(0x0000000c, 0x04c000f0);	# ID
1576		write_le16(6000);			# IF
1577		write_le32(192);			# Size
1578		write_hunk(808824, 192);
1579	
1580		#
1581		# Firmware 70, type: SCODE FW  DTV6 QAM ATSC LG60 F6MHZ HAS IF (0x68050060), IF = 6.20 MHz id: (0000000000000000), size: 192
1582		#
1583	
1584		write_le32(0x68050060);			# Type
1585		write_le64(0x00000000, 0x00000000);	# ID
1586		write_le16(6200);			# IF
1587		write_le32(192);			# Size
1588		write_hunk(809400, 192);
1589	
1590		#
1591		# Firmware 71, type: SCODE FW  HAS IF (0x60000000), IF = 6.24 MHz id: PAL/I (0000000000000010), size: 192
1592		#
1593	
1594		write_le32(0x60000000);			# Type
1595		write_le64(0x00000000, 0x00000010);	# ID
1596		write_le16(6240);			# IF
1597		write_le32(192);			# Size
1598		write_hunk(808248, 192);
1599	
1600		#
1601		# Firmware 72, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.32 MHz id: SECAM/K1 (0000000000200000), size: 192
1602		#
1603	
1604		write_le32(0x60008000);			# Type
1605		write_le64(0x00000000, 0x00200000);	# ID
1606		write_le16(6320);			# IF
1607		write_le32(192);			# Size
1608		write_hunk(811320, 192);
1609	
1610		#
1611		# Firmware 73, type: SCODE FW  HAS IF (0x60000000), IF = 6.34 MHz id: SECAM/K1 (0000000000200000), size: 192
1612		#
1613	
1614		write_le32(0x60000000);			# Type
1615		write_le64(0x00000000, 0x00200000);	# ID
1616		write_le16(6340);			# IF
1617		write_le32(192);			# Size
1618		write_hunk(809208, 192);
1619	
1620		#
1621		# Firmware 74, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.50 MHz id: PAL/DK SECAM/K3 SECAM/L NICAM (0000000c044000e0), size: 192
1622		#
1623	
1624		write_le32(0x60008000);			# Type
1625		write_le64(0x0000000c, 0x044000e0);	# ID
1626		write_le16(6500);			# IF
1627		write_le32(192);			# Size
1628		write_hunk(811128, 192);
1629	
1630		#
1631		# Firmware 75, type: SCODE FW  DTV6 ATSC ATI638 HAS IF (0x60090020), IF = 6.58 MHz id: (0000000000000000), size: 192
1632		#
1633	
1634		write_le32(0x60090020);			# Type
1635		write_le64(0x00000000, 0x00000000);	# ID
1636		write_le16(6580);			# IF
1637		write_le32(192);			# Size
1638		write_hunk(807480, 192);
1639	
1640		#
1641		# Firmware 76, type: SCODE FW  HAS IF (0x60000000), IF = 6.60 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1642		#
1643	
1644		write_le32(0x60000000);			# Type
1645		write_le64(0x00000003, 0x000000e0);	# ID
1646		write_le16(6600);			# IF
1647		write_le32(192);			# Size
1648		write_hunk(809016, 192);
1649	
1650		#
1651		# Firmware 77, type: SCODE FW  MONO HAS IF (0x60008000), IF = 6.68 MHz id: PAL/DK A2 (00000003000000e0), size: 192
1652		#
1653	
1654		write_le32(0x60008000);			# Type
1655		write_le64(0x00000003, 0x000000e0);	# ID
1656		write_le16(6680);			# IF
1657		write_le32(192);			# Size
1658		write_hunk(810936, 192);
1659	
1660		#
1661		# Firmware 78, type: SCODE FW  DTV6 ATSC TOYOTA794 HAS IF (0x60810020), IF = 8.14 MHz id: (0000000000000000), size: 192
1662		#
1663	
1664		write_le32(0x60810020);			# Type
1665		write_le64(0x00000000, 0x00000000);	# ID
1666		write_le16(8140);			# IF
1667		write_le32(192);			# Size
1668		write_hunk(810168, 192);
1669	
1670		#
1671		# Firmware 79, type: SCODE FW  HAS IF (0x60000000), IF = 8.20 MHz id: (0000000000000000), size: 192
1672		#
1673	
1674		write_le32(0x60000000);			# Type
1675		write_le64(0x00000000, 0x00000000);	# ID
1676		write_le16(8200);			# IF
1677		write_le32(192);			# Size
1678		write_hunk(812856, 192);
1679	}
1680	
1681	
1682	sub extract_firmware {
1683		my $sourcefile_24 = "UDXTTM6000.sys";
1684		my $hash_24 = "cb9deb5508a5e150af2880f5b0066d78";
1685		my $outfile_24 = "xc3028-v24.fw";
1686		my $name_24 = "xc2028 firmware";
1687		my $version_24 = 516;
1688		my $nr_desc_24 = 77;
1689		my $out;
1690	
1691		my $sourcefile_27 = "hcw85bda.sys";
1692		my $hash_27 = "0e44dbf63bb0169d57446aec21881ff2";
1693		my $outfile_27 = "xc3028-v27.fw";
1694		my $name_27 = "xc2028 firmware";
1695		my $version_27 = 519;
1696		my $nr_desc_27 = 80;
1697		my $out;
1698	
1699		if (-e $sourcefile_24) {
1700			verify($sourcefile_24, $hash_24);
1701	
1702			open INFILE, "<$sourcefile_24";
1703			main_firmware_24($outfile_24, $name_24, $version_24, $nr_desc_24);
1704			close INFILE;
1705		}
1706	
1707		if (-e $sourcefile_27) {
1708			verify($sourcefile_27, $hash_27);
1709	
1710			open INFILE, "<$sourcefile_27";
1711			main_firmware_27($outfile_27, $name_27, $version_27, $nr_desc_27);
1712			close INFILE;
1713		}
1714	}
1715	
1716	extract_firmware;
1717	printf "Firmwares generated.\n";
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog