diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-27 09:45:04 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-27 09:45:04 -0400 |
commit | 85538b1ad145c67198cb55d02de14ba269cc323d (patch) | |
tree | 409fca93b357839b8c89b7099f2888c087694b64 /scripts | |
parent | 9c1958fc326a0a0a533ec8e86ea6fa30977207de (diff) | |
parent | d271d3d9b333c94cd54a12fa506e17772a04617c (diff) |
Merge branch 'topic/docs-next' into v4l_for_linus
* topic/docs-next: (322 commits)
[media] cx23885-cardlist.rst: add a new card
[media] doc-rst: add some needed escape codes
[media] doc-rst: kapi: use :c:func: instead of :cpp:func
doc-rst: kernel-doc: fix a change introduced by mistake
[media] v4l2-ioctl.h add debug info for struct v4l2_ioctl_ops
[media] dvb_ringbuffer.h: some documentation improvements
[media] v4l2-ctrls.h: fully document the header file
[media] doc-rst: Fix some typedef ugly warnings
[media] doc-rst: reorganize the kAPI v4l2 chapters
[media] rename v4l2-framework.rst to v4l2-intro.rst
[media] move V4L2 clocks to a separate .rst file
[media] v4l2-fh.rst: add cross references and markups
[media] v4l2-fh.rst: add fh contents from v4l2-framework.rst
[media] v4l2-fh.h: add documentation for it
[media] v4l2-event.rst: add cross-references and markups
[media] v4l2-event.h: document all functions
[media] v4l2-event.rst: add text from v4l2-framework.rst
[media] v4l2-framework.rst: remove videobuf quick chapter
[media] v4l2-dev: add cross-references and improve markup
[media] doc-rst: move v4l2-dev doc to a separate file
...
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/extract_xc3028.pl | 1717 | ||||
-rwxr-xr-x | scripts/get_dvb_firmware | 942 |
2 files changed, 2659 insertions, 0 deletions
diff --git a/scripts/extract_xc3028.pl b/scripts/extract_xc3028.pl new file mode 100755 index 000000000000..47877deae6d7 --- /dev/null +++ b/scripts/extract_xc3028.pl | |||
@@ -0,0 +1,1717 @@ | |||
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"; | ||
diff --git a/scripts/get_dvb_firmware b/scripts/get_dvb_firmware new file mode 100755 index 000000000000..1a0a04125f71 --- /dev/null +++ b/scripts/get_dvb_firmware | |||
@@ -0,0 +1,942 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # DVB firmware extractor | ||
3 | # | ||
4 | # (c) 2004 Andrew de Quincey | ||
5 | # | ||
6 | # This program is free software; you can redistribute it and/or modify | ||
7 | # it under the terms of the GNU General Public License as published by | ||
8 | # the Free Software Foundation; either version 2 of the License, or | ||
9 | # (at your option) any later version. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, | ||
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | # | ||
15 | # GNU General Public License for more details. | ||
16 | # | ||
17 | # You should have received a copy of the GNU General Public License | ||
18 | # along with this program; if not, write to the Free Software | ||
19 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | |||
21 | use File::Temp qw/ tempdir /; | ||
22 | use IO::Handle; | ||
23 | |||
24 | @components = ( "sp8870", "sp887x", "tda10045", "tda10046", | ||
25 | "tda10046lifeview", "av7110", "dec2000t", "dec2540t", | ||
26 | "dec3000s", "vp7041", "vp7049", "dibusb", "nxt2002", "nxt2004", | ||
27 | "or51211", "or51132_qam", "or51132_vsb", "bluebird", | ||
28 | "opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718", | ||
29 | "af9015", "ngene", "az6027", "lme2510_lg", "lme2510c_s7395", | ||
30 | "lme2510c_s7395_old", "drxk", "drxk_terratec_h5", | ||
31 | "drxk_hauppauge_hvr930c", "tda10071", "it9135", "drxk_pctv", | ||
32 | "drxk_terratec_htc_stick", "sms1xxx_hcw", "si2165"); | ||
33 | |||
34 | # Check args | ||
35 | syntax() if (scalar(@ARGV) != 1); | ||
36 | $cid = $ARGV[0]; | ||
37 | |||
38 | # Do it! | ||
39 | for ($i=0; $i < scalar(@components); $i++) { | ||
40 | if ($cid eq $components[$i]) { | ||
41 | $outfile = eval($cid); | ||
42 | die $@ if $@; | ||
43 | print STDERR <<EOF; | ||
44 | Firmware(s) $outfile extracted successfully. | ||
45 | Now copy it(them) to either /usr/lib/hotplug/firmware or /lib/firmware | ||
46 | (depending on configuration of firmware hotplug). | ||
47 | EOF | ||
48 | exit(0); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | # If we get here, it wasn't found | ||
53 | print STDERR "Unknown component \"$cid\"\n"; | ||
54 | syntax(); | ||
55 | |||
56 | |||
57 | |||
58 | |||
59 | # --------------------------------------------------------------- | ||
60 | # Firmware-specific extraction subroutines | ||
61 | |||
62 | sub sp8870 { | ||
63 | my $sourcefile = "tt_Premium_217g.zip"; | ||
64 | my $url = "http://www.softwarepatch.pl/9999ccd06a4813cb827dbb0005071c71/$sourcefile"; | ||
65 | my $hash = "53970ec17a538945a6d8cb608a7b3899"; | ||
66 | my $outfile = "dvb-fe-sp8870.fw"; | ||
67 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
68 | |||
69 | checkstandard(); | ||
70 | |||
71 | wgetfile($sourcefile, $url); | ||
72 | unzip($sourcefile, $tmpdir); | ||
73 | verify("$tmpdir/software/OEM/HE/App/boot/SC_MAIN.MC", $hash); | ||
74 | copy("$tmpdir/software/OEM/HE/App/boot/SC_MAIN.MC", $outfile); | ||
75 | |||
76 | $outfile; | ||
77 | } | ||
78 | |||
79 | sub sp887x { | ||
80 | my $sourcefile = "Dvbt1.3.57.6.zip"; | ||
81 | my $url = "http://www.avermedia.com/software/$sourcefile"; | ||
82 | my $cabfile = "DVBT Net Ver1.3.57.6/disk1/data1.cab"; | ||
83 | my $hash = "237938d53a7f834c05c42b894ca68ac3"; | ||
84 | my $outfile = "dvb-fe-sp887x.fw"; | ||
85 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
86 | |||
87 | checkstandard(); | ||
88 | checkunshield(); | ||
89 | |||
90 | wgetfile($sourcefile, $url); | ||
91 | unzip($sourcefile, $tmpdir); | ||
92 | unshield("$tmpdir/$cabfile", $tmpdir); | ||
93 | verify("$tmpdir/ZEnglish/sc_main.mc", $hash); | ||
94 | copy("$tmpdir/ZEnglish/sc_main.mc", $outfile); | ||
95 | |||
96 | $outfile; | ||
97 | } | ||
98 | |||
99 | sub tda10045 { | ||
100 | my $sourcefile = "tt_budget_217g.zip"; | ||
101 | my $url = "http://www.technotrend.de/new/217g/$sourcefile"; | ||
102 | my $hash = "2105fd5bf37842fbcdfa4bfd58f3594a"; | ||
103 | my $outfile = "dvb-fe-tda10045.fw"; | ||
104 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
105 | |||
106 | checkstandard(); | ||
107 | |||
108 | wgetfile($sourcefile, $url); | ||
109 | unzip($sourcefile, $tmpdir); | ||
110 | extract("$tmpdir/software/OEM/PCI/App/ttlcdacc.dll", 0x37ef9, 30555, "$tmpdir/fwtmp"); | ||
111 | verify("$tmpdir/fwtmp", $hash); | ||
112 | copy("$tmpdir/fwtmp", $outfile); | ||
113 | |||
114 | $outfile; | ||
115 | } | ||
116 | |||
117 | sub tda10046 { | ||
118 | my $sourcefile = "TT_PCI_2.19h_28_11_2006.zip"; | ||
119 | my $url = "http://technotrend.com.ua/download/software/219/$sourcefile"; | ||
120 | my $hash = "6a7e1e2f2644b162ff0502367553c72d"; | ||
121 | my $outfile = "dvb-fe-tda10046.fw"; | ||
122 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
123 | |||
124 | checkstandard(); | ||
125 | |||
126 | wgetfile($sourcefile, $url); | ||
127 | unzip($sourcefile, $tmpdir); | ||
128 | extract("$tmpdir/TT_PCI_2.19h_28_11_2006/software/OEM/PCI/App/ttlcdacc.dll", 0x65389, 24478, "$tmpdir/fwtmp"); | ||
129 | verify("$tmpdir/fwtmp", $hash); | ||
130 | copy("$tmpdir/fwtmp", $outfile); | ||
131 | |||
132 | $outfile; | ||
133 | } | ||
134 | |||
135 | sub tda10046lifeview { | ||
136 | my $sourcefile = "7%5Cdrv_2.11.02.zip"; | ||
137 | my $url = "http://www.lifeview.hk/dbimages/document/$sourcefile"; | ||
138 | my $hash = "1ea24dee4eea8fe971686981f34fd2e0"; | ||
139 | my $outfile = "dvb-fe-tda10046.fw"; | ||
140 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
141 | |||
142 | checkstandard(); | ||
143 | |||
144 | wgetfile($sourcefile, $url); | ||
145 | unzip($sourcefile, $tmpdir); | ||
146 | extract("$tmpdir/LVHybrid.sys", 0x8b088, 24602, "$tmpdir/fwtmp"); | ||
147 | verify("$tmpdir/fwtmp", $hash); | ||
148 | copy("$tmpdir/fwtmp", $outfile); | ||
149 | |||
150 | $outfile; | ||
151 | } | ||
152 | |||
153 | sub av7110 { | ||
154 | my $sourcefile = "dvb-ttpci-01.fw-261d"; | ||
155 | my $url = "https://linuxtv.org/downloads/firmware/$sourcefile"; | ||
156 | my $hash = "603431b6259715a8e88f376a53b64e2f"; | ||
157 | my $outfile = "dvb-ttpci-01.fw"; | ||
158 | |||
159 | checkstandard(); | ||
160 | |||
161 | wgetfile($sourcefile, $url); | ||
162 | verify($sourcefile, $hash); | ||
163 | copy($sourcefile, $outfile); | ||
164 | |||
165 | $outfile; | ||
166 | } | ||
167 | |||
168 | sub dec2000t { | ||
169 | my $sourcefile = "dec217g.exe"; | ||
170 | my $url = "http://hauppauge.lightpath.net/de/$sourcefile"; | ||
171 | my $hash = "bd86f458cee4a8f0a8ce2d20c66215a9"; | ||
172 | my $outfile = "dvb-ttusb-dec-2000t.fw"; | ||
173 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
174 | |||
175 | checkstandard(); | ||
176 | |||
177 | wgetfile($sourcefile, $url); | ||
178 | unzip($sourcefile, $tmpdir); | ||
179 | verify("$tmpdir/software/OEM/STB/App/Boot/STB_PC_T.bin", $hash); | ||
180 | copy("$tmpdir/software/OEM/STB/App/Boot/STB_PC_T.bin", $outfile); | ||
181 | |||
182 | $outfile; | ||
183 | } | ||
184 | |||
185 | sub dec2540t { | ||
186 | my $sourcefile = "dec217g.exe"; | ||
187 | my $url = "http://hauppauge.lightpath.net/de/$sourcefile"; | ||
188 | my $hash = "53e58f4f5b5c2930beee74a7681fed92"; | ||
189 | my $outfile = "dvb-ttusb-dec-2540t.fw"; | ||
190 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
191 | |||
192 | checkstandard(); | ||
193 | |||
194 | wgetfile($sourcefile, $url); | ||
195 | unzip($sourcefile, $tmpdir); | ||
196 | verify("$tmpdir/software/OEM/STB/App/Boot/STB_PC_X.bin", $hash); | ||
197 | copy("$tmpdir/software/OEM/STB/App/Boot/STB_PC_X.bin", $outfile); | ||
198 | |||
199 | $outfile; | ||
200 | } | ||
201 | |||
202 | sub dec3000s { | ||
203 | my $sourcefile = "dec217g.exe"; | ||
204 | my $url = "http://hauppauge.lightpath.net/de/$sourcefile"; | ||
205 | my $hash = "b013ececea83f4d6d8d2a29ac7c1b448"; | ||
206 | my $outfile = "dvb-ttusb-dec-3000s.fw"; | ||
207 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
208 | |||
209 | checkstandard(); | ||
210 | |||
211 | wgetfile($sourcefile, $url); | ||
212 | unzip($sourcefile, $tmpdir); | ||
213 | verify("$tmpdir/software/OEM/STB/App/Boot/STB_PC_S.bin", $hash); | ||
214 | copy("$tmpdir/software/OEM/STB/App/Boot/STB_PC_S.bin", $outfile); | ||
215 | |||
216 | $outfile; | ||
217 | } | ||
218 | sub opera1{ | ||
219 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 0); | ||
220 | |||
221 | checkstandard(); | ||
222 | my $fwfile1="dvb-usb-opera1-fpga-01.fw"; | ||
223 | my $fwfile2="dvb-usb-opera-01.fw"; | ||
224 | extract("2830SCap2.sys", 0x62e8, 55024, "$tmpdir/opera1-fpga.fw"); | ||
225 | extract("2830SLoad2.sys",0x3178,0x3685-0x3178,"$tmpdir/fw1part1"); | ||
226 | extract("2830SLoad2.sys",0x0980,0x3150-0x0980,"$tmpdir/fw1part2"); | ||
227 | delzero("$tmpdir/fw1part1","$tmpdir/fw1part1-1"); | ||
228 | delzero("$tmpdir/fw1part2","$tmpdir/fw1part2-1"); | ||
229 | verify("$tmpdir/fw1part1-1","5e0909858fdf0b5b09ad48b9fe622e70"); | ||
230 | verify("$tmpdir/fw1part2-1","d6e146f321427e931df2c6fcadac37a1"); | ||
231 | verify("$tmpdir/opera1-fpga.fw","0f8133f5e9051f5f3c1928f7e5a1b07d"); | ||
232 | |||
233 | my $RES1="\x01\x92\x7f\x00\x01\x00"; | ||
234 | my $RES0="\x01\x92\x7f\x00\x00\x00"; | ||
235 | my $DAT1="\x01\x00\xe6\x00\x01\x00"; | ||
236 | my $DAT0="\x01\x00\xe6\x00\x00\x00"; | ||
237 | open FW,">$tmpdir/opera.fw"; | ||
238 | print FW "$RES1"; | ||
239 | print FW "$DAT1"; | ||
240 | print FW "$RES1"; | ||
241 | print FW "$DAT1"; | ||
242 | appendfile(FW,"$tmpdir/fw1part1-1"); | ||
243 | print FW "$RES0"; | ||
244 | print FW "$DAT0"; | ||
245 | print FW "$RES1"; | ||
246 | print FW "$DAT1"; | ||
247 | appendfile(FW,"$tmpdir/fw1part2-1"); | ||
248 | print FW "$RES1"; | ||
249 | print FW "$DAT1"; | ||
250 | print FW "$RES0"; | ||
251 | print FW "$DAT0"; | ||
252 | copy ("$tmpdir/opera1-fpga.fw",$fwfile1); | ||
253 | copy ("$tmpdir/opera.fw",$fwfile2); | ||
254 | |||
255 | $fwfile1.",".$fwfile2; | ||
256 | } | ||
257 | |||
258 | sub vp7041 { | ||
259 | my $sourcefile = "2.422.zip"; | ||
260 | my $url = "http://www.twinhan.com/files/driver/USB-Ter/$sourcefile"; | ||
261 | my $hash = "e88c9372d1f66609a3e7b072c53fbcfe"; | ||
262 | my $outfile = "dvb-vp7041-2.422.fw"; | ||
263 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
264 | |||
265 | checkstandard(); | ||
266 | |||
267 | wgetfile($sourcefile, $url); | ||
268 | unzip($sourcefile, $tmpdir); | ||
269 | extract("$tmpdir/VisionDTV/Drivers/Win2K&XP/UDTTload.sys", 12503, 3036, "$tmpdir/fwtmp1"); | ||
270 | extract("$tmpdir/VisionDTV/Drivers/Win2K&XP/UDTTload.sys", 2207, 10274, "$tmpdir/fwtmp2"); | ||
271 | |||
272 | my $CMD = "\000\001\000\222\177\000"; | ||
273 | my $PAD = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"; | ||
274 | my ($FW); | ||
275 | open $FW, ">$tmpdir/fwtmp3"; | ||
276 | print $FW "$CMD\001$PAD"; | ||
277 | print $FW "$CMD\001$PAD"; | ||
278 | appendfile($FW, "$tmpdir/fwtmp1"); | ||
279 | print $FW "$CMD\000$PAD"; | ||
280 | print $FW "$CMD\001$PAD"; | ||
281 | appendfile($FW, "$tmpdir/fwtmp2"); | ||
282 | print $FW "$CMD\001$PAD"; | ||
283 | print $FW "$CMD\000$PAD"; | ||
284 | close($FW); | ||
285 | |||
286 | verify("$tmpdir/fwtmp3", $hash); | ||
287 | copy("$tmpdir/fwtmp3", $outfile); | ||
288 | |||
289 | $outfile; | ||
290 | } | ||
291 | |||
292 | sub vp7049 { | ||
293 | my $fwfile = "dvb-usb-vp7049-0.95.fw"; | ||
294 | my $url = "http://ao2.it/sites/default/files/blog/2012/11/06/linux-support-digicom-digitune-s-vp7049-udtt7049/$fwfile"; | ||
295 | my $hash = "5609fd295168aea88b25ff43a6f79c36"; | ||
296 | |||
297 | checkstandard(); | ||
298 | |||
299 | wgetfile($fwfile, $url); | ||
300 | verify($fwfile, $hash); | ||
301 | |||
302 | $fwfile; | ||
303 | } | ||
304 | |||
305 | sub dibusb { | ||
306 | my $url = "https://linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw"; | ||
307 | my $outfile = "dvb-dibusb-5.0.0.11.fw"; | ||
308 | my $hash = "fa490295a527360ca16dcdf3224ca243"; | ||
309 | |||
310 | checkstandard(); | ||
311 | |||
312 | wgetfile($outfile, $url); | ||
313 | verify($outfile,$hash); | ||
314 | |||
315 | $outfile; | ||
316 | } | ||
317 | |||
318 | sub nxt2002 { | ||
319 | my $sourcefile = "Technisat_DVB-PC_4_4_COMPACT.zip"; | ||
320 | my $url = "http://www.bbti.us/download/windows/$sourcefile"; | ||
321 | my $hash = "476befae8c7c1bb9648954060b1eec1f"; | ||
322 | my $outfile = "dvb-fe-nxt2002.fw"; | ||
323 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
324 | |||
325 | checkstandard(); | ||
326 | |||
327 | wgetfile($sourcefile, $url); | ||
328 | unzip($sourcefile, $tmpdir); | ||
329 | verify("$tmpdir/SkyNET.sys", $hash); | ||
330 | extract("$tmpdir/SkyNET.sys", 331624, 5908, $outfile); | ||
331 | |||
332 | $outfile; | ||
333 | } | ||
334 | |||
335 | sub nxt2004 { | ||
336 | my $sourcefile = "AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip"; | ||
337 | my $url = "http://www.avermedia-usa.com/support/Drivers/$sourcefile"; | ||
338 | my $hash = "111cb885b1e009188346d72acfed024c"; | ||
339 | my $outfile = "dvb-fe-nxt2004.fw"; | ||
340 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
341 | |||
342 | checkstandard(); | ||
343 | |||
344 | wgetfile($sourcefile, $url); | ||
345 | unzip($sourcefile, $tmpdir); | ||
346 | verify("$tmpdir/3xHybrid.sys", $hash); | ||
347 | extract("$tmpdir/3xHybrid.sys", 465304, 9584, $outfile); | ||
348 | |||
349 | $outfile; | ||
350 | } | ||
351 | |||
352 | sub or51211 { | ||
353 | my $fwfile = "dvb-fe-or51211.fw"; | ||
354 | my $url = "https://linuxtv.org/downloads/firmware/$fwfile"; | ||
355 | my $hash = "d830949c771a289505bf9eafc225d491"; | ||
356 | |||
357 | checkstandard(); | ||
358 | |||
359 | wgetfile($fwfile, $url); | ||
360 | verify($fwfile, $hash); | ||
361 | |||
362 | $fwfile; | ||
363 | } | ||
364 | |||
365 | sub cx231xx { | ||
366 | my $fwfile = "v4l-cx231xx-avcore-01.fw"; | ||
367 | my $url = "https://linuxtv.org/downloads/firmware/$fwfile"; | ||
368 | my $hash = "7d3bb956dc9df0eafded2b56ba57cc42"; | ||
369 | |||
370 | checkstandard(); | ||
371 | |||
372 | wgetfile($fwfile, $url); | ||
373 | verify($fwfile, $hash); | ||
374 | |||
375 | $fwfile; | ||
376 | } | ||
377 | |||
378 | sub cx18 { | ||
379 | my $url = "https://linuxtv.org/downloads/firmware/"; | ||
380 | |||
381 | my %files = ( | ||
382 | 'v4l-cx23418-apu.fw' => '588f081b562f5c653a3db1ad8f65939a', | ||
383 | 'v4l-cx23418-cpu.fw' => 'b6c7ed64bc44b1a6e0840adaeac39d79', | ||
384 | 'v4l-cx23418-dig.fw' => '95bc688d3e7599fd5800161e9971cc55', | ||
385 | ); | ||
386 | |||
387 | checkstandard(); | ||
388 | |||
389 | my $allfiles; | ||
390 | foreach my $fwfile (keys %files) { | ||
391 | wgetfile($fwfile, "$url/$fwfile"); | ||
392 | verify($fwfile, $files{$fwfile}); | ||
393 | $allfiles .= " $fwfile"; | ||
394 | } | ||
395 | |||
396 | $allfiles =~ s/^\s//; | ||
397 | |||
398 | $allfiles; | ||
399 | } | ||
400 | |||
401 | sub mpc718 { | ||
402 | my $archive = 'Yuan MPC718 TV Tuner Card 2.13.10.1016.zip'; | ||
403 | my $url = "ftp://ftp.work.acer-euro.com/desktop/aspire_idea510/vista/Drivers/$archive"; | ||
404 | my $fwfile = "dvb-cx18-mpc718-mt352.fw"; | ||
405 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
406 | |||
407 | checkstandard(); | ||
408 | wgetfile($archive, $url); | ||
409 | unzip($archive, $tmpdir); | ||
410 | |||
411 | my $sourcefile = "$tmpdir/Yuan MPC718 TV Tuner Card 2.13.10.1016/mpc718_32bit/yuanrap.sys"; | ||
412 | my $found = 0; | ||
413 | |||
414 | open IN, '<', $sourcefile or die "Couldn't open $sourcefile to extract $fwfile data\n"; | ||
415 | binmode IN; | ||
416 | open OUT, '>', $fwfile; | ||
417 | binmode OUT; | ||
418 | { | ||
419 | # Block scope because we change the line terminator variable $/ | ||
420 | my $prevlen = 0; | ||
421 | my $currlen; | ||
422 | |||
423 | # Buried in the data segment are 3 runs of almost identical | ||
424 | # register-value pairs that end in 0x5d 0x01 which is a "TUNER GO" | ||
425 | # command for the MT352. | ||
426 | # Pull out the middle run (because it's easy) of register-value | ||
427 | # pairs to make the "firmware" file. | ||
428 | |||
429 | local $/ = "\x5d\x01"; # MT352 "TUNER GO" | ||
430 | |||
431 | while (<IN>) { | ||
432 | $currlen = length($_); | ||
433 | if ($prevlen == $currlen && $currlen <= 64) { | ||
434 | chop; chop; # Get rid of "TUNER GO" | ||
435 | s/^\0\0//; # get rid of leading 00 00 if it's there | ||
436 | printf OUT "$_"; | ||
437 | $found = 1; | ||
438 | last; | ||
439 | } | ||
440 | $prevlen = $currlen; | ||
441 | } | ||
442 | } | ||
443 | close OUT; | ||
444 | close IN; | ||
445 | if (!$found) { | ||
446 | unlink $fwfile; | ||
447 | die "Couldn't find valid register-value sequence in $sourcefile for $fwfile\n"; | ||
448 | } | ||
449 | $fwfile; | ||
450 | } | ||
451 | |||
452 | sub cx23885 { | ||
453 | my $url = "https://linuxtv.org/downloads/firmware/"; | ||
454 | |||
455 | my %files = ( | ||
456 | 'v4l-cx23885-avcore-01.fw' => 'a9f8f5d901a7fb42f552e1ee6384f3bb', | ||
457 | 'v4l-cx23885-enc.fw' => 'a9f8f5d901a7fb42f552e1ee6384f3bb', | ||
458 | ); | ||
459 | |||
460 | checkstandard(); | ||
461 | |||
462 | my $allfiles; | ||
463 | foreach my $fwfile (keys %files) { | ||
464 | wgetfile($fwfile, "$url/$fwfile"); | ||
465 | verify($fwfile, $files{$fwfile}); | ||
466 | $allfiles .= " $fwfile"; | ||
467 | } | ||
468 | |||
469 | $allfiles =~ s/^\s//; | ||
470 | |||
471 | $allfiles; | ||
472 | } | ||
473 | |||
474 | sub pvrusb2 { | ||
475 | my $url = "https://linuxtv.org/downloads/firmware/"; | ||
476 | |||
477 | my %files = ( | ||
478 | 'v4l-cx25840.fw' => 'dadb79e9904fc8af96e8111d9cb59320', | ||
479 | ); | ||
480 | |||
481 | checkstandard(); | ||
482 | |||
483 | my $allfiles; | ||
484 | foreach my $fwfile (keys %files) { | ||
485 | wgetfile($fwfile, "$url/$fwfile"); | ||
486 | verify($fwfile, $files{$fwfile}); | ||
487 | $allfiles .= " $fwfile"; | ||
488 | } | ||
489 | |||
490 | $allfiles =~ s/^\s//; | ||
491 | |||
492 | $allfiles; | ||
493 | } | ||
494 | |||
495 | sub or51132_qam { | ||
496 | my $fwfile = "dvb-fe-or51132-qam.fw"; | ||
497 | my $url = "https://linuxtv.org/downloads/firmware/$fwfile"; | ||
498 | my $hash = "7702e8938612de46ccadfe9b413cb3b5"; | ||
499 | |||
500 | checkstandard(); | ||
501 | |||
502 | wgetfile($fwfile, $url); | ||
503 | verify($fwfile, $hash); | ||
504 | |||
505 | $fwfile; | ||
506 | } | ||
507 | |||
508 | sub or51132_vsb { | ||
509 | my $fwfile = "dvb-fe-or51132-vsb.fw"; | ||
510 | my $url = "https://linuxtv.org/downloads/firmware/$fwfile"; | ||
511 | my $hash = "c16208e02f36fc439a557ad4c613364a"; | ||
512 | |||
513 | checkstandard(); | ||
514 | |||
515 | wgetfile($fwfile, $url); | ||
516 | verify($fwfile, $hash); | ||
517 | |||
518 | $fwfile; | ||
519 | } | ||
520 | |||
521 | sub bluebird { | ||
522 | my $url = "https://linuxtv.org/download/dvb/firmware/dvb-usb-bluebird-01.fw"; | ||
523 | my $outfile = "dvb-usb-bluebird-01.fw"; | ||
524 | my $hash = "658397cb9eba9101af9031302671f49d"; | ||
525 | |||
526 | checkstandard(); | ||
527 | |||
528 | wgetfile($outfile, $url); | ||
529 | verify($outfile,$hash); | ||
530 | |||
531 | $outfile; | ||
532 | } | ||
533 | |||
534 | sub af9015 { | ||
535 | my $sourcefile = "download.ashx?file=57"; | ||
536 | my $url = "http://www.ite.com.tw/EN/Services/$sourcefile"; | ||
537 | my $hash = "e3f08935158038d385ad382442f4bb2d"; | ||
538 | my $outfile = "dvb-usb-af9015.fw"; | ||
539 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
540 | my $fwoffset = 0x25690; | ||
541 | my $fwlength = 18725; | ||
542 | my ($chunklength, $buf, $rcount); | ||
543 | |||
544 | checkstandard(); | ||
545 | |||
546 | wgetfile($sourcefile, $url); | ||
547 | unzip($sourcefile, $tmpdir); | ||
548 | verify("$tmpdir/Driver/Files/AF15BDA.sys", $hash); | ||
549 | |||
550 | open INFILE, '<', "$tmpdir/Driver/Files/AF15BDA.sys"; | ||
551 | open OUTFILE, '>', $outfile; | ||
552 | |||
553 | sysseek(INFILE, $fwoffset, SEEK_SET); | ||
554 | while($fwlength > 0) { | ||
555 | $chunklength = 55; | ||
556 | $chunklength = $fwlength if ($chunklength > $fwlength); | ||
557 | $rcount = sysread(INFILE, $buf, $chunklength); | ||
558 | die "Ran out of data\n" if ($rcount != $chunklength); | ||
559 | syswrite(OUTFILE, $buf); | ||
560 | sysread(INFILE, $buf, 8); | ||
561 | $fwlength -= $rcount + 8; | ||
562 | } | ||
563 | |||
564 | close OUTFILE; | ||
565 | close INFILE; | ||
566 | } | ||
567 | |||
568 | sub ngene { | ||
569 | my $url = "http://www.digitaldevices.de/download/"; | ||
570 | my $file1 = "ngene_15.fw"; | ||
571 | my $hash1 = "d798d5a757121174f0dbc5f2833c0c85"; | ||
572 | my $file2 = "ngene_17.fw"; | ||
573 | my $hash2 = "26b687136e127b8ac24b81e0eeafc20b"; | ||
574 | my $url2 = "http://l4m-daten.de/downloads/firmware/dvb-s2/linux/all/"; | ||
575 | my $file3 = "ngene_18.fw"; | ||
576 | my $hash3 = "ebce3ea769a53e3e0b0197c3b3f127e3"; | ||
577 | |||
578 | checkstandard(); | ||
579 | |||
580 | wgetfile($file1, $url . $file1); | ||
581 | verify($file1, $hash1); | ||
582 | |||
583 | wgetfile($file2, $url . $file2); | ||
584 | verify($file2, $hash2); | ||
585 | |||
586 | wgetfile($file3, $url2 . $file3); | ||
587 | verify($file3, $hash3); | ||
588 | |||
589 | "$file1, $file2, $file3"; | ||
590 | } | ||
591 | |||
592 | sub az6027{ | ||
593 | my $firmware = "dvb-usb-az6027-03.fw"; | ||
594 | my $url = "http://linux.terratec.de/files/TERRATEC_S7/$firmware"; | ||
595 | |||
596 | wgetfile($firmware, $url); | ||
597 | |||
598 | $firmware; | ||
599 | } | ||
600 | |||
601 | sub lme2510_lg { | ||
602 | my $sourcefile = "LMEBDA_DVBS.sys"; | ||
603 | my $hash = "fc6017ad01e79890a97ec53bea157ed2"; | ||
604 | my $outfile = "dvb-usb-lme2510-lg.fw"; | ||
605 | my $hasho = "caa065d5fdbd2c09ad57b399bbf55cad"; | ||
606 | |||
607 | checkstandard(); | ||
608 | |||
609 | verify($sourcefile, $hash); | ||
610 | extract($sourcefile, 4168, 3841, $outfile); | ||
611 | verify($outfile, $hasho); | ||
612 | $outfile; | ||
613 | } | ||
614 | |||
615 | sub lme2510c_s7395 { | ||
616 | my $sourcefile = "US2A0D.sys"; | ||
617 | my $hash = "b0155a8083fb822a3bd47bc360e74601"; | ||
618 | my $outfile = "dvb-usb-lme2510c-s7395.fw"; | ||
619 | my $hasho = "3a3cf1aeebd17b6ddc04cebe131e94cf"; | ||
620 | |||
621 | checkstandard(); | ||
622 | |||
623 | verify($sourcefile, $hash); | ||
624 | extract($sourcefile, 37248, 3720, $outfile); | ||
625 | verify($outfile, $hasho); | ||
626 | $outfile; | ||
627 | } | ||
628 | |||
629 | sub lme2510c_s7395_old { | ||
630 | my $sourcefile = "LMEBDA_DVBS7395C.sys"; | ||
631 | my $hash = "7572ae0eb9cdf91baabd7c0ba9e09b31"; | ||
632 | my $outfile = "dvb-usb-lme2510c-s7395.fw"; | ||
633 | my $hasho = "90430c5b435eb5c6f88fd44a9d950674"; | ||
634 | |||
635 | checkstandard(); | ||
636 | |||
637 | verify($sourcefile, $hash); | ||
638 | extract($sourcefile, 4208, 3881, $outfile); | ||
639 | verify($outfile, $hasho); | ||
640 | $outfile; | ||
641 | } | ||
642 | |||
643 | sub drxk { | ||
644 | my $url = "http://l4m-daten.de/files/"; | ||
645 | my $zipfile = "DDTuner.zip"; | ||
646 | my $hash = "f5a37b9a20a3534997997c0b1382a3e5"; | ||
647 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
648 | my $drvfile = "DDTuner.sys"; | ||
649 | my $fwfile = "drxk_a3.mc"; | ||
650 | |||
651 | checkstandard(); | ||
652 | |||
653 | wgetfile($zipfile, $url . $zipfile); | ||
654 | verify($zipfile, $hash); | ||
655 | unzip($zipfile, $tmpdir); | ||
656 | extract("$tmpdir/$drvfile", 0x14dd8, 15634, "$fwfile"); | ||
657 | |||
658 | "$fwfile" | ||
659 | } | ||
660 | |||
661 | sub drxk_hauppauge_hvr930c { | ||
662 | my $url = "http://www.wintvcd.co.uk/drivers/"; | ||
663 | my $zipfile = "HVR-9x0_5_10_325_28153_SIGNED.zip"; | ||
664 | my $hash = "83ab82e7e9480ec8bf1ae0155ca63c88"; | ||
665 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
666 | my $drvfile = "HVR-900/emOEM.sys"; | ||
667 | my $fwfile = "dvb-usb-hauppauge-hvr930c-drxk.fw"; | ||
668 | |||
669 | checkstandard(); | ||
670 | |||
671 | wgetfile($zipfile, $url . $zipfile); | ||
672 | verify($zipfile, $hash); | ||
673 | unzip($zipfile, $tmpdir); | ||
674 | extract("$tmpdir/$drvfile", 0x117b0, 42692, "$fwfile"); | ||
675 | |||
676 | "$fwfile" | ||
677 | } | ||
678 | |||
679 | sub drxk_terratec_h5 { | ||
680 | my $url = "https://linuxtv.org/downloads/firmware/"; | ||
681 | my $hash = "19000dada8e2741162ccc50cc91fa7f1"; | ||
682 | my $fwfile = "dvb-usb-terratec-h5-drxk.fw"; | ||
683 | |||
684 | checkstandard(); | ||
685 | |||
686 | wgetfile($fwfile, $url . $fwfile); | ||
687 | verify($fwfile, $hash); | ||
688 | |||
689 | "$fwfile" | ||
690 | } | ||
691 | |||
692 | sub drxk_terratec_htc_stick { | ||
693 | my $url = "http://ftp.terratec.de/Receiver/Cinergy_HTC_Stick/Updates/History/"; | ||
694 | my $zipfile = "Cinergy_HTC_Stick_Drv_5.09.1202.00_XP_Vista_7.exe"; | ||
695 | my $hash = "6722a2442a05423b781721fbc069ed5e"; | ||
696 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 0); | ||
697 | my $drvfile = "Cinergy HTC Stick/BDA Driver 5.09.1202.00/Windows 32 Bit/emOEM.sys"; | ||
698 | my $fwfile = "dvb-usb-terratec-htc-stick-drxk.fw"; | ||
699 | |||
700 | checkstandard(); | ||
701 | |||
702 | wgetfile($zipfile, $url . $zipfile); | ||
703 | verify($zipfile, $hash); | ||
704 | unzip($zipfile, $tmpdir); | ||
705 | extract("$tmpdir/$drvfile", 0x4e5c0, 42692, "$fwfile"); | ||
706 | |||
707 | "$fwfile" | ||
708 | } | ||
709 | |||
710 | sub it9135 { | ||
711 | my $url = "http://www.ite.com.tw/uploads/firmware/v3.25.0.0/"; | ||
712 | my $file1 = "dvb-usb-it9135-01.zip"; | ||
713 | my $fwfile1 = "dvb-usb-it9135-01.fw"; | ||
714 | my $hash1 = "02fcf11174eda84745dae7e61c5ff9ba"; | ||
715 | my $file2 = "dvb-usb-it9135-02.zip"; | ||
716 | my $fwfile2 = "dvb-usb-it9135-02.fw"; | ||
717 | my $hash2 = "d5e1437dc24358578e07999475d4cac9"; | ||
718 | |||
719 | checkstandard(); | ||
720 | |||
721 | wgetfile($file1, $url . $file1); | ||
722 | unzip($file1, ""); | ||
723 | verify("$fwfile1", $hash1); | ||
724 | |||
725 | wgetfile($file2, $url . $file2); | ||
726 | unzip($file2, ""); | ||
727 | verify("$fwfile2", $hash2); | ||
728 | |||
729 | "$file1 $file2" | ||
730 | } | ||
731 | |||
732 | sub tda10071 { | ||
733 | my $sourcefile = "PCTV_460e_reference.zip"; | ||
734 | my $url = "ftp://ftp.pctvsystems.com/TV/driver/PCTV%2070e%2080e%20100e%20320e%20330e%20800e/"; | ||
735 | my $hash = "4403de903bf2593464c8d74bbc200a57"; | ||
736 | my $fwfile = "dvb-fe-tda10071.fw"; | ||
737 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
738 | |||
739 | checkstandard(); | ||
740 | |||
741 | wgetfile($sourcefile, $url . $sourcefile); | ||
742 | verify($sourcefile, $hash); | ||
743 | unzip($sourcefile, $tmpdir); | ||
744 | extract("$tmpdir/PCTV\ 70e\ 80e\ 100e\ 320e\ 330e\ 800e/32\ bit/emOEM.sys", 0x67d38, 40504, $fwfile); | ||
745 | |||
746 | "$fwfile"; | ||
747 | } | ||
748 | |||
749 | sub drxk_pctv { | ||
750 | my $sourcefile = "PCTV_460e_reference.zip"; | ||
751 | my $url = "ftp://ftp.pctvsystems.com/TV/driver/PCTV%2070e%2080e%20100e%20320e%20330e%20800e/"; | ||
752 | my $hash = "4403de903bf2593464c8d74bbc200a57"; | ||
753 | my $fwfile = "dvb-demod-drxk-pctv.fw"; | ||
754 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
755 | |||
756 | checkstandard(); | ||
757 | |||
758 | wgetfile($sourcefile, $url . $sourcefile); | ||
759 | verify($sourcefile, $hash); | ||
760 | unzip($sourcefile, $tmpdir); | ||
761 | extract("$tmpdir/PCTV\ 70e\ 80e\ 100e\ 320e\ 330e\ 800e/32\ bit/emOEM.sys", 0x72b80, 42692, $fwfile); | ||
762 | |||
763 | "$fwfile"; | ||
764 | } | ||
765 | |||
766 | sub sms1xxx_hcw { | ||
767 | my $url = "http://steventoth.net/linux/sms1xxx/"; | ||
768 | my %files = ( | ||
769 | 'sms1xxx-hcw-55xxx-dvbt-01.fw' => "afb6f9fb9a71d64392e8564ef9577e5a", | ||
770 | 'sms1xxx-hcw-55xxx-dvbt-02.fw' => "b44807098ba26e52cbedeadc052ba58f", | ||
771 | 'sms1xxx-hcw-55xxx-isdbt-02.fw' => "dae934eeea85225acbd63ce6cfe1c9e4", | ||
772 | ); | ||
773 | |||
774 | checkstandard(); | ||
775 | |||
776 | my $allfiles; | ||
777 | foreach my $fwfile (keys %files) { | ||
778 | wgetfile($fwfile, "$url/$fwfile"); | ||
779 | verify($fwfile, $files{$fwfile}); | ||
780 | $allfiles .= " $fwfile"; | ||
781 | } | ||
782 | |||
783 | $allfiles =~ s/^\s//; | ||
784 | |||
785 | $allfiles; | ||
786 | } | ||
787 | |||
788 | sub si2165 { | ||
789 | my $sourcefile = "model_111xxx_122xxx_driver_6_0_119_31191_WHQL.zip"; | ||
790 | my $url = "http://www.hauppauge.de/files/drivers/"; | ||
791 | my $hash = "76633e7c76b0edee47c3ba18ded99336"; | ||
792 | my $fwfile = "dvb-demod-si2165.fw"; | ||
793 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
794 | |||
795 | checkstandard(); | ||
796 | |||
797 | wgetfile($sourcefile, $url . $sourcefile); | ||
798 | verify($sourcefile, $hash); | ||
799 | unzip($sourcefile, $tmpdir); | ||
800 | extract("$tmpdir/Driver10/Hcw10bda.sys", 0x80788, 0x81E08-0x80788, "$tmpdir/fw1"); | ||
801 | |||
802 | delzero("$tmpdir/fw1","$tmpdir/fw1-1"); | ||
803 | #verify("$tmpdir/fw1","5e0909858fdf0b5b09ad48b9fe622e70"); | ||
804 | |||
805 | my $CRC="\x0A\xCC"; | ||
806 | my $BLOCKS_MAIN="\x27"; | ||
807 | open FW,">$fwfile"; | ||
808 | print FW "\x01\x00"; # just a version id for the driver itself | ||
809 | print FW "\x9A"; # fw version | ||
810 | print FW "\x00"; # padding | ||
811 | print FW "$BLOCKS_MAIN"; # number of blocks of main part | ||
812 | print FW "\x00"; # padding | ||
813 | print FW "$CRC"; # 16bit crc value of main part | ||
814 | appendfile(FW,"$tmpdir/fw1"); | ||
815 | |||
816 | "$fwfile"; | ||
817 | } | ||
818 | |||
819 | # --------------------------------------------------------------- | ||
820 | # Utilities | ||
821 | |||
822 | sub checkstandard { | ||
823 | if (system("which unzip > /dev/null 2>&1")) { | ||
824 | die "This firmware requires the unzip command - see ftp://ftp.info-zip.org/pub/infozip/UnZip.html\n"; | ||
825 | } | ||
826 | if (system("which md5sum > /dev/null 2>&1")) { | ||
827 | die "This firmware requires the md5sum command - see http://www.gnu.org/software/coreutils/\n"; | ||
828 | } | ||
829 | if (system("which wget > /dev/null 2>&1")) { | ||
830 | die "This firmware requires the wget command - see http://wget.sunsite.dk/\n"; | ||
831 | } | ||
832 | } | ||
833 | |||
834 | sub checkunshield { | ||
835 | if (system("which unshield > /dev/null 2>&1")) { | ||
836 | die "This firmware requires the unshield command - see http://sourceforge.net/projects/synce/\n"; | ||
837 | } | ||
838 | } | ||
839 | |||
840 | sub wgetfile { | ||
841 | my ($sourcefile, $url) = @_; | ||
842 | |||
843 | if (! -f $sourcefile) { | ||
844 | system("wget -O \"$sourcefile\" \"$url\"") and die "wget failed - unable to download firmware"; | ||
845 | } | ||
846 | } | ||
847 | |||
848 | sub unzip { | ||
849 | my ($sourcefile, $todir) = @_; | ||
850 | |||
851 | $status = system("unzip -q -o -d \"$todir\" \"$sourcefile\" 2>/dev/null" ); | ||
852 | if ((($status >> 8) > 2) || (($status & 0xff) != 0)) { | ||
853 | die ("unzip failed - unable to extract firmware"); | ||
854 | } | ||
855 | } | ||
856 | |||
857 | sub unshield { | ||
858 | my ($sourcefile, $todir) = @_; | ||
859 | |||
860 | system("unshield x -d \"$todir\" \"$sourcefile\" > /dev/null" ) and die ("unshield failed - unable to extract firmware"); | ||
861 | } | ||
862 | |||
863 | sub verify { | ||
864 | my ($filename, $hash) = @_; | ||
865 | my ($testhash); | ||
866 | |||
867 | open(CMD, "md5sum \"$filename\"|"); | ||
868 | $testhash = <CMD>; | ||
869 | $testhash =~ /([a-zA-Z0-9]*)/; | ||
870 | $testhash = $1; | ||
871 | close CMD; | ||
872 | die "Hash of extracted file does not match!\n" if ($testhash ne $hash); | ||
873 | } | ||
874 | |||
875 | sub copy { | ||
876 | my ($from, $to) = @_; | ||
877 | |||
878 | system("cp -f \"$from\" \"$to\"") and die ("cp failed"); | ||
879 | } | ||
880 | |||
881 | sub extract { | ||
882 | my ($infile, $offset, $length, $outfile) = @_; | ||
883 | my ($chunklength, $buf, $rcount); | ||
884 | |||
885 | open INFILE, "<$infile"; | ||
886 | open OUTFILE, ">$outfile"; | ||
887 | sysseek(INFILE, $offset, SEEK_SET); | ||
888 | while($length > 0) { | ||
889 | # Calc chunk size | ||
890 | $chunklength = 2048; | ||
891 | $chunklength = $length if ($chunklength > $length); | ||
892 | |||
893 | $rcount = sysread(INFILE, $buf, $chunklength); | ||
894 | die "Ran out of data\n" if ($rcount != $chunklength); | ||
895 | syswrite(OUTFILE, $buf); | ||
896 | $length -= $rcount; | ||
897 | } | ||
898 | close INFILE; | ||
899 | close OUTFILE; | ||
900 | } | ||
901 | |||
902 | sub appendfile { | ||
903 | my ($FH, $infile) = @_; | ||
904 | my ($buf); | ||
905 | |||
906 | open INFILE, "<$infile"; | ||
907 | while(1) { | ||
908 | $rcount = sysread(INFILE, $buf, 2048); | ||
909 | last if ($rcount == 0); | ||
910 | print $FH $buf; | ||
911 | } | ||
912 | close(INFILE); | ||
913 | } | ||
914 | |||
915 | sub delzero{ | ||
916 | my ($infile,$outfile) =@_; | ||
917 | |||
918 | open INFILE,"<$infile"; | ||
919 | open OUTFILE,">$outfile"; | ||
920 | while (1){ | ||
921 | $rcount=sysread(INFILE,$buf,22); | ||
922 | $len=ord(substr($buf,0,1)); | ||
923 | print OUTFILE substr($buf,0,1); | ||
924 | print OUTFILE substr($buf,2,$len+3); | ||
925 | last if ($rcount<1); | ||
926 | printf OUTFILE "%c",0; | ||
927 | #print $len." ".length($buf)."\n"; | ||
928 | |||
929 | } | ||
930 | close(INFILE); | ||
931 | close(OUTFILE); | ||
932 | } | ||
933 | |||
934 | sub syntax() { | ||
935 | print STDERR "syntax: get_dvb_firmware <component>\n"; | ||
936 | print STDERR "Supported components:\n"; | ||
937 | @components = sort @components; | ||
938 | for($i=0; $i < scalar(@components); $i++) { | ||
939 | print STDERR "\t" . $components[$i] . "\n"; | ||
940 | } | ||
941 | exit(1); | ||
942 | } | ||